본문 바로가기

보안/포렌식

윈도우 악성코드 포렌식

출처 : http://forensic-proof.com/  

(김진국강사님의 디지털포렌식 강의을 듣고 정리한 내용입니다.)



1. 프리패치


  · 목적 : 하드디스크의 속도 때문에 초기 참조하는 파일의 순서를 저장해서 부팅시 빠르게 로드할 수 있도록 함.

  · 윈도우 프리패칭 (Windows Prefetching)

 - 실행 파일이 사용하는 시스템 자원 정보를 특정 파일에 저장  프리패치 파일

 - 윈도우 부팅 시 프리패치 파일을 모두 메모리에 로드

 - 사용자가 파일을 실행할 경우 미리 저장된 정보를 이용해 초기 실행 속도 향상

 - 윈도우 XP 이후 (2003, Vista, 2008, 7, 8, 10)의 운영체제에서 제공

  · 프리패칭 유형

 - 부트 프리패칭 (Boot Prefetching) : XP, 2003, Vista 2008, 7

   - 부팅을 빠르게 하도록 하는 파일

 - 응용프로그램 프리패칭 (Application Prefetching) : XP, Vista, 7, 8, 10


1.1. 경로

  · SystemRoot%\Prefetch

 - 부트 프리패치 : NTOSBOOT-B00DFAAD.pf

 - 응용프로그램 프리패치 : <filename>-<filepath hash>.pf

  · 이 경로에 들어가면 db파일도 있는데 이 것은 프리패치파일을 메모리에 올렸는데 안 쓸경우 페이지 파일로 내리니까 그것을 막기 위한 파일이다.


1.2. 부트프리패칭

  · 부팅과 관련된 파일이 저장장치에 흩어져 있거나 단편화되어 있음 -> 부팅 속도 저하

프리패처에 의해 시스템 부팅 시 최대 120초 까지 모니터링

  · 부팅 시 사용하는 파일을 모니터링한 후 결과를 파일에 저장

  · 프리패칭된 파일을 이용하여 부팅 속도 향상


1.3. 응용 프로그램 프리패칭

  · 응용프로그램 초기 실행 시 캐시 관리자가 처음 10초를 모니터링

  · 10초 동안 사용한 파일을 모니터링한 후 결과를 파일로 저장

  · 프리패칭된 응용프로그램 다시 실행 시, 프리패치 파일을 이용해 초기 실행 속도 향상

  · 파일 개수는 최대 128개로 제한 -> 한계치를 넘으면 사용되지 않는 파일부터 자동 삭제


1.4. 획득가능한 정보

  · 응용프로그램 이름

  · 응용프로그램 실행 횟수

  · 응용프로그램 마지막 실행 시각 (FILETIME, 64-Bit Timestmamp)

  · 참조 목록 (실행 시 필요한 DLL, SDB, NLS, INI 등의 경로)

  · 파일 시스템 시간 정보 (생성, 수정, 접근 시간)을 이용한 통합 분석


1.5. 프리패치 활용

  · 악성코드가 실행될 경우, 프리패치 파일 자동 생성

  · 부트 프리패치 파일을 이용해, 부팅 시 로드되는 악성코드 탐지 가능

  · 참조 목록을 통해, 로드한 라이브러리, 파일 목록 확인 가능



2. 로그파일


  · 파일시스템의 I/O 혹은 트랜잭션에 대한 로그

  · NTFS 파일시스템 로그

 - %SystemDrive%\$LogFile

 - %SystemDrive%\$Extend\$UsnJrnl:$J

  · 파일시스템 로그의 장점

 - 특정 기간 동안 일어난 상세한 파일시스템 이벤트 분석 가능

 - 삭제된 파일의 흔적 추적 가능


2.1. $LogFile

  · 트랜잭션 로그 파일

 - 시스템 비정상 동작을 대비하기 위한 트랜잭션 로그

 - 파일 생성, 삭제, 수정, 파일명 변경, 이동 등의 행위 파악 가능

  · 트랜잭션 단위의 로그 기록

 - 파일/디렉터리 생성

 - 파일/디렉터리 삭제

 - 파일/디렉터리 변경

 - MFT 레코드 변경

  · 일반적으로 64MB 크기

  · PC의 일반적 작업이라면 2~3시간 정도의 로그가 보관


