http://www.magnetforensics.com/how-to-analyze-usb-device-history-in-windows/


http://forensic-proof.com/archives/3632

'Computer > #Go2 포렌식' 카테고리의 다른 글

Filesystem Recovery (NTFS)  (0) 2018.07.21
Filesystem Recovery (FAT32)  (0) 2018.07.21
File System #3  (0) 2014.01.14
File System #2  (0) 2013.12.23
File System #1  (0) 2013.10.28

- FAT(File Allocation Table)


그림 1) FAT Reserved 영역의 추상화한 그림(http://forensic-proof.com/archives/372)




 △ 예약영역 : FAT 파일시스템의 가장 앞부분에 위치하고, 부트섹터 등 파일시스템 설명하는 데이터를 포함하고 있음

                    (FAT12/16) 1섹터만!

                    (FAT32 Only!!)부트섹터는 0,6번 섹터, FSINFO는 1,7, 부트섹터의 부트코드영역 부족시 사용하는 2,8번섹터

                    offset 14-15를 확인하여 섹터 수를 확인!


   ▶ 필수 부트 섹터 데이터(36Bytes) + 부가 부트 섹터 데이터(12,16, 32 각 다름) + 시그니처(55AA)

    예약영역 구조


 △ FAT : 파일의 다음 클러스터와 할당상태 식별 위한 데이터를 갖는 구조체(비할당상태(삭제):offset 0번째 1바이트로 0xE5, 0X00 임)

             백업 FAT 구조체를 포함하는 영역이고 예약 영역 바로 다음 섹터에서 시작


   ▶ FAT 그림

그림 2) FAT 구조체


 △ DATA  : 파일과 디렉토리 내용 저장영역






 △ 디렉토리 엔트리

   ▶ 각 파일과 디렉토리의 메타데이터

   ▶ 디렉토리 엔트리가 위치하는 영역은 Data Area임


'Computer > #Go2 포렌식' 카테고리의 다른 글

Filesystem Recovery (FAT32)  (0) 2018.07.21
USB artifacts  (0) 2014.08.14
File System #2  (0) 2013.12.23
File System #1  (0) 2013.10.28
Memory 분석  (0) 2013.10.10

- 볼륨 & 파티션


   파티션 : 연속된 저장공간을 하나 이상의 논리적으로 나누어 사용할 수 있도록 분할한 공간

   볼륨 : 파일 시스템으로 포맷된 디스크 상의 저장 영역을 의미. OS나 응용프로그램 등에서 이용할 수 있는 저장공간, 섹터들의 집합!


 ※ 파티션과 볼륨의 차이


그림 1) 볼륨 & 파티션 차이

(http://cappleblog.co.kr/130)


 볼륨과 파티션은 같은 개념으로도 사용하지만 엄밀히 말하자면, 볼륨은 연속된 공간이 아니어도 하나 이상의 저장 공간을 부르는 것이고 파티션은 연속되어 있는 볼륨 섹터들의 집합을 말한다


 ※ 일관성 검사 : 파티션을 제외한 영역에 증거가 존재하는지 조사하는 기능을 말함



- MBR(Master Boot Record)

512byte(1Sector) 크기의 구조체로 부팅을 하기 위해 가장 먼저 읽히는 곳이다.

해당 구조는 아래 그림과 같다.



그림 2) MBR 구조


- MBR 구조


Offset 

설명

크기 

000h 

부트코드 

446 Bytes 

1BEh

파티션 엔트리 1 

16 Bytes 

1CEh

파티션 엔트리 2

16 Bytes 

1DEh

파티션 엔트리 3

16 Bytes 

1EEh

파티션 엔트리 4

16 Bytes 

1FEh

시그니처( 55h AAh ) 

2 Bytes 

표 1) MBR 구조


- 파티션 테이블 엔트리 구조(MBR의 부분)


 Offset

설명 

크기 

 00h

 파티션의 상태(00h=Inactive, 80h=Active)

 1 Bytes 

 01h

 파티션의 시작 - Head

 1 Bytes 

 02h

 파티션의 시작 - Cylinder/Sector

 1 Word 

 04h

 파티션의 타입

 1 Bytes

 05h

 파티션의 끝 - Head

 1 Bytes 

 06h

 파티션의 끝 - Cylinder/Sector

 1 Word 

 08h

 MBR과 해당 파티션 섹터 사이의 섹터 수(시작위치)

 1 Double Word 

 0Ch

 해당 파티션의 섹터 수

 1 Double Word 

