관리 메뉴

Lucete

race condition(경쟁 조건)attack 본문

Security Study/System

race condition(경쟁 조건)attack

LuCeT3 2015. 9. 17. 11:29

경쟁 조건이란?


두 프로세스간에 리소스(resource)를 사용하기 위해서 다투는 과정으로, 본래 해킹기법을 칭하는 것이 아니다. 


알려진 코드를 통해 경쟁 조건의 원래 의미를 알아보자.



여기서 fork()라는 함수는 동일한 작업을 하는 프로세스를 하나 더 띄우는 함수로써 fork()를 호출할 때, 결과 값은 새로 만들어진 프로세스의 번호가 된다. 이로 프로세스를 구분한다.


if(a%2 ==0) => printf("O")가 /*부모 프로세스*/에서 50번을 출력하고

if(a%2 ==1) => printf("X")가 /*자식 프로세스*/에서 50번을 출력한다고 한다. 그럼 기본적으로 OXOXOXOXOXOXOX이러한 식으로 출력을 할 것이라고 생각하는데 이와다르게 XXOXXOOOOOOOXXOXOOOOO 이러한식으로 출력이 된다. 이러한 것이 바로 경쟁 조건(race condition)의 결과이다.


심볼릭 링크(symbolic link)?


unix나 linux에는 심볼릭 링크(symbolic link)라는 기능이 이있다. 이는 어떤 파일을 접근하고자 할 때, 그 전체 경로명을 입력하는 것은 상당히 귀찮은 일이다. PATH라는 좋은 환경변수가 존재하기는 하나, 조금 불충분하다고 생각할 수 있는 것이다. 이로 심볼릭 링크는 해당 경로명으로 바로 연결해 주는 기능으로 보면 된다.


예를 들어보자 전체 경로가 /BOB/PWNPLAY/PnP/Z3alous라고 할때 매일매일 같은 명령어를 입력하여 cd 명령어를 실행 시키기 귀찮을 것이다. 이를  ln -s /BOB/PWNPLAY/PnP/Z3alous ./pwnplay로 심볼릭 링크를 걸어 놓게 되면 ./pwnplay만 입력하여도 /BOB/PWNPLAY/PnP/Z3alous 디렉토리로 이동 할 수 있다.


과연 심볼릭 링크는 좋은 점만 있는 것일까?

그러치는 않다. 편하게 사용하는 만큼 위험성을 가지고 있는데 먼저 Alpha란 프로그램이 pwnplay라는 파일을 열어서, 그곳에 무언가를 써준다고 하자. 이때 만약 권한(permission)을 가진다면 pwnplay라는 파일을 지우고, 심볼릭 링크를 이용하여 'ln -s ~xxx/.rhosts pwnplay' 라고 변경을 하게 되면 분명 pwnplay를 실행시키는데 ~xxx/.rhosts pwnplay 쪽으로 심볼릭 링크가 되어 있으므로 ~xxx/.rhosts pwnplay가 실행되는 것을 확인 할 수 있다. 


레이스 컨디션의 공격의 기본

 1. 취약 프로그램이 생성하는 임시 파일의 이름을 파악

 2. 생성될 임시 파일과 같은 이름의 파일을 생성

 3. 이에 대한 심볼릭 링크를 생성

 4. 원본 파일을 지운 채 취약 프로그램이 심볼릭 링크를 건 파일과 가은 파일을 생성할 때를 기다린다.

 5. 생성되었을 때, 심볼릭 링크를 이용해 파일 내용을 변경

 6. 시스템은 변경된 파일을 자신이 생성한 임시 파일로 생각하고 프로세스를 진행시킬 것이고,

    공격자는 관리자 권한으로 실행되는 프로그램에 끼어들어 무언가를 할 수있는 여지를 만든다.




[참조] 안랩 race_condition


'Security Study > System' 카테고리의 다른 글

memory 영역  (0) 2015.10.07
C언어의 메모리 구조  (0) 2015.09.21
race condition(경쟁 조건)attack  (0) 2015.09.17
system /bin/sh 주소 찾기  (0) 2015.09.15
system 2  (0) 2015.09.13
system 1일차  (0) 2015.09.12
0 Comments
댓글쓰기 폼