2.2. $UsnJrnl

  · NTFS 변경 로그

 - 파일이나 디렉터리의 변경 내용 기록

 - 윈도우 7부터 기본 활성화

  · 로그에 기록되는 정보

 - 변경된 시간

 - 변경 이유

 - 파일/디렉터리의 이름

 - 파일/디렉터리의 속성

 - 파일/디렉터리의 MFT 레코드 번호

 - 파일의 부모 디렉터리에 대한 파일 참조 주소

 - 보안 ID (Security ID)

 - 레코드의 USN (Update Sequence Number)

  · 컴퓨터를 계속 사용할 경우, 보통 1~2일의 로그 저장

  · 하루 8시간 정도 사용할 경우, 보통 4~5일의 로그 저장

  · $MAX

-변경 로그에 대한 메타데이터

  · $J

-실제 변경 레코드


2.3. 필기

  · $Logfile은 보통 2시간정도만 기록한다. 이것은 롤백을 위한 용도이다.. 하지만 $UsnJrnl은 단순 히 기록하는 것이기 때문에 매우 도움이 된다.

  · 경로에 들어가면 ADS 속성( 스트림이 2개이다..)

  · 추가 스트림으로 $J인데 winhex로보면 왼쪽 아이콘에 ... 모양이 있다. 이것이 ADS 속성이라는의미이다. 이것을 더블클릭하면 $j는 2기가이다..원래는 32메가 만 쓴느건데..앞에가 다 ㅇ으로채워져있다. 이것또한 윈헥스에 (스파스)라고 표시되어있다. 그냥 다 가져온다.

Sqlite도구를 쓴다음 select EventTime, Event, Detail, FullPath From LogFile을 친다.

  · Detail에서 클러스터 넘버를 쓰면 (24) <--이런식으로써져있는데 이것은 결구 24개의 클러스터를 쓴다는 의미..파일의 크기를 추정해볼 수 있다.

  · select TimeStamp, Event, FullPath From USNJRNL 

where Event like %file_Deleted%' 이렇게하면 삭제된파일만나온다.

where FullPath like '%Desktop%' 하면 바탕화면만나온다.

where TimeStamp like '%2014-11-27 13:%' 이러면 이날 이후로만나옴

where TimeStamp >'2014-11-27' and TimeStamp < '2014-11-28'



3. 바로가기


  · 링크 파일(LNK)이라고도 불리며 영문 명칭은 “Windows Shortcut”, “Shell Link” 윈도우에만 존재하는 기능으로 파일, 디렉터리 등 객체를 참조하는 파일 

  · 커맨드라인이 아닌 GUI에서만 동작 

  · .lnk 확장자를 가짐


3.1. 저장위치

  · 메뉴

 - %UserProfile%\AppData\Roaming\Microsoft\Windows\Start Menu

  · 바탕화면

 - %UserProfile%\Desktop

  · 사용자의 내 음악(My Music), 내 그림(My Pictures), 내 비디오(My Videos) 폴더

 - %UserProfile%  “%SystemDrive%\Users\Public” 하위 폴더 링크

  · Send To 폴더

 - %UserProfile% \AppData\Roaming\Microsoft\Windows\SendTo

  · 빠른 실행 (Quick Launch) 폴더

 - %UserProfile%\AppData\Roaming\Microsoft\Internet Explorer\Quick Launch

  · 최근 문서 (Recent)

 - %UserProfile%\AppData\Roaming\Microsoft\Windows\Recent

  · 응용프로그램 최근 문서 (순서는 레지스트리 MRU에 저장)

 - MS Office: %UserProfile%\AppData\Roaming\Microsoft\Office\Recent

 - Hangul: %UserProfile%\AppData\Roaming\HNC\Office\Recent


