관리 메뉴

HeeJ's

[02] Hancitor with Ficker Stealer and Cobalt Strike(1) 본문

<Project>/<Network>_2021

[02] Hancitor with Ficker Stealer and Cobalt Strike(1)

meow00 2021. 5. 11. 03:04

실습 진행 환경 KaliLnux 2021.1

 

Example1 에 사용되는 예제 pcap 파일
웹 트래픽을 빠르게 검토하기 위해 위의 필터표현식을 사용해주었다.

http.request or tls.handshake == 1

http.request -> http 요청에 대한 URL

tls.handshake == 1 -> 클라이언트가 서버에 전송하는 Client Hello 메시지, 데이터 전송이 시작될 때 맨 처음에 보내는 메시지

 

!(SSDP)

!(udp.port == 1900)과 같은 의미이다.

트래픽에서 정상적인 활동 중 UDP 포트 1900을 이용한 HTTP 요청이 포함된다.

UDP 포트 1900을 통한 HTTP 트래픽을 SSDP라고 부른다.

(네트워크 서비스나 정보를 찾기 위해 사용하는 네트워크 프로토콜, 네트워크에서 다른 기기를 찾기 위한 UDP 기반 프로토콜)

SSDP는 PnP(Plug n Play)장치를 검색하는데 사용되는 프로토콜이며 일반 웹 트래픽과 관련이 없다.

 

필터링한 패킷들을 살펴보면 docs.google.com 도메인을 찾았다.

docs.google.com은 본질적으로 악성 도메인이 아니지만, 전에 다뤘듯이 Hancitor는 주로 Google 드라이브를 통해 악용된다.

 

대부분의 악성 Word 문서를 제공하는 페이지로 연결될 때 URL은 .php로 끝난다.

대부분의 경우 이러한 URl은 HTTPS를 사용하지만, 위의 패킷에서는 Word 문서의 URL로 암호화되지 않은 HTTP를 사용하기 때문에 쉽게 찾을 수 있었다.

 

 

위의 .php로 끝나는 악성 word 문서를 제공하는 URL을 찾아주었다.

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

* .php로 끝나는 악성 word 문서를 제공하는 URL을 찾기 위한 필터링 *

HTTP GET 요청을 보내며, .php로 끝나는 도메인에 대해 필터링한다.

 

HTTP GET 요청을 보내며 .php로 끝나는 도메인에 대해 필터링하여 보여준다.

 

 

HTTP Stream을 따라감

GET 요청을 사용한 패킷에 대해 더욱 자세히 보기 위해 somdeepplace.com으로의 트래픽에 대한 HTTP 스트림을 따라가보았다.

 

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

 

HTTP 스트림의 끝으로 이동

base64 텍스트에서 생성된 0217_285768288090.doc라는 파일을 저장하도록 하는 스크립트를 확인할 수 있다. 이는 악성 Word 문서의 파일 이름을 표시하고 브라우저를 다른 URL로 새로고침하는 스크립트이다.

 

[File] - [Export Objects] - [HTTP...]

HTTP 개체를 내보내 주었다.

 

위의 base64 정보를 다 담기엔 534KB가 더 적절한 크기라고 생각해 두 번째 항목을 저장해주었다.

 

위의 .php 파일이 추출되었고, 이 파일을 웹 브라우저에서 열어주었다.

 

악성 Word 문서를 저장하는 옵션이 포함된 파업 메뉴를 확인할 수 있다.

웹 브라우저 또한 cashplus 문자열로 끝나는 URL로 변경되었다.

 

이 악성 word 문서는 pcap에서 2분 이내에 시작되는 hancitor C2 트래픽을 유발한다.

 

 


Ficker Stealer

합법적인 서비스를 제공하는 것처럼 위장한 광고를 통해 정보를 탈취하는 악성코드이다.

2020년부터 러시아어를 사용하는 포럼에서 판매되고 있으며, 이를 구매한 공격자들이 다양한 방법으로 해당 악성 코드를 유포하고 있다.

 

Ficker Stealer의 공격 단계

1. 사용자가 다운로드된 파일을 실행하면 해당 악성코드는 감염환경의 국가 정보를 확인한다.

