Theory/Forensic

레지스트리 분석

D4tai1 2019. 1. 19.

1. 레지스트리 분석

(1) 레지스트리란?

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


 [2] HKEY_CLASSES_ROOT를 비롯하여 5개의 가장 상위키(=루트키)를 갖는다.


 [3] 각 루트키 아래의 하위키부터 그 아래의 모든 하위 키를 포함하는 트리 구조를 하이브(Hive)라고 한다.


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


 [5] 레지스트리 파일과 매칭되지만 1:1로 매칭되지는 않는다.


 [6] 디렉토리 개념이고 KEY와 VALUE 형태로 구성되어 있다.


 [7] VALUE에는 [이름, 데이터]로 구성되어 있으며 상위 키 HIVE는 파일이다.


(2) HIVE KEY

 [1] HKEY_CLASSES_ROOT[HKCR]

  ▶ 파일 확장자에 대한 정보가 들어있다.

  ▶ 각 파일과 프로그램간의 연결에 대한 정보가 들어있다

  ▶ 마우스 오른쪽 단추의 등록 정보 등이 있다.

  ▶ 예시) 확장자와 프로그램간에 매핑[MP4파일 -> 팟플레이어]을 말한다.

  ▶ 모든 형식의 파일 확장자가 sub key 형태로 구성되어 있다.


 [2] HKEY_CURRENT_USER[HKCU]

  ▶ 현재 로그인 중인 사용자들에 대한 등록 정보(사용자의 배경화면, 디스플레이 설정이나 단축 아이콘의 정보 등)를 저장한다.

  ▶ 응용프로그램의 우선 순위도 다룬다.

  ▶ 보안 접근 허용 여부를 설정한다.


 [3] HKEY_LOCAL_MACHINE [HKLM]

  ▶ 사용자와 무관하며 시스템관련 환경설정 저장한다.

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

  ▶ 사용 중인 하드웨어 및 소프트웨어에 대한 정보를 가지고 있다.

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

  ▶ HKLM/Software/CLASSES : HKEY_CLASSES_ROOT의 키 값과 동일한 값을 가진다.

  ▶ 두 곳이 연동되어 생성이나 삭제가 같이 이루어진다.


 [4] HKEY_USERS[HKU]

  ▶ 이전 사용자 초기화 파일을 보관한다.

  ▶ 두 키 사이에서 겹치는 일이 발생하면 HKEY_CURRENT_USER가 우선시 된다.

  ▶ 짧은거는 시스템계정, 긴거는 사용자계정[일반사용자 뒤에 1000부터]을 말한다.

  ▶ 뒤에 class붙은 것은 root와 비슷하다고 생각하면 된다.

  ▶  S - 1 -5.... 이런 것을 SID라 부른다.

  ▶ 사용자별로 확장자에 따라 다른 응용프로그램 실행한다.

  ▶ 정책을 사용자 전체에 하면 LOCAL_MACHINE에 기록된다.

  ▶ 개별사용자에게 정책을 설정하면 긴 사용자계정 아래에 HKEY_USERS의 S - 1 -5....에 사용자관련 설정 정보가 들어있다.

  ▶ 계속 사용중이라 복사 및 삭제가 불가능하며 인케이스나 plaso로 분석이 가능하다.


(3) Windows Registry 분석

 [1] 환경변수만 저장하지 않는다.

 [2] 최근에 열었거나, 실행, 수정한 문서에 대한 사용 흔적이 남는다.

 [3] 윈도우 서버에서 불법 계정이 생성되었는지 확인이 가능하다.

 [4] 특정 프로그램을 설치여부에 대한 확인이 가능하다.(삭제를 한 경우에도 그 흔적이 남아 있을 수 있음)

 [5] 자동 시작 프로그램에 대한 기록도 알 수 있다.

 [6] 인터넷 익스플로러, 명령창에서 입력된 URL 리스트, 명령어 등에 대한 기록이 남는다.

 [7] 네트워크 연결 목록에 대한 기록도 남는다.

 [8] 바이러스 등 악성 프로그램에 의한 감염여부를 알 수 있다.

 [9] 컴퓨터 정보도 확인이 가능하다.

