레이스컨디션 해킹 기초
작성자 정보
- 오진성 작성
- 작성일
컨텐츠 정보
- 3,007 조회
- 0 추천
- 목록
본문
* Race Condition in the Unix system *
0. 프로세스와 CPU
유닉스 시스템에서 두개 이상의 프로세스가 동시에 실행 될 경우, 그 두개의 프로세스는 서로 CPU 를 차지하기
위해 CPU 를 향해 경쟁하며 달리는 형태가 되어진다.
예를 들어, 이러한 프로그램이 있다고 가정해 보자.
{
- X 를 출력
- child process를 생성
- O 를 출력
- 무한루프
}
이 프로그램을 실행시켰을 경우 이론상으로는 XOXOXOX.. 식으로 모프로세스가 출력하는 X와 자프로세스가 출력하 는 O가 한번씩 번갈아 나타나야 하겠지만 실제로는 모프 로세서와 자프로세서가 CPU를 차지하기 위해 계속해서 달리는 형태가 되어 XXOOXOOXOOOXXOOOOX...와 같이 불규 칙적인 결과가 나타나게 된다. Race Condition은 이러한 특성을 이용하는 해킹 기법으로, 목표 프로그램과 해커 의 exploit이 서로 경쟁하게 만듦으로써 작업의 처리시 간을 가로채는 것이다. Race Condition은 주로 임시파일 을 생성하는 setuid 프로그램을 목표 프로그램으로 하는 데, 목표 프로그램이 임시파일을 생성하기 전에 해커의 exploit이 먼저 그 임시파일을 생성하도록 함으로써 이 루어 지는 것이다.
1. Race Condition 의 정의
Race Condition이란, 버그를 갖고 있는 setuid 프로그램 과 해커의 exploit 이 서로 경쟁(Race) 상태(Condition) 에 이르게 하여, setuid 프로그램의 권한으로 다른 파일 에 접근할 수 있게 하는 방법을 말한다. 예를 들어 한 프로그램이 root의 소유권으로 setuid가 붙어 있고, 또 이 프로그램이 작업의 성격상 임시파일을 생성한다고 할 때 해커가 그 임시파일과 같은 이름의 심볼릭 링크를 생성해 두었다면 실제로 프로그램이 조작하는 파일은 심볼
릭 링크된 목표파일일 것이다. 보다 구체적인 예를 들어보자.
Solaris 2.6 이하 모든 시스템에서 kcms_calibrate 라는 프로그램은 /tmp 디렉토리에 Kp_kcms_sys.semcd 라는 임시파일을 생성하게 된다. 만약 해커가 kcms_calibrate를실행하기 직전에 /tmp/Kp_kcms_sys.semcd 라는 이름으로 /root/.rhosts 를 목적지로 갖는 심볼릭 링크를 만든다면 실제kcms_calibrate가 조작하는 파일은 심볼릭 링크의 목표파일로 설정되어 있는 /root/.rhosts가 되는것이다. 다행히 Solaris 에서는 /root/.rhosts를 조작하는
것만으로 root권한의 쉘을 얻을 수는 없지만 root의 권한으로 다른 파일에 접근할 수 있다는것만으로도 충분히
보안상의 헛점이 될 수 있다.
그러면 이와같은 Race Condition이 이루어지기 위한 조건을 먼저 알아보자.
2. Race Condition이 발생할 조건
해커가 A라는 프로그램을 대상으로 Race Condition을 시도하고자 할때, A 는 다음과 같은 조건을 만족하고 있어야 한다.
- setuid 가 붙어 있을것.
- 임시파일을 생성할 것.
- 그 임시파일의 이름을 해커가 미리 알고 있을것.
- 임시파일을 생성할때 Race Condition 에 대한 대처를 하지 않을것.
위의 4개의 조건이 동시에 만족될 때, 해커는 A 라는 프로그램을 대상으로 Race Condition을 시도할 수 있다.
3. exploit 의 구조
Race Condition을 이용한 exploit을 제작할 때에 explo-it은 최소한 다음의 기능을 가져야 한다.
{
- system() 함수 또는 exec() 함수를 이용하여 타겟 프로그램을 백그라운드로 실행시킬것.
( 이로써 목표 프로그램과 exploit은 Race Condition 상태에 놓여지게 된다. )
- symlink() 함수를 사용하여 이미 알고 있는 임시파일의 이름으로 심볼릭 링크를 생성한다.
( 목표 프로그램이 임시파일을 생성하기 전에 미리 같은이름의 심볼릭 링크를 생성함으로써 목표 프로그램이조작하는 파일의 경로를 바꾸어 두는 것이다. )
}
이 exploit을 목표 프로그램에 대해 실행시켰을때 expl- oit실행이 끝나기 전에는 Race Condition이 성공했는
지를 파악할 수 없으므로, for 문을 이용하여 여러번 반복시켜 주는것이 성공확률을 높일 수 있다.
symlink() 함수를 이용하여 심볼릭 링크를 생성할때, 목표파일을 존재하지 않는 파일로 지정할 경우 default u- mask에 의해서 rwxrwxrwx의 권한을 갖는 목표파일이 생 성되어 진다. 목표 프로그램이 만일 root 소유라면, 결국 목표파일은 root 소유로 만들어 질 것이다. 해커는 이렇게 생성된 목표파일을 이용할 수도 있다. 또는, 이미 존재하는 파일, 예를 들어 /etc/passwd 등을 목표파일로 지정하면 목표 프로그램이 조작하는 파일은 심볼릭 링크로 연결
된 /etc/passwd 가 되는 것이다.
4. 새로운 Race Condition
프로그래머들은 해커들이 Race Condition을 이용하여 시스템을 위협하는 것을 막기위해 다음과 같은 방법을 생각해 냈다.
- 임시파일을 생성할 때, 그 임시파일이 이미 존재하는 파일인지 검사한다.
- 만일 이미 존재하고 있다면 exploit이 생성한 심볼릭 링크일 가능성이 있으므로, 그 파일을 지우고 새로 임시파일을 생성한다.
하지만 해커들은 프로그래머들의 노력을 무시하듯이 더욱 발전된 형태의 Race Condition을 개발함으로써 이를 무색하게 했다. 보다 발전된 형태의 Race Condition은 다음과 같은 구조를 갖는다.
{
- system() 함수 나 exec() 함수를 이용하여 목표 프로그램을 백그라운드로 실행시킨다.
- 임시파일이 심볼릭 링크인지 판단하여 심볼릭 링크가 아니라면 임시파일을 지운다.
- 임시파일의 이름으로 심볼릭 링크를 생성한다.
}
다시 말해서, 목표 프로그램이 임시파일을 생성할 때, Race Condition이 이루어지고 있는가를 검사한 뒤에 임시파일을 생성한다는 점을 이용하여 일단 목표 프로그램 으로 하여금 안전한 조건을 만들어 주고 목표 프로그램이 안전하다고 생각하며 임시파일을 생성하는 순간 생성 된 임시파일을 지우면서 심볼릭 링크를 생성하는 것이다. 이렇게 되면 목표 프로그램과 exploit 은 임시파일을 사이에 두고 서로의 동태를 파악하며 CPU 를 향해 계속해서 달리는 형태가 되어 그야말로 Race Condition 이라는 이름이 잘 걸맞게 된다.
5. 프로그래머의 대응책
프로그래머들은 기존의 방법으로는 Race Condition을 피할 수 없음을 알고 또 한번 Race Condition에 대한 대응을 고안해 냈다. 임시파일을 생성할 때, 일단 임시파일 을 생성한 뒤에 방금 생성한 파일이 심볼릭 링크인지를 검사하는 방법이다. 현재까지 이러한 방식의 프로그램은 Race Condition이 불가능한 것으로 알려져 있다.
출처 : 네트워크,IT자격증,정보보안 사이트
보안전문가 준비에대한 철저한 계획 및 진행에 대한 상담을 드립니다
국방부 컨퍼런스 및 경찰청, 사이버수사대, 안철수랩 보안교육센터
(주)해커스칼리지 해커대학
http://www.itbankac.com
02-3291-3264
관련자료
-
이전
-
다음