만약, 러시아, 벨라루스, 우즈베키스탄, 우크라이나, 아르메니아, 카자흐스탄, 아제르바이잔에 포함된 국가에서 실행되었다면, 추가 악성행위를 수행하지 않고 종료된다.

 

2. 감염환경의 인터넷 연결 여부를 확인한다.

이를 위해 IP 확인 사이트인 ipify로 연결하여 IP주소를 C:\ProgramData\kaosdma.txt에 저장한다.

 

3. 인터넷에 연결되어 있다면, 다음 그림과 같이 감염 환경의 정보, 스크린샷, 브라우저, 암호화폐 지갑 및 소프트웨어 정보를 수집한다.

 

4. 수집한 정보를 XOR로 인코딩하여 공격자의 서버로 전송한다.

 

 

Ficker Stealer에 대한 exe는 자체적으로 악성이 아닌 api.ipify.org/?format=xml에 대한 IP 주소 검사를 발생시킨다.

Ficker Stealer는 sweyblidian.com에 대한 DNS 쿼리를 생성하고 TCP 포트 80을 통해 HTTP가 아닌 트래픽을 해당 도메인으로 보낸다. (dns.qry.name contains sweyblidian)

이 트래픽은 감염된 windows 호스트에서 도난당한 데이터로 구성된다.

 

위의 필터를 사용해 sweyblidian.com에 사용된 IP 주소를 찾아주었다.

IP주소 : 185.100.65.29

 

그리고 해당 IP 주소에 대한 TCP 스트림을 찾아 주었다.

 

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

해당 IP 주소(ip.addr == 185.100.65.29)에 대한 TCP SYN 스트림(tcp.flags == 0x0002)찾기

 

tcp.flags의 16진수 표현

 

두 개의 TCP 스트림(TCP SYN 세그먼트 중 하나는 재전송이다.)에 대한 세 개의 TCP SYN 세그먼트를 나타낸다.

 

TCP 소스 포트로 49807을 사용한 TCP 스트림을 따라감

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

 

데이터를 추출한 Ficker Stealer는 더 이상 아무런 행동을 하지 않는다.

이 시점에서 감염된 컴퓨터가 독립 실행형 Windows 호스트인 경우, Hancitor C2 트래픽만 표시되게 된다.

그러나 감염된 PC가 AD 환경의 일부인 경우, Cobalt Strike도 확인해야한다.

 


Cobalt Strike

이에 대한 Hancitor의 HTTP GET 요청은 URL에 문자 s를 사용한다.

 

(http.request or tls.handshake.type == 1) and !(ssdp)

http.request -> http 요청에 대한 URL

tls.handshake == 1 -> 클라이언트가 서버에 전송하는 Client Hello 메시지

 

TCP 포트 443을 통해 192.99.250.2의 여러 프레임에 표시되는 것이 Cobalt Strike 프레임이다.

 

Cobalt Strike HTTPS로 인한 HTTPS 트래픽에 대한 인증서 발급자 데이터는 국가, 지역 및 조직과 같은 항목에 대한 모든 식별 필드가 비어있다. 이는 비정상적이라고 할 수 있다.

 

Cobalt Strike 트래픽에 대한 IP 주소에서 인증서 데이터를 찾아야 한다.

 

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

tls.handshake.type == 11 -> 클라이언트가 서버에게 보내는 handshake 성공적 완료 메시지

handshake 메시지에 대한 hash를 암호화하여 전송한다.

 

두 개의 프레임에서 프레임 세부 정보를 확인해보면, 인증서 발급자 데이터에 대한 필드가 모두 비어있는 것을 확인할 수 있다.

 

이 pcap의 나머지 부분에서는 hancitor C2에 대한 HTTP GET 요청과 Cobalt Strike에 대한 HTTPS 트래픽이 있다.

hancitor 트래픽은 약 2분마다 발생하고, Cobalt Strike에 대한 HTTPS 트래픽은 1초마다 발생한다.

 

 

 

[출처] 

Ficker Stealer의 공격 단계 - https://isarc.tachyonlab.com/m/3936

tcp.flags의 16진수 표현 - https://m.blog.naver.com/PostView.nhn?blogId=stop2y&logNo=221018537228&proxyReferer=https:%2F%2Fwww.google.com%2F