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

3.3 예제 2-1 Hancitor with Ficker Stealer and Cobalt Strike 트래픽 분석

 

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

 예제 1과 같이 웹 트래픽을 빠르게 검토하기 위한 기본 필터 표현식을 사용해주었다.

[그림 24]에서 보듯이 필터링한 트래픽을 확인하던 중, docs.google.com 도메인이 포함된 트래픽을 발견했다. 앞서 진행했던 [그림 10]에서부터 [그림 17]까지의 과정을 거쳐 /commemorative.php를 통해 악성 Word 문서를 저장하는 옵션이 포함된 팝업 메뉴가 뜨는 것을 확인할 수 있다.

 

 악성 Word 문서가 다운로드 되면, 매크로가 활성화되어 Hancitor 초기 감염이 일어난다. 감염된 Windows 호스트는 api.ipify.org으로 IP 주소를 확인한다. 그 후, C2 트래픽을 유발한다. 202011월부터 Hancitor C2 트래픽의 URL은 항상 /8/form.php로 종료되었다. 따라서 HTTP POST URL/8/form.php로 끝나는 Hancitor C2 트래픽을 찾기 위한 필터링을 해주었다.

 

 

[그림 25] Hancitor C2 트래픽을 찾기 위한 필터링 진행

http.request.uri contains “/8/forum.php” or http.host contains api.ipify.org

 

 Hancitor C2 트래픽이 유발되었는지 확인하기 위해 /8/forum.php를 포함하는 요청 URI를 확인해준다. 그리고 Ficker Stealer에 대한 exe는 자체적으로 악성이 아닌 api.ipify.org/?format=xml에 대한 IP 주소 검사를 발생시키기 때문에 api.ipify.org를 포함하는 host 이름을 확인해주었다.

 

[그림 25]에 출력된 것들은 Hancitor C2 트래픽과 함께 Hancitor Ficker StealaerIP 및 주소이다.

 

api.ipify.org GET

anumessensan.ru POST /8/forum.php

api.ipify.org GET /?format=xml

 

 

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

http.request.uri contains .exe or or http.request.uri contains .bin

 

실행 파일(exe, bin)을 요청으로 받는 URI를 필터링해 주었다. 이는 Hancitor에서 보낸 후속 Malware를 필터링한 것이다.

 

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

 

backupez.com GET /0902.bin

backupez.com GET /0902s.bin

backupez.com GET / 6yudfgh.exe

 

 Cobalt Strike에 대한 GET 요청 중 하나는 URLs가 있지만, 다른 하나에는 없다. 이런 경우, Cobalt Strike로 인한 HTTP HTTPS 트래픽이 모두 표시되어야 한다.

다시 웹 기본 필터로 돌아가서, backupez.com에 대한 트래픽 후 발생하는 HTTP 요청 유형을 확인했다.

 

 

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

 그 결과, Cobalt Strike에 대한 TCP 포트 1080을 통한 HTTP 트래픽과 TCP 포트 4443을 통한 HTTPS 트래픽이 모두 표시된 것을 확인할 수 있다.

 

위의 그림에 표시된 Cobalt Strike로 인한 트래픽은 다음과 같다.

104.160.190.114 : 8080-GET / WWFh

104.160.190.114 : 8080-GET / fwlink

104.160.190.114 port 4443-HTTPS 트래픽

 

 

[그림 28] WWFh로 끝나는 HTTP GET 요청 트래픽 TCP Sream 확인

 WWFh로 끝나는 첫 번째 HTTP GET 요청은 Cobalt Strike에 사용되는 Windows 바이너리이다. HTTP 요청에 대한 TCP Stream을 확인해보니 base 64 방식으로 인코딩된 208,473byte 사이즈만큼의 데이터를 반환해 주는 것을 확인할 수 있다.

 

[그림 28]에서 보듯이, 첫 번째 HTTP 요청의 104.160.190.114:8080 / fwlink48byte의 인코딩된 데이터를 반환한다.

 

 또한, Cobalt Strike C2에 대한 HTTPS 트래픽은 TCP 포트 4443을 통해 104.160.190.114에 대한 트래픽이 약 1초에 한 번 나타나며, 사용량이 많은 것을 확인할 수 있다.

 

 