3.2. 파일 구조 정보

  · SHELL_LINK_HEADER

 - 링크 대상 파일의 속성 (읽기 전용, 숨긴 파일, 시스템, 볼륨 레이블, 암호화, 압축 등)

 - 링크 대상 파일의 생성, 수정, 접근 시간, 크기

  · LINKINFO

 - 링크 대상 파일의 크기

 - 링크 대상 파일이 위치한 드라이브 형식

 - 링크 대상 파일이 위치한 드라이브 시리얼 번호

 - 링크 대상 파일의 경로  외장저장장치 흔적

  · EXTRA_DATA

 - NetBIOS 이름

 - MAC 주소


3.3. 바로가기파일활용

  · 자동 생성된 바로가기 파일을 이용해 폴더나 파일의 실행 흔적 분석

  · 링크 대상의 위치를 이용해 외장저장장치를 이용한 데이터 이동 흔적 분석

  · 애플리케이션 취약점을 악용하는 악성코드일 경우, 실행 흔적 분석

  · 바로가기 파일 자체로 침해를 확인하기는 어렵기 때문에 타임라인 분석과 연계 분석



4. 점프목록


  · 윈도우 7부터 새롭게 추가된 응용프로그램 사용 로그로 기본 활성화

  · 모든 응용프로그램에 대한 접근 이력 보관


4.1경로

  · %UserProfile%\AppData\Roaming\Microsoft\Windows\Recent\

  · AutomaticDestinations 폴더

  · 운영체제가 자동으로 남기는 항목

최근 사용한 목록(Recent)이나 자주 사용되는 목록(Frequent)

  · CustomDestinations 폴더

  · 응용프로그램이 자체적으로 관리하는 항목

작업(Task) 목록

  · 점프목록 파일명

  · 각 응용프로그램 별로 고유한 16자리 사용


4.2. 포렌식적 의미 

  · 복합문서 구조의 스트림에 바로가기 파일 형식으로 점프목록 저장

  · 바로가기 파일에서 획득 가능한 모든 정보

 - 링크 대상의 속성, 크기, 경로, (생성, 수정, 접근) 시간

 - 링크 대상이 위치한 곳의 드라이브의 형식, 시리얼 번호, NetBIOS 이름, MAC 주소

 - OLE Header + Jump List Item(LNK) + ... + Jump List Item(LNK) + Dest List 구조로 되어있다.

 - Jump List Item(LNK) 에는 실제 파일의 경로 담겨있다.


4.3. 점프목록 활용

  · 윈도우 7 기본 활성화

  · 최근 접근 문서(Recent)나 UserAssist 키보다 더 많은 정보 포함

  · 사용자가 직접 삭제하지 않는 이상 운영체제 설치 시부터 지속적으로 로그 저장

  · 악성 파일 실행 흔적

  · 외장저장장치 파일 열람 흔적

  · 웹 사이트 접속 이력



