동석 분석 단계
- 클린 샷으로 복원 : 가상머신을 클린 상태로 복원하는 작업
- 모니터링/동적 분석 도구 실행 : 악성코드 샘플 실행 전, 모니터링 도구를 실행한다. 관리자 권한으로 실행해야 한다.
- 악성코드 샘플 실행 : 관리자 권한으로 악성코드 샘플을 실행한다.
- 모니터링 도구 종료 : 악성코드 바이너리를 일정 시간 동안 실행한 후 종료한다.
- 결과 분석 : 모니터링 도구에서 데이터/리포트를 수집하고 분석해 악성코드의 행위와 기능을 확인한다.
1. 랩 환경
리눅스 VM
- IP : 192.168.1.100
윈도우 VM
- IP : 192.168.1.x(책을 따라 192.168.1.50으로 설정함)
- Gw : 192.168.1.100
- Dns : 192.168.1.100
감염되지 않도록 격리된 환경 사용.
2. 도구 실행, 악성코드 샘플 실행
- 프로세스 해커(systeminformer) : 시스템 리소스를 모니터링. 악성코드 샘플 실행 시 프로세스 해커로 새롭게 생성한 악성코드 프로세스 식별 가능.
- 프로세스 모니터 : 프로세스 활동의 실시간 상호작용을 보여줌. 이벤트 캡처 중지를 위해 Ctrl+E를 눌러야 한다. 모든 이벤트 지우려면 Ctrl+X를 누른다.
- inetsim
- wireshark
위의 모니터링/동적 분석 도구를 모두 실행해두고 악성코드를 실행한다.
<악성코드 실행 후 결과 분석>
LummaStealer.exe가 WerFault.exe 실행 -> LummaStealer가 예외 발생으로 죽음. 따로 종료하지 않아도 프로세스 모니터에서 자꾸 사라지고 종료됐던 이유..
svchost.exe는 FontCache 관련 작업 -> FontCache는 시스템 폰트 렌더링 캐시
WerFault.exe는 크래시 덤프 파일, 보고 큐, 로그 등을 수집하려고 에러 리포트 경로에 파일/폴더 생성 -> 정상적으로 프로그램이 죽었을 때 시스템이 처리하는 로직
*크래시 덤프 : 프로그램이 비정상적으로 종료되었을 때, 원인 파악을 위해 시스템 메모리를 저장하는 것.
svchost.exe : Delivery Optimization(Windows Update와 관련한 전송 최적화 기능) 관리하는 서비스
ctfmon.exe : 입력기, 키보드 입력 추적기와 연관, 윈도우 자체 기능
msedgewebview2.exe : 윈도우에서 백그라운드 앱의 실행 여부, 전력 소비 추적 등을 위한 레지스트리
Explorer.EXE : 작업 표시줄 검색창 보이게 설정 등..
svchost.exe -> DNS 요청
msedgewebview2.exe -> DNS 요청
System -> NetBIOS/SMB 브로드 캐스트
egiftshop.guru : guru는 스팸/피싱에 자주 사용됨. LummaStealer가 내부적으로 C2 확인용으로 요청했을 가능성 높음. -> 포트가 열려있지 않아 실패.
그 외의 로그들은 LummaStealer와의 직접적 연관성 찾지 못함. -> 수상했던 egiftshop.guru 로그 추적하기.
egiftshop.guru의 요청이 반복적이지만 여전히 ICMP Destination Unreachable 반복됨. -> 유의미한 결과X..
->분석 결과 악성 행위를 하지 못하고 죽은 상황으로 보임. 정상 프로그램으로 위장한 거라기엔 아무런 일도 일어나지 않았고, 조건이 안 맞으면 죽는 타입으로 추정됨.
일단 네트워크 연결을 차단했기 때문에 C2 연결이 실패한 것이 문제로 보인다. (정적분석, 동적분석 모두에서 C2 연결한다는 정보를 얻었으므로)
PID를 기반으로 각 프로세스를 면밀히 조사해 본다.
우선 LummaStealer의 자식 프로세스인 WerFault.exe를 조사해 보자.
WerFault.exe:6724 -> LummaStealer 자식 프로세스로 추정,
PPID : 6468
PID : 3940
실행해 보니까 WerFault가 여러 단계로 실행되어서 PID 정보가 약간씩 다르게 나오고, 여러 개의 WerFault 중 하나의 WerFault 속성을 살펴봤다.
parent console : svchost.exe (3284)
parent process : LummaStealer.exe (2828)
-> LummaStealer가 WerFault를 직접 실행한 것을 확인할 수 있고, svchost는 주체적 실행자가 아님. 이후 이 WerFault가 생성해낸 파일을 추적해야 한다.
그런데 PID가 3836인 WerFault를 노리벤 로그에서 확인할 수 없었다. 필터링에 걸린 것일 수 있기 때문에 프로세스 모니터를 단독 실행해 본다. Process name을 WerFault로 필터 설정해 검색해 본다. (다만 프로세스 모니터를 단독 실행하면서, 악성코드를 새로 실행했고 PID는 동적할당되기 때문에, 바뀌어서... 3836에 대한 제대로 된 확인은 어려웠음. -> 근데 PID가 812인 WerFault만 떠서 해당 WerFault 분석 진행함.)
C:\ProgramData\Microsoft\Windows\WER\Temp\WERD1A0.tmp 경로의 CreateFile : Error Reporting 에서 만드는 일시적 덤프 또는 리포트 구성 요소.
-> 이 경로만 추려서 필터링을 걸어본다.
이런 식으로 확인했는데, WriteFile은 없음. -> 그리고 SetDispositionInformationFile이 삭제를 예약함(Delete 동작 대체). -> 크래시 시도 흔적이지만 리포트 생성은 실패.
한 번 WriteFile 필터를 걸어 파일 생성에 성공한 조합을 찾아본다.
C:\ProgramData\Microsoft\Windows\WER\Temp\WERD1A0.tmp.dmp -> WriteFile을 검색해 보니, 위의 경로에 .dmp를 추가한 경로에서 발견됐다. -> 메모리 덤프를 쓴 흔적.
해당 경로를 검색하면 역시 SetDispositionInformationFile이 있어서 덤프 파일이 지워진 것으로 추정됐다.
파일이 삭제되어 제대로 된 분석은 어려우나 Offset넘버와 길이로 얼마나 기록했는지라도 알아본다. -> WriteFile이 너무 많아서 마지막 WriteFile의 속성만 확인했다.
Offset : 32
Length : 120
어쨌거나 조건을 충족시키는 게 아니면 파일 확보가 불가능해서, WerFault 분석은 더이상 의미가 없어 보였다. 다음으로는 svchost를 분석해 본다.
(조건이 네트워크 연결을 필요로 하는 것으로 추정된다 C2 서버에 연결해야 하기 때문이다. 다만 이 경우 감염 위험이 있어서 시도하지 않았다.)
svchost의 pid가 여러 개니까, 악성코드가 악용한 svchost를 한 번 추려본다. svchost는 악성코드를 숨기기 쉽고 프로세스 수가 많기 때문에 인젝션 타깃으로 흔하게 사용되기 때문이다.
이것의 경우 위에서 확인했던 노리벤 파일을 기반으로 검색해 본다.
WerFault의 부모였던 svchost를 분석할 것이다. 6408을 키워드로 해서 검색해 봤다. (-pss 인자 수상함. -> 공식 문서에 없는 부분이라서.)
여기에는 수상한 점이 없었다. 그래서 이 svchost가 만들어낸 PID 320을 추정해본다..
사진에 나오는 로그가 다인데, CreateFile, CloseFile, DeleteFile도 없는데 파일이 존재하지 않는 상태로 끝남. 이것 자체만 보면, 노리벤을 빨리 종료해서 나오는 문제일 수도 있다. 하지만 일찍 종료했다면 File no longer exists로 나오는 게 수상하다.. (DeleteFile이 나오기 전이니까 기록 시점에 File no longer이 나오는 게 수상하다.)
-> 이것은 LummaStealer의 충돌로 자동 생성된 게 아니라, 실행 조건 회피를 위해 껍데기만 실행한 흐름일 가능성이 높다. 즉, 위장 실행이라는 것.
그래서 LummaStealer를 IDA에서 열어 CreateProcess("werfault.exe", ...)와 같은 코드가 적혀 있는지 확인해 본다.
따로 strings에서 검색해 봤지만 뜨지는 않았는데, 이것은 사진처럼 m_44d290be534548e..와 같은 형태로 문자열 난독화가 되어 있어서 확인을 제대로 하기 어려웠다.
<정리>
-Lumma Stealer 실행 및 자식 프로세스 다수 생성 -> 분석 조건 체크 or 위장 목적
-C2 서버에 연결 요청 (DNS Query 요청 등)
-svchost.exe가 werfault.exe 실행 -> 분석 회피용으로 추정
-RegSetValue 정보 수집 루틴 가능성 (레지스트리 접근)
정적 분석으로 코드를 조금 더 분석해 보면 좋을 것 같다.
'보안 > 악성코드' 카테고리의 다른 글
[6장]악의적인 바이너리 디버깅 (0) | 2025.05.13 |
---|---|
LummaStealer 악성코드 정적분석 (0) | 2025.05.07 |
[4장]어셈블리 언어와 디스어셈블리 기초 (0) | 2025.05.06 |
[3장]동적 분석 (0) | 2025.04.08 |
[2장]정적 분석 (0) | 2025.04.01 |