작년 EnFuse Conference 참석에 이어 올해는 Techno Conference에 참석하였다. Techno Conference는 얼마 전까지 모바일 보안을 주제로 컨퍼런스를 운영 하다가 현재는 보안과 디지털 포렌식을 주제로 변경하여 행사를 개최하고 있다.

 

 Techno Conference는 6월 3-7일 동안 여러 세션을 운영하며 참석자가 듣고 싶은 세션을 선택해 들을 수 있도록 EnFuse와 마찬가지로 컨퍼런스 일정 동안 스케줄 관리 앱을 제공한다. 제공되는 앱은 스케줄 관리 뿐만 아니라, 발표자료 보기, 중요 이벤트 알림 등의 기능이 부가적으로 있어 컨퍼런스 일정 동안 아주 편리하게 사용할 수 있다.



 떠나기 전 발표 주제를 살피며(EnFuse보다 기술적이라는 이야기를 듣고) 큰 기대를 안고 6월 3일날 인천 공항으로 향하였다. 


# Techno2017 Conference 0 Day

 여행과 컨퍼런스의 부푼 설렘을 안고 인천공항에 도착했을 때부터 나는 사실 조금 정신이 없었다. 작년 EnFuse Conference에 갈 때와는 달리 셀프 체크인을 해야 했다. 그런데, 셀프 체크인을 할 떄 전혀 입력해보지 않았던 목적지 주소와 방문 목적 등을 입력하라는 것에 조금 어리버리하여 출국 수속이 예상보다 늦어졌었다. 그리고 행사 장소는 South Carolina에 위치하고 있는 머틀비치인데, 직항이 없어 애틀란타를 거쳐 가야했다. 근데 셀프 체크인에서는 애틀란타까지만 가는 티켓을 출력해주는 것이 아닌가.. 셀프 체크인으로 반절의 출국수속만 한 나는 짐을 보내기 위해 1시간을 대기하고 머틀비치행 비행기를 애틀란타 비행기와 연결 시키기 위해 20분 대기했다. 또 주말이라 사람은 어찌나 많던지... 오전 9시 40분 비행기여서 아침 7시에 도착했는데, 출국과 입국으로 뒤섞인 사람들이 굉장히 많아 이래저래 아침부터 정신이 없는 하루였다.


 출국 수속을 마치고 면세점 라인으로 들어서 동생 선물을 찾고 나서야 조금 여유를 찾을 수 있었다. 여유를 찾은 뒤, 나는 간단하게 아침 요기를 하고 나서 미국행 비행기에 몸을 실어 비로소 컨퍼런스 참석을 위해 한국을 떠났다.





 13시간의 비행을 마치고 애틀란타 공항에 도착했을 때 시간은 점심시간을 막 지나고 있었다. 그래서 점심을 먹기 위해 이리저리 공항을 돌아다니던 중 미국에서 유명하다는 FIVE GUYS 버거집을 발견해 버거를 먹었다. 역시는 역시! 외국 애들은 너무 짜게 먹는 것 같다 ㅠ.ㅠ 해외 출장이나 여행을 다닐 때마다 느끼는거지만 왜 우리나라만 짜게 먹는다고 경고를 주는지 모르겠다. 본인들이 훨씬 짜게 먹으면서 ...


 점심을 먹고 머틀비치행 비행기를 기다리는데 출발시각이 임박 했는데도 게이트가 열리지 않았다. 결국 게이트는 출발시간보다 1시간 늦게 열렸다. 원래 이들은 섬세하지 못한걸까, 게이트가 왜 늦게 열리는지 늦게 열리는 이야기를 말해주지 않는다 ㅡㅡ 정말 언제 열릴지 모르고 계속 앉아 있다 게이트를 잘못 알았었나 하는 착각까지 했었다.


 나는 그렇게 우여곡절 끝에 머틀비치행에 올랐다. 애틀란타에서 머틀비치까지는 1시간 남짓 걸린 것 같다. 비행기에 타자마자 잠에 빠져 내릴 때 깨 사실 나는 체감상 1분 정도 걸린 것 같다 ㅋ


 머틀비치에 도착해 별탈 없이 택시를 타고 호텔까지 왔다. 그런데, 호텔 방에 있어야 할 것이 없었다. 미니바에 물이 없었다 ㅡㅡ 원래 미국은 호텔에서 물을 제공하지 않는다고 하는데 아직도 이건 조금 납득이 가지 않는다. 기본적인 것들을 제공하지 않는 호텔이라니.. 모텔보다 못한 것 같다. 결국 대표님과 나는 물도 사고 저녁도 먹을 겸 호텔 근처 마트를 갔다. 말이 근처지 걸어서 15분 걸어가야 한다. 호텔 근처에는 숲 밖에 없더라 하...


 이것저것 장을 보고(내가 맥주를 사려고 계산대에 올리니까 아주머니가 미성년자는 안돼욧! 이라고 하던데 흐뭇.. ^^) 마트 근처에 있는 Subway에서 샌드위치로 저녁을 해결하려 하는데, Subway 알바생이 영어를 버벅일 때마다 얼마나 한숨을 쉬던지 때릴 뻔 ㅎ 어쨋든 샌드위치는 양이 많은 것 빼고 나름 만족스러웠다.


 저녁도 해결하고 호텔로 들어온 나는 침대에 곧바로 쓰러져 컨퍼런스 전날을 마무리 했다.




