본문 바로가기

SWUFORCE/Dreamhack

[드림핵 스터디] 레지스트리, find the USB, Autoruns

레지스트리(Registry)

  • Windows 운영체제에서 사용자, 시스템, 프로그램 실행과 관련된 수많은 설정들을 저장할 수 있는 계층형 데이터베이스*
  • 디지털 포렌식 과정에서 기본적으로 수집하는 데이터인 분석 대상 시스템의 기본 정보, 시간 정보를 포함함
  • 사용자의 응용프로그램 실행 흔적이나, USB 연결 흔적 또한 파악 가능하여 분석 가치가 큼

* 계층형 데이터베이스: 데이터가 트리 형태의 구조로 조직되어 반복적인 부모-자식 관계를 가지는 것

 

 

 

 

레지스트리 편집기(Regedit)

  •  Windows + r 창에서 regedit 입력하여 실행 

레지스트리 편집기 1

 

레지스트리 경로, 레지스트리 값 확인 가능

 

 

 

 

 

값 직접 붙여 넣어 경로 찾기

컴퓨터\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion

 

 

 

 

 

레지스트리 구조

  • 5개의 루트 키(Root Key) 존재
     - 루트 키는 윈도우 레지스트리 중 가장 상위 레벨에 있는 레지스트리 키 의미

좌측에 보이는 5개의 루트 키

 

 

 

 

루트 키의 역할

 

  • 직접 값 입력할때 약어 사용 가능
  • HKCU, HKLM 에 사용자 데이터 많이 저장
  • 5개의 루트 키 서로 독립적 X
     - HKCU(현재 로그인한 사용자 정보)는 HKU(모든 사용자 정보)의 하위 키로 존재
     - HKCC는 HKLM과 데이터 대부분이 유사함

 

 

 

 


 

 

 

 

주요 레지스트리 경로

Timezone

  • HKLM\SYSTEM\CurrentControlSet\Control\TimeZoneInformation
  • Bias 값은 현재 시스템 시간과 UTC 시간(국제 표준시)이 얼마나 차이 나는지를 분 단위로 나타냄

Timezone

 

 

  • Bias 값이 -540이므로 540분을 9시간으로 해석하여, 현 시스템 시간에서 9시간을 빼면 UTC가 된다고 이해하면 됨
    (즉 Bias 가 -540이라는 것은 시스템 시간이 UTC+9 임을 나타냄)

Timezone 계산

 

 

 

 

Systeminfo

  • 현재 시스템의 다양한 정보들을 알 수 있음
  • HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion

 

  • InstallDate, InstallTime 필드는 시간 데이터 나타냄
  • 시간 데이터를 저장하는 몇몇 형식들이 있는데, 이 값을 쉽게 변환할 수 있게 도와주는 DCode 도구가 있음
  • 사용 방법
    1. 데이터 형식 설정
    2. 값 입력
    3. Decode 버튼 누르기
    4. 해당하는 값 적절히 선택
  • 보통 원본 데이터로부터 얻은 값들은 Little-Endian, 도구로부터 획득된 값들은 Big-Endian 임
  • InstallDate는 Unix timestamp* 방식 사용하므로 초 단위 이하 데이터는 제공 X
    • InstallDate: 2023-11-28 23:12:26.0000000 +09:00
    • InstallTime: 2023-11-28 23:12:26.2528285 +09:00
  • 레지스트리로 얻은 값은 systeminfo 명령어로도 획득 가능

* Unix TimeStamp: 1970년 1월 1일을 기준으로 현재까지 흘러간 초를 계산해 시간 값 제공하는 방법 

 

 

 

 

 

Autoruns

  • 컴퓨터가 재부팅될 때 자동으로 실행하는 프로그램
  • 악성코드가 침투했을 경우, 해당 경로에 실행 파일을 넣어두고 컴퓨터가 재부팅될 때마다 부활하기 위해 자주 사용됨
  • 경로
    • HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
    • HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce
    • HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnceEx
    • HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
    • HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce
    • HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnceEx

(윈도우 시작 프로그램 설정 화면에 들어가서도 확인 가능)

 

 

 

 

