Download
알림) fastdd32, 64의 실행파일 및 드라이버 바이너리의 디지털서명은 Four&Six Tech.의 지원을 받아 수행되었습니다. http://4n6tech.com
개인적인 사정으로 인해 현재 포스팅 중단 중입니다. :(
시간되는 대로 다시 시작하도록 하지요.
오늘 'Paradox Conference 2011'에서 윈도우즈 물리 메모리 포렌식과 관련하여 발표를 하고 왔습니다. 아래는 발표자료 다운로드 링크입니다.
Download
재미있었는지는 모르겠지만, 경청해주신 많은 분들께 감사드립니다.
윈도우즈 시스템에서의 물리 메모리는 일반적으로 win32dd 또는 mdd 등의 도구를 이용하여 수집합니다. 이러한 도구들은 여러가지 방법을 이용하여 물리 메모리에 접근하게 되는데, 이번 포스팅은 윈도우즈 시스템에서 물리 메모리에 접근하여 이를 덤프하는 방법에 대한 글입니다.
UNICODE_STRING usPhysicalMemory; OBJECT_ATTRIBUTES oa; RtlInitUnicodeString( &usPhysicalMemory, L"\\Device\\PhysicalMemory"); InitializeObjectAttributes( &oa, &usPhysicalMemory, OBJ_CASE_INSENSITIVE, NULL, NULL ); status = ZwOpenSection( &hPhysicalMemory, SECTION_MAP_READ, &oa ); if( !NT_SUCCESS(status) ) { DbgPrint("Failed to open %wZ! Status %p\n", usPhysicalMemory, status); hPhysicalMemory = NULL; goto done; } DbgPrint("Opened section handle %p in driver\n", hPhysicalMemory); *(HANDLE*)pIrp->AssociatedIrp.SystemBuffer = hPhysicalMemory; pIrp->IoStatus.Information = 4; status = 0;
typedef struct _PHYSICAL_MEMORY_RANGE { PHYSICAL_ADDRESS BaseAddress; LARGE_INTEGER NumberOfBytes; } PHYSICAL_MEMORY_RANGE, *PPHYSICAL_MEMORY_RANGE; NTKERNELAPI PPHYSICAL_MEMORY_RANGE MmGetPhysicalMemoryRanges ( VOID );
PVOID MmMapIoSpace( IN PHYSICAL_ADDRESS PhysicalAddress, IN ULONG NumberOfBytes, IN MEMORY_CACHING_TYPE CacheType );
typedef struct _MDL { struct _MDL *Next; CSHORT Size; CSHORT MdlFlags; struct _EPROCESS *Process; PVOID MappedSystemVa; PVOID StartVa; ULONG ByteCount; ULONG ByteOffset; } MDL, *PMDL; NTKERNELAPI VOID MmMapMemoryDumpMdl ( __inout PMDL MemoryDumpMdl );
typedef struct _MY_MDL { MDL Mdl; DWORD_PTR PageFrameNumber; } MY_MDL, *PMY_MDL; PVOID GetMappedAddr( IN ULONG PageFrameNumber ) { MY_MDL mymdl; mymdl.Mdl.Next = NULL; mymdl.Mdl.Size = 0x20; // MDL size 0x1C + 4 bytes mymdl.Mdl.MappedSystemVa = NULL; mymdl.Mdl.StartVa = NULL; mymdl.Mdl.ByteCount = SIZE_MEM_PAGE; // 4096 bytes mymdl.Mdl.ByteOffset = 0; mymdl.PageFrameNumber = PageFrameNumber; MmMapMemoryDumpMdl(&mymdl.Mdl); return mymdl.Mdl.MappedSystemVa; }
오늘 새로운 도구를 소개해드립니다.
윈도우즈에서 물리 메모리를 덤프할 수 있는 'Fastdd v1.0'입니다.
* 알림 : 본 포스트는 '2010 한국정보보호학회 동계학술대회'에 발표된 논문인 "A Study on Riskiness and Countermeasures of Personal Identifiable Information in Physical Memory"의 리뷰입니다.
물리 메모리에는 우리가 생각치 못한 많은 개인 정보들이 남아있습니다. 주민등록번호, 계좌번호, ID 및 패스워드 등이 그 대상입니다. 따라서 물리 메모리 포렌식의 가장 기본이 되는 분석 방법은 '문자열 검색'입니다. 너무나도 단순한 방법이고 어찌보면 수천만개씩이나 존재할지 모르는 문자열들 중에 중요한 정보를 찾는 것은 비효율적이기 때문에 old-fashioned method라고 치부될지 모르지만, 분명한 것은 어쨌든 중요한 정보가 '존재'한다는 것이고 이를 효율적으로 추출하는 것은 조사관의 몫이라는 것입니다.
이 논문은 물리 메모리 덤프에 존재하는 웹포털 사이트의 ID 및 패스워드를 추출하는 방법에 관한 논문입니다. 그 방법은 상당히 단순합니다. 물리 메모리 내에 존재하는 문자열 중 웹사이트로 전달하기 위한 POST Method와 관련한 문자열을 추출하고 이를 사이트 별 특징에 따라 정규표현식으로 ID와 패스워드를 추출하는 것입니다.
사실 누구나 생각해볼 수 있고 해외에서는 이와 같은 방식으로 웹사이트, 메신저 등의 계정 정보를 추출하는 방법에 대해 셀수 없이 논의되어 왔지만, 국내에서 자주 사용되는 웹사이트를 대상으로 하였을 때는 상당히 치명적이라는 사실이 와닿습니다.
메모리에 남아있는 모 사이트의 ID 및 패스워드 |
Physical Memory Dump Explorer에 추가된 웹 패스워드 추출 기능 |