3.5 예제 3 Hancitor with Ficker Stealer and Cobalt Strike 트래픽 분석

 

[그림 40] 기본 필터링 진행

예제 1과 예제 2의 앞 부분에서 진행한 것과 같이 표준 웹 필터를 사용해 pcap을 살펴보았다.

 

[그림 41] php 문자열이 포함된 트래픽 확인

기본적으로 필터링한 트래픽들 중에서 www.nuicala.inspia.net/mars.php 도메인을 찾을 수 있다.

 

[그림 42] .php로 끝나는 악성 Word 문서 제공 URL을 찾기 위한 필터링 진행

http.request.method == GET and http.request.URI contains .php

 

 .php로 끝나는 악성 word 문서를 제공하는 URL을 찾기 위해 위 필터 표현식을 사용하였다. [그림 40]에 나온 트래픽들은 HTTP GET 요청을 보내며 .php로 끝나는 도메인에 대한 것들이다.

 

 

[그림 43] 두 번째 트래픽의 HTTP Stream 확인

 SaveAs() 스크립트 함수 직후, 많은 양의 base64 텍스트가 있는 것을 확인했다.

이는 word 문서에 대한 악의적인 행동이라고 볼 수 있다.

 

 

[그림 44] HTTP Stream의 끝 부분 확인

 많은 양의 base64 텍스트의 끝을 확인해보면‘0125_206410993.doc’라는 파일을 저장하도록 하는 스크립트가 있다. 이는 악성 word 문서의 파일 이름을 표시하고 브라우저를 다른 URL로 새로고침하는 스크립트이다.

 

 

[그림 45] Export Object 기능으로 HTTP 객체 확인

 

[그림 46] mars.php 추출

WiresharkExport Objects 기능을 사용하여 [그림 44]에 해당하는 악성 스크립트를 추출했다.

 

[그림 47] mars.php 웹 브라우저에서 실행

 

 이 스크립트를 웹 브라우저에서 열면 악성 word 문서를 저장하는 옵션이 포함된 팝업 메뉴가 뜨는 것을 확인할 수 있다. 웹 브라우저의 주소 또한 GET 방식으로 ‘0125_206410993.doc’를 다운로드하는 URL로 변경되었다.

 

 예제 3에서 Ficker Stealerdrivewaysnowservice.com에 대한 DNS 쿼리를 생성하고 TCP 포트 80을 통해 HTTP가 아닌 트래픽을 해당 도메인으로 보낸다. 이때 보내는 트래픽에 감염된 Windows 호스트에서 도난당한 데이터가 포함되어 있다. 이를 확인하기 위한 필터링을 진행했다.

 

 

[그림 48] Ficker Stealer 감염 여부를 확인하기 위한 필터링 진행

(http.request.URI contains “/mars.php:) or (http.host.contains api.ipify.org)

 

 Ficker Steal에 대한 exe는 자체적으로 악성이 아니며 api.ipify.org?/format=xml에 대한 IP 주소 검사를 발생시키기 때문에 위와 같은 필터 표현식을 사용하였다. 그리고 hostnameapi.ipify.org인 트래픽을 찾을 수 있다.

 

 

[그림 49] drivewaysnowservice.com을 반환하는 DNS 쿼리를 찾기 위한 필터링 진행

dns.qry.name contains drivewaysnowservice

 

위의 필터 표현식을 사용해 drivewaysnowservice.com으로 변환된 IP 주소를 찾았고, IP 주소는 8.209.78.68이다.

 

 

[그림 50] 해당 IP 주소에 대한 TCP SYN Stream을 찾기 위한 필터링 진행

ip.addr == 8.209.78.68 and tcp.flags == 0x0002

 

 위의 필터 표현식을 통해 8.209.78.68에 대한 TCP SYN 스트림을 찾은 후, TCP 소스포트로 49813번을 사용하는 트래픽의 TCP Stream을 따라가보았다.

 

