Havex 악성코드 실행 시 흔적 연구

얼마 전 유럽의 스카다 시스템을 공격한 Havex 악성코드에 대한 기사가 해외에서 처음으로 보도가 되었는데, 이전에 해외에서 취약점 공격에 대한 아티팩트를 정리한 포스팅 글을 보고 특정 악성코드나 취약점 공격의 아티팩트 정리의 필요성을 느껴 샘플을 아는 지인분을 통해 구한 후 포렌식 아티팩트들을 다음과 같이 정리하여 보았다.

다음 아티팩트들은 기존에 남겨지는 일반적인 아티팩트들이 아닌, 해당 악성코드가 특이하게 남기는 아티팩트들인 것을 알아두기 바란다.

 

[Live Data]

라이브 데이터에서는 프로세스의 목록과 악성코드의 동작을 파악할 수 있다. 실제 악성코드의 동작을 하는 'mdCHECK.dll'은 'rundll32.exe' 프로세스에 의해 동작하며, 정상 프로그램의 위장을 위해 'mbCHECK.exe' 파일이 드랍되어 실행 중인 것을 파악 할 수 있었으며, 악성 프로세스의 상세정보도 파악 할 수 있다.

LiveData

[그림 1 – 프로세스 명령 라이브 데이터]

mbcheck

[그림 2 – mbCHECK.exe 프로세스의 상세정보]

 

[Prefetch]

프리패치 정보에서는 프로세스의 상하관계를 확인 할 수 있다.

mbcheck

[그림 3 – 프리패치 마지막 실행 시간]

프리패치의 마지막 실행 시간을 정렬하여 보면, 먼저 드롭퍼의 실행이 있었고, 'mbCHECK.dll'의 실행, 마지막으로 'mbCHECK.exe' 프로세스가 실행이 된다. 실행의 순서는 알 수 있지만 드랍의 순서까지는 파악할 수 없다는 것이 단점이다.

 

[Timeline]

타임라인에서는 앞에서 확인하였던 사항을 제외하고 기타 다른 생성 파일들의 생성을 확인할 수 있었다.

timeline1

[그림 4 – 타임라인 흔적 1]

timeline2

[그림 5 – 타임라인 흔적 2]

새로운 파일의 생성 흔적을 확인할 수 있었지만, 생성의 순서는 모두 동일한 초 시간대에 일어났기 때문에 정확한 순서는 파악 할 수 없다.

 

[NTFS Log]

파일시스템 로그에서는 다음과 같이 다른 흔적들에게서 발견하지 못한 새로운 파일의 생성흔적을 발견할 수 있었다.

 

log

[그림 6 – 파일시스템 로그 흔적]

 

해당 파일은 생성과 동시에 바로 삭제되는 특이한 점을 상황을 연출한다. 또 테스트한 Case에서는 바로 삭제되어서인지 $MFT 레코드가 바로 덮어씌어지고 클러스터 또한 바로 할당에서 비할당으로 바뀌어 데이터가 남아 있지 않아 복구를 하지 못하였다. 하지만, 이는 Case by Case이기 때문에 운이 좋다면 복구를 할 수 있을 것이다. $MFT 레코드가 삭제되어 해당 파일이 어디에 생성되는지 확인 할 수 없었다는 것이 이번 흔적에서의 아쉬운 점이라고 말할 수 있다.

 

[Memory]

메모리는 라이브 데이터와 대부분 동일한 흔적을 보여주지만, 데이터를 직접 얻을 수 있는 장점이 있다. 메모리에서는 운이 좋다면 이미 삭제된 레코드가 있는 $MFT를 추출 할 수 있다. 이번 Case에서도 파일시스템 로그나 라이브 데이터를 수집하며 같이 수집했던 $MFT에서 찾아볼 수 없었던 'System.dll'의 레코드를 획득할 수 있었다.

mft

[그림 7 – 메모리에서 복구한 $MFT의 ‘System.dll’ 레코드]

추가적으로 메모리 덤프 당시의 윈도우 쉘 상태를 파악 할 수 있다.

screen

[그림 8 – 윈도우 쉘 스크린 캡쳐]

 

[정리]

Havex 악성코드의 흔적을 정리하면 다음과 같다.

1. 'mbCHECK'.exe와 'mbCHECK.dll'을 Drop

2. 'rundll32.exe'를 이용하여 'mbCHECK.dll'을 실행

3. 'qln.dbx' 파일을 Drop

4. '%UserName%\AppData\Temp\' 폴더 아래에 난수로 된 '.tmp'와 '.YLS' 확장자 파일을 생성

5. '%UserName%\AppData\Temp\<랜덤문자열>\' 폴더 아래에 'System.dll' 파일 생성 및 삭제

이를 IOC 포맷으로 정리하여 보았다. Havex IOC는 다음과 같다.

ioc

[그림 9 – Havex IOC]

해당 IOC는 아직 완벽하지 못하다. 랜덤 문자열의 경로를 IOC로 표현할 수 있는지 불확실하기 때문에 IOC에 해당 항목을 추가하지 못하였다. 이는 추후 파악 후 추가할 예정이다.