본문 바로가기

Hacking/System Hacking-

[2]SystemHacking -Race Condition(레이스 컨디션)

본 레이스 컨디션 강의에 사용되는 O/S는 Linux 기반임을 미리 밝히며 포스팅을 시작합니다.


Race Condition(레이스 컨디션)의 정의 - >


한정된 자원을 동시에 이용하려는 여러 프로세스가 지원의 이용을 위해 경쟁을

벌이는 현상을 말합니다.


알집, 기타 프로세스에 모두 우선순위로 동작, 보통순위로 동작 등이 있는데

엄청난 프로세스들이 최고 우선순위로 동작하려고 한다면

해커는 상대방의 프로세스를 강제적으로 종료시키거나 할 수 있습니다.


즉, 버그를 갖고 있는 Setuid 프로그램과 해커의 exploit이 서로 경쟁상태(Race Condition)

에 이르게 하여, setuid 프로그램의 권한으로 다른 파일에 접근할 수 있게 하는 방법입니다.




[레이스컨디션의 한 예]


▶ 레이스컨디션이 발생할 조건

해커가 A라는 프로그램을 대상으로 레이스컨디션을 시도하고자 할때, A는 다음과

같은 조건을 만족하고 있어야 한다.

-setuid가 붙어 있을것

- 임시파일을 생성할 것

- 그 임시파일의 이름을 해커가 미리 알고 있을것

- 임시파일을 생성할때 레이스컨디션에 대한 대처를 하지 않을 것

다음과 같은 4개의 조건이 동시에 만족될때, 해커는 A라는 프로그램을 대상으로

레이스컨디션을 시도할 수 있습니다.




[레이스 컨디션의 한 예]

▶ 새로운 레이스컨디션

프로그래머들은 해커들이 레이스컨디션을 이용하여 시스템 위협을 막기위해 다음과

같은 방법을 생각해냈습니다.

- 임시파일을 생성할 때, 그 임시파일이 이미 존재하는 파일인지 검사

- 만일 이미 존재하고 있다면 exploit이 생성한 심볼릭 링크일 가능성이 있으므로,

그 파일을 지우고 새로 임시파일을 생성

하지만 해커들은 프로그래머들의 노력을 무시하듯 더욱 발전된 형태의 레이스컨디션을

개발해나가고 있는데 보다 발전된 형태의 레이스컨디션은 다음과 같은

구조를 갖고 있습니다.

- 시스템 함수나 exec함수를 이용하여 목표 프로그램을 백그라운드로 실행

- 임시파일이 심볼릭 링크인지 판단하여 심볼릭 링크가 아니라면 임시파일을 삭제

- 임시파일의 이름으로 심볼릭 링크를 생성





[레이스 컨디션의 한 예]

즉, 목표 프로그램이 임시파일을 생성할 때, 레이스 컨디션이 이루어지고 있는가를

검사한 뒤에 임시파일을 생성한다는 점을 이용하여 목표 프로그램으로 하여금

안전한 조건을 만들어 주고 목표 프로그램이 안전하다고 생각하며 임시파일을

생성하는 순간 생성된 임시파일을 지우면서 심볼릭 링크를 생성하는 것입니다.

이렇게 되면 목표 프로그램과 exploit은 임시파일을 사이에 두고 서로 동태를 파악하며

CPU를 향해 계속해서 달리는 형태가 되어 그야말로 레이스 컨디션이라는

이름이 잘 맞게 되는 것입니다.



사진출처 : IT/KPC

지원 : KPC