slide-image

 

디지털포렌식

[2019-1]

# 03

 

이번에는 레지스트리 포렌식에 대해서 배웠다.

레지스트리 분석은 포렌식적으로 윈도우 설치 정보, 계정 정보를 확인할 수 있고, 부팅 시 자동으로 실행되는 응용 프로그램 목록을 확인해서 악성 코드를 분석할 수도 있고, 사용자 활동이나 프로그램 설치 정보, 하드웨어 정보를 알 수 있어서 윈도우 포렌식 분석의 필수 요소이다.

윈도우 레지스트리는 MS WIndow 운영체제에서 운영체제와 응용프로그램 운영에 필요한 정보를 저장하기 위해서 고안된 계층형 DB이다. 부팅 과정, 로그인, 응용프로그램 실행, 사용자 행위 등 정말 모든 활동에 관여한다. 따라서 window 시스템 분석시에 필수 요소이고, 이를 토대로 추가적인 포렌식 분석 대상을 선별할 수 있다.

레지스트리 포렌식을 하는 방법은 온라인과 오프라인이 있는데, 온라인 레지스트리 분석은 활성 시스템에서 레지스트리 편집기(regedit.exe)를 통해서 레지스트리를 확인하거나 수정할 수 있는데, 사실 추천하지 않고, 잘 사용하지 않는다. 

오프라인 레지스트리 분석은 비활성 시스템에서 레지스트리를 분석하는 것으로, 포렌식 복제 드라이브나 이미징 파일을 사용하는 것이다. 레지스트리 하이브 파일을 미리 수집해야하고, OS별, 버전 별로 하이브 파일 정확한 위치를 사전에 알아두어야 한다.

레지스트리 구성으로는 폴더 역할은 레지스트리 키가 하고, 파일 역할은 레지스트리 값이 하는 것이다. 총 5개의 루트키와 각 루트키의 하위키(서브키)로 구성되고, 루트키 바로 아래의 서브키 트리구조를 하이브라고 하는 것이다.

즉, 하이브 파일은 레지스트리 정보를 저장하고 있는 물리적인 파일로 활성 시스템 커널에서 하이브 파일을 관리하여 일반적인 방법으로는 접근이 불가능하다. 이 때문에 활성 중인 시스템의 온라인 레지스트리 포렌식 방법을 거의 쓰지 않고 이미징 파일로 추출하는 편이다.

사진에서 보면,  빨간색 부분이 HKEY_LOCAL_MACHINE 루트키와 하이브인 것이다.

그리고 이름 칼럼의 있는 것들이 value이고, 종류 칼럼의 것들이 data type, 데이터 열의 것들이 data이다.

