본문 바로가기

해킹-보안

MALSPAM 패킷 분석

반응형

ி MALSPAM 실제 사례 분석


※ MALSPAM은 스팸 메일을 통한 Malware 감염을 일컫는다.


특정 사용자가 아래의 스팸 메일에 첨부된 링크를 열람하여 MALSPAM에 감염된 상황이다.


해당 사건에서 시간별로 피해자와 악성코드 유포지의 IP, 악성 파일, C&C 서버를 알아낸다.
침해 사고 과정에서 발생한 이벤트는 pcap 파일에 저장되어 있다. 

 
해당 pcap 파일과 멀웨어 샘플은 아래 사이트에서 제공하고 있다.
https://www.malware-traffic-analysis.net/2017/04/26/index.html
샘플 압축 파일 비밀번호는 infected이다.


네트워크 분석 도구


 Wireshark(Window)
 NetworkMiner(Window)
 Xplico(Linux)


사이트 유입 경로 파악


Xplico에서 pcap 파일을 올린 후 사용자의 웹 페이지 접속 경로를 확인한다.

사용자가 최초로 접속한 사이트는 pichat.info로 확인된다.
와이어샤크에서 해당 주소와의 통신 내역을 조회한 결과
Xplico에서 조회된 세 번째 주소인 Servisdelivery.com으로 Redirect가 되는 것을 확인했다.


위 패킷을 보면 Pichat.info 웹 사이트에서 Meta 태그를 사용하여 리다이렉트를 수행하고 있다.

이제 Servisdelivery.com 이후의 접속 과정을 한번 살펴보자.
아래 패킷을 보면 Servisdelivery.com 사이트로 접속된 이후에도 어떤 경로로 계속 리다이렉트 되고 있다.

Servisdelivery.com/tds에서 ../tds/로 이동하고, /tds/에서는 statusdelivery.com/bot14/lgen.php 사이트로 이동한다.
301코드와 302코드는 리다이렉션 하는 HTTP 응답 코드이다.

statusdelivery.com로 이동하는 주소는 HTTP/1.1 302 Moved Temporarily 패킷에 담겨져 있다.

Xplico에서 statusdelivery.com/bot14/lgen.php를 접속하면 다음과 같이
Word Online 페이지에서 플러그인을 다운로드하라고 나타난다.
웹 페이지 소스 보기를 통해서 저 중앙에 다운로드 버튼을 누르면 어느 경로로 이동되는지 확인해보자.

우클릭하여 View Page Source를 클릭하고 다운로드 문구에 관련된 부분을 찾는다.

발견한 링크는 jgen.php이다. 다운로드 버튼을 클릭했을 때
statusdelivery.com/bot14/lgen.php에서 statusdelivery.com/bot14/jgen.php로 이동될 것이다.

해당 사이트로 이동하게 되면 plugin_KB_47092.zip을 다운받게 된다는 것을 
와이어샤크를 통해 추가로 확인했다.




악성 파일 분석


이제 NetworkMiner를 활용하여 저 파일을 추출해보겠다.



