전공영역 공부 기록

NirSoft 도구를 악용하는 호크아이 악성코드 분석

악분 2020. 7. 30. 19:26
반응형

 

 

 


1. 요약

이번 시간에는 호크아이 악성코드가 특정 도구를 사용해서 정보를 탈취하는 과정에 대해 살펴봅니다.

* .NET 악성코드 분석 경험이 적어 완벽히 분석을 하지 못했습니다.

1.1 Nirsoft도구를 사용하여 인증정보 탈취

호크아이(HawkEye) 악성코드는 인포스틸러 .NET 악성코드입니다. 보통 악성코드 개발자가 정보를 탈취하기 위한 소스코드를 직접 작성합니다. 하지만 이 예제에서는 NirSoft 도구를 사용하여 웹 브라우저 저장된 자동양식 비밀번호와 이메일 인증정보를 탈취합니다.

※ 사용한 Nirosft 도구

▶Mail PassView: 이메일 인증정보 탈취

▶WebBrowserPassView: 웹 브라우저에 저장된 자동양식 계정/비밀번호 탈취

1.2 안티후킹

악성코드는 샌드박스와 백신탐지를 회피하기 위해 실행 중에 dll를 재로드하여 사용합니다. 이 방법을 안티후킹이라고 부르며 이 과정을 분석합니다.

1.3 TraceOverBeyondTraceRecord(tobt) 트레이싱

안티 후킹을 쉽게 분석하기 위해 조건까지 실행하는 tobt 트레이싱을 설명합니다.

1.4 Confuserex 프로텍터

.NET프로그램 소스코드를 보호하는 Confuserex프로텍터 특성을 간단히 살펴봅니다.

 


2. 샌드박스&행위 분석

 

2.1 샌드박스 분석

샌드박스가 최초로 실행한 booking.exe는 regasm.exe를 자식 프로세스로 실행합니다. regasm.exe는 윈도우에 존재하는 프로세스이지만 애니런 샌드박스는 HAWKEYE라고 탐지했습니다. 즉, 정상적인 regasm.exe프로세스에 악성코드를 인젝션한 것입니다.

 

마찬가지로 regasm.exe가 실행한 vbc.exe프로세스도 윈도우 정상프로세스이지만 애니런 샌드박스에서 정보탈취 행위를 발견했습니다. vbc.exe프로세스도 코드 인젝션을 당하여 악성행위를 수행한 것으로 결론지을 수 있습니다.

그림1 프로세스 전체 흐름

 

그림2 코드 인젝션 당한 vbc.exe 행위

 

2.2 행위분석

 

프로세스 모니터를 실행하고 악성코드를 실행합니다. 약 2~3분이 지나면 [그림 1]에서 확인한 vbc.exe프로세스 2개가 실행되고 종료됩니다.

vbc.exe는 실행 될 때 /stext인자와 파일이름이 설정되었습니다. /stext인자는 Nirosft도구 실행결과를 파일로 저장하는 기능입니다.

그림4 stext인자를 설정하여 실행하는 vbc.exe

 

그림5 Nirsoft의 /stext인자 기능

 

vbc.exe프로세스는 tmp파일을 생성하고 곧바로 삭제합니다.

그림 6 tmp파일을 삭제하는 vbc.exe

 

 

 

 

 

 


3. 정적 분석

 

3.1 바이러스토탈

 

안티 바이러스 제품 중 약 74%가 악성코드라고 탐지하고 패스워드스틸러, 호크아이 악성코드라고 판단합니다.

그림7 바이러스토탈 검사 결과

 

3.2 파일 시그니처 분석

 

Detect It Easy도구로 파일 시그니처를 확인하면 AutoIt으로 확인됩니다. 즉, 악성코드는 Autoit스크립트가 컴파일된 실행파일입니다.

그림8 파일 시그니처 확인

 

3.3 소스코드 분석

악성코드를 Autoit디컴파일 도구(Exe2Aut)로 실행하면 스크립트 원본을 얻을 수 있습니다. 스크립트는 심하게 난독화되어 있어 약 9000줄 이상입니다.

그림9 악성코드 디컴파일

 

autoit 스크립트는 리소스 섹션에 존재하고 실행 중에 디컴파일 됩니다.

그림10 리소스 섹션에 존재하는 Autoit스크립트

 

약 9천 줄이 넘는 autoit스크립트의 핵심 함수는 1개입니다.

