반응형
ி MALSPAM 실제 사례 분석
※ MALSPAM은 스팸 메일을 통한 Malware 감염을 일컫는다.
특정 사용자가 아래의 스팸 메일에 첨부된 링크를 열람하여 MALSPAM에 감염된 상황이다.
침해 사고 과정에서 발생한 이벤트는 pcap 파일에 저장되어 있다.
해당 pcap 파일과 멀웨어 샘플은 아래 사이트에서 제공하고 있다.
https://www.malware-traffic-analysis.net/2017/04/26/index.html
샘플 압축 파일 비밀번호는 infected이다.
네트워크 분석 도구
①
Wireshark(Window)②
NetworkMiner(Window)③
Xplico(Linux) 사이트 유입 경로 파악
사용자가 최초로 접속한 사이트는 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를 클릭하고 다운로드 문구에 관련된 부분을 찾는다.
![](https://t1.daumcdn.net/cfile/tistory/996622495ECEA77102)
발견한 링크는 jgen.php이다. 다운로드 버튼을 클릭했을 때
statusdelivery.com/bot14/lgen.php에서 statusdelivery.com/bot14/jgen.php로 이동될 것이다.
해당 사이트로 이동하게 되면 plugin_KB_47092.zip을 다운받게 된다는 것을
우클릭하여 View Page Source를 클릭하고 다운로드 문구에 관련된 부분을 찾는다.
발견한 링크는 jgen.php이다. 다운로드 버튼을 클릭했을 때
statusdelivery.com/bot14/lgen.php에서 statusdelivery.com/bot14/jgen.php로 이동될 것이다.
해당 사이트로 이동하게 되면 plugin_KB_47092.zip을 다운받게 된다는 것을
와이어샤크를 통해 추가로 확인했다.
![](https://t1.daumcdn.net/cfile/tistory/996636495ECEA77202)
이제 NetworkMiner를 활용하여 저 파일을 추출해보겠다.
![](https://t1.daumcdn.net/cfile/tistory/99E3B3455ECEA77301)
추출한 해당 파일이 정상파일인지 악성파일인지 vt(https://www.virustotal.com/)에서
확인하였는데 자바스크립트 악성 코드로 검출된다.
![](https://t1.daumcdn.net/cfile/tistory/99E3C9455ECEA77401)
Vt에서 JS.다운로더라는 항목이 많이 검출된 것으로 봐서
아마도 자바스크립트가 실행되면 악성 코드 유포지로부터 멀웨어를 다운받도록 요청하는 것 같다.
Js 파일 분석을 위해서 받은 파일의 확장자를 zip으로 수정해주고 압축을 풀어준다.
![](https://t1.daumcdn.net/cfile/tistory/99D5FD455ECEA77402)
Js 파일에 우클릭하고 편집을 눌러서 소스 코드를 확인한다.
![](https://t1.daumcdn.net/cfile/tistory/99D70B455ECEA77502)
해당 소스코드에서 집중해서 볼 것은 URL들이다.
X 변수에 담겨진 주소들이 어떤 식으로 가공되어 Request 되는지 확인해봐야 한다.
대부분의 악성 코드는 상대가 역추적하기 어렵도록 URL을 Split한다.
먼저 위 소스처럼 html과 script 태그를 양끝에 추가시켜주고 3,5,29번 째 줄을 주석처리 한다.
소스코드 확장자를 js에서 html로 저장한 다음에 페이지를 실행하면 아래처럼
요청되는 주소들이 뜨게 된다.
While 문을 돌면서 5개의 URL이 출력되는데 그 중 첫 번째 주소만 캡처했다.
![](https://t1.daumcdn.net/cfile/tistory/99D717455ECEA77502)
URL이 5개나 있는 이유는 배포지 서버의 가용성을 위한 이유도 있다.
이제 저 첫 번째 URL을 와이어샤크에서 찾아보자.
![](https://t1.daumcdn.net/cfile/tistory/99D773455ECEA77602)
Smulpap.. 서버가 리다이렉트 된 후에 Counter 폴더가 생성된 모습이다.
그 후 뒤에서 이상한 문자열(HpgGPur...)들을 자바스크립트로 요청한다.
Xplico로 요청한 문자열 데이터를 보자.
소스 코드를 보니 악성코드 서버 주소를 감추기 위해서 코드가 난독화되어 있다..
![](https://t1.daumcdn.net/cfile/tistory/99D77F455ECEA77602)
저 소스에서 보이는 Nxmef 변수값에 뭐가 들어가는지 Alert로 조회해보자.
우선 지금 코드의 정렬이 고르지 못하므로 자바스크립트 코드를 보기 좋게 만들어주어야 한다,
https://beautifier.io/에서 저 코드를 넣고 Ctrl + Enter를 입력하면 깔끔하게 좌로 정렬된다.
![](https://t1.daumcdn.net/cfile/tistory/991311505ECEA77701)
그리고 난독화 된 것을 풀어야 한다.
코드를 자세히 보면 특정한 문자가 반복되는 규칙이 존재할 것이다.
악성 파일 분석
추출한 해당 파일이 정상파일인지 악성파일인지 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로 출력해본다.
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변수에 들어가는 문자와 똑같게 생겼다.
![](https://t1.daumcdn.net/cfile/tistory/991315505ECEA77701)
그러면 저 부분을 모두 지워주면 되지 않을까?
Notepad++에서 치환 기능을 사용해서 feni에 해당하는 문자열을 모두 지워본다.
그런데 자바스크립트 문법에서 변수를 쓸 때 var을 사용하는데
중간에 지워진 부분 때문에 vr로 나온다. 따라서 feni 값을 a로 치환하면 올바른 문법이 될 것이다.
![](https://t1.daumcdn.net/cfile/tistory/99136D505ECEA77801)
Nxmef에 있는 문자열들은 자바스크립트에서 쪼개진 문장들이다.
나중에 하나로 합쳐져서 eval 함수를 통해 자바스크립트가 실행된다.
하지만 자바스크립트는 실행하지 않을 것이므로 eval을 주석 처리해주고
아까전 플러그인 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
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 통신 확인
공격자는 통신하고 있는 정보를 숨기기 위해서 인코딩을 사용하고 있다.
그 이후 Networkminer로 연결된 Session을 확인했을 때
C&C 서버와 피해자 간의 정보를 주고 받고 있는 것으로 나온다.
![](https://t1.daumcdn.net/cfile/tistory/997A9D4E5ECEA7AC02)
세션이 연결된 시점은 침해가 발생한 시각인 14:01:22초 이후이다.
침해 사고 타임라인을 그리자면 아래 표와 같다.
![](https://t1.daumcdn.net/cfile/tistory/9967004F5ECEA77B01)
리다이렉트 경로 ( Pichat.info -> Servisedelivery.com -> statusdelivery.com/lgen.php -> statusdelivery.com/jgen.php )
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 통신반응형
'해킹-보안' 카테고리의 다른 글
패킷 분석을 위한 도구 - PacketTotal (0) | 2020.06.01 |
---|---|
포트 스캐닝을 위한 TCP 제어 플래그의 이해 (0) | 2020.05.30 |
스팸 메일 확인 방법 (0) | 2020.05.24 |
MSFVenom을 이용하여 이미지 파일에 악성코드 주입하기 (7) | 2020.05.21 |
윈도우 Nessus 취약점 점검 (0) | 2020.05.20 |