이벤트 로그를 통한 HWP APT 공격 파악 

우리나라는 한글과 컴퓨터 회사에서 만든 한컴오피스를 공공기관부터 시작 해 일반 사용자들까지 굉장히 많이 쓰고 있어, 공격자들에게 공격 타겟으로 많이 설정되어 공격을 당하곤 한다. 한컴 오피스에서 특히 '한컴오피스 한글'은 많은 해커들에게 공격 타겟이 되곤 하는데, 얼마전부터는 특정 대상을 공격하는데도 '한컴오피스 한글'의 제로데이 취약점이 이용되기도 하였다.

해당 글에서는 윈도우에서 지원하는 로깅인 이벤트 로그에서 APT 공격 또는 악성코드 공격에 해당하는 이벤트 로그를 살펴볼까 한다.

본글에서 이루어진 작업들은 모두 Windows 7 32bit Enterprise, 한컴오피스 한글 2010에서 진행되었으면, 공격에 사용 된 샘플은 실제로 배포 되었던 '북한방송 주요논조.hwp' 파일로 진행 하였다.

해당 글에서 중점적으로 볼 부분은 '공격의 시점'과 '공격의 유무 판단'이다. 정확히 언제 어떤 부분을 통해 공격이 진행 되었는지 파악해 보고자 한다.

사용자가 공격 샘플을 정상 파일로 오인하고 실행을 하게 되면, 한글 문서가 열리며 공격은 시작하게 된다. 공격이 시작되면 다음과 같은 이벤트로그 카테고리에 흔적이 남게 된다.

 

[Application and Service Logs\Microsoft\Microsoft\Windows\WER-Diagnostics\Operational]

 공격의 판단을 어떻게 해야 할까? WER-Diagnostics\Operational 로그에서 Event ID 2에 해당하는 로그는 힙의 손상을 알려주는 로그이다. 대부분의 한글 문서를 이용한 APT 공격은 힙 메모리 취약점을 기반으로 하기 때문에 취약점을 이용한 공격이 이루어질 때에는 heap overflow 기법을 사용하게 된다. 이 때 힙의 손상이 일어나게 되면 윈도우는 이를 catch하여 이벤트 로깅을 수행한다.

Event ID 2
[그림 1] – Event ID 2

 이벤트 로그가 기록 된 날짜가 공격이 시작 된 시점이라고 볼 수 있다.

 

[Application(응용 프로그램)]

Event ID 1000
[그림 2] – Event ID 1000

 Event ID 1000은 Window Application Error 로그로 공격자의 공격이 완벽하게 끝날 경우 남지 않을 수 있는 로그이다. 하지만, 사용자마다 환경이 다양하고 설정이 다양하기 때문에 공격자가 완벽하게 공격을 끝내기란 쉽지 않기 때문에 해당 로그도 눈여겨 볼만하다. 해당 이벤트 로그에서는 공격 당한 응용 프로그램의 이름, 응용 프로그램 시작 시간등을 알 수 있다. 응용 프로그램의 시작 시간은 NTFS FileTime(Big Endian) 타입이다.

Event ID 1001
[그림 3] – Event ID 1001

[그림 3]에서 보이는 Event ID 1001은 WER(Windows Error Reporting) 정보이다. 프로세스 충돌이나 에러와 관련 된 정보들이 기록되어 있으며, 프로세스가 정상적으로 종료 될 때에는 남지 않는다. 공격을 당했다는 사실을 뒷받침 할 수 있는 참고용으로 보면 된다.

Event ID 3001
[그림 4] – Event ID 3001

Event ID 3001은 프로세스간의 관계를 보여준다. 간혹 다른 프로세스에서 다른 프로세스를 Kill하는 경우가 있는데 이때 프로세스는 강제적으로 종료 된 것이므로 exit가 아닌 Terminate 상태를 가지게 되고 윈도우는 이를 이벤트 로그로 남긴다. 하지만, 해당 이벤트 로그는 윈도우에서 기본으로 남기는 이벤트 로그가 아니며, Silent Process Exit Monitoring 설정을 통해 남기게끔 해야 한다. 설정은 두 가지 방법이 있다. 첫 번째로 레지스트리를 이용하는 방법, 두 번째로 도구를 이용한 방법이 있다.