사용자 계정

  • 시스템에 존재하는 모든 사용자의 계정 목록 획득 가능
  • HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList

 

  • 시스템 계정 (Windows 에서 기본으로 만들어주는 계정)
    • S-1-5-18: systemprofile
    • S-1-5-19: LocalService
    • S-1-5-20: NetworkService
  • 사용자 계정 (사용자가 만든 계정)
    • S-1-5-21-2597749115-3850017851-3674950291-1001
  • PrifileImagePath 필드 - 사용자 홈 디렉터리
  • Sid 필드 - Windows 계정의 SID(Security ID) 값
    • Sid는 하나의 Windows 시스템에서 사용자 별로 고유하게 부여되는 ID 값임 (맨 마지막 숫자 값 중요)
    • 관리자 계정(Administrator) - 500
    • 게스트 계정(Guest) - 501
    • 일반 사용자 계정 - 1000 이상의 값

 

LocalProfileLoadTimeHigh 필드 + LocalProfileLoadTimeLow 필드 = 사용자 계정의 최종 로그온 시각

LocalProfileUnloadTimeHigh 필드 + LocalProfileUnloadTimeLow 필드 = 사용자 계정의 최종 로그오프 시각

 

 

 

High 값(0x01da7a06)과 Low 값(0x34dc09ea) 조합은 DCode 등의 도구를 통해 계산 가능

DCode 로 LocalProfileLoadTime 시간 값 계산

 

 

 

 

환경 변수

  • 프로세스가 컴퓨터에서 동작하는 방식에 영향을 미치는 동적인 값들의 모임
    (프로세스가 컴퓨터에서 잘 동작할 수 있도록 시스템에 미리 설정해 둔 변수)
  • 악성코드에서 스크립트 실행할 때 특정 값 숨겨놓는 경우 있으므로 중요 수집 데이터임
  • 사용자 계정 환경 변수 - HKCU\Environment
  • 시스템 환경 변수 - HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment

 

 

 

 

기기 연결 흔적

  • 디지털 포렌식 분석 과정에서 가장 주목해야 할 데이터 중 하나
  • 레지스트리 분석을 통해 USB 제품명, 시리얼 번호, 최초 연결 시각, 마지막 연결 시각 알 수 있음
  • 기기 연결 흔적 저장하는 레지스트리 경로 (? 는 변할 수 있는 값)
    • HKLM\SYSTEM\ControlSet00?\Enum\USB
    • HKLM\SYSTEM\ControlSet00?\Enum\USBSTOR
    • HKLM\SOFTWARE\Microsoft\Windows Portable Devices\Devices
    • C:\Windows\INF\setupapi.dev.log

 

 

1. HKLM\SYSTEM\ControlSet00?\Enum\USB

  • VID_XXXX&PID_XXXX 구조에서 VID는 USB 제조사 ID, PID는 제품 ID 의미 (MI는 멀티 인터페이스)
    > VID와 PID를 통해 연결된 USB 장치 식별할 수 있음
  • 예시로 하나를 검색해 보면, VID_IC7A&PID_05A5는 주로 삼성 노트북에서 사용되는 Koga Touch Co., Ltd. 사의 HID 방식 터치스크린 기기를 의미함

 

 

 

2. HKLM\SYSTEM\ControlSet00?\Enum\USBSTOR

  • USB 중 저장 장치는 이 경로에 저장됨
  • Ven_XXXXX&Prod_XXXXX&Rev_XXX 구조 (순서대로 제조사, 제품, 버전)

 

 

 

3. HKLM\SOFTWARE\Microsoft\Windows Portable Devices\Devices

  • FiendlyName 필드에서 시스템에 마운트 된 볼륨 이름 확인 가능
  • 고유 인스턴스 ID: 같은 모델이라도 제품마다 고유하게 부여된 장치의 번호로, 시리얼 번호를 이용해 생성한 값임
     - 시리얼 번호가 있을 때: #{SerialNumber}&{?}#
     - 시리얼 번호가 없을 때: #{?}&{RandomNumber}&{?}#

 

 

 

 

4. C:\Windows\INF\setupapi.dev.log

  • 레지스트리 이외의 파일에서도 USB 연결 흔적과 관련된 정보 획득할 수 있음

 

 

 

 


 

 

 

 