3.4 예제 2-2 Hancitor with Ficker Stealer and Cobalt Strike 트래픽 분석

 

 이 예제 파일은 예제 2-1과 같은 Hancitor 감염이 일어난 후의 상황을 다룬다. 따라서, 예제 2-1에서 봤던 Cobalt Strike C2 트래픽의 HTTP GET 요청을 볼 수 있다. 그러나 이 예제 pcap 파일은 Hancitor가 다른 Windows 실행 파일을 보냈으며 이 실행 파일이 Send-Safe 기반 Spam Malware라는 점이 다르다.

 

[그림 29] fwlink로 끝나는 HTTP GET 요청 트래픽 TCP Sream 확인

 

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

 

[그림 31] Windows 실행파일을 찾기 위한 필터링 진행

http.request.uri contains .exe

 

backupez.com에 대한 또 다른 HTTP GET 요청을 확인할 수 있다. 이 도메인은 Hancitor가 후속 멜웨어를 동작시키는데 사용하는 도메인이다. URL47.exe로 끝난다.

 

 

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

 

[그림 33] 47.exe 실행파일 저장

 HTTP object를 살펴본 결과, 47.exe 실행파일이 존재했다. Send-Safe는 지금은 없어졌지만 send-safe.com이라는 이름의 상업적인 프로그램으로 팔고 있다. 이 프로그램은 Windows 컴퓨터를 스팸봇의 호스트로 감염되게 할 수 있는 많은 위협 요소를 가진 맬웨어로 사용된다.

 

Send-Safe 스팸봇에 감염된 Windows 호스트는 다음의 트래픽을 생성한다.

 

UDP 포트 50026을 통한 31.44.184.47로의 트래픽

TCP 포트 50025를 통한 31.44.184.47로의 HTTPS 트래픽

Hancitor를 푸시하는 악성 스팸을 보내는 SMTP 트래픽*

 

SMTP(Simple Mail Transfer Protocol)은 전자 우편을 송수신하는데 사용되는 TCP/IP 프로토콜이다. 일반적으로 POP3 또는 IMAP(Internet Message Access Protocol)와 함께 사용되어 메시지를 서버 메일함에 저장하고 사용자를 위해 서버에 주기적으로 메시지를 다운로드 한다.

 

[그림 34] UDP 트래픽 찾기 위한 필터링 진행

udp.port == 50026

 

Send-Safe UDP 트래픽을 찾기 위해 위와 같은 필터 표현식을 사용해주었다.

 

 

[그림 35] HTTPS, SMTP 트래픽 찾기 위한 필터링 진행

(tcp.port == 50025 and tls.handshake.type == 1) or smtp.data.fragment

 

Send-Safe HTTPS 트래픽 및 SMTP 트래픽을 보기 위해 위와 같은 필터 표현식을 사용해주었다.

 

 

[그림 36] HTTPS 트래픽의 Send-Safe 관련 인증서 발급자 데이터 확인

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

 

 TCP 포트 50025를 통한 HTTPS 트래픽에서 [그림 36]와 같이 Send-SafeorganizationName commonName으로 사용하는 인증서 발급자 데이터가 존재함을 확인했다.

 

그리고, 예제 2-2pcap에선 SMTP 트래픽이 암호화되지 않았으므로, 와이어샤크를 사용하여 이메일을 추출할 수 있다.

 

[그림 37] IMF 객체 확인
[그림 38] Export Object 기능으로 IMF 객체 확인

 IMFInternet Message Format 으로, 텍스트가 인터넷을 통해 전송되는 형식이다. SMTP가 메시지 봉투라고 한다면, IMF는 봉투 안에 있는 편지라고 비유할 수 있다.

예제 2-2 pcap에는 167개의 IMF 객체가 있었고, Send-Safe에 감염된 Windows 호스트에서 초당 수십개의 메시지가 전송됨을 확인할 수 있다.

 

