1. 윈도우 포렌식 분석 개요


윈도우 컴퓨터의 하드디스크에는 악성코드, 레지스트리, 로그 파일 같은 악성 코드의 흔적뿐만 아니라, Prefetch와 같은 실행 또는 조작여부를 알 수 있는 다양한 정보가 존재한다.



2. 윈도우 시스템에서 악성코드 식별 및 추출


- 알려진 악성코드 검색

* HashMyFiles( Link )


> 보통 공격자들은 공개된 RootKit이나 Sniffer와 같은 공개된 프로그램을 사용한다.

> 안티 바이러스 프로그램 또는 Hash 식별을 이용하여 알려진 악성코드를 식별한다.




- 설치된 프로그램 조사

> 감염된 컴퓨터에 설치된 프로그램에 대해 설치 날짜와 이름을 조사함으로써, 의심스러운 프로그램뿐만 아니라 원격 접속, 데이터 유출 등에 악용된 관련 프로그램 탐지

> 'Program Files' 폴더 하부 및 레지스트리에서 설치된 프로그램의 목록 확인


- 실행파일 점검

> 공격자들은 보통 악성코드를 발견 및 탐지하기 어렵게 하기 위해 노력한다.

> 확장자 변경 : 확장자를 변경해도 실제 데이터는 변경되지 않는다.

> 패킹 : 탐지 및 포렌식 분석을 무력화하기 위해 인코딩을 한다.

> ADS : 다른 파일이나 폴더의 대체 데이터 스트림에 존재하는 실행파일을 찾는다.


- 서비스, 드라이버, 자동 실행 위치, 예약된 작업 점검

> 악성코드는 재부팅 후에도 동작할 수 있도록 서비스, 드라이버, 예약된 작업과 같은 다양한 시작 루틴에 악성코드를 적용한다.

> 예약된 작업 : %SystemRoot%\Tasks 폴더 내에 예약된 작업을 조사

> 서비스 : 악성코드는 보통 새로운 서비스로 자신을 등록하거나, 기존 서비스에 자신을 추가한다.

> 자동실행


- 로그 조사

> 로그 파일을 바탕으로 악성코드 사고와 관련된 기록을 확인할 수 있다.

> 윈도우 이벤트 로그 : 보안 이벤트 로그 기록을 통해 외부 침입자가 내부 접근 권한을 획득한 정보를 확인할 수 있다.

> 웹 브라우저 히스토리 : 악성 웹사이트 접근 여부나 악성코드가 다운로드 된 사실을 확인할 수 있다.

> Desktop 방화벽 로그 : 감염된 시스템으로의 접근 시도 및 다양한 행동이 기록된다.


- 사용자 계정과 로그인 활동 검토

> 감염된 시스템에 새로운 비인가 계정이 생성됐는지, 패스워드가 없는 계정이 존재하는지, 관리자 그룹에 추가된 계정이 어느 것인지 등을 확인한다.

> 비인가 계정 생성 : 알려진 비인가 이벤트 발생 전후 생성된 사용자명이나 계정 확인

> 관리자 그룹 : 로컬 또는 도메인 레벨의 관리자 그룹에 있어서는 안되는 사용자 계정 확인

> 취약한 패스워드 : 패스워드가 없거나 쉽게 예측 가능한 패스워드가 설정되어 있는 계정 확인



3. 윈도우 레지스트리 조사


- 레지스트리

> 운영체제 내에서 작동하는 모든 하드웨어, 소프트웨어, 사용자 정보 및 시스템 구성 요소 등을 담고 있는 데이터 베이스

> 구성

> HKEY_CLASSES_ROOT를 비록하여 5개의 가장 상위키( =루트키 )를 갖는다.

> 각 루트키 아래의 서브키부터 아래의 모든 세부 서브키를 포함하는 트리구조를 레지스트리 하이브라고 한다.

> 각각의 하이브는 저마다 고유한 저장장소( 파일 )와 로그 파일을 갖고 있다.



- HKEY_CLASSES_ROOT

> 파일 확장자에 대한 정보, 각 파일과 프로그램간의 연결에 대한 정보, 마우스 오른쪽 단추의 등록 정보 등