표 2) MBR의 파티션 테이블 엔트리 구조

'Computer > #Go2 포렌식' 카테고리의 다른 글

USB artifacts  (0) 2014.08.14
File System #3  (0) 2014.01.14
File System #1  (0) 2013.10.28
Memory 분석  (0) 2013.10.10
Live Response  (0) 2013.10.08

- 하드디스크 저장방식

   CHS 방식

    ◇ 하드디스크의 실린더(Cylinder), 헤드(Head), 섹터(Sector) 구조를 기반으로 물리적인 주소를 지정하는 방식. 하드디스크 용량이         커짐에 따라 사용되지 못하고 LBA 방식을 사용하게 됨.

ex) CHS(21,3,20) -> 하드디스크의 3번째 헤드를 21번째 실린더, 20번째 섹터에 위치시킴


   LBA 방식

    ◇ 하드디스크 내부에 존재하는 모든 섹터들을 일려로 늘어뜨린 후 논리적인 번호를 지정하는 방식


   ZBA 방식

    ◇ 플래터의 트랙 길이가 내부보다 외부가 더 길다는 점을 이용하여 길이가 길수록 더 많은 섹터를 할당하는 방식. 트랙의 길이마다         섹터의 수가 다르기 때문에 데이터를 읽고 쓸 때 트랙에 섹터 수를 정확히 알고 있어야함.


CHS, LBA의 경우 트랙의 섹터수가 모두 동일함. 참조(http://forensic-proof.com/archives/355)


- 하드디스크 숨김 영역

   HPA(Host Protected Area)

    ◇ 데이터를 저장할 수 있는 영역이고 일반 사용자가 볼 수 없는 영역임. 하드디스크 끝에 위치. ATA-4 추가

    ◇ HPA 영역을 확인하는 ATA 컨트롤러 명령어 -> IDENTIFY DEVICE(접근), SET MAX ADDRESS(설정), READ NATIVE MAX ADDRESS(접근)

READ_NATIVE_MAX_ADDRESS - IDENTIFY_DEVICE > 0 이면 HPA 존재

    ◇ 확인도구 : BXDR, diskstat, DRIVEID, hpa


   DCO(Device Configuration Overlay)

    ◇ 데이터를 저장할 수 있는 영역이면서 일반 사용자가 볼 수 없는 영역임. ATA-6 추가

    ◇ DCO 영역을 확인하는 ATA 컨트롤러 명령어 -> DEVICE CONFIGURATION SET(설정), DEVICE CONFIGURATION IDENTIFY(접근), DEVICE CONFIGURATION RESTORE(제거)

DEVICE_CONFIGURATION_IDENTIFY : 하드디스크 전체 크기 불러오는 명령(HPA,DCO포함)

READ_NATIVE_MAX_ADDRESS : HPA가 있는 상태면 HPA 영역의 크기를 불러오는 명령(DCO 제외)

IDENTIFY_DEVICE : 하드디스크 크기를 불러오는 명령(HPA, DCO 제외)

DEVICE_CONFIGURATION_IDENTIFY = READ_NATIVE_MAX_ADDRESS = IDENTIFY_DEVICE 이면 숨김영역이 없다는 뜻!! 

    ◇ 확인도구 : Image MASSter Solo 2


   HPA, DCO 확인 도구

    ◇ The ATA Forensics Tool (TAFT) by Arne Vidstrom.

    ◇ EnCase for DOS by Guidance Software

    ◇ FTK (Forensic Toolkit) by AccessData

    ◇ HD Tune Pro



그림 1) HPA, DCO 구별