>> [6]이후의 정보는 악성코드에 사용될 수도 있다.


 (4) MRU (Most Recently Used) - 레지스트리 경로는 XP기준

  ▶ 가장 최근에 사용된 파일을 알 수 있다.

  ▶ 프로그램 등에 대한 정보 목록을 말하며 일부 정보들이 Registry에 기록된다.

 [1] OpenSavePidlMRU

  ▶ 경로는 HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\ComDlg32\OpenSavePidlMRU 이다.

  ▶ ComDlg32는 탐색기는 아니지만 인터넷에서 파일첨부할 때 화면과 비슷한 .dll이다.

  ▶ MRUListEx 는 index순서를 의미 가장 앞숫자가 최근을 말하고 ff는 끝을 말한다.

  ▶ index로 위의 파일중 가장 먼저실행된걸 알 수 있다.

  ▶ 값을 열면 파일 명을 알 수 있다.

  ▶ OpenSavePidlMRU는 lnk형식의 링크파일 구조로 되어있다.

  ▶ Windows에서 기본으로 제공하는 Open/Save Dialog Box에 의해서 Open되거나 Save된 파일을 대상으로 한다.

  ▶ Internet Explorer나 FireFox에 의해서 Open되거나 Save된 파일이 기록되며 Microsoft Office에 의해 Open되거나 Save된 파일은 기록되지 않는다.

  ▶ Subkey *는 해당 파일의 Full Path를 저장하며 10개의 목록을 기록한다.

  ▶ 다른 Subkey는 파일 확장자 별로 10개의 파일 목록을 기록한다.


 [2] LastVisitedMRU

  ▶ 경로는 HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\ComDlg32\LastVisitedMRU 이다.

  ▶ OpenSaveMRU에 새로운 항목이 추가되면 이 키에 새로운 값이 생성되거나 수정된다.

  ▶ 이 키에 존재하는 각각의 Registry 값은 Binary 형태로 최근 사용된 실행 프로그램의 파일명과 Open/Save한 파일이 존재하는 폴더 Path로 이루어진다.

  ▶ 한 번 쓴 경로를 저장해 놓는다. (10번 불러올 때 매번 c에서 경로를 10번 찾기가 힘드므로...)

  ▶ 파일이 Save되는 경우 폴더 Path는 대상 폴더 Path가 되고 파일이 Open되는 경우 폴더 Path는 Open되는 파일의 폴더 Path가 된다.

  ▶ 만약 동일한 실행 파일명이 이미 존재한다면 폴더 Path 부분만 수정된다.

  ▶ LastVisitedMRU는 파일명이 나오고 뒤에는 링크파일 구조로 되어있다.


 [3] RecentDocs

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

  ▶ 이 키는 %USERPROFILE%\Recent (My Recent Documents, 내 최근문서)와 동일하다.

  ▶ 이 키는 해당 Local 또는 Network 파일을 포함하고 있으며 파일명만을 Binary 형태로 기록하고 있다.

  ▶ OpenSaveMRU 키와 같이 파일 확장자로 구분되어 있다.

  ▶ Subkey “Folder”는 최근에 Open한 파일의 폴더(Driver 문자표시, 부모 폴더가 없는 해당 파일의 폴더) 목록을 유지한다.

  ▶ Subkey “NetHood”는 %USERPROFILE%\HetHook와 동일하며 파일이 Open된 네트워크 공유 폴더 경로(서버와 폴더명) 목록을 유지하고 있다.

  ▶ 가장 최근에 열린 파일이 열린 시간만 알 수 있다.(마지막 수정시간) [방법 : 파일 - 내보내기(txt)]


 [4] RunMRU

  ▶ 경로는 HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\RunMRU 이다.

  ▶ 이 키는 [시작]->[실행]을 선택하여 실행된 명령어(예, cmd, regedit 등)의 목록을 유지한다.

  ▶ 여기서 MRUList 값은 알파벳 list로 이루어지는데 각각 목록에 나타난 명령어 항목을 의미하고 있으며 명령어 항목이 추가된 순서에 따라서 정렬되어 있다.

  ▶ 그러나, 가장 최근에 추가된 명령어 항목이 가장 최근에 사용된 명령어를 의미하지는 않는다. (이미
목록에 존재하면 해당 명령어 항목을 Update하지 않으며 LastWrite[1], MRUList 또한 Update되지 않는다.)

  ▶ 이 키에서 명령어 목록을 삭제하더라도 Run(실행) command box에 남아있는 history list가 삭제되지는 않으며, Windows의 [시작]->[로그오프] 또는 [컴퓨터 끄기]를 클릭했을 때 비로소 삭제된다.

  ▶ LastWrite는 File의 MAC(Modified, Accessed, Created) Time과 동일하며 이 Time을 확인하기 위해서는 별도의 분석 도구(encase 등)를 사용해야 한다.


 [5] MRU 기록 삭제

  ▶ Windows의 [작업표시줄 및 시작 메뉴 속성] -> [시작 메뉴] -> [시작 메뉴 사용자 지정] -> [시작 프로그램/최근 열었던 문서 목록 지우기]를 선택했을 때 RunMRU를 포함하는 다음 키의 값들이 삭제된다.

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

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

  ▶ HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\ComDlg32\OpenSaveMRU

  ▶ HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\ComDlg32\LastVisitedMRU


 [6] ACMru

  ▶ 경로는 HKCU \Software\Microsoft\Search Assistant\ACMru 이다.

  ▶ 이 키는 Windows default search에서 최근 검색한 내용을 포함하고 있다.

  ▶ Subkey 5001 : 인터넷 검색

  ▶ Subkey 5603 : 검색한 폴더나 파일명을 기록

  ▶ Subkey 5604 : 검색한 단어나 문장을 기록

  ▶ Subkey 5647 : 컴퓨터 또는 사용자 검색 기록


