240 likes | 1.23k Views
레이스 컨디션 (Race Condition). 발표자 : 박율기 (20052224). 레이스 컨디션 링크의 이해 및 실습 레이스 컨디션의 이해 및 실습 임시파일을 이용한 레이스 컨디션 Q & A. 목차. 레이스 컨디션 발표 순서. 레이스 컨디션. 레이스 컨디션 – 경쟁 상태 두개 이상의 프로세스가 경쟁하는 상태 운영체제상 레이스 컨디션이 발생하면 예기치 못한 결과가 초래된다. 레이스 컨디션과 공격. 레이스 컨디션 (Race Condition).
E N D
레이스 컨디션 (Race Condition) 발표자 : 박율기 (20052224)
레이스 컨디션 링크의 이해 및 실습 레이스 컨디션의 이해 및 실습 임시파일을 이용한 레이스 컨디션 Q & A 목차 레이스 컨디션 발표 순서 Page 2
레이스 컨디션 • 레이스 컨디션 – 경쟁 상태 • 두개 이상의 프로세스가 경쟁하는 상태 • 운영체제상 레이스 컨디션이 발생하면 예기치 못한 결과가 초래된다. 레이스 컨디션과 공격 레이스 컨디션(Race Condition) 레이스 컨디션(Race Condition) 공격 • 관리자 권한으로 실행중인 프로세스(A)와 경쟁 상태(Race Codnition)를 만듦 • A 프로세스가 사용하는 임시파일을 목표(target)로 한다. • A 프로세스가 사용중인 파일에 아주 짧은 공백 시간 동안 접근 하여 수정 Page 3
프로세스 A a = 5 b = 10 a = 10 b = 5 프로세스 B Page 4
링크의 이해 및 실습 • 원본과 링크한 파일의 inode가 다르다. • 원본 파일을 가리키는 파일 • 원본 파일 삭제 시 링크한 파일은 없는 파일을 가리키게 된다. • 디렉토리 링크 가능 • 다른 FileSystem 에서도 사용가능 링크의 이해 심볼릭 링크 하드 링크 • 원본과 링크한 파일의 inode가 같다. • 원본 파일에 복수의 이름을 지정하는것과 같다. • 링크한 파일을 모두 삭제하여야 원본파일 삭제 된다. • 파일만 링크 가능 • 같은 FileSystem 에 사용가능 Page 5
심볼릭 링크 Name:../A inode:100 Data Hello World Data link:../A Name:../B inode:200 하드 링크 Name:../A inode:100 Data HelloWorld Name:../B inode:100 Page 6
링크의 이해 및 실습 • 원활한 실습을 위하여 wishfree라는 일반권한 계정을 생성 • /wishfree(홈 디렉토리) 디렉토리에 race 디렉토리 생성 • /root 디렉토리 확인 • /root 디렉토리에 a.txt 라는 이름의 관리잔 소유 파일생성 후 실행 확인을 위하여 실행 시 눈에 띄는 문구삽입 실습 전 준비 준비사항 Page 7
링크의 이해 및 실습 링크의 이해 하드 링크 1 2 3 4 5 • /root/a.txt 파일 내용 확인 • a.txt 의 권한, 링크 수, 소유자, 소유그룹 확인 • /root/a.txt 파일을 링크하는 link.txt 파일을 /wishfree/race 에 생성 • /wishfree/race/link.txt 파일내용 표시 • a.txt 의 권한, 링크 수, 소유자, 소유그룹 확인 • 링크의 변화가 있는 것을 확인 할 수 있다. Page 8
링크의 이해 및 실습 링크의 이해 심볼릭 링크 1 2 3 4 5 • /root/a.txt 파일 내용 확인 • a.txt 의 권한, 링크 수, 소유자, 소유그룹 확인 • /root/a.txt 파일을 링크하는 symlink.txt 파일을 /wishfree/race 에 생성 • /wishfree/race/symlink.txt 파일내용 표시 • a.txt 의 권한, 링크 수, 소유자, 소유그룹 확인 • 링크의 변화가 없는 것을 확인 할 수 있다. Page 9
링크의 이해 및 실습 링크의 이해 /wishfree/race 디렉토리 내용 결과 • 심볼릭 링크는 원본 파일의 링크 수에 영향을 주지 않는다. • 링크한 파일을 수정하면 원본 파일이 수정된다. Page 10
레이스 컨디션의 이해 및 실습 • Linux 6.2 / 7.0 (6.2를 추천함) • Vmware 6.0 에서 작동(6.5 에서 Linux 6.2 / 7.0 구동 안됨) • 일반권한 계정 필요(실습의 원활한 진행을 위해 wishfree로 진행) 임시파일을 이용한 레이스 컨디션 준비 사항 Page 11
레이스 컨디션의 이해 및 실습 if (argc != 3) { fprintf (stderr, „usage : %s file message\n“, argv[0]) exit(EXIT_FAILURE);} • 실행 시 argument의 개수 오류검증 slep(20);if ((fp = fopen (argv[1], “w”)) == NULL) { fprintf (“stderr, “Can’t open\n”); exit(EXIT_FAILURE);} • 쓰기권한으로 파일열수 없을 경우 오류검증 임시파일을 이용한 레이스 컨디션 소스 해석 Page 12
레이스 컨디션의 이해 및 실습 fprintf (fp, “%s\n”, argv[2]); • 3번째 argument 파일로 저장fclose (fp); • 쓰기권한으로 열었던 파일 닫기 • 소스보기 및 소스 다운 http://qkrdbfrl.dothome.co.kr/ 임시파일을 이용한 레이스 컨디션 소스 해석 Page 13
레이스 컨디션의 이해 및 실습 임시파일을 이용한 레이스 컨디션 /etc/shadow 파일 백업 • 계정에 대한 정보가 저장되어 있고 shadow 파일을 수정하므로 백업 한다 • shadow 실습 후 root 계정 정보를 변경하므로 백업이 필요하다. 컴파일 및 SetUID 설정 • chmod 4755 : UID구분 / 소유주 권한 / 그룹권한 / 다른 사용자 권한 Page 14
레이스 컨디션의 이해 및 실습 • wishfree 계정으로 로그인 한다. • 읽어 들일 임시 파일을 생성 후 tempbug을 background(&)로 실행한다. • 파일을 실행할 때 읽어 들일 파일명, 삽입할 문자열을 순서대로 기입한다. 임시파일을 이용한 레이스 컨디션 /wishfree/race/ 에 빈 temp 파일 생성 tempbug 실행 중 파일수정 • 임의로 주어놓은 20초 안에 삭제와 링크를 하여야 한다. • fg 를 이용하여 background 작업중인 프로세스를 foreground 로 돌린다. Page 15
__①__:__②__:__③__:__④__:__⑤__:__⑥__:__⑦__:__⑧__:__①__:__②__:__③__:__④__:__⑤__:__⑥__:__⑦__:__⑧__: Page 16
/etc/shadow tmpbug 프로세스 temp temp link:/etc/shadow B 프로세스 Page 17
레이스 컨디션의 이해 및 실습 • password 없이 로그인이 가능하다 임시파일을 이용한 레이스 컨디션 root 계정 로그인 /etc/shadow 복구 • 이전에 백업 해둔 /etc/shadow.backup 를 /etc/shadow 로 덮어쓴다. • 이제 로그인시 password 를 물어보며, password 는 레이스 컨디션 전의 비번이다. Page 18
ptrace 레이스 컨디션 실패 화면 입니다 기회가 된다면 ptrace 레이스 컨디션과 레이스컨디션 방어법에 대해 추가 발표를 원합니다. Page 19
Q & A 질문 및 부탁 드립니다. Page 20