그림11 악성행위 핵심 함수

 


4. 동적 분석

4.1 안티 후킹: 섹션 리매핑

샌드박스와 백신 탐지를 회피하기 위해 프로세스 실행시 로드된 기존 dll을 사용하지 않습니다. 프로세스가 생성될 때 로드된 dll을 섹션을 사용해서 재로드합니다.

※ API함수 실행순서

1. NtCrateFile() ; 분석하지 못했으나 실행될 것으로 예상

2. NtCreateSection() ;분석하지 못했으나 실행될 것으로 예상

3. NtOpenSection()

4. NtMapViewOfsection()

 

x32dbg, ida, windbg 등 디버거는 실행 중에 새로운 모듈이 로드되면 로그를 남기는 기능이 있습니다. 분석 중에 로그를 중간중간 확인하면 섹션 리매핑을 할 dll을 확인할 수 있습니다. 로그를 확인하는 방법은 3.2섹션에서 설명합니다.

4.2 자식 프로세스 실행 분석

샌드박스, 행위분석, 정적분석에서 자식 프로세스를 실행하는 것을 근거로 CreateProcessW에 브레이크포인트를 설정합니다. 실행하면 설정한 브레이크포인트에 디버거가 멈춥니다.

스택창을 확인하면 Regasm.exe를 일시정지상태로 실행하려고 합니다. [그림 1], [그림 11]에서 분석했던 내용입니다.

그림12 CreateProcessW 스택창 분석

 

Log탭을 확인하면 제일 아래 화면에서 DLL Loaded메세지가 여러 줄 있습니다. 이 여러 줄이 3.1섹션에서 설명한 섹션 리매핑한 DLL목록입니다.

그림13 섹션 리매핑한 dll목록

 

Memory Map탭에서 매핑된 메모리 주소를 확인할 수 있습니다.

그림14 매핑된 메모리 주소 확인

 

4.3 코드 인젝션 분석: 공유 메모리 인젝션

자식 프로세스를 일시정지 상태로 실행한 것은 악성코드를 코드 인젝션 하기 위해서입니다. 이 섹션에서는 코드 인젝션할 악성코를 추출합니다.

4.3.1 TraceOverBeyondTraceRecord 트레이싱

Alt+F9를 눌러 CreateProcessW호출한 곳으로 이동합니다. 지금 상태에서 예상되는 API함수에 브레이크포인트를 설정해도 멈추지 않습니다. 악성코드가 dll를 리매핑 했기 때문입니다. 그러므로 한줄한줄 실행하면서 악성행위를 분석해야하지만 x64dbg 기능을 사용해서 편하게 디버깅을 진행하는 방법을 소개합니다.

x64dbg는 다수의 트레이싱 기능이 존재합니다. 가장 많이 쓰는 트레이싱은 StepOver(F8), SteopInto(F7), Start(F9)입니다. 안티 후킹에 있어서 유용한 트레이싱은 TraceOverBeyondTraceRecord입니다. 조건이 만족할 때까지 StepOver을 실행합니다. dll이 리매핑이 되었어도 결국은 함수를 호출(call)을 해야합니다. 이 특성을 이용해서 call을 만날 때까지 step over하라고 명령을 내릴 수 있습니다.

tobt dis.iscall(cip)==1

 

그림15  TraceOverBeyondTraceRecord 사용방법

 

4.3.2 공유 메모리 인젝션

이 예제에서 사용한 코드 인젝션은 공유 메모리 인젝션입니다. 공유 메모리를 생성한 뒤 자식 프로세스에 공유 메모리를 인젝션합니다. 공유 메모리에 데이터를 수정하면 자식 프로세스에 매핑된 공유 메모리도 수정됩니다.

자식 프로세스에 공유 메모리를 인젝션하기 위해 ZwMapViewOfsection을 사용합니다. tobt트레이싱을 통해 ZwMapViewOfSection함수를 호출한 곳으로 이동합니다. 그리고 함수를 실행하면 자식 프로세스 RegAsm.exe의 0x00400000주소에 공유 메모리가 인젝션된 것을 확인 할 수 있습니다.

* 공유 메모리 인젝션은 악성코드 자신과 자식 프로세스 순으로 실행됩니다. 그러므로 2번째 ZwMapviewOfSection인지 확인하고 자식 프로세스 메모리를 확인하세요.

그림16 자식 프로세스에 공유 메모리 인젝션

 