(5) MRU - Windows 7/8 경로

 [1] RecentDocs

  ▶ HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Recent Docs

 [2] OpenSaveMRU

  ▶ HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\ComDlg32\OpenSavePidlMRU

 [3] LastVisitedMRU

  ▶ HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\ComDlg32\LastVisitedPidlMRU

 [4] LastVisitedFolder

  ▶ HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\ComDlg32\LastVisitedPidlMRULegacy

 [5] Recently Used Apps[non-metro apps]

  ▶ HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\ComDlg32\CIDSizeMRU

 [6] ACMru

  ▶ HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\WordWheelQuery


(6) Autorun Location

  ▶ Windows 시스템이 시작(boot process)되는 동안 프로그램을 실행시키기 위한 Registry Key를 말한다.

 [1] HKLM\ SOFTWARE\Microsoft\Windows\CurrentVersion\Run

  ▶ Windows가 구동되면서 실행되어야 하는 프로그램 목록을 기록한다.

  ▶ Windows가 구동되면 항상 실행된다.


 [2] HKLM\ SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce(Ex)

  ▶ Windows가 구동되면서 실행되어야 하는 프로그램 목록을 기록한다.

  ▶ Windows가 구동되면 1회 실행되며 1회 실행되고 나서 해당 항목이 Registry에서 삭제된다.

  ▶ ex) 업데이트시 한 번만 구동 시 실행


 [3] HKLM\ SOFTWARE\Microsoft\Windows\CurrentVersion\RunServices

  ▶ Windows가 구동되면서 실행되어야 하는 서비스 형태의 프로그램 목록을 기록한다.

  ▶ Windows가 구동되면 항상 실행된다.


 [4] HKLM\ SOFTWARE\Microsoft\Windows\CurrentVersion\RunServicesOnce

  ▶ Windows가 구동되면서 실행되어야 하는 서비스 프로그램 목록이 기록되어 있다. (1회 실행되고 해당 항목이 삭제됨)


 [5] HKCU\Software\Microsoft\WindowsNT\CurrentVersion\Windows\Run

  ▶ 사용자가 로그인 하면 실행된다.


 [6] HKCU\Software\Microsoft\Windows\CurrentVersion\Run

 [7] HKCU\Software\Microsoft\Windows\CurrentVersion\RunOnce

  ▶ [6]run은 매번 실행되고 [7]runonce는 이름 그대로 한 번만 실행된다.