레지스트리 파일(레지스트리 하이브)

  • 윈도우에서 여러 개의 파일들로 나뉘어 저장됨
  • 레지스트리 편집기에서는 이러한 파일들을 모아서 보여줌
    • C:\Users\[UserName]\NTUSER.DAT
    • C:\Users\[UserName]\AppData\Local\Microsoft\Windows\UserClass.dat
    • C:\Windows\System32\config\DEFAULT
    • C:\Windows\System32\config\SAM
    • C:\Windows\System32\config\SECURITY
    • C:\Windows\System32\config\SOFTWARE
    • C:\Windows\System32\config\SYSTEM

 

 

 

 

레지스트리 수집 방법

  • 시스템 파일이기 때문에 시스템이 동작하고 있을 때 일반적인 방법으로는 복사할 수 X
  • 가장 쉬운 방법은 FTK Imager 이용하여 추출하는 것
    1. 위 경로의 파일들을 추출해서 별도의 경로에 저장해 줌 (C:\ 대신 [root] 사용)
    2. 수집 대상 파일에 대응되는 .LOG1, .LOG2 파일* 같이 수집해야 함 (없으면 안 해도 됨)
    3. 파일들 export 한 다음에 하나의 폴더로 모아주기

* .LOG1, .LOG2 파일: 레지스트리 파일을 변경하기 이전의 트랜잭션 데이터를 잠시 보관하는 파일

 

 

 

 

 

레지스트리 수집 후 처리

  • 위 방법대로 수집하면 사용 중이던 레지스트리가 정리되지 않은 상태로 시스템에 복사됨 > dirty 상태
  • dirty 상태인 레지스트리 속 LOG1, LOG2 파일에는 아직 쓰이지 않은 데이터가 남아 있음, 따라서 남아 있는 데이터를 레지스트리에 통합하는 과정을 거쳐야 함
  • RLA 도구 이용하여 통합 (다운)
    • -f 옵션: 파일 단위로 통합
    • -d 옵션: 폴더에 속한 파일 전체에 대해 통합

 

 

 

 

Registry Explorer

  • 레지스트리를 분석할 수 있는 GUI 도구
  • 검색 기능 지원, 북마크 지정 가능, 시스템 사용 중일 때는 접근 어려운 레지스트리 값도 획득 가능
    > 레지스트리 편집기보다 짱

 

 

 

Regripper

  • CLI 기반의 레지스트리 분석 도구
  • 원본 데이터에서 필요하다고 생각되는 부분들을 직접 분석해 결과 출력함 < 장단점 명확
  • Hive File - 수집한 레지스트리 하이브 파일, Report File -  수집된 로그가 저장될 파일

 

 

 

 


 

 

 

 

 

[실습 1 - Find the USB]

  • 레지스트리를 분석하여 사건 발생 당시 연결된 USB 정보 찾기
  • FLAG = {DH{VID_PID_DeviceSerialNumber}

 

FTK imager에서 다운받은 DiskImage.E01 을 열고 추출해야 할 파일들 추출해 줌 (log 파일 포함)

 

 

 

 

추출한 파일들을 dirty 폴더에 넣고 rla 실행시켜서 clean 폴더에 넣게 함

clean 된 파일들을 register explorer 로 열기

USB 흔적을 찾는 것이기 때문에
  - HKLM\SYSTEM\ControlSet00?\Enum\USB
  - HKLM\SYSTEM\ControlSet00?\Enum\USBSTOR

분석해야 함

 

 

USB
USESTOR

 

사건 발생 시점이 4월이라 하였고 Last Removed 된 애 같으므로

USB 에서 > VID_058F&PID_6387

USBSTOR 에서 > Serial Number: 03A49E66&0

 

정답은? DH{058F_6387_03A49E66}

 

 

 

 


 

 

 

 

[실습 2 - Auturuns]

  • 컴퓨터 재부팅마다 계산기 프로그램 실행 문제
  • FLAG = {DH(MD5(File))} < 자동 실행되고 있는 exe 파일을 MD5 해시로 계산한 값
  • HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
  • HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce
  • HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnceEx
  • HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
  • HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce
  • HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnceEx

 

 

검색해서 찾아보다 발견

 

 

exe 를 추출해야 하므로 ftk imager 에서 export 한 다음 HashCalc 로 계산해 주기

정답은? DH{302021d31f2d0bce01d7afc26bfe2ba2}