tobt를 NtResumeThread를 만날 때 까지 실행합니다.

그림17 자식 프로세스를 실행하려는 API함수

 

자식 프로세스의 인젝션된 메모리를 저장합니다. NtResumeThread를 실행하려고 했다는 것은 악성코드 인젝션이 끝나다는 의미입니다.

그림18 공유 메모리 저장

 


5. 인젝션된 악성코드 분석: 2stage

5.1 정적분석

인젝션 된 악성코드는 .NET프로그램입니다.

그림19 시그니처 분석

 

파일을 추출했지만 PE포맷 일부가 잘못 설정되어 있어 IAT가 보이지 않습니다. 악성코드를 동적분석 하기 위해서 PE포맷 일부분을 수정해야 합니다.

그림20 보이지 않은 Imports

 

5.2 PE포맷 복원

PE-Bear를 사용해서 PE포맷을 복원합니다.

PE-Bear에서 악성코드를 열고 Imports를 확인하면 잘못설정을 알리는 빨간색 줄이 보입니다.

그림21 PE-Bear Imports

 

Section Hdrs로 이동합니다. 각 세션의 Raw Addr값을 Virtual Addr값과 똑같이 바꿔줍니다.

그림22 섹션 Raw Addr변경

 

Section Hdrs로 이동합니다. 각 세션의 Raw Addr값을 Virtual Addr값과 똑같이 바꿔줍니다.

그림23 PE포맷 복원 성공

 

복원한 결과를 새로운 파일로 저장합니다.

그림24 복원한 PE포맷 저장

 

5.3 난독화 부분해제

Detect It Easy로 복원한 파일을 확인하면 Confuserex프로텍터로 소스코드가 보호되어 있다는 것을 알 수 있습니다.

그림25 프로텍터 확인

 

dnspy로 복원한 파일을 열면 클래스, 함수 이름 등이 보기 어렵도록 난독화되어 있습니다. 그리고 소스코드 분석을 최대한 어렵게 하기 위해 switch~case문을 사용해서 소스코드 실행흐름을 뒤죽바죽 섞었습니다.

그림26 난독화 확인

 

confuserex프로텍터가 적용된 .NET프로그램은 프로젝트 설명에 Confuserex문자열과 버전이 설명되어 있습니다.

그림27 Confuserex프로텍터 버전 확인

 

난독화 일부분을 보기 쉽게 바꿔보도록 하겠습니다. .NET 난독화를 자동으로 풀어주는 de4dot를 사용할 것입니다. -f인자에 복원한 파일경로를 입력하고 -o인자에 난독화가 해제된 결과를 저장할 파일경로를 적습니다.

그림28 난독화 해제

 

난독화를 푼 파일을 dnspy로 열면 클래스와 함수이름이 보기 좋게 바뀐 것을 확인 할 수 있습니다.

그림29 난독화가 일부해제

 


5.4 샌드박스 분석

 

ATT&CK Matrix페이지에서 Credential Access탭을 확인하면 NirSoft도구를 사용해서 인증정보를 훔쳤다는 메세지가 있습니다. NirSoft에는 주로 포렌식 도구가 많은데 호크아이 악성코드는 웹 브라우저와 이메일에 저장된 계정/비밀번호정보 추출도구를 사용했습니다.

그림30 애니런샌드박스 ATT&CK Matrix Credential Access탭

 

Collection탭에서도 NirSoft도구를 사용한 흔적을 알려줍니다.

그림31 애니런샌드박스 ATT&CK Matrix Collection탭

 

bot[.]whatismyipaddress[.]com과 smtp[.]yandex[.]com에 DNS질의가 발견됩니다.

5.5 동적분석: Nirsoft도구 추출

5.5.1 코드 인젝션

샌드박스에서 자식 프로세스 vbc.exe를 생성하는 것을 알았으므로 CreateProcessW에 브레이크포인트를 설정합니다. 실행하면 CreateProcessW에 멈춥니다. Alt + F9(Run to user code)를 눌러 CreateProcessW를 호출한 곳으로 이동합니다.

자식 프로세스 vbc.exe는 윈도우 정상 프로세스이므로 샌드박스에서 발견한 인증정보 탈취행위를 할 수 없습니다. 반대로 vbc.exe가 NirSoft도구를 사용하기 위해 코드 인젝션이 수행된다는 의미입니다. 코드 인젝션을 수행하기 위해 프로세스는 일시정지 상태입니다.