(7) Autorunsc.exe

  ▶ 시스템이 Booting 하거나 Logon할 때 자동으로 실행되는 프로그램 목록을 보여주는 프로그램이다.

  ▶ Logon: Logon 전 또는 Logon 직후 실행되는 프로그램 목록

  ▶ Explorer: 탐색기 추가 기능 지원 프로그램 목록

  ▶ dll과 프로세스가 메모리를 공유하고 있어 탐색기에서 사용한 정보 다 캐갈 수 있기에 ,, 

  ▶ Internet Explorer: 브라우저 추가 기능 지원 프로그램 목록 [브라우저 헬퍼 오브젝트]

  ▶ 프로그램이 익스프로러에 접근하여 (EX)툴바) 브라우저에서 하는 모든 것 들을 감시할 수 있다..

  ▶ 공유뿐만 아니고, 컨텐츠, 마우스 이벤트발생 등도 가능하다,.

  ▶ Scheduled Tasks: 스케줄러에 등록된 프로그램 목록

  ▶ Services: 서비스에 등록된 프로그램 목록

  ▶ Drivers: 서비스에 등록된 드라이버 목록[드라이버에 악성코드 심으면..., 자기자신 숨기기 가능]

  ▶ [드라이버는 커널영역, 커널은 공용, 커널메모리 어디든 접근가능, 커널이라 메모리를 조작가능]

  ▶ 커널메모리 어딘가 들어있는데 EPB E프로세스블록 

  ▶ EPB는 링크드리스트로 연결 이것은 OS가 관장, 

  ▶ Codecs: 동영상 Encoding/Decoding 모듈(주로 확장자가 *.ax임)

  ▶ Boot Execute: 일반적으로 부팅시 Disk Validation Check를 하지만 다른 기능을 하도록 할 수 있음(Registry) - 부팅시 디스크검증은 하지만 프로그램을 심을 수 있다.

  ▶ Image Hijects: 프로그램 실행시 추가 기능 수행

  ▶ EXE만으로 실행이 안됨. 시스템 DLL을 사용하여 호출하여 보통 실행한다.

  ▶ 즉 메모리에는 EXE와 DLL이 함께 올라간다.

  ▶ AppInit: 프로그램 실행시 자동으로 Load되는 DLL 모듈 목록

  ▶ 윈도우즈는 레지스트리에 등록해놓으면 프로그램 실행시 함께 실행

  ▶ DLL중에 원하는 것을 EXE 실행 시 함께 올릴 수도 있다.

  ▶ KnownDlls: 시스템이 시작될 때 자동으로 메모리에 Load되는 Dll 목록

  ▶ Winlogon: Logon 직후 Notification을 위해 실행되는 모듈 목록[위 2개는 복잡.. 시스템프로그래밍]

  ▶ Winsock Providers: 추가 Winsock 모듈 목록[소켓], 윈도우 소켓 라이브러리가 이것을 호출

  ▶ 프로세스 - 소켓 - winsock providers - 내가 받고 - 네트워크 전송[해변 파라솔 임대와 비슷]

  ▶ 유해사이트차단프로그램이 이 기능을 이용한다.

  ▶ 패킷 스니핑을 하면 어떤프로세스가 어떤 패킷 날린지 안나온다.

  ▶  이유는 네트워크리소스가 하기 때문이다.

  ▶ 그래서 winsock providers는 프로세스와, 네트워크 사이에 있기 때문에 둘다 잡을 수 있다.

  ▶ 패킷 뿐만아니고 어떤 프로세스가 보냈는지도 알 수 있다.

  ▶ 프로세스는 사용자영역, 네트워크리소스는 커널영역과 연결, port를 할당받아 포트에 대한 포인터(핸들)를 프로세스는 가지고 있다.

  ▶ port.handdle (이것이 소켓) 이 커널함수를 호출해서 네트워크카드에 태워서 내보낸다. 

  ▶ 데이터를 주고받는 매개체이다. [사용자와 커널사이, 포트 주소 들고 있다]

  ▶ 소켓함수를 오픈함으로써 네트워크 통신을 할 수 있다.

  ▶ Print Monitors: 프린터 스풀링 서비스에 로드되는 모듈 목록

  ▶ LSA Providers: : LSA(local security authority), 알림 및 보안 패키지에 등록된 레지스트리 정보 목록

  ▶ Sidebar Gatdzets: Vista 사이드 바 가젯 목록


