* 레이스 컨디션
- 다수의 프로세스가 서로 동일한 자원을 할당받기 위해 경쟁하는 상태
-> 레이스 컨디션 취약점이 존재하기 위한 최소한이 조건
1. SUID가 걸려 있어야 함(다른 계정의 권한에 접근해야 하므로)
2. 임시 파일을 생성해야 함
3. 공격자가 임시로 생성되는 파일명을 정확하게 알아야 함
* 진행 흐름
1. 공격 프로세스에서 /tmp/lvl6pass.txt파일을 만든다.
2. 공격 프로세스에서 /tmp/lvl6pass.txt파일을 원본으로 하는 /tmp/level5.tmp링크파일을 만든다
(/tmp/level5.tmp링크가 취약한 프로세스가 생성하고 삭제하는 파일의 이름임)
3. 레이스 컨디션 취약점이 있는 프로세스를 시작한다.
4. 취약한 프로세스가 /tmp/level5.tmp파일을 생성하려고 하지만 공격 프로세스가 만들어 둔 링크인 /tmp/level5.tmp파일이 이미 있으므로 추가로 파일을 만들지 않는다.
5. 취약한 프로세스가 /tmp/level5.tmp링크에 내용을 쓴다.
(/tmp/level5.tmp링크에 내용을 쓰면 원본인 /tmp/lvl6pass.txt파일에 내용이 쓰여짐)
6. 취약한 프로세스가 쓴 내용을 사용한 뒤 /tmp/level5.tmp파일을 삭제하고 종료한다.
(내용이 쓰여진 /tmp/lvl6pass.txt파일이 남아있으므로 쓴 내용을 볼 수 있음)
힌트를 확인해본다.
/tmp/level5.tmp라는 임시파일이 만들어진다는 힌트를 통해서 공격 프로세스에서 임의의 파일을 만들고 그 파일을 /tmp/level5.tmp라는 이름으로 링크파일을 만들어야 한다는 정보를 얻을 수 있다.
/usr/bin/level5프로그램(취약한 프로그램)을 10번 반복 실행하는 코드를 작성한다.
이번에는 공격 프로그램을 작성해본다.
공격 프로세스에서 /tmp/level5.tmp링크파일을 만들고 취약한 프로세스가 임시파일을 생성하면 /tmp/level5.tmp링크파일의 원본파일에 쓰여진 내용을 확인하는 코드이다.
타이밍이 쉽게 맞지 않기 때문에 몇 번 실행하다 보면 공격에 성공할 수 있다.
그러므로 셸 스크립트를 이용하여 두 프로그램을 거의 동시에 실행시키도록 한다.