Security

hackerschool level5 Race Condition

gukbap 2011. 7. 14. 23:25
반응형

touch

파일 생성 명령어



레이스 컨디션(Race Condition)

http://geundi.tistory.com/48

심볼릭링크 : 바로가기의 개념. 원본파일을 심볼릭링크 파일이 가라킴 심볼릭링크 파일에 수정을 가하면 원본 파일도 수정.



root 권한의 SetUID가 걸린 A라는 프로그램이 있다.

A는 실행한 후에 /tmp 안에 byebye라는 임시파일을 만든다.



일반 user가 이 임시파일(/tmp/byebye)을 삭제하고, /etc/passwd의 심볼릭 링크를 만드는데 이름을 /tmp/byebye라고 하여 만들었다.



그럼 A를 실행시키면?



A는 실행되는 동안 root의 권한을 가지게 된다. A는 byebye라는 임시파일을 만드는데 byebye는 /etc/passwd의 심볼릭링크이다.  /etc/passwd는 root만이 쓰기가 가능한데, SetUID가 root이기 때문에 결국 /etc/passwd 파일에 쓰기가 가능해지는 것이다. 따라서 심볼릭링크 파일을 수정하면 원본파일(/etc/passwd)도 수정이 되는 것이다.



결국, /tmp/byebye의 내용이 /etc/passwd로 들어가 /etc/passwd는 손상을 입게 될 것이다.





이에 대한 대응책으로 프로그램이 임시파일을 만들 때 이미 같은 파일이 있으면 그것을 지워버린 후 임시파일을 생성하도록 프로그램을 만들기 시작했다.



하지만





① <프로그램 실행>

② <생성할 임시파일과 같은 이름의 파일이 존재하는지 확인>

③ <같은 이름의 파일이 있으면 삭제, 없으면 건너뜀>

④ <임시파일을 생성>


위와 같은 과정을 거칠 때, 해커는 ③번과 ④번사이에 간격을 노리게 된다. 하지만 이 간격 사이에 심볼릭링크를 만드는 것은 불가능하므로 고안된 것이 레이스컨디션

(Race Condition)이다.


두 개의 프로그램이 동시에 실행되도록 한다. A를 반복실행하는 프로그램과 심볼릭링크(byebye)를 반복해서 생성하는 프로그램을 작성한다.


두 개의 프로그램들이 실행되는 시간의 차이가 있을 것이므로 ③번과 ④번 사이에서 심볼릭링크가 생성될 것이다.


두 개의 프로그램이 심볼릭링크를 삭제하고, 생성하는 경쟁 상태를 Race Condition이라 하는 것이다.

즉, 이를 이용하면 root의 권환으로 특정파일에 수정을 가할 수 있다.


<레이스컨디션 조건>

ⓐ 해당 프로그램에 root 권한의 SetUID가 걸려있을 것

ⓑ 프로그램 실행 도중 어떤 파일을 생성할 것

ⓒ 그 생성되는 파일의 이름과 위치를 알고 있을 것

ⓓ 파일이 생성되는 디렉토리에 쓰기권한을 가지고 있을 것




in hackerschool


root 권한의 SetUID가 걸린 프로그램 A가 있다.

이 파일은 /tmp에 temp라는 임시파일을 생성.


일반사용자가 A라는 파일에 대한 /tmp에 temp라는 이름의 심볼릭링크 생성.


일반사용자가 A를 실행.


A는 /tmp의 temp에 어떤 내용을 쓰고 이는 A에 쓰여진다.


그래서

1. 프로그램 실행

2. 생성할 임시파일과 같은 이름의 파일이 유무 검사.

3. 있다면 삭제, 없으면 pass

4. 임시파일 생성

로 A의 구조가 바뀜.


그럼 해커는 3번과 4번의 간격을 노림.


A를 실행시키고 심볼릭 링크를 생성하는 것을 반복한다면 언젠가는 3번과 4번 사이에 파일이 생성되겠지..


구현


AA : level5 반복 실행


#include <unistd.h>


int main()

{

int i;

for(i=0; i<=1000; i++)

{

system("/usr/bin/level5");

}

return 0;

}


AD : level5.tmp의 내용을

#include <unistd.h>


int main()

{

int i;

for(i=0;i<=1000;i++)

{

system("ln -s /tmp/symbolic /tmp/level5.tmp");

}

return 0;

}


그럼 레이스컨디션 상태가 되고 level5.tmp가 생성되는 순간에 symbolic 파일에 password가 쓰일 것이다.


동시 작업 수행 : 하나는 백그라운드로 실행, 하나는 그냥 실행


백그라운드 : & 사용









반응형

'Security' 카테고리의 다른 글

hackerschool level6 ctrl + c  (0) 2011.07.14
hackerschool level5 Hard Link, Symbolic Link  (0) 2011.07.14
hackerschool level4 service finger, chmod  (0) 2011.07.14
hackerschool level3 system 배열  (0) 2011.07.14
hackerschool level1d redirection  (0) 2011.07.14