취약점분석보고서 [Photodex ProShow Producer v5.0.3256] 2012-07-24 RedAlert Team 안상환
목 차 1. 개요... 1 1.1. 취약점분석추진배경... 1 2. Photodex ProShow Producer Buffer Overflow 취약점분석... 2 2.1. Photodex ProShow Producer Buffer Overflow 취약점개요... 2 2.2. Photodex ProShow Producer Buffer Overflow 대상시스템목록... 2 2.3. Photodex ProShow Producer Buffer Overflow 취약점원리... 3 3. 분석... 3 3.1. 공격기법및기본개념... 3 3.2. 공격테스트... 4 3.3. 상세분석... 7 4. 결론... 10 5. 대응방안... 11 6. 참고자료... 11
1. 개요 1.1. 취약점분석추진배경 몇몇프로그램은데이터베이스를연동하여필요한정보를데이터베이스에저장하고불러들이며동작합니다. 데이터베이스를연동하지않는프로그램의경우특정파일내정보를저장하고불러들이며동작합니다. 보통 Buffer Overflow 는사용자입력값으로비정상적인데이터가들어오거나, 특수하게제작된파일을로드할때발생하고있습니다. 본취약점분석을추진하게된배경은후자에더가깝지만, 프로그램의구성요소중특정정보를담고있는데이터파일의변조를통해서도 Buffer Overflow 가발생할수있습니다. 그예로국내소프트웨어중하나인 Soritong MP3 Player 1.0 버전에서발생한 Buffer Overflow 취약점으로프로그램의 User Interface 정보를저장하고있는 ui.txt 파일을변조하여임의의코드를실행할수있었습니다. 1
2. Photodex ProShow Producer Buffer Overflow 취약점분석 2.1. Photodex ProShow Producer Buffer Overflow 취약점개요 취약점이름 Photodex ProShow Producer v5.0.3256 Local Buffer Overflow 최초발표일 2012 년 7 월 23 일 문서작성일 2012 년 7 월 24 일 위험등급 보통 벤더 Photodex 취약점영향 임의의코드실행및서비스거부발생 현재상태 패치안됨 표 1. Photodex ProShow Producer Buffer Overflow 취약점개요 [ 그림 1] 대상프로그램 2.2. Photodex ProShow Producer Buffer Overflow 대상시스템목록 본취약점은프로그램자체의취약점으로 Windows 계열의운영체제에영향을줄수있습니다. Microsoft Windows XP Microsoft Windows Vista Microsoft Windows 7 표 2. 취약시스템 2
2.3. Photodex ProShow Producer Buffer Overflow 취약점원리 우선적으로, 대상프로그램이실행될때실행시필요한정보를불러들이는로딩과정을거칩니다. 대상프로그램의로딩에필요한정보는 load 파일에정의되어있는데, 프로그램내특정버퍼는 load 파일에정의된로딩정보를저장하게됩니다. 공격자는대상프로그램이설치된시스템에 Buffer Overflow 가발생하도록특수제작한 Load 파일을기존의 Load 파일과바꾸는일련의과정을거치게되며대상프로그램은정상적으로 Load 파일을참조하여로딩정보를저장하게되고이과정에서할당된 Buffer 의크기보다더큰데이터가복사되어인접 Stack 의데이터를침범하게됩니다. 공격자는이러한 Buffer Overflow 취약성을이용하여특정 Stack 의데이터를변조해프로그램의흐름을변경할수있으며, 자신이정의한임의의코드를실행시킬수있습니다. 3. 분석 3.1. 공격기법및기본개념 대상프로그램에 Buffer Overflow 가발생하였을때, 인접 Stack 의데이터가변조됨에따라, 프로그램은명령어를처리하는도중참조하려던주소가정상적이지않은주소가됩니다. 이때 Exception 이발생되고, Microsoft Windows 운영체제에서제공하는구조적예외처리핸들러 (SEH : Structured Exception Handler) 가호출되어 Exception 을처리하게됩니다. 공격자는이러한 SEH 의구조적특징을이용하여프로그램의흐름을원하는방향으로변경할수있습니다. 또한, 대상프로그램에는공격시스템으로연결하는 Shell Code 를삽입하기위한영역의크기가부족하여다른메모리내삽입한 Shell Code 를검색하여실행하는 Egg Hunt 기법을이용하였습니다. 3
3.2. 공격테스트 1 공격코드는 Perl 로작성되었으며아래와같습니다. [ 그림 2] 공격코드 4
2 공격코드를실행하면 [ 그림 2] 와같은악성파일이생성됩니다. 악성파일을대상 프로그램이설치된디렉터리내정상 load 파일에덮어씌웁니다. [ 그림 3] 악성파일생성 [ 그림 4] 정상 load 파일변조 5
3 대상프로그램을실행하자대상프로그램은변조된 load 파일을읽어들이는과정에서 Buffer Overflow 가발생하였고, 공격자가삽입한 Shellcode 가실행되어피해자시스템의권한이공격자에게로넘어온것을확인할수있었습니다. [ 그림 5] 피해자시스템권한탈취 6
3.3. 상세분석 1 공격코드가삽입되어 Buffer Overflow 가발생하면, 대상프로그램의메모리는 아래 [ 그림 5] 와같이변조됩니다. [ 그림 6] 메모리내삽입된공격코드 7
2 Buffer Overflow 가발생하여인접 Stack 의데이터가변조되고대상프로그램은 명령어를처리하는중에참조하려던주소가비정상적인주소를가리키게되어 Exception 이발생하게됩니다. [ 그림 7] Exception 발생 3 Exception 을처리하기위해구조적예외처리핸들러 (SEH : Structured Exception Handler) 가호출되고 SEH Handler 에변조된주소 P/P/R 이동작하게됩니다. [ 그림 8] P/P/R 동작 8
4 P/P/R 이동작하여기존의 SEH Handler 에서 Exception 을처리하지못해 next SEH Handler 로넘어가게되고공격자가삽입한 Jmp 코드가실행됩니다. [ 그림 9] Jmp 코드동작 5 Jmp 코드가동작하여 Egg Hunter Code 인근 Nop sled 로이동하게되고, 이후 Egg Hunter Code 가동작하게됩니다. [ 그림 10] Egg Hunter Code 동작 9
6 Egg Hunter Code 는메모리전체를대상으로 Shell Code 앞에위치한 Tag 를 검색하는알고리즘을통해 Shell Code 의찾습니다. 이후 Shell Code 가위치한 부분으로이동하여삽입한 Shell Code 가실행됩니다. [ 그림 11] Shell Code 동작 4. 결론 대상프로그램은간단한방법으로 Attacking Code 를실행시킬수있었습니다. 위에서테스트한공격은고급기술을요구하지않고간단한 Buffer Overflow 지식만으로도해당공격을수행할수있습니다.Remote 공격보다는위험도가적지만, 적절한사회공학적요소가더해진다면충분히위협적인공격이될것이라판단됩니다. 10
5. 대응방안 해당취약점은제한된버퍼내입력값에대한제한이없기때문에발생한취약점입니다. 그러므로사용자입력값의길이제한을두어인접스택영역을침범하지못하게할수있습니다. 사용자는방화벽사용을철저히하여야하고수시로의심스러운네트워크와연결되어있지는않은지확인하여야합니다. 6. 참고자료 Exploit-DB : http://www.exploit-db.com/exploits/20036/ 개발사 : http://www.photodex.com/proshow/producer 대상프로그램취약점 PoC (inshell) : http://security.inshell.net/advisory/30 대상프로그램취약점 PoC Code (inshell) : http://security.inshell.net/advisory/30/exploit.txt 11