활성데이터 수집 시 윈도우 Vista/7에서 고려할 점 (A point to be considered in live forensics)
윈도우 Vista/7에서 시스템의 주요 폴더에 있는 시스템 명령 파일을 다른 위치로 옮겨본 경험이 있는가? 그 때 정상적으로 실행이 되지 않는 경우는 없었던가?
최근에 라이브 포렌식 스크립트를 새롭게 작성하던 중 문제가 하나 발생했다. 일반적으로 활성데이터 수집에 사용하는 명령은 수집 대상 시스템의 명령을 사용하지 않고 별도로 준비해간다. 수집 대상 시스템의 명령은 공격자나 혹은 다른 이유로 손상될 가능성이 있기 때문이다.
예를 들어, 대상 시스템의 네트워크 연결 상태를 얻고자 netstat 명령을 실행한다고 가정해보자. 이 때, 대상 시스템의 netstat.exe 파일은 공격자에 의해 변조된 파일일 수 있다. 변조된 파일은 다른 네트워크 연결 상태는 그대로 출력하면서 공격자가 연결하고 있는 악의적인 외부 연결은 출력되지 않도록 만들 수 있다. 이런 이유로 활성데이터를 수집하는 명령은 미리 검증된 명령어를 사용해야 한다.
우선 스크립트 작성을 위해 수집할 정보들을 목록을 작성한 후, 윈도우 버전별로 정상적인 명령어를 모았다. 하지만, 윈도우 Vista/7에서 수집된 몇몇 명령어들이 정상적으로 동작하지 않는 것이었다. 여기서 정상적이지 않은 동작이란 잘못된 출력을 발생하는 것이 아니라 출력이 아예 나오지 않고 실행 상태로 멈춰있는 것을 의미한다. 원인을 찾아보았으나 DLL로 인한 오류도 아니고, 로컬 보안 정책에 의한 오류도 아니었다.
처음에는 Vista/7으로 넘어오면서 UAC에 의해 시스템 주요 폴더의 명령어를 실행 감시하는 것으로 생각했다. 실제로 로컬 보안정책에 비슷한 항목도 존재했다. 하지만 결국 헛다리였다. 그렇다면 다음으로 생각해 볼 수 있는 것이 Vista/7으로 넘어오면서 명령어에 별도의 검증 코드를 넣어두지 않았을까 생각해 보았다. 비상식적이지만 그 또한 확인해 봐도 별 이상이 없었다.
우선 실행되지 않는 명령어는 system32 폴더에 있는 명령어들로 다음과 같다.
- arp
- diskpart
- netstat
- nbtstat
- ipconfig
- … …
위 명령어들은 활성 데이터를 수집할 때 필수적으로 필요한 명령어들이다. 따라서, 이 문제가 해결되지 않는다면 어쩔 수 없이 손상되었을지도 모르는 대상 시스템의 명령어들을 사용해야 한다.
문제를 알아보기 위해 system32 폴더 하위에 있는 명령어와 외부의 경로에 있는 명령어를 디버깅해보았다. 디버깅해서 비교해본 결과 ntdll.RtlFindMessage의 반환값이 서로 달랐다. 잘못된 반환값은 0xC00B0006로 NTSTATUS 값에서 검색해보면 다음과 같다.
- 0xC00B0006 STATUS_MUI_FILE_NOT_LOADED : The resource loader cache does not have a loaded MUI entry.
내용인 즉슨 로드할 MUI 를 찾지 못했다는 것이다. 실제로 두 명령을 실행시킨 후 Process Explorer로 확인해 보면 경로를 바꾼 명령의 프로세스에는 mui가 로드되지 않은 것을 확인할 수 있다. system32 하위에 있는 명령어 중 언어에 관계없이 출력이 고정된 명령어는 경로를 바꿔도 정상적으로 출력된다. 다만, 언어별로 출력을 다르게 설정해둔 명령어는 경로를 바꾸게 되면 정상적으로 출력이 나오지 않는다.
이는 MUI 파일에 대한 경로가 상대 경로로 설정되어 있다는 것을 의미한다. 이런 어처구니 없는 일이 있을 수가 있는가. 물론 마이크로소프트에서 이것을 의도했을 수도 있지만 언어 파일과 관련없는 명령어는 정상적으로 실행되므로 일부러 의도했다고 보여지지는 않는다. XP에도 MUI 관련 파일이 존재하기는 하지만 명령어 실행에 영향을 주지는 않는다. 결국, Vista/7에서는 명령어의 출력을 언어별로 좀 더 확장했지만 언어 파일의 경로를 환경 변수를 사용하지 않고 상대 경로로 해놓는 바람에 일부 명령어가 system32 폴더를 벗어나면 실행되지 못하고 있다.
따라서, 윈도우 시스템 명령을 이용해 활성데이터를 수집하고자 할 경우, Vista/7에서는 운영체제 설치 언어에 맞게 명령어에 대한 언어 파일도 함께 복사해 가지고 가야 한다. 언어 파일은 system32 폴더 하위에 각 국가코드명으로 존재한다. 한국어의 경우에는 “ko-KR” 폴더이다. 그렇다면 영문버전의 운영체제는 이럴 필요가 없을까? 영문 버전도 동일하게 하위에 “en-US” 폴더를 복사해줘야 한다. 다음은 system32 폴더 하위의 “ko-KR” 폴더를 살펴본 것이다. nbtstat 명령에 대한 MUI 파일이 존재한 것을 알 수 있다.
조사 대상 시스템이 Vista/7을 사용하고 일본어 버전의 운영체제를 사용한다면 미리 관련 언어 파일을 복사해두어야 할 것이다. 물론, Vista/7에서 하위 호환성을 지원하기 때문에 XP의 명령 파일을 그대로 사용해도 된다. 이 경우에는 MUI 문제도 발생하지 않고 32/64비트의 문제도 고려할 필요가 없다. 하지만 운영체제 버전별로 명령어의 옵션이나 출력이 다를 수 있기 때문에 미리 꼭 실험을 거친 후 사용해야 할 것이다.
-
MaJ3stY
-
http://www.facebook.com/proneer Jinkook Kim
-
http://twitter.com/ChatNoirNo1 Chang-Bae Jeon
-
http://www.facebook.com/proneer Jinkook Kim
Categories
- 0×01 News (15)
- 0×02 Fundamentals (11)
- 0×03 Data Forensics (9)
- 0×04 Storage Forensics (13)
- 0×05 File System Forensics (31)
- 0×06 Windows Forensics (17)
- 0×07 *nix Forensics (1)
- 0×09 Web Forensics (5)
- 0x0A Virtual Forensics (5)
- 0x0B Forensic Challenges (15)
- 0x0C Forensic Education (8)
- 0x0D EnCase (12)
- 0x0E Forensic Tools (8)
- 0x0F Slides (24)
addressing artifacts BIOS boot code boot process challenge Cluster Codegate cookie Data Carving Data recovery DC3 DCO defcon ENCASE EnCE encoding EnScript exFAT FAT File System firmware Forensic Challenge FTK GUID hardware imaging Live Forensics mbr network ntfs padocon process RAID Recycle Bin SCSI signature Slack slide steganography timeline timestamp virtual forensics WDFS writeup
WP Cumulus Flash tag cloud by Roy Tanck requires Flash Player 9 or better.
What I'm Doing...
- 1월말부터 작성하던 VSC(볼륨 섀도우 복사본)에 대한 정리를 마쳤네요. 한번 시간내서 6개의 포스팅을 정리해보는 것도 좋을듯.... http://t.co/8J6PgJTi 8 hrs ago
- 마그네틱 vs RFID 카드 분석 Deconstructing a Credit Card's Data - http://t.co/5nzy7gJ2 1 day ago
- 인사이트 세미나 발표 자료 업데이트 - http://t.co/J9BSRsII 자세한 내용은 http://t.co/GMZiXAJh을 참고하세요. 3 days ago
- More updates...