레지스트리 루트키는 HKEY_CLASSES_ROOT(HKCR), HKEY_CURRENT_USER(HKCU_, HKEY_LOCAL_MACHINE(HKLM), HKEY_USERS(HKU), HEKY_CURRENT_CONFIG(HKCC), HKEY_PERFORMANCE_DATA(HKPD)가 있는데 아까 루트기가 5개라고 했는데 6개인 이유는, 마지막 HKPD가 눈으로 접근이 불가능 하기 때문이다. 그래서 사진에서도 루트키가 5개 밖에 안 보인다. 그리고 실제 하이브 파일로 저장되는 루트키는 HKU와 HKLM 뿐이며, 나머지들은 이 둘 에서 파생된 것들로 파일로 존재하지 않는다.

HKCR은 파일확장자와 확장자가 사용할 연결 프로그램의 매핑 정보이고, COM(Component Object Model)오브젝트 등록 정보를 저장한다. 독자적인 서브키가 없어 HKLM과 HKU의 classes 서브키를 가져와 자신의 서브키로 만든다. HKLM/SOFTWARE\Classes와 HKU\<SID>/Classes의 집합으로 이루어진다.

파일과 프로그램 간 매핑 정보를 알려줌.

HKCU는 현재 스시템에 로그인하고 있는 사용자의 시스템 정보를 저장한다. HKU하위 유저들 중 현재 로그인한 유저에 해당하는 서브키를 포함해서 구성된다.

HKU에서 1001으로 끝나면 현재 로그인된 계정.
1001으로 끝나는 계정이 HKCU에 그대로 있음.

HKCU의 서브키들은 

이렇게 구성되고, Software 서브키가 중요하다.

HKLM은 시스템에 있는 HW와 SW 설정 정보, 드라이버 정보를 저장하고, 하드디스크에 있는 하이브 파일들과 메모리에 있는 하이브 파일들을 포함한다. 자체 하이브 파일을 가지고, 서브키는 

이렇게 구성된다. SAM과 SECURITY는 시스템 계정으로만 접근이 가능해서 토렌식 도구를 통해(이미징 파일, PsExec 툴...) 시스템 계정을 통해서 접근해야 한다. 관리자 계정으로도 접근이 안된다. 그리고HARDWARE 서브키는 휘발성 정보이므로 파일로 존재하지 않고, 메모리에 위치한다. SYSTEM 서브키는 시스템 부팅될 때의 환경 설정 정보를 저장해서 부팅이 제대로 안되고 꺼질 때를 대비한다.

SYSTEM의 CurrentControlSet은 디바이스 드라이버와 서비스 등 시스템 환경 설정 정보가 담겨 있는데, 부팅에 관련된 정보도 있다. 부팅 시 사용된 ControlSet001이나 ControlSet002이 링크가 되어있는 것인데, 이는 Select 키의 Current 값에 따라 현재 사용중인 ControlSet이 무엇인지 확인이 가능하다.

 

HKU는 시스템에 있는 모든 계정과 그룹에 대한 프로파일 정보를 저장한다. 사용자 최상위 폴더 아래에 있는 NTUSER.DAT 파일의 집합으로 구성된다. 

HKU의 서브키 내용들.

 

HKCC는 시스템 부팅 시에 사용되는 하드웨어 프로파일 정보가 저장되고, 별도의 하이브 파일을 갖지 않아서 현재 활성화되어 있는 하드웨어 프로파일 정보를 HKLM/CurrentControlSet/Hardware/Profiles/Current로 링크해서 가져온다.

HKPD는 성능 카운터이다. 성능 정보를 저장하는데, 시스템의 성능을 측정하여 관리하는 매커니즘을 OS와 응용 프로그램에서 활용하고 따라서 레지스트리 편집기를 통해 접근이 불가하고, 레지스트리 함수(RegQueryValueEx() 등 )로만 접근이 가능하다.

 

레지스트리 파일(하이브) 수집 방법으로는 온라인/오프라인에 따라서 다르다.

온라인 하이브 파일 수집은 일반적으로 커널에서 레지스트리 파일을 관리하고 실행하고 있기 때문에 획득이 불가능하다. 따라서 직접 파일시스템을 해석하거나 DeviceIoControl() API를 통해서 획득할 수 있다. 하이브 목록을 확인하는 것은 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\hivelist에서 확인할 수 있고, RegEx라는 활성 시스템 레지스트리 하이브 파일 수집 도구를 이용할 수 있다.

오프라인 하이브 파일을 수집하는 방법은, 복제한 저장매체나 이미징 파일에서 추출하는 것인데, 각 OS 버전 별 하이브 파일의 위치를 확인해야 한다. 

그리고 하이브 파일은 운영체제에 의해 백업되거나 관련 로그가 생성되는데, 로그 파일도 동일한 하이브 구조를 가진다. 백업 및 로그 하이브 파일은 기존 하이브 파일의 일부 정보만 저장된다.

( 백업 하이브: %SystemRoot%\System32\config\RegBack, 로그 하이브: %SystemRoot%\System32\config\<하이브>(.LOG1, .LOG2, .LOG3) )

 

VSS(Volume Shadow Copy Service) 내의 하이브 백업은 비스타 이후 시스템 복원 지점을 위해서 사용되고, VSS 복사본에 하이브 데이터가 저장될 수 있다. 이를 통해 저장 복원 시접에서의 사용자 흔적을 파악할 수 있다.

 

이제 레지스트리를 분석해보면, 기본 시스템 정보 키를 통해서 시스템 정보를 알 수 있다. (HKLM\Software\Microsoft\WindowsNT\CurrentVersion)

- ProductName: 운영체제 이름 - Owner: 사용자 이름 - Organization: 조직 이름 - ProductId: 운영체제 식별자 - BuildLab(Ex): 운영체제 세부 버전 - InstallDate: 운영체제 설치 날짜 (UNIX 시간 형식) - SystemRoot: 운영체제 설치 루트 폴더

 

컴퓨터 이름은 HKLM\System\CurrentControlSet\ComputerName\ActiveComputerName에서 알 수 있다.

 

시스템의 마지막 종료 시각은, HKLM\SYSTEM\ControlSet00N\Control\Windows에서 ShutdownTime 값에서 알 수 있다.

 

표준 시간대 정보는 HKLM\System\CurrentControlSet\control\TimeZoneInformation 에서 알 수 있다.

 

시간 정보는 작업 표시줄, 제어판으로 접근이 가능하고 레지스트리 분석으로는 작업 표시줄의 시간정보 기록만 남는다.  현재 시간 정보는 2000/XP/Vista에서 메모리에서만 수집이 가능하고, 현재 시간을 변경했다는 정확한 증거는 수집이 불가능해 무결성이 보장되지 않는다.
그러나 시스템 현재 시간을 담당하는 애플릿에 접근한 시간, 접근 횟수를 알 수 있다. HKU\{USER}\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\UserAssist\{75048700-EF1F-11D0-9888-006097DEACF9}\Count의 값: HRZR_EHAPCY:gvzrqngr.pcy 에서 알 수 있다. 
(Window 7의 경우 이 값이 존재하지 않고, win10에도 중간부터 경로 없음)

응용 프로그램 사용 로그는 HKU\{USER}\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\UserAssist\{GUID}\Count에 있다. 

 

응용프로그램 사용 로그는, 그림판에서 뭘 열었는지 등의 흔적들을 알아내는 것인데, 응용 프로그램 종류, 최종 실행 시각, 실행 횟수, 세션 아이디를 확인할 수 있다. (툴)

 

시스템 사용자 목록은 HKLM\SAM\SAM\Domains\Account\Users\{RID}에서 확인할 수 있다. SAM은 시스템 계정이 있어야 하고, 저 경로로 들어가면 F와 V 값이 있다.

F와 V 값에 저장되는 계정의 정보들.

 

시스템 사용자 프로필 목록은 HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\{SID}에서 알 수 있다. 앞의 S-1-5...이런 것들은 권한을 나타내고 뒤의 1001은 현재 로그인을 나타낸다. 아마 1000부터 할당해서 1001이 현재 로그인을 나타낸다고 알고 있음.

 

마지막으로 로그인한 사용자는 HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon의 LastUsedUsername값에서 알 수 있다. 

 

사용자별 기본 경로는 HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders에서 알 수 있다.

 

윈도우7에서 탐색기에서 검색했던 정보는 HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\WordWheelQuery에 있다고 한다. 나는 win10이여서 안해보았다..  MRUListEx 값을 통해 검색어의 사용 순서도 확인할 수 있다고 한다.

최근에 열어본 파일은 윈7에서 HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\RecentDocs에 존재하고, 확장자별로 분류되어 있다. MRUListEx값을 통해서 열어본 순서를 확인할 수 있다. 마찬가지로 안 해봄.

최근에 실행한 명령도 윈 7에서 HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\RunMRU에서 확인할 수 있다. 실행 창 (win+R)을 통해 실행한 명령 목록을 보여주는 것이고, 최근 실생한 명령 순서는 MRUList의 알파벳 순서이다. ba라고 되어있으면 b값의 데이터 cmd\1가 먼저인 것임.

 

'EVI$I0N > 2019-1' 카테고리의 다른 글

[딥러닝] #04  (0) 2019.05.20
[웹보안] #04  (0) 2019.05.13
[와이어샤크] #03  (0) 2019.05.06
[딥러닝] #03  (0) 2019.05.06
[웹보안] #03  (0) 2019.04.29