(http://forensic-proof.com/archives/284)


   OS, BIOS로부터 보이지 않는 HPA, DCO는 사용자에 의해 변경이 가능(Rootkit 설치 등...)

  HDD 증거 수집 시 ATA버전, HPA, DCO 지원 여부 고려가 중요



- 데이터 수집

   컨트롤러의 직접 접근

    ◇ 소프트웨어로 하드디스크 컨트롤러를 통해 디스크 데이터에 접근하는 방법. 단 컨트롤러의 주소지정, 데이터 읽기&쓰기 명령어 등         세부사항을 모두 인지해야함.

   컨트롤러의 BIOS 접근

    ◇ BIOS를 통해 디스크 데이터에 접근하는 방법. 섹터 주소&크기와 같은 데이터를 레지스터에 적재 후 인터럽트 명령어         0x13(INT13h) 실행

   동적 수집

    ◇ 운영체제가 동작하는 상태에서 데이터를 수집하는 단계임. 시스템이 악성코드에 의해 피해를 받았을 경우 변조된 데이터를 추출할         수 있기 때문

   정적 수집

    ◇ 이동장치로 부팅하여 분석 대상 시스템의 데이터를 수집함.

'Computer > #Go2 포렌식' 카테고리의 다른 글

File System #3  (0) 2014.01.14
File System #2  (0) 2013.12.23
Memory 분석  (0) 2013.10.10
Live Response  (0) 2013.10.08
들어가며...  (0) 2013.10.07

- 메모리 분석이 중요한 이유


  ● 악성 파일의 흔적을 찾기 위해서는 메모리 영역에서 분석해야 하기 때문

  ● 개인정보보호 프로그램이 악성코드 판별 기능이 없어서 악성코드조차 보호를 하는 경우가 발생하기 때문

  ● 안티포렌식 기술로 인한 무결성이 저해되기 전 메모리 복구를 하여 정보를 얻어내는것이 중요하기 때문


- 메모리 덤프


  ● 하드웨어를 이용한 메모리 덤프

  ● 소프트웨어를 이용한 메모리 덤프

  ● OS Crash 덤프

  ● 하이버네이션


- 가상 메모리 구조


  ● 가상 메모리란 가상의 기억공간으로 물리적으로 존재하지 않는 메모리다. 프로세스 생성 시 고정된 크기의 가상 메모리가 할당이           되는데 해당 프로세스는 이 가상 메모리를 이용하여 해당 작업을 수행한다. 여기서 가상 메모리는 32bit, 64bit 컴퓨터마다 고정 용량       이 다르다. 또한 가상 메모리 주소와 물리 메모리 주소도 다르며 가상 주소는 물리 메모리 주소와 맵핑되며 부족한 부분은 디스크 주       소를 사용한다.


그림 1) 가상 메모리와 기억 장치의 주소 맵핑(http://upload.wikimedia.org/wikipedia/commons/thumb/6/6e/Virtual_memory.svg/200px-Virtual_memory.svg.png)


  ● 가상 메모리 구조를 간단히 보면 사용자 영역, 커널 영역이 있으며 디테일한 것은 서적이나 구글링을 통해 확인. 이 책엔 디테일한 구조가 나타나 있지만 구글링을 통해 찾지 못했음... 참고로 [그림 2]에서 위가 높은주소, 아래가 낮은주소를 뜻함.


그림 2) 가상메모리 구조

(http://blog.naver.com/psychoria?Redirect=Log&logNo=40113053480)


  ● 가상 메모리와 물리 메모리 맵핑은 TLB -> 가상주소와 물리주소 맵핑 -> 있다면 TLB에 업데이트 시키고 물리주소의 데이터 가져옴

    -> 없다면 가상메모리 주소 자체가 invalid거나 page-out상황



625

그림 3) 가상 메모리 물리 메모리 맵핑 과정

(http://sweeper.egloos.com/m/2988646)




그림 4) 가상주소로 물리주소 찾는 과정


 - EPROCESS, KPROCESS(PCB), PEB

  ● 위 단계와 아래 단계에서 모르는 용어가 몇 개 나와 이를 공부하고자 용어들을 간단하게 정리하려고 한다.


  ● EPROCESS

   ◇ 프로세스가 생성되면 해당 프로세스의 정보를 가진 EPROCESS라는 구조체가 커널 메모리에서 생성된다. 프로세스 관리를 이해하        기 위해 여러 객체를 포함하고 있으며 시스템 공간에 존재하기 때문에 WinDbg에서 확인할 수 있다.(그림 5의 맨 왼쪽 위치)


  ● KPROCESS(Process Control Block(PCB))

   ◇ EPROCESS의 하부 구조체로 해당 프로세스의 정보를 가지고 있다. 커널 동기화 객체, Dispatcher 객체, CR3 레지스터 값(Context        Switching시 Page Directory 물리 주소 저장소), 쓰레드 리스트 헤더, 프로세스 생성&종료 시간.... 등(그림 5의 오른쪽 위에 위치)

   ◇ 중요한 필드가 무엇인지 잘 몰라서 추후 공부하겠음....


  ● PEB(Process Environment Block)

   ◇ 유저 모드에서 수정되는 정보를 저장하는 구조체이고 프로세스 실행에 필요한 정보들을 담고 있다. 밑에 다시 설명