5. 레지스트리


  · 윈도우 운영체제에서 운영체제와 응용프로그램 운영에 필요한 정보를 저장하기 위해 고안한 계층형 데이터베이스 (http://support.microsoft.com/kb/256986)

  · 부팅 과정부터 로그인, 서비스 실행, 응용프로그램 실행, 사용자 행위 등 모든 활동에 관여함

  · 윈도우 3.11, 9x, Me, NT, 2000, XP, 2003, Vista, 2008, 7, 2012, 8 에서 사용


5.1. 필요성

  · 윈도우 시스템 분석의 필수 요소

 - 운영체제 정보, 사용자 계정 정보, 시스템 정보, 응용프로그램 실행 흔적, 최근 접근

  · 문서 등

 - 자동 실행 항목(Autoruns), 악성코드 탐지, 저장장치 연결 흔적 등

  · 사용자/시스템/저장매체 사용 흔적 분석, 추가적인 포렌식 분석 대상 선별


5.2. 구조

  · “CURRENT”가 들어가는 루트키는 메모리에서만 유지

  · “CLASSES_ROOT”도 타 루트키가 링크된 가상 공간

  · 실제 하이브 파일로 존재하는 루트키

 - HKEY_USERS : Default, NTUSER.DAT

 - HKEY_LOCAL_MACHINE : SAM, SECURITY, SYSTEM, SOFTWARE 




 레지스트리 경로 

 하이브 파일 경로 

 HKEY_LOCAL_MACHINE\BCD00000000

 {Boot Partition}\Boot\BCD  

 HEKY_LOCAL_MACHINE\COMPONETS

 %SystemRoot%\System32\Config\COMPONETS

 HEKY_LOCAL_MACHINE\SYSTEM

 %SystemRoot%\System32\Config\SYSTEM

 HEKY_LOCAL_MACHINE\SAM

 %SystemRoot%\System32\Config\SAM 

 HEKY_LOCAL_MACHINE\SECURITY

 %SystemRoot%\System32\Config\SECURITY

 HEKY_LOCAL_MACHINE\SOFTWARE

 %SystemRoot%\System32\Config\SOFTWARE

 HEKY_LOCAL_MACHINE\HARDWARE 

 메모리에 존재

 HKEY_USER\<로컬 서비스 계정 SID>

 %SystemRoot%\ServiceProfiles\LocalService\NTUSER.DAT  

 HKEY_USER\<네트워크 서비스 계정 SID>

 %SystemRoot%\ServiceProfiles\NetworkService\NTUSER.DAT

 HKEY_USER\<username SID> 

 %UserProfile%\NTUSER.DAT

 HKEY_USER\<username SID>_Classes

 %UserProfile%AppData\Local\Microsoft\Windows\Usrclass.dat

 HKEY_USER\.DEFAULT

 %SystemRoot%\System32\Config\DEFAULT

 HKEY_USER\systemprofile

 %SystemRoot%\System32\Config\systemprofile\NTUSER.DAT  

 

 

 루트키

 약어 

 설명

HKEY_CLASSES_ROOT

 HKCR

 HKLM\SOFTWARE\Classes 및 HKU\<SID>\Classes

KKEY_CURRENT_USER

 HCKU

 HKU 중 현재 로그인한 사용자의 하위키

HKEY_LOCAL_MACHINE

 HKLM

 시스템에 존재하는 하이브 파일과 메모리 하이브

HKEY_USERS

 HKU

 사용자 루트 폴더에 있는 NTUSER.DAT

HKEY_CURRENT_CONFIG

 HKCC

 HKLM_SYSTEM\CurrentControlSet\Hardware Profile\ Current

HKEY_PERFORMANCE_DATA

 HKPD

 성능카운트(레지스트리 함수로만 접근가능, 편집기불가)


5.3. 백업과 로그

  · 레지스트리 파일 백업

 - %SystemRoot%\System32\config\RegBack\

  · 레지스트리 로그

 - %SystemRoot%\System32\config\[hive name].LOG

 - %SystemRoot%\System32\config\[hive name].LOG1

 - %SystemRoot%\System32\config\[hive name].LOG2


5.4. 볼륨 섀도 복사본

  · 비스타 이후부터는 시스템 복원 지점을 위해 VSS 사용

  · 특정 시점에 파일, 폴더에 대한 스냅샷 저장

  · \System Volume Information\


5.5. 침해 아티팩트

  · UserAssist

  · NTUSER.DAT\Software\Microsoft\Windows\CurrentVersion\Explorer\UserAssist\

  · 응용프로그램 사용 로그 – 응용프로그램 종류, 최종 실행 시각, 실행 횟수 등 확인 가능

  · http://www.symantec.com/connect/forums/system-tool-malware-or-spyware

  · MUICache

  · UsrClass.dat\Software\Classes\LocalSettings\MuiCache\

  · MUI (Multilingual User Interface) 다중 언어 지원을 위해 프로그램 이름 캐시

  · 새로운 프로그램 실행 시, 자동으로 리소스 영역에서 프로그램 이름을 추출하여 저장

  · LEGACY_*

  · HKLM\System\ControlSet00#\Enum\Root\

  · 악성코드가 직접 생성하기 보다는 실행 시 운영체제에 의해 생성되는 키

윈도우 서비스로 동작하는 악성코드 정보

  · 레지스트리 키 마지막 수정 시간은 악성 서비스의 처음 실행 시간

  · Tracing

  · HKLM\SOFTWARE\Microsoft\Tracing

  · 라우팅 및 원격 액세스(Routing and Remote Access) 서비스가 기록하는 추적정보

  · 복잡한 네트워크 장애를 해결할 목적으로 저장



6. AV로그


6.1. 안랩

  · 로그 -> (텍스트 인코딩 | 바이너리)

 - %SystemDrive%\Program Files\AhnLab\[ProductName]\log

  · 검역소 -> 바이너리

 - %SystemDrive%\Program Files\AhnLab\[ProductName]\Quarantine

  · 내보내기 기능을 이용해 텍스트로 저장

6.2. 이스트소프트 알약

  · 로그 -> 바이너리(바이너리로 되어있기 때문에 알아볼 수 없다)

 - %SystemDrive%\ProgramData\ESTSoft\AlYac\log

  · 검역소 -> 바이너리

 - %SystemDrive%\ProgramData\ESTSoft\AlYac\quarantine


6.3. 윈도우 디펜더

  · 로그 -> 이벤트 로그와 통합 (윈도우 이벤트와 통합했기 때문에 알아보기 쉽다)

  · 검역소 -> 바이너리

 - %SystemDrive%\ProgramData\Microsoft\Windows Defender\Quarantine


6.4. 시만텍 엔드포인트 프로텍션 (SEP)

  · 로그 -> 텍스트 형식 (시간만 인코딩 되어 알아보기 쉽다)

 - %SystemDrive%\Program Files\Symantec\Symantec Endpoint Protection\[…]

검역소 -> 바이너리

 - %SystemDrive%\Program Files\Symantec\Symantec Endpoint Protection\Quarantine



7. 볼륨섀도복사본


  · 윈도우의 시스템 복원 기능으로 XP의 “시스템 복원 지점””이 Vista 이후 변화됨

 - 특정 시각의 파일, 폴더 등을 수동 또는 자동으로 복사본(스냅샷)을 생성하는 서비스

 - 윈도우 포렌식 분석의 필수 데이터!!!

  · VSS 목적

 - 볼륨 백업본을 통해 시스템 복원 기능 제공 (이전 버전, 삭제된 파일 복구 등)

 - 파일 잠금 문제 회피

 - 읽기 전용인 볼륨 섀도 복사본으로 다른 파일의 쓰기 간섭을 회피

  · 볼륨 스냅샷 서비스 지원

 - 윈도우 Server 2003/2008/2012

 - 윈도우 Vista, 7, 8


7.1. 경로

  · 저장 경로 : %SystemDrive%\System Volume Information

  · 제외 파일 목록 : HKLM\SYSTEM\CurrentControlSet\Control\BackupRestore\FilesNotToSnapshot


7.2. 생성시점

  · 수동 (Vista/7)

  · 매 24시간 마다 (Vista)

  · 매 7일 마다 (7)

  · 윈도우 업데이트 전 (Vista/7)

  · 서명되지 않은 드라이버 설치 시 (Vista/7)

  · 프로그램에서 스냅샷 API 호출 시 (Vista/7)


7.3. 획득 가능 정보

  · 백업된 시점의 시스템 흔적 (파일시스템, 레지스트리 등)

  · 백업 시점 간에 변화된 시스템 흔적 비교


7.4분석과정

   1) 라이브 분석이 가능하다면 라이브 분석!!!

   2) 이미지를 획득한 경우, EnCase PDE나 Arsenal Image Moutner 사용!!

   3) 2번이 가능하지 않을 경우, VHD로 변환 후 [VHD 연결]!!!

   4) 스냅샷 목록 및 생성 일자 확인!!!

   5) 필요한 파일만 선별 수집하여 분석 진행!!!