그림33 일시정지 상태로 실행된 vbc.exe

 

NtWriteVirtualMemory에 브레이크포인트를 설정하고 실행합니다. 스택창을 확인하면 vbc.exe의 0x00400000주소에 코드 인젝션을 수행하는 것을 알 수 있습니다.

그림34 코드 인젝션

 

NtResumeThread에 브레이크포인트를 설정하고 실행하면 0x00400000주소에 쓴 최종 데이터를 확인할 수 있습니다. 데이터를 파일로 추출하고 PE포맷을 복원합니다.

그림35 인젝션 된 최종 데이터

 

PE포맷을 복원하고 실행하면 NirSoft의 WebBroswerPassView가 실행됩니다. 즉, 인젝션된 코드는 WebBroswerPassView이었습니다.

그림36 WebBorswerPassView파일 복원

 

약 1분정도 대기하면 다시 CreateProcessW 브레이크포인트에 멈춥니다. vbc.exe를 다시 실행하고 코드 인젝션을 수행합니다. 2번째 vbc.exe에 인젝션된 코드는 Mail PassView입니다.

그림37 두 번째 프로세스에 인젝션된 코드: Mail PassView

 

5.5.2 설정파일 불러오기

호크아이 악성코드 설정파일은 리소스에 암호화 되어 있고 실행 중에 복호화하여 설정 값을 사용합니다.

dnspy에서 프로젝트 오른쪽 버튼을 클릭하고 Go to EntryPoint를 클릭합니다.

그림38 엔트리포인트 이동

 

15번쨰 줄 if문에 브레이크포인트를 설정하고 실행합니다.

그림39 브레이크포인트 설정과 실행

 

if문에 멈추면 F11을 눌러 함수에 진입합니다. 26번째 줄에서 리소스 RCDATA를 읽고 array변수에 저장합니다.

그림40 리소스 접근

 

변수 array에 저장된 데이터는 56번째 줄에서 복호화되고 array2변수에 저장됩니다.

그림41 데이터 복호화

 

57번째 줄에 breakpoint를 설정하고 실행합니다. 그리고 Locals창에서 array2변수 오른쪽 버튼을 클릭해서 array2데이터를 파일로 저장합니다.

그림42 복호화 된 리소스 저장

 

복호화 알고리즘은 Rijndael입니다. [그림 28]에서 난독화 해제한 소스에서 확인가능합니다.

그림43 복호화 알고리즘

 

추출한 파일을 확인하면 호크아이 악성코드 패밀리 이름(Reborn)과 버전(9.0)등 여러 설정 정보가 있습니다.

그림44 설정파일

 

5.6 기타 행위 추측: 소스코드 분석

GEnum0, GEnum1열거체를 확인하면 클립보드, 키보드, 패스워드, PC정보, 스크린샷, 웹캠, 이메일, FTP정보를 탈취기능이 있다는 것을 추측할 수 있습니다.

그림45 GEnum0, GEnum1열거체

 

GClass33클래스에는 키로거, 클립보드 탈취, 프로세스 생성 등 악성행위와 관련된 API함수 목록이 있습니다.

그림46 GClass33클래스

 

GClass35클래스에는 안티 디버깅, FTP정보 탈취, 이메일 정보 탈취, 봇기능, 파일설치 등과 관련된 필드 목록이 있습니다.

그림47 GClass35클래스


6. 참고자료

https://blog.talosintelligence.com/2019/04/hawkeye-reborn.html

https://www.microsoft.com/security/blog/2018/07/11/hawkeye-keylogger-reborn-v8-an-in-depth-campaign-analysis/

※안랩 2019년 4분기 보고서: https://image.ahnlab.com/file_upload/asecissue_files/ASEC REPORT_vol.97.pdf

※x64dbg tobt: https://help.x64dbg.com/en/latest/commands/tracing/TraceOverBeyondTraceRecord.html

※ x64dbg expressions: https://help.x64dbg.com/en/latest/introduction/Expression-functions.html

※confuserex 보호기능: https://if-else.tistory.com/10

※.NET APPDomain: https://witstudio.tistory.com/20

※ fortinet 분석 보고서1: https://www.fortinet.com/blog/threat-research/the-use-and-abuse-of-dotnet-files-and-the-value-of-fortresponder-automation-in-threat-analysis

※ fortinet 분석 보고서2 https://www.fortinet.com/blog/threat-research/hawkeye-malware-analysis

반응형