> 모든 형식의 파일 확장자가 서브키 형태로 구성된다.

> HKLM\SOFTWARE\Classes 키에 동일하게 저장되어 두 곳이 연동된다.


- HKEY_CURRENT_USER

> 현재 로그인중인 사용자들에 대한 등록 정보

( 사용자 배경화면, 디스플레이 설정이나 단축 아이콘 정보 등 )

> 응용 프로그램의 우선 순위, 보안 접근 허용 여부


- HKEY_LOCAL_MACHINE

> 하드웨어 구성 초기화 파일, 제어판과 밀접하다.

> 사용중인 하드웨어 및 소프트웨어에 대한 정보

> 로그온 한 사용자와 관계없이 컴퓨터에 등록된 모든 사용자에게 동일


- HKEY_USERS

> 이전 사용자 초기화 파일을 보관

> 두 키 사이가 겹치면 HKEY_CURRENT_USER가 우선


- HKEY_CURRENT_CONFIG

> 현재 사용중인 윈도우의 디스플레이( 화면 글꼴이나 해상도 )정보와 프린터 관련 정보

> HKLM\Config 키의 내용과 같다.


- 하이브 파일

> %SystemRoot%\System32\config\


 하이브 이름

하이브 파일 

해당하는 레지스트리 키 

.DEFAULT 

DEFAULT 

HKU\.DEFAULT 

HARDWARE 

파일로 저장 안됨 

HKLM\HARDWARE 

SOFTWARE 

Software 

HKLM\SOFTWARE 

SAM 

SAM 

HKLM\SECURITY\SAM 

SYSTEM 

System 

HKLM\SYSTEM 

SECURITY 

Security 

HKLM\SECURITY 


> C:\Users\{사용자명}\

 하이브 이름

하이브 파일 

해당하는 레지스트리 키 

SID 

NTUSER.DAT 

HKU\SID 


- UserAssist( Link )

> 사용자 계정에 의해 실행된 프로그램 목록이 저장된다.

> UserAssist 키에는 가장 최근에 실행된 프로그램의 날짜/시간 스탬프와 같은 악성 행위에 대한 세부 정보를 제공한다.

- 이 키에 존재하는 값들은 "ROT13" 암호화 알고리즘으로 암호화 되어 있다.


- 사용자 계정 확인

> 사용자 별로 다른 계정이 존재한다.

> HKLM\SOFTWARE\Microsoft\CurrentVersion\ProfileList 이하에 각 사용자에 대한 Profile 정보가 포함되어 있다.

> 특정인에 의한 해킹이 시도된 경우로 새로운 사용자를 생성

- 특정 작업을 수행 후 사용자를 삭제한 경우 계정 정보 확인이 가능하다.


- 사용자 계정 확인 - 세부정보 확인

* AccessData Registry Viewer( Link )


> HKLM\SAM\Domains\Users\

- User Name, 로그온 횟수, 패스워드 변경시간 등을 확인 할 수 있다.



- 최근 열어본 문서

> HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\RecentDocs

- Windows Explorer를 통해서 최근에 Open된  파일의 목록을 기록하고 있다.

- 파일 확장자로 구분되어 있으며, "Folder"는 최근에 Open한 파일의 폴더 목록을 유지한다.




- 자동 실행 프로그램

> HKU\SOFTWARE\Microsoft\Windows\CurrentVersion\Run

>%SystemRoot%\System32\Tasks\

- 컴퓨터가 부팅 후 자동으로 실행되는 프로그램 리스트


- 설치된 프로그램

> HKU\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\

> HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\

> HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CureentVersion\Uninstall\

- 컴퓨터에 설치되어 있는 프로그램 리스트




- 최근 실행 명령어

> HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\RunMRU

- [시작] -> [실행]에서 수행하여 기억하고 있는 명령어 목록

- 사용자가 실행한 명령어 목록을 확인 가능


- 컴퓨터 정보

> HKLM\SOFTWARE\Microsoft\WindowsNT\CureentVersion

- CSDVersion : Service Pack

- RegisteredOwner : 등록된 사용자

- SystemRoot : 시스템 기본 경로

- ProductName : OS 기본 정보

- InstallDate : 설치 일자