8. 호환성 아티팩트


  · 운영체제의 업데이트에 따라 이전 버전과의 호환성 기능 제공

  · 호환성 문제의 대부분은 버전에 따라 달라진 API 문제

  · 운영체제는 호환성 문제가 있는 API를 탐지한 후, 대체 API로 연결


8.1. 필기

  · 취약한 API는 윈도우즈에서 알아서 제거한다. 하지만 기존의 프로그램은 해당 API를 이용하므로 윈도우즈에서 대체해주어야한다 따라서 그 기록은 로그에 남게되는데 이러한 로그를 분석할 일이 생길것이다.


8.2. 응용프로그램 호환성 캐시

  · 호환성 문제가 발생했던 응용프로그램의 정보 저장

  · 저장경로 -> 레지스트리

 - 키 : HKLM\SYSTEM\ControlSet00#\Control\Session Manager\AppCompatCache

 - 값 : AppCompatCache


8.3. 응용프로그램 호환성 데이터베이스

  · 호환성 데이터베이스 파일 경로

 - %SystemRoot%\AppPatch(64)\

  · SDB(Shim Database)

 - 호환성 문제가 있는 프로그램 목록과 해결 방안

 - sysmain.sdb

 - drvmain.sdb

 - msimain.sdb

 - pcamain.sdb