[그림 51] TCP Stream 내용 확인

 이 Stream 에는 3개의 클라이언트 트래픽과 201개의 서버 트래픽이 존재했다. 서버 트래픽의 대부분은 인코딩되거나 난독화된 것처럼 보였다. 그 중에서 특이한 점은 Hostdrivewaysnowservice.comClient 트래픽에서 /6gbd5ws.exe 실행 파일에 대해 GET 요청을 한다는 점이었다. 실행 파일은 Hancitor가 후속 멜웨어를 동작시키는데 사용할 가능성이 높으므로 앞서 진행된 결과를 이용하여 분석을 계속 진행했다.

 

 

[그림 52] Hancitor 후속 행위를 찾기 위한 필터링 진행

ip.addr == 8.209.78.68 and http.host.contains drivewaysnowservice

 

 이를 확인하기 위해 ip 주소가 8.209.78.68이면서 hostnamedrivewaysnowservice가 포함된 트래픽을 확인하기 위한 필터링을 진행하였다.

 

 그리고 [그림 52]에 나타난 것처럼 HancitorCobalt Strike Ficker Stealer에 대한 후속 악성 코드를 보내는 것을 확인할 수 있다.

 

drivewaysnowservice.com GET /2021.bin

drivewaysnowservice.com GET /2021s.bin

drivewaysnowservice.com GET /6gfbd5ws.exe

 

 

[그림 53] Cobalt Strike 감염 여부를 확인하기 위한 기본 필터링 진행

 23.106.80.14:8080의 여러 프레임에 표시되는 것이 Cobalt Strike 프레임이다. /submit.php?id=를 포함하는 모든 HTTP POST 요청에는 감염된 각 Windows 호스트에 대해 고유한 식별번호가 있음을 확인할 수 있다.

 

 

[그림 54] /submit.php 문자열을 포함하는 트래픽의 TCP Stream 확인

 Cobalt Strike를 통해 전송된 멜웨어는 피해 호스트에서 디코딩되는 인코딩 바이너리로 나타나고 있다. 인코딩되어 있기 때문에 pcap 파일에서 실제 악성코드 바이너리를 찾을 수 없기 때문에, 전송된 후속 악성코드는 감염 후의 트래픽으로 식별할 수 있다.

 

 

[그림 55] Cobalt Strike를 통해 전송된 네트워크 ping 도구의 ICMP 트래픽

icmp

 

ICMP 필터링을 통해 네트워크 ping 도구가 Cobalt Strike를 통해 전송되었음을 알 수 있다.

 

 감염된 Windows 호스트에서 복구된 네트워크 ping 도구 샘플은 내부의 라우팅이 불가능한 IPv4 주소 공간을 대상으로 1,700만 개 이상의 IP 주소를 ping 하므로 약 1.5GB 크기의 수많은 ICMP의 트래픽을 생성한다.

 

이를 확인해보면, ping 트래픽은 다음 주소에 위치한다.

 

192.168.0.0 ~ 192.168.254.254

172.16.0.0 ~ 172.31.254.254

10.0.0.0 ~ 10.254.254.254

 

위의 다수의 ping 트래픽이 Cobalt Strike를 통해 전송된다는 사실을 알 수 있다.

 


3.6 예제 4 Hancitor with Ficker Stealer and Cobalt Strike 트래픽 분석

 

[그림 56] 기본 필터링 진행

이번 예제에서도 우선 기본 필터링을 실행시켜주었다.

 

[그림 57] php 문자열이 포함된 트래픽 확인

기본적으로 필터링한 트래픽들 중에서 www.premierpt.co.uk/footage.php 도메인을 찾을 수 있다

 

[그림 58] .php로 끝나는 악성 Word 문서 제공 URL을 찾기 위한 필터링 진행

http.request.method == GET and http.request.URI contains .php

 

 .php로 끝나는 악성 word 문서를 제공하는 URL을 찾기 위해 위 필터 표현식을 사용하였다. [그림 58]에 나온 트래픽들은 HTTP GET 요청을 보내며 .php로 끝나는 도메인에 대한 것들이다.

 

 

[그림 59] 두 번째 트래픽의 HTTP Stream 확인

 Length582인 두 번째 트래픽의 HTTP stream을 따라가보았다. saveAs에 대한 스크립트 함수 직후, 많은 양의 base64 텍스트가 있다. 이는 word 문서에 대한 악의적인 행동이라고 볼 수 있다.

 