4. 기타 포렌식 분석


- 자동실행 프로그램 조사

* AutoRuns( Link )


> 컴퓨터가 시작할 때 자동으로 프로그램을 실행시키기 위해 참조하는 윈도우 시스템의 다양한 위치에서 상세 정보를 추출한다.

> 서명되지 않은 실행파일 목록 확인 가능

> 디스크에 존재하지 않는 실행 파일과 관련된 자동 실행 항목 확인 가능


- Prefetch 분석

> 윈도우의 부팅 커널까지 포함하여 응용 프로그램 실행 정보를 저장한 파일을 메모리에 올려두어 실행속도를 빠르게 하기 위한 기능이다.

> 침해사고 발생 시 사용자가 실행한 응용프로그램을 확인할 수 있다.

> 프로그램을 한번이라도 실행할 경우 '%SystemRoot%\Prefetch' 폴더에 .pf 확장자로 저장된다.


* WinPrefetchView( Link )


> 실행한 응용프로그램의 이름, 실행 횟수, 마지막 실행 시간, 참조 목록( dll / ini ) 확인


- 외장형 저장장치 분석

* USBDeviceForensics( Link )


> 사용자가 연결한 외장형 저장장치의 정보를 확인할 수 있다.

> HKLM\SYSTEM\ControlSet00x\Enum\USBTOR

- USB장치 정보 저장

- Device Class ID : Disk&Ven_XXX&Prod_YYY&Rev_ZZZ

- XXX( Vender ), YYY( Product ), ZZZ( Version )

> HKLM\SYSTEM\MountedDevices를 참조하여 어떤 USB 장치가 어떤 드라이브에 연결되었는지 확인 가능하다.


- 외장형 저장자치 분석 - 연결 기록

> %SystemRoot%\System32\winevt\Logs\ 폴더에 존재하는 Microsoft-Windows-DriverFrameworks-UserMode%40perational.evtx

- 이벤트 로그 분석을 통하여 외장형 저장장치의 연결/해제 관련 로그 확인 가능


- Security Identifier ( SID )

① 해당 시스템이 윈도우 시스템임을 말한다.

② 시스템이 도메인 컨트롤러이거나 단독 시스템임을 표시한다.

③ 시스템의 고유한 숫자. 이 고유한 숫자는 시스템을 설치할 때 시스템의 특성을 수집하여 생성한다.

④ 각 사용자 별 숫자로 표현되는 고유한 ID. 관리자는 500번, Guest는 501번, 일반 사용자는 100번 이상의 숫자를 갖는다.


> 시스템 고유 숫자를 이용하여 장치의 연결이력을 확인할 수 있다.

> 외장형 저장장치 및 HDD가 다른 윈도우 시스템에 연결될 경우 해당 시스템의 SID 값으로 휴지통 폴더가 생성된다.

> 휴지통 폴더 정보를 통해 장치의 연결 기록을 확인할 수 있다.




Posted by Imp3rio

1. 메모리 포렌식 개요


메모리 덤프에는 악성 실행파일, 시스템 연관 데이터 구조, 관련된 사용자 활동 정보와 악성 이벤트 등 다양한 데이터가 내포되어 있다.

메모리 포렌식의 주된 목적은 악성코드와 직접적으로 관련이 있는 데이터를 추출하고 어떠한 이벤트가 발생했는지, 어떻게 악성코드가 설치됐는지와 같은 맥락 정보를 식별하는데 있다.


2. 윈도우 메모리 포렌식 도구


메모리 포렌식 도구의 내부 작동 원리를 이해하는 것은 특정 작업에 맞는 도구를 선택하고 결과의 정확도와 완성도를 평가하는데 도움이 된다.

주요 메모리 포렌식 도구가 공통적으로 제공하는 정보의 목록은 아래와 같다.


> Process와 Thread

> 모듈과 라이브러리

> 열린 파일과 소켓

> 다양한 데이터 구조체



- Process와 Thread 

* Volatility ( Link )


> 숨겨져 있거나 종료된 Process를 포함한 Process와 Thread 정보를 수집하고, 상세 분석을 바탕으로 어떤 Process가 악성코드와 연관되어 있는지 판단하는데 도움을 준다.