8.4. 응용프로그램 호환성 플래그

  · “이 프로그램이 제대로 설치되었습니다“ 선택 시 레지스트리에 정보 저장

 - HKCU\Software\Microsoft\Windows NT\CurrentVersion\ AppCompatFlags\Compatibility Assistant\Persisted

 - HKLM\Software\Microsoft\Windows NT\CurrentVersion\ AppCompatFlags\Compatibility Assistant\Persisted

  · 프로그램 속성 -> 호환성 탭 설정 변경

 - HKCU\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers

 - HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers


8.5. 최근파일캐시

  · 프로그램 실행 시 경로를 임시 저장하기 위한 공간으로 단순 경로 나열

 - %SystemRoot%\AppCompat\Programs\RecentFileCache.bcf

  · 캐시 되는 경우

 - 실행 파일 -> 실행 파일로 파생된 경우 (드롭퍼)

 - 다른 볼륨이나 시스템에서 복사(인터넷 다운로드 포함)된 경우

  · 필기

  · 인터넷에 파일을 다운받으면 캐시폴더에 다운받고 파일을 옮긴다. 그때의 캐쉬가 여기이다.드로퍼의 리스트도 여기에 저장된다.

  · 결론은 윈도우에서는 호환성문제가 있을 경우 레지스트레 관련된 로그를 저장해 놓는다. 따라서 호환성캐쉬만 보면 눈에 뛸 것이다.



9. 윈도우WOW64


9.1. 레지스트리 아티팩트

  · 32비트 소프트웨어의 레지스트리 또한 리다이렉트된다.

  · 64비트 환경에서 동작한 32비트 악성코드의 흔적이 남음

  · HKLM\SOFTWARE\Wow6432Node


9.2. 파일시스템 아티팩트

  · 64비트 프로그램을 돌리면 system32 폴더에 저장된다

  · 만약 32비트프로그램을 64비트 환경에 돌리면 SyWOW64에 기록이 남는다.

  · %SystemRoot%\SysWOW64

 - %SystemRoot%\system32 폴더의 리다이렉트 폴더

 - System32 폴더 하위에 접근하는 32비트 프로그램 데이터는 해당 폴더로 리다이렉트

 - %SystemRoot%\SysWOW64\config 폴더 조사



10. 윈도우 문제 보고(WER, Windows Error Reporting)

  · XP부터 추가된 기능으로 오류 발생 시 디버깅 정보를 수집하여 보고하는 기능

  · MS 파트너(ISV, IHV, OEM 등)일 경우, 보고된 정보 확인 가능

  · 발생 빈도가 높거나 심각한 오류는 핫픽스(Hotfix)를 통해 업데이트


10.1. 텍스트 파일 로그 경로

  · %SystemDrive%\ProgramData\Microsoft\WER\ReportArchive

  · %UserProfile%\AppData\Local\Microsoft\Windows\WER


10.2. 이벤트로그 경로

  · %SystemRoot%\system32\winevt\Logs\Microsoft-Windows-WER-Diag%4Operational.evtx



'보안 > 포렌식' 카테고리의 다른 글

메모리 포렌식 기초 지식  (0) 2016.08.28
APT 분석방법 - 디스크 및 패킷 분석  (0) 2016.06.08
log2timeline(plaso) 사용방법  (1) 2016.05.22
Shortcut  (0) 2015.11.04
[Sleuth Kit] fls - 이미지 파일 목록 추출  (0) 2015.11.02