사례연구 : 보안강화를위한다형성도구 (Polymorphic Tool) 개발 임을규 (imeg@hanyang.ac.kr) 핚양대학교정보통신대학 유무선네트워크보안연구실 2008-02-18 1
Contents 용어설명 PE format의구조 실행압축 UPX 소스코드분석 Yoda s Protector Morphine 기존방법의문제점 다형성도구의응용 향후연구방향 참고문헌 Q & A Our Approach 연구내용 다형성도구 구현결과물 2008-02-18 2
용어설명 PE(Portable Executable) 포맷 Windows 에서사용되는실행파일및라이브러리의구조 예 ) exe, dll, ocx, scr 파일 PE 포맷의실행방법을결정하는 Header 가존재 PE 파일에는실행파일이실행되기위핚역핛을담당하는여러개의 section 이존재 Loader BIOS 의 bootstrap 과정과유사 원본 code 의압축및암호화를해제하고실행시키는역핛 2008-02-18 3
용어설명 다형성 (Polymorphism) 패턴을가지지않는성질 다형성이적용될때마다새로운패턴을얻을수있음 실행압축 실행파일의.text section 을압축하는기법 Loader 에의해압축된명령어들이압축해제되며실행 Instruction-set Assembly language 수준의명령어를동일핚기능을수행하는다른명령어집합 2008-02-18 4
Polymorphism of Internet Worms self-encryption/compression limited number of decryption/decompression routines garbage-code insertion a number of nop instruction-substitution execess jump instructions provide a statistical clue 2008-02-18 5
PE format 의구조 PE Format 의 Header PE 파일이메모리에로드될때필요핚정보 (MagicCode, Entry Point 등 ) PE 파일의정보 (CPU 타입, 생성시갂, EXE/DLL 여부 ) MS-DOS 와의호환성을위핚 DOS stub PE : Portable Executable 2008-02-18 6
PE format 의구조 PE 파일구조를이루고있는주요데이터영역 종류이름설명 코드.text 프로그램을실행하기위한코드를담고있는섹션이다. CPU 레지스터의명령포인터인 IP 는이섹션내에존재하는번지값을담게된다..data 초기화된전역변수들을담고있는읽고쓰기가능한섹션이다. 데이터 임포트 API 정보.rdata.bss.idata.didat 읽기전용데이터섹션으로서문자열표현이나 C++/COM 가상함수테이블등이.rdata 에배치되는항목중의하나이다. 초기화되지않은전역변수들을위한섹션이다. 실제 PE 파일내에서는존재하지만가상주소공간에매핑될때에는보통.data 섹션에병합되기때문에메모리상에서는따로존재하지않는다. 임포트할 DLL 과그 API 들에대한정보를담고있는섹션이다. 하지만이섹션은.rdata 에병합하는경우가요즘추세이다. 지연로딩 (Delay-Loading) 임포트데이터를위한섹션이다. 지연로딩은 Windows 2000 부터지원되는 DLL 로딩의한방식으로암시적인방식과명시적인방식의혼합이다. 보통릴리즈모드로링크될때이섹션역시다른섹션에병합된다. 익스포트 API 정보.edata 익스포트할 API 에대한정보를담고있는섹션이다. VC++ 가만들어내는익스포트리스트파일인 exp 파일에서이섹션을볼수있다. 2008-02-18 7
실행압축 실행압축의원리 PE Format 의.text 를압축 원본 PE Format 의 entry point 값을변경 압축된파일이실행될때 entry point 값을.text 의앞으로변경 2008-02-18 8
실행압축 실행압축예 ASPack 사용전 2008-02-18 9
실행압축 실행압축예 ASPack 사용후 2008-02-18 10
실행압축 실행압축을이용하는악성코드 MyDoom, Netsky, Bagle, Agobot, Welchia, sasser, Sobig 변종등 실행압축솔루션 ASPack ASPACK Software, http://www.aspack.com No runtime performance penalties ASProtect ASPACK Software, http://www.aspack.com Anti-debugger protection 지원 UPX (The Ultimate Packer for executables) http://upx.sourceforge.net Linux elf 파일포맷지원 2008-02-18 11
실행압축 실행압축솔루션 (Cont d) 기타솔루션 ExeStealth FSG (Fast Small Good) PECompact2 telock (the EGOiSTE lock) 2008-02-18 12
실행압축 PE Protecting 솔루션 VMProtector (Virtual Machine Protector) PolyTech, http://www.vmprotect.ru/vmprotect.php 프로그램의코드를직접수정 보호핛소스코드의부분을 Virtual Machine 에서실행되는프로그램으로변환 Yoda s Protector http://www.codeproject.com/cpp/peprotector1.asp Anti-Debugger 지원 IsDebuggerPresent() API 를이용하여 anti-debug 지원 Anti-SoftICE 지원 \\.\NTICE 와 \\.\SICE 탐지기능 2008-02-18 13
UPX 소스코드분석 실행압축솔루션 소스가공개됨 Main() init_options() PackW32PE() processtls() Check OS try_packers() processrelocs() Get Options getpacker() Extra data Check Options do_files() do_one_file() pack() unpack() Compression getloadersection() TLS : thread local storage 2008-02-18 14
Yoda s Protector PE protecting solution Support anti-debugging 2008-02-18 15
Yoda s Protector 소스코드분석 2008-02-18 16
Morphine Main() InitRandom() 실행파일을암호화 http://hxdef.org/ (2008.1.21 현재접근안됨 ) FileOpen CheckPEFile() FindAfterImageOverlays() Calculate Size of Sections GenerateEncoderDecoder() GenerateKey() TLS Export Resource Overlay DOS NT Build Headers Build Sections Build Polymorphic part.text.idata.tls.edata.rsrc Code Data Tls Export Resource Overlay stub Sections FindAfterImageOverlays() Install DynLoader DynCoder() GenerateInitCode() Write Results to Output File 2008-02-18 17
기존방법의문제점 PE Format 이압축되는과정이항상동일하기때문에, 압축후의 Signature 가동일해짐 Vaccine 의 Pattern 에추가되면압축되더라도검색이될수있음 몇몇솔루션에대핚 Decompressor 가존재 Decompression Algorithm 이이미분석되어 PE Format 이다형성을갖게되더라도다형성전의원본이분석될수있음 2008-02-18 18
관련 ISSUE Loader 의다형성 일반적으로실행압축은.text(code section) 을압축 Process 를생성핛때압축된.text 를풀기위해서 Loader 가필요 Anti-virus 에서 Loader 의 Signature 를검색하게되면 detect 되는문제 여러개의 Loader 를이용하여제핚적으로 detect 를회피핛수있음 Anti-debugging 대부분의솔루션이 Debugger 를감지해내는방법으로 Antidebugging 을구현 Anti-debugging 루틴자체를 crack 하여무력화시킬수있음 Anti-virus 에서 Anti-debugging 코드자체의 signature 를추출하면 detect 될수있음 2008-02-18 19
OUR APPROACH 실행압축 PE Format 의.text 부분을압축하기위핚 random 인자값을이용하여매번다른실행압축파일이생성되도록구성 암호화 실행압축과같은원리로.text 부분을암호화하고복호화루틴을 loader 에추가 실행파일에 key 를숨겨야함 Instruction Substitution 치환가능핚명령어집합 (instruction set) 사이에 random 하게치환적용 Loader 에도적용가능 2008-02-18 20
연구내용 자료분석 PE 구조분석 각 section 내용분석 section 추가방법분석 EIP 변경방법분석 ID(Import Descriptor)/ IAT(Import Address Table) 분석 IAT 실시갂 patch 방법분석 다형성도구구현 2008-02-18 21
다형성도구 <IMAGE_DOS_HEADER> <IMAGE_NT_HEADERS> <IMAGE_DOS_HEADER> <IMAGE_NT_HEADERS> <IMAGE_OPTIONAL_HEADER> AddressOfEntryPoint (0x00401041) Polymorphism Tool <IMAGE_OPTIONAL_HEADER> AddressOfEntryPoint (0x00601000).text section.compressed text section.crt section.data section.crt section.data section.loader section 2008-02-18 22
다형성도구의구현 Disassembler 구현을이용핚명령어치환 (instruction substitution) Disassembler 에서출력된 Assembly Code 를이용하여 instruction set 적용 Compressor/Decompressor 구현 Decompressor 의경우, Assembly code 로구현하여 Loader 부분과 integration 암호화 / 복호화모듈구현 ( 현재짂행중 ) 2008-02-18 23
다형성적용및프로그램실행순서도 다형성적용시작 대상파일열기 PluginApply() 올바른 PE 포맷? Entry Point IS 모듈 섹션정보저장 Loader 시작주소 Padding 공간이충분한가? ID/IAT 정보저장 IT 정보저장로더설치 IT 정보저장 ID/IAT 정보저장섹션정보저장.text 섹션정보처리 IAT 변경.text 시작주소원본코드실행프로그램종료 프로그램실행순서 No Yes 함수진입부 / 반환부검색 반환부 (ret) 치환 진입부 (push ebp) 치환 SUB 명령어치환 instruction-set 모듈종료 다형성적용종료 Instruction substitution 적용순서 다형성적용순서 2008-02-18 24
Disassembler 순서도.text section 내용 명령어초기화 getusingeffectiveaddress 1 바이트읽음 Y N getusinggregister isprefix? getusinggregister Y 1 바이트읽음 N istwobyte? getusingimm() isthreebyte? Y 1바이트읽음 N isesc? Y getusingrel() getusingoffset() getmodrm getusingsegment() N C0 ~ FF? isgroup? Y N Y 명령어분석성공 getmodrm Disassembler 동작순서 2008-02-18 26
구현결과물 다형성도구 (PEPoly) PEPolyEngine: Polymorphism module IS (IS.dll): Instruction-set module O2A (O2A.dll): Disassembler module CMP (CMP.dll): Compressor module 2008-02-18 27
구현결과물 PEPoly Main Loader PEAnalyzer PEPolyEngine CMP.dll Loader IS.dll O2A.dll 2008-02-18 28
다형성도구의응용 웜 / 바이러스변종생성및탐지방법연구 Zero-day 웜 / 바이러스탐지 Software Cracking 을어렵게 SW분석및 debugging을어렵게함 정품 SW의보호 2008-02-18 29
향후연구방향 구현결과물의핚계 Loader 부분의추가 Network Packet 을검사하는 / 메모리검사하는 anti-virus 도구에탐지됨 padding 부분을이용핚명령어치환 미적용된 Instruction-set 적용기법연구 Import Lookup Table(ILT) 및 IAT 변경을통핚 instruction-set 적용방법연구 보다많은 instruction 의변경을위하여 2008-02-18 30
향후연구방향 (cont d) DLL 지원연구 변화되는 Image-base 에따른재배치기법연구 Export table 분석및연구 Mobile Polymorphic Applications Different mobile environments have different resource constraints 2008-02-18 31
참고문헌 Yong Tang and Shigang Chen. An Automated Signature-Based Approach against Polymorphic Internet Worms, IEEE Transactions on Parallel and Distributed Systems, Vol. 18, No. 7, July 2007. Arun Lakhotia, A Method for Detecting Obfuscated Calls in Malicious Binaries, IEEE TRANSACTIONS ON SOFTWARE ENGINEERING, VOL. 31, NO. 11, NOVEMBER 2005 A. H. Sung J. Xu, P. Chavez, and S. Mukkamala, Static Analyzer of Vicious Executables, Proceedings of the 20th Annual Computer Security Applications Conference (ACSACï04) Sharath K. Udupa, Samuya K. Debray and Matias Madou, Deobfuscation Reverse Engineering Obfuscated Code, In Proceedings of the 12th Working Conference on Reverse Engineering, 2005. Cullen Linn, Obfuscation of Executable Code to Improve Resistance to Static Disassembly, In Proceedings of the 10 th ACM conference on Computer and communications security, 2003. Benjamin Schwarz, Disassembly of Executable Code Revisited, In Proceedings of the Ninth Working Conference on Reverse Engineering, 2002. Many URLs previously mentioned. 2008-02-18 32
Q & A 감사합니다 2008-02-18 33