> 관련 Volatility 플러그인 정보

- psscan : 전체 Process 구조체를 카빙

- pslist : 동작중인 Process 목록 확인

- psdiff : psscan과 plist 목록을 비교

- dlllist : 해당 Process에 로드된 DLL목록 확인

- csrpslist : Process의 세부 정보를 추출해 숨겨진 Process 확인


> pslist 옵션 결과와 psscan 출력 결과를 비교해 악성코드에 의해 불일치 되는 부분을 찾아내거나 악성코드 행위와 관련된 비정상 상태 탐지 가능하다. ( psxview )




* Responder ( Link ) -> 유료이기 때문에 30일 동안만 무료로 사용할 수 있다.


> Process와 열린 Handle 목록 뿐만 아니라 메모리 덤프에서 URL, 사용자 명, 패스워드, 키, 그 외 기타 정보 등을 추출해 준다.




- 모듈과 라이브러리

> 악성코드는 자신을 은폐하거나 키로깅 하는 등의 주요 기능을 수행하기 위해 드라이버를 생성하거나 라이브러리를 로드한다.

> 관련 Volatility 플러그인 정보

- modules : 시스템에서 동작 중인 모듈 목록 제공

- driverscan : 특정 드라이버 객체를 메모리에서 검색

- moddump : 특정 모듈에 대해 실행 파일 포맷 형태로 파일을 추출

- dlldump : 메모리 덤프에서 특정 DLL 추출


> Responder를 이용하여 로드된 라이브러리와 드라이버 목록을 확인하고, 특정 개체에 대한 더욱 더 자세한 정보를 조사 가능하다.



Posted by Imp3rio

1. 휘발성 데이터 수집


- 휘발성 데이터


전원이 끊어지면 손실되는 데이터 -> 초기 분석 수행해야 한다.

동작중인 시스템의 메모리에 존재한다.

Process, Password, IP address, event log 등 악성 코드와 관련된 내용 포함이 가능하다.

휘발성 데이터들의 수명은 그 특성으로 인해 모두 다르기 때문에 우선 순위를 고려해야 한다.


- 휘발성 순위


> Register, Cache

> Routing Table, ARP cache, Process Table, Kernel Statistics, Memory

> Temporary file system

> Disk

> Remote logging and monitoring data

> Physical configuration, network topology

> Archival media


휘발성 순위는 RFC3227 문서에 잘 정리되어 있다.

https://www.ietf.org/rfc/rfc3227.txt


- 디지털 증거의 무결성


라이브 시스템에서 데이터를 수집하는 행위는 해당 시스템( 디지털 증거 )에 영향을 줄 수 있다.

> 수집을 위한 외장형 저장장치 연결, 프로그램 설치 및 실행 등

수집 과정에서 일부 변경이 일어날 수 있으나, 보존과 처리 과정에서 변경이 발생하지 않음을 객관적 방법으로 진술 성립의 진정함이 증명되는 때에 증거로 할 수 있다.


- 휘발성 데이터 수집


시스템의 날짜 / 시간을 확인 후, 대상 시스템의 물리 메모리를 획득해야 한다.

> Windows 각 버전마다 메모리 구조가 다르기 때문에 도구에 따라 제대로 해석하지 못하는 경우가 발생한다.

> 따라서 물리 메모리 획득 및 라이브 시스템의 정보를 저장해 두어야 한다.

로컬에서 물리 메모리 획득

> 명령프롬프트나 GUI 유틸리티를 사용해 물리 메모리 덤프를 생성한다.

* 무료 물리 메모리 획득 툴

> MDD

> DumpIt

> FTK Imager


- 시스템 정보 수집


시스템 정보는 라이브 대응과 사후 포렌식 과정에서 타임 라인 생성, 로그와 기타 포렌식 아티팩트와 함께 대상 시스템을 식별하는데 활용된다.


* 주요 수집 대상 시스템 정보

> 시스템 날짜와 시간

라이브 대응 조사를 수행하는 과정에서 처음과 마지막에 수집하는 항목이다.

시스템 분석 시 타임라인 생성과 모든 문서의 기초이다.