[그림 60] HTTP Stream의 끝 부분 확인

 많은 양의 base64 텍스트의 끝을 확인해보면‘0202_10846666250132.doc’라는 파일을 저장하도록 하는 스크립트가 있다. 이는 악성 word 문서의 파일 이름을 표시하고 브라우저를 다른 URL(http://www.docusign.com/?download=0202_10846666250132.doc)로 새로고침하는 스크립트이다.

 

[그림 61] Export Object 기능으로 HTTP 객체 확인

 

[그림 62] footage.php 웹 브라우저에서 실행

 이를 웹 브라우저에서 열게되면 악성 word 문서를 저장하는 옵션이 포함된 팝업 메뉴가 뜨는 것을 확인할 수 있다. 웹 브라우저의 URL도 예상대로 변경되었음을 확인할 수 있다.

 

 예제 4에서 Ficker Stealerbobcatofredding.com에 대한 DNS 쿼리를 생성하고 TCP 포트 80을 통해 HTTP가 아닌 트래픽을 해당 도메인으로 보인다. 이때 보내는 트래픽에는 감염된 Windows 호스트에서 도난당한 데이터가 포함되어 있다.

 

[그림 63] Ficker Stealer 감염 여부를 확인하기 위한 필터링 진행

(http.request.URI contains “/footage.php:)or(http.host.contains api.ipify.org)

 

 Ficker Stealer에 대한 exe는 자체적인 악성이 아닌 api.ipify.org?/format=xml에 대한 IP 주소 검사를 발생시키기 때문에 위와 같은 필터링을 해주었고, hostnameapi.ipify.org인 트래픽을 찾을 수 있다.

 

 

[그림 64] bobcatofredding.com을 반환하는 DNS 쿼리를 찾기 위한 필터링 진행

dns.qry.name contains bobcatofredding

 

위의 필터 표현식을 사용해 bobcatofredding.com으로 변환된 IP 주소를 찾았고, IP 주소는 8.209.78.68이다.

 

 

[그림 65] 해당 IP 주소에 대한 TCP SYN Stream을 찾기 위한 필터링 진행

ip.addr == 8.209.78.68 and tcp.flags == 0x0002

 

 위의 필터 표현식을 통해 8.209.78.68에 대한 TCP SYN 스트림을 찾은 후, TCP 소스포트로 49800번을 사용하는 트래픽의 TCP Stream을 따라가보았다.

 

 

[그림 66] TCP Stream 내용 확인

 이 Stream에는 3개의 클라이언트 트래픽과 200개의 서버 트래픽이 존재했다. 서버 트래픽의 대부분은 인코딩되거나 난독화된 것처럼 보였다. 그 중, Hostbobcatofredding.comClient 트래픽에서 /6lavfdk.exe 실행파일에 대한 GET 요청을 하는 것을 발견했다. 실행 파일은 Hancitor가 후속 멜웨어를 동작시키는데 사용할 가능성이 높으므로 앞서 진행된 결과를 이용하여 분석을 계속 진행했다.

 

 

[그림 67] Hancitor 후속 행위를 찾기 위한 필터링 진행

ip.addr == 8.209.78.68 and http.host.contains bobcatofredding

 

 이를 확인하기 위해 ip 주소가 8.209.78.68이면서 hostnamebobcatofredding 이 포함된 트래픽을 확인하기 위한 필터링을 진행하였다.

 

 그리고 [그림 67]에 나타난 것처럼 HancitorCobalt Strike Ficker Stealer에 대한 후속 악성 코드를 보내는 것을 확인할 수 있다.

 

bobcatofredding.com GET /0102.bin

bobcatofredding.com GET /0102s.bin

bobcatofredding.com GET /6lavfdk.exe

 

 

[그림 68] Cobalt Strike 감염 여부를 확인하기 위한 기본 필터링 진행

 192.254.79.71:8080의 여러 프레임에 표시되는 것이 Cobalt Strike 프레임이다.

Cobalt Strike의 경우 /submit.php?id=를 포함하는 모든 HTTP POST 요청에 감염된 각 Windows 호스트에 대해 고유한 식별번호가 있는 것으로 보인다.

 

[그림 69] /submit.php 문자열을 포함하는 트래픽의 TCP Stream 확인

 Cobalt Strike를 통해 전송된 멜웨어는 피해 호스트에서 디코딩되는 인코딩 바이너리로 나타나고 있다. 인코딩되어 있기 때문에 pcap 파일에서 실제 악성코드 바이너리를 찾을 수 없기 때문에, 전송된 후속 악성코드는 감염 후의 트래픽으로 식별할 수 있다.

 

 예제 4 에선, NetSupportManager RAT 멜웨어에 대한 트래픽를 찾아봤다. 상업적으로 사용 가능한 RAT(원격 접속 프로그램)NetSupportManager는 관리자가 클라이언트 컴퓨터에 원격으로 액세스하기 위해 사용된다. 그러나 소유자가 모르게 피해자의 컴퓨터에 설치하는 악의적인 행위자에 의해 악용되어 컴퓨터에 대한 무단 액세스 권한을 얻을 수 있다.

 

 배포를 위해 공격자는 손상된 웹 사이트를 악용하고 RATAdobe Flash, Chrome FireFox를 비롯한 자주 사용되는 응용 프로그램의 가짜 업데이트로 가장한다. 사용자가 업데이트를 진행하게 되면 대부분 Dropbox 링크에서 악성 JavaScript 파일이 다운로드 되는 방식이다.

 

 예제 4 에서 RAT는 먼저 geo.netsupportsoftware.com 도메인에 대한 IP 주소 확인을 수행했고, HTTP 요청 헤더에서 사용자 에이전트 문자열의 일부를 NetSupportManager를 사용하여 트래픽을 생성했다.

 

 

[그림 70] NetSupportManager RAT C2 트래픽 확인을 위한 필터링 진행

http.user_agent contains “NetSupportManager” or http.host contains netsupport

 

따라서 위의 필터 표현식을 사용해 필터링을 진행했다. [그림 68]에 포함된 트래픽은 아래와 같다.

 

62.172.138.55:80 geo.netsupportsoftware.com GET /location/loca.asp

46.17.106.230:4543 46.17.106.230 POST http://46.17.106.230/fakeurl.htm

 

 

[그림 71] NetSupportManager RAT C2 트래픽의 TCP 스트림

 

 4개의 최신 pcap을 본 결과 네트워크 트래픽에서 일관된 패턴을 발견했고, 이러한 패턴을 통해 네트워크 내에서 Hancitor 활동 및 관련 맬웨어를 식별하는 데 사용할 수 있다.

 


 본 프로젝트는 와이어샤크를 통한 다운로더 악성코드가 포함된 악성패킷에 대한 분석 과정을 파악하여 내부 공격이 어떠한 순서로 이뤄지는지 알기 위해 진행되었다.

 Hancitor는 사용자가 아무런 의심없이 스팸 메일에 포함된 링크를 클릭했을 시 악성 word 문서 파일을 다운로드 받도록 하며, word 문서 내 활성화 된 매크로를 클릭하면 그 순간부터 빠르게 유포되기 시작한다. 이는 Ficker StealerCobalt Strike 등을 사용한 추가적인 악성 행위를 유발시켰으며 감염된 Windows 호스트가 Hancitor 이메일을 보내는데 사용되는 스팸봇으로서 동작시키게 하는 것까지 확인할 수 있다.

 

 이와 같은 다운로더 악성코드 피해를 줄이기 위해서는 출처가 불분명한 메일의 첨부파일과 URL 실행을 금지하고, 백신의 최신버전을 유지하며 실시간 감시 기능을 실행해야 한다. 또한 파일 실행 전 최신 버전의 백신으로 검사해야 하고 OS(운영체제) 및 인터넷 브라우저, 오피스 소프트웨어에 최신 보안 패치 적용을 해야한다.

 

'Project > Network' 카테고리의 다른 글

Hancitor Analysis by Wireshark (3)  (0) 2021.08.19
Hancitor Analysis by Wireshark (2)  (0) 2021.08.19
Hancitor Analysis by Wireshark (1)  (0) 2021.08.19
DNS Spoofing 공격 & 차단 방법  (0) 2021.06.15

+ Recent posts