2. 0x01. What is Race Condition?
0x02. The Basic of Race Condition Attack
0x03. The Story of Race Condition
0x04. DEMO
0x05. How can we prevent Race Condition?
3. 자원을 동시에 사용하려는 프로세스들이 자원 사용을 하기 위해
프로세스들이 경쟁을 하는 것.
프로세스들이 경쟁하는 것을 이용하여 관리자 권한을 얻는 공격 방법.
4.
5. 1. 취약 프로그램이 생성하는 임시 파일의 이름을 파악.
2. 생성될 임시 파일과 같은 이름의 파일을 생성.
3. 이에 대한 심볼릭 링크를 생성.
4. 원본 파일을 지운 채 취약 프로그램이 심볼릭 링크를 건 파일과
같은 파일을 생성할 때를 기다린다.
5. 생성되었을 때, 심볼릭 링크를 이용해 파일 내용을 변경.
6. 시스템은 변경된 파일을 자신이 생성한 임시 파일로 생각하고
프로세스를 진행시킬 것이고, 공격자는 관리자 권한으로 실행되는
프로그램에 끼어들어 무언가를 할 수 있는 여지를 만든다.
15. Process
attack1
Process
attack2
sample.txt 삭제
sample.txt 생성
심볼릭 링크 생성
(X)
sample.txt 삭제
sample.txt 생성
심볼릭 링크 생성
(X)
심볼릭 링크 생성
sample.txt 생성
(명령어 수행)
Sample.txt 삭제
(O)
sample.txt 삭제
sample.txt 생성
심볼릭 링크 생성
(X)
sample.txt 삭제
sample.txt 생성
심볼릭 링크 생성...
...
16.
17.
18. • if(lstat(filename, &st) != 0)
• lstat함수는 파일의 심볼릭 링크의 유뮤에 대한 정보를 반환해준다.
• if(!s_ISREG(st.st_mode))
• 구조체 st에 대한 st_mode 값으로 파일의 종류에 대한
것을 확인한다.
• S_ISBLK- 블록파일 테스트
• S_ISCHR- 문자파일 테스트
• S_ISDIR- 디렉토리 테스트
• S_ISFIFO- FIFO 테스트
• S_ISREG- 일반적인 파일 테스트
• S_ISLNK- 심볼릭 링크 테스트
19. • if(st.st_uid != 0)
• 생성된 파일의 소유자가 root가 아닌 경우를 검사한다. 공격자에 의
해 자신이 생성한 파일이 삭제되고, 접근하고자 하는 파일이 일반
계정 소유의 파일인지 확인한다.
• if(fstat(fd, &st2) ! = 0)
• 파일 포인터에 의해서 열려진 파일의 정보를 모아 st2구조체에 이
를 전달한다.
• if(st.st_ino != st2.st_ino) || st.st_dev != st2.st_dev)
• 최초 파일에 대한 정보를 저장하고 있는 st와 파일을 연 후의 st2에
저장된 I 노드 값과 장치(device)값이 변경되었는지 확인한다.