추출한 해당 파일이 정상파일인지 악성파일인지 vt(https://www.virustotal.com/)에서
확인하였는데 자바스크립트 악성 코드로 검출된다.


Vt에서 JS.다운로더라는 항목이 많이 검출된 것으로 봐서
아마도 자바스크립트가 실행되면 악성 코드 유포지로부터 멀웨어를 다운받도록 요청하는 것 같다.

Js 파일 분석을 위해서 받은 파일의 확장자를 zip으로 수정해주고 압축을 풀어준다.



Js 파일에 우클릭하고 편집을 눌러서 소스 코드를 확인한다.

해당 소스코드에서 집중해서 볼 것은 URL들이다.
X 변수에 담겨진 주소들이 어떤 식으로 가공되어 Request 되는지 확인해봐야 한다.
대부분의 악성 코드는 상대가 역추적하기 어렵도록 URL을 Split한다.
먼저 위 소스처럼 html과 script 태그를 양끝에 추가시켜주고 3,5,29번 째 줄을 주석처리 한다.
3 : 페이지 로딩에 지연 시간을 준다. ( 피해자가 페이지에 오래 머무르도록 함 )
5: 페이지 로딩 시 wscript가 정의되지 않았다는 에러가 뜨므로 주석 처리를 한다.
29 : dfs가 wscript를 사용하니 마찬가지로 주석 처리한다.
45 : 27번 째 줄에 grohot에서 출력되는 주소들 중 zmei부터 feni까지를 복사해서
Alert로 출력해본다.


소스코드 확장자를 js에서 html로 저장한 다음에 페이지를 실행하면 아래처럼
요청되는 주소들이 뜨게 된다.
While 문을 돌면서 5개의 URL이 출력되는데 그 중 첫 번째 주소만 캡처했다.

URL이 5개나 있는 이유는 배포지 서버의 가용성을 위한 이유도 있다.


이제 저 첫 번째 URL을 와이어샤크에서 찾아보자.

Smulpap.. 서버가 리다이렉트 된 후에 Counter 폴더가 생성된 모습이다.
그 후 뒤에서 이상한 문자열(HpgGPur...)들을 자바스크립트로 요청한다.

Xplico로 요청한 문자열 데이터를 보자.
소스 코드를 보니 악성코드 서버 주소를 감추기 위해서 코드가 난독화되어 있다..

저 소스에서 보이는 Nxmef 변수값에 뭐가 들어가는지 Alert로 조회해보자.
우선 지금 코드의 정렬이 고르지 못하므로 자바스크립트 코드를 보기 좋게 만들어주어야 한다,

https://beautifier.io/에서 저 코드를 넣고 Ctrl + Enter를 입력하면 깔끔하게 좌로 정렬된다.

그리고 난독화 된 것을 풀어야 한다.
코드를 자세히 보면 특정한 문자가 반복되는 규칙이 존재할 것이다. 
Hpg로 시작하는 문자열이 힌트다.
아까전 플러그인 js에서 보았던 feni변수에 들어가는 문자와 똑같게 생겼다.

그러면 저 부분을 모두 지워주면 되지 않을까?

Notepad++에서 치환 기능을 사용해서 feni에 해당하는 문자열을 모두 지워본다.
그런데 자바스크립트 문법에서 변수를 쓸 때 var을 사용하는데
중간에 지워진 부분 때문에 vr로 나온다. 따라서 feni 값을 a로 치환하면 올바른 문법이 될 것이다.

Nxmef에 있는 문자열들은 자바스크립트에서 쪼개진 문장들이다.
나중에 하나로 합쳐져서 eval 함수를 통해 자바스크립트가 실행된다.
하지만 자바스크립트는 실행하지 않을 것이므로 eval을 주석 처리해주고
NXmef 변수 값을 출력한다.

alert 결과 또 다른 자바 스크립트가 존재한다.

해당 스크립트 또한 아까와 같은 방법으로 실행시켜본다.

Wscript를 사용하는 모든 변수는 모두 주석 처리하고 요청 주소를 출력하자.


저 서버 이외에도 총 5군대에서 exe1과 exe2 악성 파일을 배포하고 있는 것으로 확인된다.
hxxp://atrium-nieruchomosci.pl/js/js/jscalendar-1.0/lang/counter/exe1.exe
hxxp://lecamorariu.ro/counter/exe1.exe
hxxp://protectie-electromagnetica.ro/wp-content/themes/twentythirteen/languages/counter/exe1.exe
hxxp://js-electronics.be/tmp/yoo_venture_j25/warp/libraries/counter/exe1.exe

피해자는 저 사이트에서 악성 파일을 다운받고 저장하여 실행하게 된다.

해당 파일들을 Vt에 검사하면 멀웨어로 탐지된다.
실제 실행할 경우 랜섬웨어로 감염된다.




C&C 통신 확인


피해지에서 악성 파일을 실행한 뒤 C&C 서버와 통신하고 있는 모습이다.
공격자는 통신하고 있는 정보를 숨기기 위해서 인코딩을 사용하고 있다.


그 이후 Networkminer로 연결된 Session을 확인했을 때
C&C 서버와 피해자 간의 정보를 주고 받고 있는 것으로 나온다.

세션이 연결된 시점은 침해가 발생한 시각인 14:01:22초 이후이다.


마무리


침해 사고 타임라인을 그리자면 아래 표와 같다.

피해자(10.4.26.101)가 스팸 메일을 수신
플러그인을 가장한 악성 파일 다운
리다이렉트 경로 ( Pichat.info -> Servisedelivery.com -> statusdelivery.com/lgen.php -> statusdelivery.com/jgen.php )
smulpapentocht.be 자바스크립트 요청 -> 악성 EXE 파일
 EXE 실행 -> 랜섬웨어 감염 및 C&C 통신




반응형