[그림 39] 메일 하나를 저장하여 내용을 확인

 [그림 37]의 이메일 객체 중 하나를 저장하면 eml 파일을 얻을 수 있는데, 이를 열어 <a> 태그로 docs.google.com/document/d/e/... 형식의 주소가 링크화 된 것을 확인할 수 있다. 이 링크는 메일의 본문에 포함되어 있고, 이 링크를 클릭하면 취약한 word 파일이 열리며 앞서 진행됐던 것들과 유사한 방식으로 Hancitor 감염이 시작된다.

 

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

Hancitor Analysis by Wireshark (4)  (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

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

 2019년 전 세계를 집어삼킨 ‘코로나 19 바이러스’로 인해 우리의 일상과 사회 전반의 모습이 완전히 바뀌었다. ...대학교는 온라인 강의로 새 학기를 시작했고 과제 제출과 시험 등도 온라인 상에서 진행되었다. 비대면 사회로 변화되면서 일터로 출.퇴근하던 업무방식에도 큰 변화가 일어났다. 업무공간에서도 ‘사회적 거리두기’가 시행되면서 원격 및 재택근무, 화상회의 등 비대면 업무방식이 확산되었다. 2020 8월 코로나 19가 재확산되면서 디지털 인프라가 구축되어 있는 ICT 기업뿐만 아니라 대기업 및 유통업계도 재택근무에 돌입했다.

 

 그 결과, 온라인 상 보안의 위험성이 부각되기 시작했다. 인터넷 사용자를 대상으로 하는 사이버 공격이 증가하고 그 방법이 다양화 되고 있기 때문에 사용자의 주의가 필요하다. ASEC 주간 악성코드 통계에 따르면, 공격의 종류는 크게 InfoStealer, RAT (Remote Administration Tool), Coin Miner, 랜섬웨어, 다운로더 등으로 나눌 수 있으며 이번 분석에 사용된 Hancitor Malware는 이 중 다운로더 공격에 속한다.

 

[그림 1] ASEC 주간 악성코드 통계

 다운로더 악성코드의 대부분은 스팸 메일을 통해 유포되며, 사용자가 첨부파일을 실행시키도록 유도하는 방식으로 공격이 진행된다. 그리고 공격자들은 백신 진단 우회를 목적으로 프로그래밍 언어를 활용해 악성코드 외형을 패커로 패킹한다.

 따라서 이러한 방식으로 공격하는 인터넷 상에 공개된 맬웨어 중 하나를 선택하여 트래픽을 분석해보고, 공격이 내부에서 어떻게 진행되었는지 분석해보고자 한다.

 

 

2.1 Hancitor Malware 

 Chanitor라고 불리는 Hancitor는 피해자의 컴퓨터로의 초기 접속을 위해 사용되는 다운로더 악성코드이다. 주된 목적은 Hancitor 자체에 포함된 여러 개의 암호화된 URL 중 하나로 접속하여 맬웨어 페이로드(payload)를 다운로드하여 실행하는 것이다.

 Hancitor Pony Vawtrak 맬웨어를 공동으로 배포한 2014년에 처음 목격되었다. Hancitor 2014년부터 2021년까지 꾸준하게 활동하고 있으며 최근에는 추가적 활동으로 Cobalt Strike를 설치하는 형태가 유포되고 있어 사용자의 주의가 필요하다.

 

2.2 Hancitor Malware 동작 방식

[그림 2] Hancitor Infection Event Chain

 Hancitor는 스팸 메일의 첨부파일이나 다운로드 링크를 이용해 유포된다. 이 이메일들은 각각 docs.google.com의 구글 드라이브 URL HTTPS 링크로 포함한다. 이 구글 드라이브 페이지는 취약한 워드 문서 다운로드 페이지로 연결된다. 워드 문서가 다운로드 되면, 워드 문서에서 [그림 3]과 같은 매크로가 활성화되어 워드 문서에 내장된 Hancitor 페이로드 동적 링크 라이브러리(DLL)를 추출하고 실행시켜 초기 감염이 일어난다. 감염된 호스트는 Hancitor 명령과 컨트롤(C2) 트래픽을 일으킨다.

 

 

[그림 3] Microsoft Office 문서 파일 매크로 활성화 시

 실행된 DLL은 패킹된 형태이며, 실행 중 실제 Hancitor DLL을 디코딩한 후 메모리 상에서 실행시킨다. 이번에 분석할 Hancitor 25KB 사이즈를 갖는 작은 다운로더 악성코드이며, 사용자 및 컴퓨터 이름, IP 주소, 운영체제 버전과 같은 감염 PC의 기본적인 정보를 획득한 후 C&C 서버에 전달한다(C2 트래픽). C&C 서버는 현재 악성코드를 기준으로 3개를 갖는데, 여기에 차례대로 접속하면서 실패할 경우 다음 C&C 서버에 접속을 시도한다.

 

Hancitor C&C 주소

hxxp://sumbahas[.]com/8/forum.php

hxxp://staciterst[.]ru/8/forum.php

hxxp://semareake[.]ru/8/forum.php

 

 그러면 서버는 Hancitor로 하여금 하나 혹은 그 이상의 추가적인 맬웨어 페이로드를 다운로드하고 실행시키도록 한다. 이 예제에선 멜웨어 후속 조치를 위한 두 개의 추가적 페이로드를 전달하는 것을 확인할 수 있다.

 

 

2.2.1 Hancitor 후속 조치를 위한 추가적 페이로드 “Cobalt Strike”

 

 첫 번째 추가적 페이로드는 악성 행위자들 사이에서 점점 더 인기를 끌고있는 합법적인 침투 테스트 도구인 Cobalt Strike였다. 감염된 호스트가 동적인 디렉터리 환경(AD 환경)일 때, Hancitor Cobalt Strike를 전송한다. Cobalt Strike는 키 로깅과 같은 정보 탈취가 가능하며, 추가적인 공격을 용이하게 하기 위한 시스템 취약성을 이용할 수 있고, 감염된 시스템과 피해자의 네트워크 모두에서 그 활동을 숨기는데 도움이 되는 다양한 방법들을 갖고 있다. Cobalt Strike는 네트워크 ping 도구 또는 NetSupport Manager RAT 기반의 멜웨어와 같은 추가 악성 파일에 대한 또 다른 액세스 접근 채널을 제공한다. 예제 4에선 감염된 Windows 호스트가 Hancitor 이메일을 보내는데 사용되는 스팸봇으로서 동작하는 것까지 확인할 수 있다.

 

2.2.2 Hancitor 후속 조치를 위한 추가적 페이로드 “Ficker Stealer”

 

 두 번째 추가적 페이로드는 2020 8월에 처음 확인된 Malware-as-a-Service(MaaS) Ficker Stiller 였다. Ficker Stealer는 합법적인 서비스를 제공하는 것처럼 위장한 광고를 통해 정보를 탈취하는 악성코드이다. 2020년부터 러시아어를 사용하는 포럼에서 판매되고 있으며, 이를 구매한 공격자들이 다양한 방법으로 해당 악성코드를 유포하고 있다.

 

 Ficker Stealer 공격 단계

[1] 사용자가 다운로드 된 파일을 실행하면 해당 악성코드는 감염환경의 국가 정보를 확인한다. 만약, 러시아, 벨라루스, 우즈베키스탄, 우크라이나, 아르메니아, 카자흐스탄, 아제르바이잔에 포함된 국가에서 실행되었다면, 추가 악성행위를 수행하지 않고 종료된다.

 

[2] 감염환경의 인터넷 연결 여부를 확인한다. 이를 위해 IP 확인 사이트인 ipify로 연결하여 api.ipifiy.org/?format=xml에 대한 IP 주소 검사를 발생시킨다. 그 후, 감염환경의 IP 주소를 C:\ProgramData\kaosdma.txt에 저장한다.

 

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

 

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

 

[그림 4] Ficker Stealer의 탈취 정보

 Ficker Stealer EXE 파일은 몇 주 동안 동일하게 사용된다.  2021-01부터 2021-03까지의 SHA256 해시 값은 다음과 같다.

 

94e60de577c84625da69f785ffe7e24c889bfa6923dc7b017c21e8a313e4e8e1

 

 이번 분석에 사용된 Hancitor pcaps Windows 기반의 맬웨어를 포함하고 있다. 따라서 Windows 기반의 컴퓨터를 사용한다면 감염의 위험이 있어, Windows 기반이 아닌 BSD, Linux, MacOS 등에서 실행하였다.

 


3.1 분석에 필요한 사전지식

 

3.1.1 TCP Flags 16bit Value

 

 TCP(Transmission Control Protocol)의 동작은 3-WAY Handshake 방식을 통해 두 지점 간에 세션을 연결하여 통신을 시작하고 4-WAY Handshake를 통해 세션을 종료하여 통신을 종료한다. 세션 연결과 해제 이외에도 데이터를 전송하거나 거부, 세션 종료 같은 기능이 패킷의 Flag 값에 따라 달라지게 된다. TCP Flag는 기본적으로 6가지로 구성된다.

SYN(연결 시작) : 통신 시작 시 세션을 연결하기 위한 플래그

ACK(확인 응답) : 송신 측으로부터 패킷을 잘 받았음을 알려주는 플래그

RST(연결 재설정) : 비정상적인 세션을 끊기 위해 연결을 재설정하기 위한 플래그

PSH(삽입) :빠른 응답을 위해 OSI 7계층의 응용계층으로 바로 전송하도록 하는 플래그

URG(긴급) :긴급한 데이터 전송을 위해 우선순위를 높여 긴급하게 전달하는 플래그

FIN(연결 종료) : 더 이상 전송할 데이터가 없고 세션 연결을 종료시킨다는 플래그

 

TCP Flags 16진수로 표현했을 때의 값을 나타내면 아래 [그림 5]과 같다.

[그림 5] TCP Flag 16진수 표현값

 

3.1.2 SSL/TLS Handshake

[그림 6] SSL/TLS Handshake 과정

 HTTPS로 접속할 때는 TCP 3-way Handshake와 별도로 SSL/TLS Handshake 과정을 거친다. SSL/TLS Handshake 통신을 암호화하는 데 사용할 암호화 알고리즘과 키를 결정하고 서버를 확인하며 실제 데이터 전송을 시작하기 전에 보안 연결이 이루어졌는지 확인하는 과정이다. 해당 과정을 통하여 세션을 생성할 수 있고 이 후 두 노드의 통신은 세션 상에서 수행된다. SSL/TLS Handshake를 사용하면 SSL 또는 TLS 클라이언트 및 서버가 통신하는 보안 키를 설정할 수 있다.

 

 SSL(Secure Sockets Layer) Certificate Authority(CA)라 불리는 서드파티로부터 서버와 클라이언트 인증을 하는데 사용된다. 주로 전송계층과 응용계층 사이에서 보안조치를 할 때 사용한다. SSL TLS(Transport Layer Security)의 과거 명칭이다.

 

[그림 6]에서 보듯, 이 과정에서 클라이언트와 서버는 Client Hello, Server Hello, Certificate, Server Hello Done 등의 메시지를 주고 받는다. 위의 메시지를 주고받은 후, 클라이언트와 서버는 데이터를 교환하기 시작한다.

 


[1] ASEC 주간 악성코드 통계 《https://asec.ahnlab.com/ko/22926/

[4] Ficker Stealer 탈취 정보 https://isarc.tachyonlab.com/m/3936

[5] TCP Flag 16진수 표현값 https://m.blog.naver.com/PostView.nhn?blogId=stop2y&logNo=221018537228&proxyReferer=https:%2F%2Fwww.google.com%2F

 

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

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

- 인터넷 이용을 위해선 해당 사이트의 IP 주소를 알아야 하며, 이 주소는 한 눈에 들어오지 않는 숫자로 구성되어 있다.

- 따라서 이를 쉽게 기억하기 위한 이름 체계를 만들었고(FQDN), 사용자들이 사용하는 FQDN을 실제 인터넷에서 필요한 IP 주소로 변환하는 서비스가 필요하며, 이를 DNS(Domain Name Service)라고 한다.

 

DNS

:: 웹(web) 상에서 호스트 컴퓨터가 도메인 이름을 IP주소로 변환하기 위해 DNS 서버에게 질의 응답을 하는 서비스

 

DNS Spoofing

:: DNS 트래픽을 공격자가 가로채고, 위조된 IP 주소로 응답하여 호스트 컴퓨터가 위조된 IP 주소로 접근하게끔 하는 공격

:: DNS 캐시 목록에 위조된 레코드 정보를 추가시켜 Client가 URL을 입력하면 위조된 웹 서버로 접속을 유도하여 정보를 탈취하거나 DNS 서버를 공격한다.

:: DNS 서버 자체를 공격하여 DNS 캐시 목록을 오염시킬 수 있지만, DNS 응답을 가로채기 하여 Client가 위조된 DNS 정보를 이용하도록 만든다. 

:: 공격자는 암호화되지 않은 통신 간의 데이터를 임의로 조작하고 조작된 결과를 전달할 수 있다.

 

:: ARP Spoofing 공격이 선행되어야 한다.

--> 공격자는 게이트웨이와 Client의 MAC 주소를 공격자의 MAC 주소로 속인후, Client의 웹 서버 접속을 기다린다.

더보기

ARP Spoofing

 

:: 로컬 네트워크 (LAN)에서 사용하는 ARP 프로토콜의 허점을 이용하여 자신의 MAC(Media Access Control)주소를 다른 컴퓨터의 MAC인 것처럼 속이는 공격

:: ARP Cache 정보를 임의로 바꾼다고 하여 "ARP Cache Poisoning 공격"이라고도 불린다.

:: 단순히 패킷을 가로채어 훔쳐보는(Sniffing) 수준이 아니라, 가로챈 패킷을 변조한 후 전송하는 공격에도 사용되고 있다.

 

 

- Client가 URL을 이용하여 웹 서버에 접속할 때 자신의 DNS 캐시 목록에서 IP 주소를 찾지 못하면 UDP 프로토콜을 이용하여 로컬 DNS 서버에 웹 서버의 IP 주소를 요청한다.

 

- 이때 DNS 서버보다 가까이 있는 공격자는 DNS 응답 메시지를 먼저 보낼 수 있다.

따라서 Client는 먼저 수신된 위조된 DNS 응답 메시지를 신뢰하여 파밍사이트에 접속하게 되며, 공격자는 아이디와 패스워드와 같은 개인 정보를 중간에서 탈취한다.

 

더보기

UDP(User Datagram Protocol)

:: 전송 계층에서 사용하는 프로토콜로, 연결 설정과 해제 과정이 없는 비연결형 프로토콜

:: 오류 처리 및 패킷 순서 재조합과 같은 제어 기능이 없다

:: 단순히 데이터를 전송하고 수신한다.

:: 데이터의 신뢰성 검증이 필요없고, 데이터의 안전성 보다는 빠른 데이터 처리 및 빠른 전송이 요구되는 곳에 쓰인다.

 

UDP 소켓 통신

:: 서버와 클라이언트의 구분이 명확하지 않다.

(한 쪽이 sendto() 함수 호출로 데이터를 송신할 때 bind()로 특정 포트를 지정하지 않아도 데이터를 수신하는 시스템에서는 recvfrom() 함수의 인자를 통해 보낸 쪽의 IP와 포트 번호 확인이 가능한다.)

:: UDP는 송신자가 일방적으로 데이터를 전달하는 통신 프로토콜로, DNS 요청 과정에서 UDP 포트 53번을 사용한다.

 

DNS Spoofing


<첫 번째 실습>

※ 실습 환경 : 5.10.0-kali3-amd64, Windows 7 

첫 번째 실습

 

1. Target PC에게 ARP Spoofing을 수행한다.

 

-   arpspoof -i[사용할 인터페이스] -t [target이 될 대상의 IP주소] [속일 IP주소]

-   arpspoof -t 192.168.100.142 192.168.100.2 명령어 통해 Arp Spoofing을 수행

 

  Client(192.168.100.142)가 Gateway(192.168.100.2)로 통신을 할 때 이 정보가 Gateway로 가지 않고 Attacker PC에게로 이동하게 된다. Client에게 게이트웨이의 MAC 주소를 공격자의 MAC주소라고 계속해서 응답을 보낸다.

 

-   Attacker PC에서 응답 처리를 해주기 위해서 fragrouter -B1 명령어를 이용해 Client가 정상적으로 통신이 되게 설정한다. (B1 옵션 : 송수신 데이터 변조없이 데이터 그대로를 포워딩 해줌)

 

arpspoof 만을 이용하는 경우에는 희생자가 보내는 데이터들이 공격자로 넘어는 오지만, 공격자가 희생자가 원하는 서비스를 제공하지는 않으므로 응답이 가질 않게 되어 희생자 측에서 이상함을 눈치챌 수 있다.

 

하지만, arpspoof와 함께 fragrouter의 B1 옵션을 이용하게 되면 희생자는 정상적으로 통신이 되면서 희생자의 모든 패킷이 공격자를 통해가게 된다.

 

 

2.  Attacker PC에서 WebServer(apache2)를 실행한다.

 

-   Target PC가 Web브라우저를 통해 접속할 경우 자신이 설정한 웹 페이지를 보여주기 위해서 자신이 임의로 만든 웹 서버를 실행한다.

 

 

3.  Target PC에서 잘 동작하는지 확인

-   Client PC에서 Attacker PC IP 주소를 입력한 후 Attacker PC의 웹 페이지가 잘 접속되는지 확인한다.

 

 

 

4. Attacker PC에서 hosts 파일을 생성한다.

-   Target PC에서 Attacker PC가 원하는 주소를 입력할 때 자신의 사이트를 띄우기 위해 hosts 파일을 작성한다.

 

-   Client가 www.naver.com으로 접속할 경우 192.168.100.137로 이동하게 설정한다.  

 

 

5. Attacker PC에서 DNS Spoofing을 수행한다.

-   dnsspoof 명령어를 사용하여 www.naver.com에 대한 DNS Query 패킷이 위조된 웹 서버인 192.168.100.137로 이름이 해석되도록 설정한다

-   dnsspoof - i [인터페이스] -f [DNS 조회할 파일] 명령어를 입력해 53번 포트를 리스닝 상태로 만든다.

 

 

 

6. Target PC에서 잘 동작하는지 확인한다.

-   DNS 조회를 하기 이전에 이전 DNS 조회 기록을 지우기 위해서 ipconfig /flushdns 명령어를 입력한다.

(이전 기록들이 남아있을 수 있으므로)

 

 

 

공격 실패 시

-  공격이 성공한다면, hosts 파일에 설정한 주소를 입력했을 시 해당 사이트로 이동해야 한다. 

하지만 글쓴이 같은 경우 몇 번을 시도해도 DNS Spoofing 공격을 실패했다.

 

 

공격 성공 시 나오는 페이지

- 공격 성공 시  Client는 www.naver.com을 입력했지만 사이트는 공격자가 임의로 작성한 페이지에 접속이 된다. 

 

- Attacker PC에서 확인하면 Target PC에서 DNS 요청을 하는 것을 알 수 있다.

 



<두 번째 실습>

※ 실습 환경 : 5.10.0-kali3-amd64, Windows 7 

 

두 번째 실습

※ 두 번째 실습에선 DNS Spoofing 공격 결과를 확인하기 위해 마지막에 ping 명령어를 사용할 것이다.

 

 

▷ 실습을 위한 웹 서버 환경 구축 (피싱 사이트를 직접 구축하여 접속시키게 할 것이므로)

 

<Apache와 Tomcat 연동>

- 정적인 HTML, image, CSS 파일의 처리는 아파치가, 동적인  DB연동 및 JSP 파일 처리는 톰캣에 넘겨 효율적으로 이용할 수 있기 때문이다

localhost 접속 시

- 아파치 정상 설치 확인

 

localhost:8080 접속 시 

- 톰캣 정상 설치 확인

 

/etc/apache2/sites-enabled/000-default.conf 파일 설정

- 아파치와 톰캣을 연동하기 위한 커넥터를 설치하는 과정이다. 

 해당 파일에 JKMount /* ajp13_worker 구문을 추가한다.(적용할 톰캣의 URL 설정)

 

/etc/tomcat8/server.xml 파일 설정

- <Connector> 태그가 있는 부분의 주석을 제거해준다.

 

apache2와 tomcat9 연동 성공

- 설정 후 Apache & Tomcat 데몬을 재시작한 후 정상적으로 둘이 연동되었는지 확인한다.

 

 

1. 피싱 웹 서버 구축

웹서버 접속(http://localhost) 테스트

- 웹 서버 구축을 위해 Apache 웹 경로에 있는 기존 index.html 파일을 삭제한 후 원하는 대로 수정한다.

index.html 파일의 경로는 다음과 같다. /var/lib/tomcat8/webapps/ROOT/index.html 

그 후 localhost에 접속하면 위 그림처럼 뜬다.

 

 

2. 공격자 IP 확인 후, DNS 스푸핑 파일 설정

vi dnsspoof.hosts 후 cat 명령어를 통해 확인

- 왼쪽에는 공격자 IP를, 오른쪽에는 공격하고자 하는 사이트를 임의의 hosts 파일에 등록한다.

 

3. ARP 스푸핑과 패킷 릴레이

ARP Spoofing

- arpspoof 툴로 스푸핑 공격을 실행한다.

fragrouter 명령어 실행

- - Attacker PC에서 응답 처리를 해주기 위해서 fragrouter -B1 명령어를 이용해 Client가 정상적으로 통신이 되게 설정한다. (B1 옵션 : 송수신 데이터 변조없이 데이터 그대로를 포워딩 해줌)

# arpspoof 만을 이용하는 경우에는 희생자가 보내는 데이터들이 공격자로 넘어는 오지만, 공격자가 희생자가 원하는 서비스를 제공하지는 않으므로 응답이 가질 않게 되어 희생자 측에서 이상함을 눈치챌 수 있다.
# 하지만, arpspoof와 함께 fragrouter의 B1 옵션을 이용하게 되면 희생자는 정상적으로 통신이 되면서 희생자의 모든 패킷이 공격자를 통해가게 된다.

 

 

4. DNS 스푸핑 공격 수행

dnsspoof 명령어 실행

- 앞서 만들었던 hosts 파일을 참조해 dnsspoof 공격을 시작한다.

 

 

5. 공격이 성공되었는지 클라이언트에서 확인

공격 실패 시

- 위 사진과 같이 공격이 실패했을 경우에 클라이언트가 구글의 올바른 IP주소를 확인한다.

dns 정보 삭제

- 클라이언트의 cmd 창을 관리자모드로 실행한 후, DNS 정보를 삭제한다

ipconfig /flushdns 명령어를 사용한다.

 

공격 성공 시

- dns 스푸핑 공격이 성공하면 www.google.com에 ping 요청을 보냈지만 위 그림과 같이 공격자의 IP주소를 확인하고 있는 것을 알 수 있다. 

 

 


<DNS Spoofing 공격 차단 방법>

- 브라우저에 접속할 도메인을 입력하면 반드시 DNS Query가 발생하지는 않는다. 

1) 우선 이전에 같은 사이트에 접속한 적이 있는지 확인하기 위해 캐시에 해당 도메인에 대한 IP주소가 존재하는지 읽어본다. 
2) 만일 캐시에 IP가 존재하지 않는다면 
3) hosts 파일에 적혀진 도메인 이름에 대한 IP주소를 해석한다. 
→ 그렇기 때문에 중요한 사이트의 IP주소를 hosts 파일에 미리 적어두게 되면
DNS Query 없이 바로 hosts 파일에 적혀진 IP 주소로 접속하므로 DNS spoofing 공격을 방어할 수 있다

 

 

hosts 파일 설정

- Window7 에서 hosts 파일의 경로는 다음과 같다. 

C:\Windows\System32\drivers\etc 

 

wireshark로 확인

- 파이어폭스를 통해 www.google.com에 접속한 후 와이어샤크로 패킷을 확인해보면, hosts 파일에 저장한 IP로 통신이 발생하고 있음을 확인할 수 있다.  

 

 

 

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

Hancitor Analysis by Wireshark (4)  (0) 2021.08.19
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

+ Recent posts