시스템/시스템 보안

[문제 풀이로 배우는 시스템 해킹 테크닉] level5. 레이스 컨디션

비니화이팅 2017. 12. 4. 14:22

* 레이스 컨디션

- 다수의 프로세스가 서로 동일한 자원을 할당받기 위해 경쟁하는 상태


-> 레이스 컨디션 취약점이 존재하기 위한 최소한이 조건

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링크파일의 원본파일에 쓰여진 내용을 확인하는 코드이다.


타이밍이 쉽게 맞지 않기 때문에 몇 번 실행하다 보면 공격에 성공할 수 있다.


그러므로 셸 스크립트를 이용하여 두 프로그램을 거의 동시에 실행시키도록 한다.