# Techno2017 Conference 1 Day

 드디어 컨퍼런스 첫날이 밝았다. 컨퍼런스 첫날은 가볍게 시작하는 느낌이었다. 세션이 다른 날은 오전부터 꽉꽉 차 있었는데, 첫날은 여유롭게 오후부터 시작하였다. 오후부터 시작하는 이유는 여러가지가 있겠지만, 해외에서 온 손님들을 위한 운영진의 배려라 믿고 싶다. ㅋㅋㅋ


 어찌됐건 점심을 전날 갔던 Subway에서 해결(어제 그놈은 없었다)하고 컨퍼런스 등록을 하러 등록대로 향했다. 컨퍼런스 등록대는 EnFuse와 비교했을 때 조금 작은 느낌이었다. 이때부터 직감했다. Techno Conference 규모를 ㅠ



나는 위 사진에 나온 곳이 컨퍼런스 메인 홀인줄 알았다. 근데 아니었다 ㄷㄷ



위 사진이 바로 등록대!! 등록하는 사람들은 많은데 등록을 받는 인원은 달랑 3명 ㅎ



 나는 한국에서 출발할 때 로밍을 하지 않았다. 요즘 와이파이가 워낙 많아서 '와이파이 잡아야지~' 라는 마음이었다. 역시나 컨퍼런스 주최측에서 컨퍼런스 전용 와이파이를 제공해줬다. 근데 Access Code를 요구하는게 아닌가!! 처음에는 챌린지인줄 알고 이리저리 찔러보았다. 결국 등록대에 물어봤는데, 등록대에서 알려준 코드도 맞지 않았다. 그래서 결국 게싱해서 컨퍼런스 와이파이를 조금이나마 혼자 사용했다(다른 사람들도 등록대에 Access Code를 물어보고 접속이 안되 포기했었다고 한다) :-)


 이제부턴 컨퍼런스 첫날에 들었던 세션에 대해 간략한 소개와 느낀점을 적어볼까 한다.



1. Digital Intelligence - Information at the Speed of Life

 Digital intelligence라는 용어를 나는 여기와서 처음 들어봤다. 물론 용어는 만들기 나름이지만, 나중에 여러 세션을 들어보고 나니 해외에선 Digital Intelligence, Digital Investigation 등의 용어가 일반화 되어 있는 것 같았다. 무튼 이번 발표 세션은 소셜 네트워크 정보 프로파일링 해 수사에 활용하는 방안을 소개했다. 발표자는 소셜 네트워크 정보를 프로파일링 하기 위해서는 4가지의 정보가 필요하다고 한다.


 - Content : 사용자가 무엇을 말하는가?

 - User : 화자는 누구인가?

 - Time : 언제 말하였는가?

 - Location : 어디서 말하였는가?