레지스트리를 이용하는 방법은 아래의 레지스트리 경로로 접근 해 GlobalFlag(REG_DWORD) 값을 생성하여 0x200으로 설정하여 주면 된다.

키 : HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\ProcessName\GlobalFlag
값 : 0x200

또 다른 방법으로는 도구를 이용하는 방법이 있다. 도구는 Windows Debugging 툴을 설치하면 gflag.exe 라는 도구가 있는데, 해당 도구를 통해 설정을 하면 된다. 해당 도구의 자세한 사용법은 여기를 참고하기 바란다

참고로 해당 이벤트로그 카테고리에는 Event ID 3000 로그도 남는다. 해당 로그는 프로세스의 생성 시간, 종료 타입, 종료 시간을 담고 있는데, 프로세스의 타입을 파악하면 프로세스가 시스템에 의한 종료 또는 사용자에 의한 종료인지 프로파일링이 가능하다.

 

[Security(보안)]

간혹 취약점을 이용하는 공격은 권한을 상승하는 행위도 한다. 이때 권한에 관한 이벤트 로그는 Security 카테고리에 남는다.

Event ID 4624
[그림 5] – Event ID 4624

 해당 로그는 계정 로그온에 관한 이벤트 로그인데, 강제적인 권한 상승에도 해당 로그가 남는다. [그림 5]에서 보는 로그도 공격 샘플이 강제적으로 탈취한 SYSTEM 권한이다. 이 다음으로 해당 계정에 부여 된 여러가지 권한들을 보여주는 Event ID 4672가 곧바로 생성 된다.

 

[시간 연속성을 이용한 분석]

하나의 이벤트 로그로만 본다면 공격이란 것을 파악 할 수 없지만, 시간 연속성을 이용 해 분석 해 보면 공격의 특정한 시점과 흐름을 파악 할 수 있다. 다음은 공격 샘플의 흔적들을 시간 순으로 정리 해본 것이다.

1. 문서 파일 실행(프로세스 생성) : 2014-04-04 04:57:18
2. heap overflow 발생(공격의 시작) : 2014-04-04 오후 04:57:24
3. 권한 상승 : 2014-04-04 오후 4:57:24
4. 응용 프로그램 오류(공격 실패) : 2014-04-04 오후 4:57:24
5. 프로세스 종료 : 2014-04-04 오후 4:57:33

 만약 공격 샘플의 공격이 성공하였다면, 4번 대신 프로세스 생성의 이벤트 로그(Event ID 592)가 있을 수 있다. 3번과 4번은 초까지의 시간이 같아 순서를 정확히 알 수 없지만, 공격의 흐름을 생각 해 보면 권한 상승 후 프로세스 생성 또는 파일 생성 등의 악성행위를 하려 할 때 응용 프로그램의 취약한 모듈과 환경의 영향으로 응용 프로그램이 예기치 않게 종료되는 것이 상식적으로 더 맞아 위와 같이 배치하였다.

한글 문서를 대상으로 살펴보았지만, MS Office 군도 세계적으로 많은 취약점이 발견되고 사용된다. MS Office는 Windows와 같은 회사에서 탄생한 제품이기 때문에 이벤트 로그내에 따로 MS Office의 이벤트 로그만 남겨지는 곳이 있다.

경로 : Application and Service Logs\Microsoft Office Sessions

위 경로로 들어가면 MS Office 군의 비정상적인 종료와 관련 된 로그를 볼 수 있어, 해당 로그와 위에서 소개 된 여러 로그들을 토대로 공격의 판단/시점등을 파악 할 수 있다.

 

[결론]

APT가 정교한 공격이라고는 하지만, 악성코드 제작자 대부분은 모든 환경을 고려해서 악성코드를 제작하지 않는다. 그러므로 위에서 소개 된 여러 이벤트 로그들이 충분히 남을 수 있고, 해당 이벤트 로그들을 통해 공격의 여러가지 정보들을 파악 할 수 있다. 때에 따라 필요한 이벤트 로그가 Windows의 기본 설정으로 되어 있지 않아 남지 않을 수 있으므로 사전에 필요한 이벤트 로그들을 체크하여 대비를 해 두는 것이 좋다고 생각한다.