그림 5) EPROCESS, KPROCESS(PCB), PEB

(https://t1.daumcdn.net/cfile/tistory/1168DE0C4B7BB72130)



 - 프로세스

  ● 메모리 분석 시 프로세스를 찾는 것이 중요하다.  EPROCESS에는 많은 필드들이 있고 이들을 모두 분석한다면 아마....EPROCESS       의 필드 중 몇 가지 필드에 대해 설명하겠다.


㉠ PEB(Process Environment Block)

   ◇ 프로세스의 환경설정 값을 가지고 있고 프로세스가 로드한 모듈이나 이미지 로더, 힙 매니저 등 데이터를 담고 있다. 

       커널영역의 EPROCESS에 있는 PEB는 유저영역의 PEB의 주소를 가지고 있고, 유저영역의 PEB는 실제 프로세스 관련 데이          터들을 담고 있다.(그림 5 에서 동그라미를 제외한 부분이 커널 영역, 동그라미 친 부분이 유저영역)

 PEB가 커널영역과 유저영역에 둘 다 있는 이유는 데이터를 유연하게 접근하기 위해 유저영역에 둔 것이다. 

   

㉡ ActiveProcessLink

   ◇ 이 필드는 해당 시스템의 프로세스들 간의 연결을 담당하는 역할을 하고 이중연결리스트로 되어 앞뒤로 프로세스 walking을          할 수 있다. 예를들어 cmd.exe와 notepad.exe가 시스템에 올라와 있고 WinDbg로 cmd.exe의 ActiveProcessLink로 따라가게        된다면 notepad.exe의 EPROCESS의 PCB 필드를 가리키고 있다.

그림 6) ActiveProcessLink 역할 구조

(http://m.ahnlab.com/kr/site/securityinfo/secunews/secuNewsView.do?seq=17602)


 ※ PSActiveProcessHead는 ActiveProcessLink의 첫 시작점이다. 따라서 환형구조를 이루고 있다.

  

   ◇ DKOM(Direct Kernel Object Manipulation)


그림 7) DKOM을 통한 프로세스 은닉 구조

(http://codeengn.com/archive/Reverse%20Engineering/Hooking/DKOM%EC%9D%84%20%EC%9D%B4%EC%9A%A9%ED%95%9C%20%EC%9D%80%EB%8B%89%20%EA%B8%B0%EB%B2%95%20%5Balonglog%5D.pdf)


 ActiveProcessLink에서 은닉하고자 하는 프로세스의 링크를 없애는 것이다. 그림 7을 보면 더욱 이해가 편할 것이다. 프로세스를 은닉하는 이유는 프로세스를 은닉함으로써 분석을 어렵게 하고, 빠른 대응을 하지 못하게 함이 아닐까 생각한다.


  ● Process Enumeration

   ◇ Win API : CreateToolHelp32SnapShot()-> Process32First() -> Process32Next() -> NtGetSystemInformation() 호출

  -> NtGetSystemInformation()이 조작되면 Process 목록을 모두 출력하지 못하는 상황 발생

   ◇ 작업관리자, pslist(Volatility)

  -> 악성코드에 의해 OS는 잘못된 정보들을 얻어올 수 있음

   ◇ 리스트 워킹 : ActiveProcessLink를 따라다니며 모든 프로세스 목록을 얻음

   ◇ EPROCESS Scanning(패턴매칭) : EPROCESS가 공통적으로 가진 필드들을 조사하는 방법

   ◇ CSR PROCESS List 활용 : CSRSS.EXE 프로세스 생성시 내부적으로 프로세스 목록을 가지고 있다.

  -> 하지만 system, smss, csrss 프로세스는 나타나지 않는다.

   ◇ Thread List 활용 : Thread가 속한 Process를 얻을 수 있다.


'Computer > #Go2 포렌식' 카테고리의 다른 글

File System #3  (0) 2014.01.14
File System #2  (0) 2013.12.23
File System #1  (0) 2013.10.28
Live Response  (0) 2013.10.08
들어가며...  (0) 2013.10.07

+ Recent posts