위 4가지 정보를 소셜 네트워크에서 수집하고 가공하여 이를 프로파일링 한다는 것이 주된 주장이었다. 실제 사례로 Anonymous 멤버 검거 사례를 이야기해 개인적으로 재밌게 들었던 세션이다.





2. Ransomware! What's Bitcoin Have to Do With it?

 이번에 소개할 세션은 랜섬웨어를 주제로 한 세션이다. 개인적으로 기대가 많이된 세션이었는데, 실제 내용은 기대에 부흥하지 못해 굉장히 실망한 세션 중에 하나였다. 랜섬웨어가 비트코인을 이용하는 목적 등의 철학적(?), 경제학적(?) 관점이 나올 줄 알았는데 워너크라이가 어쩌고.. 랜섬웨어 역사가 어쩌고.. 하는 이야기가 나왔다 ㅠㅠ 내용도 기술적인 면이 없고 개론 수준의 발표여서 아쉬워하고 있던 찰나에 본인 회사의 솔루션을 소개하는 바람에 발표는 완전 실망이었다. 





3. Windows Memory Investigation

 내가 너무 기대를 많이 했던 걸까. 두 번째 세션에 이어 이번 세션도 많은 실망을 하고야 말았다. 나는 Investigation 용어를 붙여놨길래 기존 메모리 포렌식을 수사관점으로 바라봐 의미있는 데이터를 추출하고 분석 노하우를 알려주는 줄 알았다. 근데 내기 기존에 강의하는 수준에도 못미치는 내용을 발표하더라 ㅠ 그래서 중간에 듣다가 나와버렸다 . 내용은 메모리 분류, 가상주소와 물리주소의 맵핑 정도만 소개하고 본인 회사에서 만든 도구를 소개해주면 사용하라는 식이었다. 더군다나 발표자가 본인이 만든 발표자료 같지 않았다. 발표 내용을 버벅이는걸 보고 내가 다 불쌍했다. 발표를 계속 듣기엔 시간도 아깝고 너무 피곤해서 그대로 호텔방에 와 잠들어버렸다.



저작자 표시 비영리 변경 금지
신고

F-INSIGHT에서 발표했던 발표자료입니다.



Deep in the artifacts #1.pdf


저작자 표시 비영리 변경 금지
신고
  1. 오정훈 2017.03.13 19:28 신고

    좋은 자료 감사합니다~^^

  2. nill 2017.04.05 17:20 신고

    좋은자료감사합니다
    uuid가 레지스트리에 존재하나요?
    아무리 찾아도 없네요;;

    • Favicon of http://maj3sty.tistory.com BlogIcon MaJ3stY 2017.04.07 17:58 신고

      UUID 형태의 값들은 많이 존재하지만, UUID라고 명확하게 명시되어 있는 단일 값은 존재하지 않습니다.