(8) UserAssist

  ▶ 사용자가 접근한(실행한) 프로그램, shortcut, control panel applet 등을 기록하고 있다

  ▶ 뭔가 실행했다면 마지막에 창을 끈 위치를 저장한다.

  ▶ 이 키에는 2개의 GUID subkey가 존재하며 5E6 (Win7은 CEB)으로 시작되는 subkey는 IE toolbar에 대한 것이고 750 (Win7은 F4E)으로 시작되는 subkey는 Active Desktop에 관련한 것이다.

  ▶ 이 키에 존재하는 값들은 “ROT-13 (로테이션 13번)” 암호화 알고리즘으로 암호화되어 있다.

  ▶ 각각의 알파벳 문자의 code 값에 13을 더한 값을 문자로 사용되며 복호화할 경우 해당 code값에 13을 감산하면 된다.


(9) USBSTOR

  ▶ USBSTOR의 Subkey를 분석할 경우 이미 해당 시스템에서 사용하거나 사용했던 USB 장치를 확인할 수 있다.

  ▶ Device Class ID: Disk와 Ven_제조사, Prod_제품, Rev_리버전, 제조사, 제품명, 버전을 알 수 있다.

  ▶ Unique instance ID: USB 장치의 Unique ID로서 동일 Device Class ID를 갖더라도 장치 별로 구별된다.

  ▶ 시리얼넘버는 시리얼번호 2번째자리에 &가 있다면 시리얼번호가 없다는 의미이다.

  ▶ HKLM\SYSTEM\MountedDevices를 참조하여 어떤 USB 장치가 어떤 드라이브(C:, D: etc…)에 mount되어 있는지 확인할 수 있다. (Unique instance ID\ParentIdPrefix 키 이용)

  ▶ 사용한 USB의 저장장치에 대한 정보를 알 수 있다.


(10) 저장장치 사용자

  ▶ 시스템에 등록된 사용자가 많은 경우 해당 USB를 사용한 사용자 계정을 찾을수 있다.

  ▶ Mount Volume의 GUID(글로벌 유니크 아이디)를 찾는다.

  ▶     : ??\\Volume으로 시작되는 레지스트리 값에 포함되는 해당 USB의 ParentIdPrefix를 찾고 ??\\Volume 다음
문자열이 Volume에 대한 GUID이다.

  ▶ 예) \??\Volume 각 사용자의 HKU(전체유저)\ or HKCU(현재사용자)\ 의  NTUSER.DAT\Software\Microsoft\Windows\CurrentVersion\Explorer\MountPoints2 에서 동일한 Volume GUID가 존재하는지 검색한다.

  ▶ GUID가 존재하는 사용자 계정이 USB를 사용한 사용자 계정이 된다.

  ▶ C:\Users\[사용자명]여기에 NTUSER.DAT이 위치한다.

  ▶ GUID는 누가 통제해주는 것이 아니고 매우 큰 수를 가지고 난수를 발생시키므로 매우 큰 수가 동일하지 않으면 동일하지 않기에 전세계에서 유일하다고 본다.
 
  ▶ 의사난수 난수인지 아닌지 증명할 수 없는 것
->증명은 못하지만 어느정도는 난수와 비슷하기에...

'Theory > Forensic' 카테고리의 다른 글

디지털포렌식  (0) 2019.04.27
실시간 대응  (0) 2019.04.27
메모리 수집 분석  (0) 2019.01.19
사이버포렌식 절차  (0) 2018.09.16
사이버포렌식 개론  (0) 2018.09.16

댓글