대상 시스템의 날짜와 시간을 확인 후 정확한 검증을 위해 신뢰할 수 있는 시간 출처와 비교가 필요하다.


> 시스템 식별자

set user : 로그인한 사용자의 도메인, 이름, 프로필

net user [계정명] : 로컬 컴퓨터의 사용자 정보 수집


> 네트워크 구성

ipconfig : 로컬 컴퓨터에 설정된 IP 정보 및 MAC 주소 확인

netstat -ano : 프로토콜 연결, 연결 상태, 트래픽, 통계 등을 확인


> 서비스 정보

net start : 현재 윈도우 시스템에서 실행되고 있는 서비스 정보 수집

- 제공되지 않는 서비스 또는 유사한 서비스 명으로 등록된 것은 악성코드일 수 있다.


> 시스템 환경

systeminfo : 시스템 uptime, 종류, 프로세서, 메모리, 핫픽스, 네트워크 카드 정보 등 확인


> 공유폴더 정보

net share [공유 이름] : 로컬 컴퓨터의 모든 네트워크 공유 자원에 대한 정보

- 알지 못하는 공유 자원이 있는지 점검해야 한다.( NETBIOS 취약점 )


> 예약된 작업 확인

schtasks : 예약된 작업에 대한 자세한 정보를 제공

- 일부 악성코드 변종은 특정 날짜나 이벤트가 발생할 때까지 휴면상태로 남아있는 '이벤트 기반' 방식을 사용한다.

- 예약된 목록을 확인하여 휴면상태의 악성코드 등을 확인한다.


> 배치파일 제작

대상 시스템상에서 직접 명령어를 이용해 살펴볼 수 있으나, 실수와 누락을 피하기 위해 자동화 도구 등을 이용하는 것이 효율적이다.


2. 비 휘발성 데이터 수집


가용성이 중요한 서버 및 종료할 수 없는 시스템을 다룰 때에는 컴퓨터가 동작하는 동안 전체 시스템의 포렌식 사본을 생성해야 한다.

아래와 같이 주요 비활성 데이터에 대한 수집 및 분석을 수행한다.

> 보안 구성 평가

> 호스트 파일 획득

> Prefetch 파일 조사

> 자동시작 리스트 조사

> 이벤트 로그 조사

> 사용자 계정 조사

> 파일 시스템 조사

> 레지스트리 조사


- 보안구성 평가

* WinUpdateList( Link )

> 시스템이 안전하게 구성됐는지 점검하는 일은 호스트에서 발생할 수 있는 오용, 취약점, 가능한 공격 벡터의 위험 수준을 평가하는데 도움을 준다.



- 호스트 파일 획득

> %SystemRoot%\system32\drivers\etc\

> 해당 위치에 있는 파일들에는 신뢰된 호스트와 네트워크 정보가 존재한다.



> hosts : IP와 호스트 이름 사이의 관계

> networs : IP 주소 범위와 네트워크 이름 사이의 관계

> lmhosts : IP 주소와 NetBIOS 이름 사이의 관계



- Prefetch 파일 조사

> %SystemRoot%\Prefetch

> 윈도우 운영체제는 프로그램 실행 성능을 개선할 목적으로 'Prefetch' 파일을 생성한다.

> 비 정상적인 실행파일명을 포함하는 Prefetch 파일은 대상 시스템의 감염을 증명할 수 있는 잠재적 흔적이다.



- 자동 시작 리스트 조사

* AutoRuns( Link )

> 윈도우의 자동 시작 위치는 시스템을 재부팅해도 악성코드가 지속적으로 존재할 수 있도록 도와준다.

> 자동 시작 위치는 특정 폴더, 레지스트리, 시스템 파일을 비롯해 운영체제의 다양한 곳에 존재한다.


- 파일 시스템 조사

* HFind( Link )

> 일반 사용자는 보지 못하도록 숨겨진 파일이나 ADS의 위치 탐지 및 관련된 목록 출력해준다.


- 레지스트리 덤프

* regdump(  Link )

> 운영체제 내에서 작동하는 모든 하드웨어, 소프트웨어, 사용자 정보 및 시스템 구성 요소 등이 레지스트리에 저장된다.



Posted by Imp3rio