- 파이썬으로 파일시스템 깊이 있게 분석하기 -1-(http://maj3sty.tistory.com/1115)


이전 글에서는 이미지(Raw 포맷)에 접근하여 볼륨 정보 등을 얻어내는 작업을 해보았다. 이번에는 실제 파이썬 스크립트가 실행되는 로컬 환경 볼륨에 접근하는 방법을 살펴보자.


이미지 파일은 파일이기 때문에 파일 오픈 핸들을 pytsk3 모듈에 입력해 주면 됐지만 로컬 환경은 장치 핸들을 pytsk3 모듈에 입력을 해주어야 한다. 장치와 파일의 차이는 크지만, 코드는 이전 코드와 많이 다르지 않다. 아래 코드는 글쓴이의 가상환경에서 작성한 파이썬 스크립트와 실행 결과이다.




이번에는 NTFS 파일시스템 2개 존재하는 것을 확인할 수 있다. 로컬 환경과 이미지 파일은 접근하는 대상만 다를 뿐 다루는 방법은 동일하다는 것을 알 수 있다. 위 소스코드는 아래 첨부해 두었으니 한번 확인해 보기 바란다.


Day2.zip


저작자 표시 비영리 변경 금지
신고

디지털 포렌식에서는 기본으로 다뤄야 할 부분이 파일시스템이다. 휘발성 데이터 뿐만 아니라 비휘발성 데이터까지 모두 파일시스템에 저장되기 때문에 실제 업무에서나 챌린지 문제 풀이에서나 파일시스템 분석은 중요하다고 볼 수 있다.


그래서, 시간이 되는대로 파이썬으로 파일시스템을 다뤄보는 글을 쓸 예정이다. 언어는 사람들이 쉽게 가장 많이 쓰는 파이썬(파이썬 언어 자체의 설명은 생략한다.)으로 하여 파일시스템 이미지 포맷인 E01과 Raw 포맷을 대상으로 여러가지 분석을 할 수 있는 코드를 작성해보고 해당 소스코드는 제공할 생각이다.


일단 먼저, 파이썬 모듈이 필요하다. 우리가 주로 사용할 모듈은 파일시스템을 분석해 주는 'pytsk' 모듈이다. 각 모듈에 대한 설명은 다음과 같다.


 - pytsk : pytsk 모듈은 SluethKit과 Autopsy의 파이썬 버전이라고 생각하면 된다. 여러 운영체제의 파일시스템 분석을 지원하는 아주 유용한 툴이다. 분석 기능이 많아 사용법은 조금 까다롭다. 해당 모듈의 사용법 또한 소스코드를 작성하며 알아보도록 하자.


pytsk3-4.1.3-20140506.win32-py2.7.msi


각 모듈의 설치는 쉬우므로 설명을 생략하도록 하겠다.



소스코드 작성 환경은 다음과 같다.

 - 운영체제 : Windows 7 / 8 32/64bit

 - 파이썬 버전 : Python 2.7 32bit

 - 에디터 : PyCharm 4.x


[이미지 파일 접근 해보기]

이미지 파일은 이미지 대상 크기와 이미지 파일 포맷에 따라 처리하는 방법이 다르다. 일단 처음이니 만큼 용량이 작은 Raw 포맷을 대상으로 처리 방법을 알아보자. 모듈이 설치 되었다면 아래와 같이 'pytsk3' 모듈을 import 하여 사용하면 된다.



볼륨 파싱이 완료되면 볼륨 정보를 가지고 있는 클래스 개체 하나를 반환하며, 각 클래스 개체는 Property 함수로 필요한 데이터를 반환하도록 되어 있다. 소스코드에 나온 정보 말고도 다양한 정보가 있으니 각자 확인해보도록 하자. 스크립트를 실행하면 결과는 다음과 같다.




출력을 보면 4개의 결과가 나왔지만, "Primary Table"과 "Unallocated" 항목을 제외하면 "NTFS" 파일시스템 하나만 있는 것을 확인할 수 있다. 그러므로 해당 파일시스템을 타겟팅하여 분석을 진행해 나가면 된다.


해당 소스코드와 프로젝트는 아래에 첨부하여 두었다.


Day 1.zip


저작자 표시 비영리 변경 금지
신고

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


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


[Live Data]

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


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


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


[Prefetch]

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


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


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


[Timeline]

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


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


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


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


[NTFS Log]

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


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


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


[Memory]

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


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


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



[그림 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는 다음과 같다.


[그림 9 - Havex IOC]


Havex.ioc


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



저작자 표시 비영리 변경 금지
신고

'[+] Forensic' 카테고리의 다른 글

[Tool] Windows JumpList Analysis Tool  (0) 2014.08.11
[Tool] Windows Link Analysis Tool  (0) 2014.08.11
[정리] Havex Artifacts  (0) 2014.06.30
[정리] TrueCrypt Forensics  (4) 2014.06.14
Advanced Jump List Forensics  (0) 2014.05.10

+ Recent posts