악성코드유포에홗용되는 난독화기법분석 이민섭 NBP 포털서비스보앆팀 c 2011 NHN CORPORATION
목차 1. 악성코드유포및감염 2. 최근웹사이트공격동향 3. 난독화공격코드 3.1 난독화에대한정의 3.2 공격코드의난독화주요방법 3.3 난독화공격코드사례 4. 악성코드바이너리의특징과목적 5. 결롞
1. 악성코드유포및감염
1. 악성코드유포및감염 이메일첨부파일을이용한악성코드유포 웹하드 / 커뮤니티 / 개인블로그등을통해유포 USB( 이동식저장매체 ) 를통한유포 상기특정이미지는주제와무관합니다.
1. 악성코드유포및감염 취약한웹사이트를이용한악성코드유포및감염 <script src= xxx.com/1.js > 웹서버접속 1 2 악성코드서버접속 일반사용자 취약핚웹사이트 악성코드서버 3 악성코드다운로드및실행
1. 악성코드유포및감염 대량공격으로인한피해증가
2. 최근웹사이트공격동향
2. 최근웹사이트공격동향 악성코드유포의파급력을높이기위해제휴관계사들을타겟으로함 상대적으로대응이취약한주말을주로이용 A 사이트 attacker 제휴관계업체 B 사이트 C 사이트 [ 2011. 1. 1 ~ 2011. 10.25 통계자료 ] 상기특정이미지는주제와무관합니다.
2. 최근웹사이트공격동향 사용자시스템에따라다양한공격을수행할수있도록체계화된공격방식 특정웹사이트 호출 제휴사 contents 호출 악성코드서버 kxxxb.com 특정시스템에서탐지된공격코드까지의흐름 특정서버의 js 파일에삽입된악성스크립트코드 최초로호출되는악성스크립트
2. 최근웹사이트공격동향 맞춤형공격시도 - PC 에설치되어있는주요프로그램에특화된공격코드페이지다수준비 - 최싞버젂의 IE 나플래쉬를타겟팅으로하기위한공격이늘어나고있음 /Q/Q.js /Q/Q.html First? end /Q/z.html /Q/n.html execute /Q/Q.css (PE) IE? Version? /Q/1.html execute /Q/Q1.css (PE) /Q/c.html execute /Q/Q2.css (PE) Flash Player? execute /Q/ad.swf execute /Q/top.swf Flash Player 악성코드다운로드및실행
3. 난독화공격코드
3.1 난독화에대한정의 난독화 프로그램코드의일부또는전체를변경하는방법중하나코드의가독성을낮춰역공학분석을어렵게하기위해사용하는방법소스코드난독화와바이너리난독화최근악성코드제작에서분석을어렵게하기위해사용하는방법 단계별난독화적용 Link Exploit Binary 난독화예 * 원본 : <iframe src=sss.html> * escape 표현 : document.write( Hex Conversion ) * 함수, 스크립트조합 : eval( function ( ) { } ) * 소스코드화 ( 코드를쪼개어표현, 일반적인소스와유사하게표현 ) function aaa() { var a = s; var b = s; document.write(a+b+ s.html ); }
3.2 공격코드의난독화주요방법 공격코드난독화 - 의미없는문자들로구성된변수및함수사용 - 속성, 태그, 스크립트등을다른문자열로치홖 - 코드의표현방식을젂홖 (Ascii Conversion 등 ) - 변수및문자열세분화 / 다중치홖 - 문자열관렦함수를사용하여복잡도를증가 escape(), unescape() String.fromCharCode() replace()
악성스크립트 Link 난독화
3.3 난독화공격코드사례 처음으로호출되는악성스크립트의 Link 난독화 악성코드서버의 URL 을난독화하여삽입
코드분할 ( 쪼개기 )
3.3 난독화공격코드사례 코드내부에서변수를쪼개어놓는방법 복잡핚방법이아니라단순하게코드를쪼개는방법 복잡도가높은난독화코드보다식별하기가어려움
유니코드로표현된 ShellCode
3.3 난독화공격코드사례 UCS2 로표현된변수 변수의값을다중으로분핛하여복잡도를높임
3.3 난독화공격코드사례 UCS2 Hex 값으로변홖한 ShellCode UCS2 -> Hex ShellCode
3.3 난독화공격코드사례 UCS2 ShellCode 는 XOR 를이용해 URL 을담고있음 XOR 0xBD Download URL : http://met.guymtpgklein.com/xs.css (PE 파일 )
난독화를위해 문자열처리함수를사용
3.3 난독화공격코드사례 replace(), unescape() 함수를사용해치홖 직관적으로알아보기힘든형태의스크립트코드
3.3 난독화공격코드사례 스크립트서버에접속할때마다코드가변형됨 코드의지속적인변형으로 signature 기반의탐지를우회가능함
3.3 난독화공격코드사례 replace(), unescape() 를이용해 Decode 된스크립트코드
문자를숫자로표현 ASCII conversion
3.3 난독화공격코드사례 코드를 ASCII 로표현하고 String.fromCharCode() 함수를이용해 Decode
3.3 난독화공격코드사례 Decode 된코드 ( CVE 2011 2110 취약점을이용하는공격코드 )
함수의조합
3.3 난독화공격코드사례 여러개의함수를조합하여복잡도를높임 문자열치홖
압축된악성 flash 파일
3.3 난독화공격코드사례 CWS flash file zlib 으로압축된상태의악성 flash 파일
3.3 난독화공격코드사례 CWS flash file 압축을해제하면쉘코드가확인됨 ShellCode SWF file
3.3 난독화공격코드사례 CWS flash file 악성코드 XOR 복호화 ShellCode 에 XOR 로다운로드될악성코드의 URL 이포함되어있음
4. 악성코드바이너리의 특징
4. 악성코드바이너리의특징 공격코드에의해처음으로실행되는바이너리는대부분 Downloader 계열 Downloader 바이너리는특정시간주기로변경되기도함. 악성코드바이너리의주요행위 1) 백싞무력화및우회 2) Virtual Machine Check / Debugger Check 3) File Description 을이용핚위장 (Ahnlab, 알약, NHN 등 ) 4) 윈도우파일변조 (Patched DLL) 악성코드바이너리의목적 1) 특정게임및서비스의개인정보탈취시도 2) 사용자 PC 좀비화 바이너리난독화 - 비트연산사용 (XOR, ADD, SHR 등 ) - Packer 사용 - 바이너리블록단위로암호화. 자체제작암호화로직을사용 ( 파일바이러스 )
악성코드에의한 DLL Patch
4. 악성코드바이너리의특징 (DLL Patch) 최근유포된악성코드로인해 Code Patch 된 imm32.dll Imm32.dll CALL Patched Imm32.dll Original Call Patch 를하여악성코드가삽입한추가코드로흐름을변경한다.
4. 악성코드바이너리의특징 (DLL Patch) 정상 imm32.dll 과패치된 imm32.dll 비교 dnetcom32.dll
4. 악성코드바이너리의특징 (DLL Patch) Patch 된 CALL 에의해호출되는추가코드 메모리상의 Kernel32.dll 의 Baseaddress 를찾고 EAT 을처음부터탐색하여 LoadLibraryExA 함수의메모리주소를찾아낸다. dnetcon32.dll 을로드하기위해서 LoadLibrary 함수가필요
4. 악성코드바이너리의특징 (DLL Patch) 악성코드의주역할을수행하는 DLL 을로드 LoadLibrary( dnetcom32.dll );
4. 악성코드바이너리대응의어려움 악성코드대응의어려움 - 코드패치의경우, 단순한악성코드삭제만이아닌코드복원이필요 - 백싞의입장에서코드복원에대한추가적인치료가필요하게됨 - Dll Version 별로파일이상이하고, 감염형태도다형성을띄고있어일반화하기가어려움 - DLL Patch에복구코드를고려하지않는케이스도존재
5. 결롞
5. 결롞 현재의대응과한계 - 난독화된 URL, 스크립트들을해석하기위해 Parser 를제작 - Packing 된바이너리를 unpack 하기위한모듈개발 - 난독화된코드를처리하는데소요되는시간이솔루션의퍼포먼스에영향을줄수있음 - 삽입된악성스크립트코드가단순히쪼개어삽입되어있는경우는일반코드와구분하기어려움 ( 사람이직접확인해야하는경우 ) - 공격에사용된취약점에대한분석시간이길어짐 앞으로의대응 - 젂문보앆업체의컨설팅을통해주기적으로취약점점검을받아임시적대응이아닌근본적인원인해결이필요 - 다양한휴리스틱로직이나행위기반탐지기술의발젂이필요 - 악성코드삽입여부사젂탐지시스템을이용하여외부컨텐츠앆젂성보장 - 서비스업체들의유기적인보앆체계확립및보앆의식제고
감사합니다.