3.2 예제 1 Hancitor with Ficker Stealer and Cobalt Strike 트래픽 분석

 

실습 환경: KaliLinux 2021.1

 

[그림 7] 예제 1에 사용되는 pcap 파일  

 

[그림 8] 웹 트래픽을 빠르게 파악하기 위한 기본 필터링 진행

[그림 8]에 사용된 필터 표현식은 아래와 같다.

 

http.request or tls.handshake.type == 1

http.request 값은 http 요청에 대한 URL을 나타내고, tls.handshake.type == 1https 또는 TLS 트래픽에 사용되는 도메인 이름을 나타낸다.

!(ssdp)

트래픽에는 정상적인 활동 중 UDP 포트 1900을 이용한 HTTP 요청이 포함된다. UDP 포트 1900을 통한 이 HTTP 트래픽은 SSDP(Simple Service Discovery Protocal)이다. SSDPPnP(Plug n Play)장치를 검색하는데 사용되는 프로토콜이며 일반 웹 트래픽과 관련이 없다.

!(udp.port == 1900)!(ssdp)는 같은 결과를 나타낸다. Window 호스트에서 감염된 pcap을 검토할 때 SSDP 활동을 필터링하면 트래픽을 훨씬 명확하게 볼 수 있다.

 

 

[그림 9] 필터링한 트래픽 중 docs.google.com 도메인 발견

 [그림 9]에서 보듯이 필터링한 트래픽을 확인하던 중, docs.google.com 도메인이 포함된 트래픽을 발견했다. docs.google.com은 본질적으로 악성 도메인이 아니지만,

<22.2 Hancitor Malware 동작방식>에서 파악했듯이 Hancitor는 주로 Google 드라이브를 통해 악용된다.

대부분의 악성 Word 문서를 제공하는 페이지로 연결될 때의 URL.php로 끝난다. 대부분의 경우, 이러한 URLHTTPS를 사용하지만, 이 예제 pcap에서는 Word 문서의 URL로 암호화되지 않은 HTTP를 사용하기 때문에 쉽게 찾을 수 있다.

 

 

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

 

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

위의 필터 표현식으로 필터링을 진행하였다. [그림 8]에서 보듯이 Host namesomdeeppalace.com인 트래픽이 slickness.php 문서에 대한 HTTP GET 요청을 보내고 있다.

 

 

[그림 11] 해당 트래픽의 HTTP Stream 확인

GET 요청을 보낸 트래픽에 대한 자세한 정보를 파악하기 위해 HTTP Stream을 따라가 보았다.

 

 

[그림 12] 트래픽의 내용 확인

 

 saveAs() 함수 직후, 많은 양의 base64 기반의 텍스트를 찾을 수 있다. 이는 Word 문서에 대한 악의적인 행동이라고 볼  수 있다.

 

[그림 13] HTTP Stream 끝 부분 확인

 base64 기반으로 생성된 ‘0217_2857682888090.doc’라는 파일을 저장하도록 하는 스크립트를 확인할 수 있다. 이는 악성 Word 문서의 파일 이름을 표시하고 브라우저를 다른 URL로 연결시키는 스크립트이다.

 

 

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

 

[그림 15] 그림 7에서 발견한 slickness라는 이름의 php 객체 저장

 HTTP object를 살펴본 결과, php 객체가 두 개인 것을 확인할 수 있다. [그림 12] 에서 본 것처럼 이러한 많은 base64 텍스트 정보를 다 담기엔 534KB 크기를 가지는 두 번째 slickness.php 파일이 우리가 찾던 악성 스크립트에 적합하다고 생각하여 두 번째 항목을 저장해주었다.

 

[그림 16] 저장된 slickness.php

 

[그림 17] slickness.php 웹 브라우저에서 실행

 악성 Word 문서를 저장하는 옵션이 포함된 팝업 메뉴를 확인할 수 있다. 웹 브라우저 또한 cashplus 문자열로 끝나는 URL로 변경되었다. 이 악성 Word 문서는 2분 내로 Hancitor C2 트래픽을 유발한다.

 

 

 

1.2 Ficker Stealer Infection 트래픽 분석

 

예제 1 에서 Ficker Stealersweyblidian.com에 대한 DNS 쿼리(IP주소로 domain name을 변환하는 메커니즘)를 생성하고 TCP 포트 80을 통해 HTTP가 아닌 트래픽을 해당 도메인으로 보낸다. 이 트래픽은 감염된 Windows 호스트에서 도난당한 데이터로 구성된다.

 

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

dns.qry.name contains sweyblidian

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

 

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

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

 

위의 필터 표현식을 통해 185.100.65.29에 대한 TCP SYN 스트림을 찾았다.

 

 

[그림 20] 해당 트래픽의 TCP Stream 확인

그 후, TCP 소스포트로 49807번을 사용하는 트래픽의 TCP Stream을 따라가보았다.

 

[그림 21] TCP Stream 내용 확인

 TCP Stream의 대부분은 인코딩되거나 난독화된 것처럼 보인다.

데이터를 추출한 Fickser Stealer는 더 이상 아무런 행동을 하지 않는다. 이 시점에서 감염된 컴퓨터가 독립 실행형 Windows 호스트인 경우, Hancitor C2 트래픽만 표시되게 된다. 그러나 감염된 PCAD 환경의 일부인 경우, Cobalt Strike도 확인해야 한다.

 

 

 

1.3 Cobalt Strike 트래픽

 

Cobalt Strike에 대한 HancitorHTTP GET 요청 시 URL에 문자 ‘s’를 사용한다는 특성을 참고하여 분석을 시작하였다.

 

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

 TCP 포트 443을 통해 192.99.250.2의 여러 트래픽에 표시되는 것이 Cobalt Strike 프레임이다. Cobalit Strike HTTPS로 인한 HTTPS 트래픽에 대한 인증서 발급자 데이터는 국가, 지역 및 조직과 같은 항목에 대한 모든 식별 필드가 비어있기 때문에 비정상적이라고 할 수 있다. 따라서 이러한 Cobalt Strike 트래픽에 담긴 인증서 데이터를 찾아봤다.

 

 

[그림 23] 해당 IP주소에 해당하는 트래픽을 찾기 위한 필터링 진행

 

tls.handshake.type == 11 and ip.addr == 192.99.250.2

 

 tls.handshake.type == 11은 클라이언트가 서버에 보내는 3-way-handshaking의 성공적 완료 메시지이다. 필터링을 통해 얻은 두 개의 프레임에서 프레임 세부 정보를 확인해보면, 인증서 발급자 데이터에 대한 필드가 모두 비어있는 것을 확인할 수 있다.

 

 이 예제 1 pcap의 나머지 부분에는 Hancitor C2에 대한 HTTP GET 요청과 Cobalt Strike에 대한 HTTPS 트래픽이 존재한다. Hancitor 트래픽은 약 2분마다 발생하고, Cobalt Strike에 대한 HTTPS 트래픽은 1초마다 발생한다는 사실 또한 파악할 수 있다.

 

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

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

+ Recent posts