Digital Forensics 19

#1 GPT - GUID Partition Table (1)

Table of Contents Abstract 본 글과 다음 글에서는 GUID Partition Table에 대해 알아볼 것이다. GPT는 EFI에서 사용하는 디스크 파티션 구조로, BIOS 시스템의 MBR을 개선하기 위해 만들어졌으며, 더 큰 주소 비트를 지원하기 때문에 더 큰 디스크를 인식할 수 있게 되었고, 더 많은 파티션을 생성할 수 있게 됐다. GPT를 알아보기 전에 EFI에 대한 설명을 간략하게 할 것이다. 다만 내용이 길어 본 글에서는 UEFI와 GPT의 개요, 기존 BIOS 시스템과의 호환성 유지를 위한 Protective MBR에 대해 설명하고 주요 내용인 GPT 헤더, 파티션 테이블, 백업 GPT에 대한 설명은 다음 글에서 이어 하도록 하겠다. GPT UEFI(Unified Exten..

#3 MBR - 파티션 테이블 복구

Table of Contents Abstract 본 글에서는 지워진 파티션 테이블 엔트리를 복구하는 법을 알아본다. 먼저 디스크 이미지 내에서 사라진 파일 시스템과 해당 파일 시스템의 BPB(Bios Parameter Block)에서 볼륨의 크기를 알아낸 후 이를 통해 파티션 테이블 엔트리에 적절한 값을 채워넣는 방법을 서술할 것이다. Recovering a Partition Table Scenario 4GB 크기의 VHD를 만들고, 2040MB 크기의 파티션과 FAT 볼륨 2개를 생성했다. 그리고 두번째 FAT 볼륨이 위치한 파티션을 가리키는 파티션 테이블 엔트리를 모두 삭제했다. 이제 두번째 파티션을 복구해보자. 예제 이미지 파일은 아래 링크에 있다. https://drive.google.com/fi..

#2 MBR - Extended Partition Table

Table of Contents Abstract 본 글에서는 MBR(또는 도스 파티션)에서 사용하는 확장 파티션에 대한 설명과 분석 방법을 설명한다. MBR의 주 파티션 테이블은 최대 4개 까지만 파티션을 나타낼 수 있기 때문에 4개를 넘는 파티션을 정의하기 위해 확장 파티션이라는 걸 사용한다. 확장 파티션은 하나의 일반 파티션과 (필요한 경우) 그 다음 확장 파티션의 정보를 가진다. 파티션이 4개를 초과할 경우 주 파티션 테이에는 첫번째 확장 파티션의 위치를 가리키고, 첫번째 확장 파티션은 4번째 파티션의 정보를 가진다. 파티션이 5개라면 첫번째 확장 파티션은 두번째 확장 파티션의 위치를 가리키고, 두번째 확장 파티션은 5번째 파티션의 정보를 가진다. 본 예제에서는 8GB 크기의 VHD를 MBR로 만들..

#1 MBR - Master Boot Record

Table of Contents Abstract MBR은 도스 파티션 시스템의 다른 이름이다. 본 글에서는 볼륨과 파티션의 차이에 대해 간단하게 짚어보고 도스 파티션 시스템을 해석하는 방법을 알아본다. 도스 파티션은 446 바이트의 부트 코드와 64 바이트의 파티션 테이블, 2 바이트의 부트 레코드 시그니처로 나뉜다. 부트 레코드는 운영체제가 설치된 부팅 가능한 파티션을 찾아 해당 파티션에 저장된 VBR로 점프하는 역할을 하며, 파티션 테이블은 파티셔닝 된 디스크에서 각 파티션의 시작 위치와 크기를 나타낸다. MBR Partition & Volume 먼저 파티션과 볼륨에 대해 알아보고 넘어가자. 흔히 파티션과 볼륨을 혼용해서 쓰기도 하고, 크게 구분하지 않는 탓에 동일한 것으로 취급하지만 둘은 엄연히 다..

Log4Shell 공격 흔적 조사

Table of Contents Abstract 최근 가장 큰 이슈인 Log4Shell에 대해 간략하게 알아보고, 서비스 중인 시스템에 Log4Shell에 대한 공격이 들어올 경우 남는 로그나 흔적에 대해 알아본다. 하지만 악성 자바 객체 파일을 실행하는 데엔 실패해 조금 아쉬운 결과를 냈다. Log4Shell Log4j Log4j는 손쉽게 로그를 관리하고 남길 수 있도록 자바에서 사용하는 오픈 소스 로깅 프레임워크다. 자바 자체도 많이 쓰였고, 많이 쓰이고 있는데, 많이 쓰이는 자바 로깅 라이브러리가 Log4j다 보니 많은 자바 어플리케이션이 Log4Shell에 취약했다. 대표적으로 마인크래프트나 애플, 스팀, 트위터, 바이두, 클라우드 플레어, 아마존, 테슬라, 구글 등이 제공하는 서비스들도 이런 취..

vk 셀 복구하기

2019 DFC AF 200 문제는 하이브 파일의 레지스트리를 복구하고, 복구한 레지스트리에서 숨어 있는 파일을 찾아내는 문제였다. vk 셀 복구하는 방법을 AF 200 문제로 알아보자. 하이브 파일은 레지스트리 헤더와 여러 개의 하이브 빈 파일로 이루어져있다. 하이브 빈은 또 여러 개의 셀을 포함하고 있다. 셀은 레지스트리에서 키와 값을 저장하는 구조체다. 종류에 따라 각각의 시그니처를 가지고 있는데, 키를 의미하는 셀은 nk라는 시그니처를, 값을 가지고 있는 셀은 vk라는 시그니처를 가지고 있다. 010 Editor로 2019 DFC AF200 문제로 주어진 하이브 파일을 열면 레지스트리 헤더와 하이브 빈 구조들을 볼 수 있다. 하이브 빈 구조들은 시작 오프셋 값이 모두 0x1000(4096)의 배수..

Registry에서 최근 로그온 사용자 찾기

OtterCTF 메모리 포렌식 문제를 풀다가 현재 시스템에 로그인 중인 사용자를 알아봐야 할 필요가 생겼다. 열심히 구글링 해보니 아래 레지스트리 경로에 마지막으로 로그온 한 사용자가 저장되어 있다고 한다. 제법 유명한 디지털 포렌식 책에도 마지막 로그온 사용자 정보를 아래 레지스트리에서 볼 수 있다고 적혀있다. * Key: HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon * Value name: DefaultUserName 그런데 값 이름이 DefaultUserName인게 영 찝찝했다. 영문 사이트들에서도 시스템 부팅 시 자동 로그온 설정할 때 이 레지스트리 값을 건드리고, 마지막 로그온 사용자를 알아볼 때 사용하진 않는 것 같았다. OtterC..

Login Data 패스워드 복호화

Chrome은 사용자의 편의를 위해 로그인할 수 있는 사이트마다 ID와 패스워드를 기억하는 기능을 제공한다. 다른 브라우저도 이 기능을 지원하긴 할텐데 개인적으로 오페라만 사용하다보니 확신은 못하겠다. 일반적으론 패스워드를 해시화 해 저장한다고 알고있지만, 위 기능처럼 패스워드를 평문으로 기억해야 할 필요가 있는 경우라면 해시화 해 저장할 수 없다. 해시값에서 원문으로 되돌릴 수 없기 때문이다. Windows 용 Chrome에서는 DPAPI인 CryptProtectData를 사용해 패스워드를 암호화 한 다음 SQLite로 저장한다. DB 파일의 이름은 "Login Data"이며, History 파일과 같은 폴더에 위치해있다. * %USERPROFILE%\AppData\Local\Google\Chrome\..

Shellbags 생성/갱신 기준

# Shellbags 레지스트리를 설명하는 글들은 너무나도 많다. 하지만 레지스트리가 언제 생성되고 갱신되는지를 설명하는 글은 없는 듯하여 조사해봤다. 맨 밑에 요약 정리가 있다. 귀찮으면 스크롤바 쭉 내리면 된다. #환경 Windows 10 Pro x64 1909 버전을 가상머신에 설치해 분석했다. #탐색기 - 폴더 열람 후 정상종료 가장먼저 explorer.exe를 사용하여 폴더를 탐색하는 경우를 조사했다. 초기 Shellbags 레지스트리 모습이다. 설치 직후인데 BagMRU 키 밑에 0, 1, 1/0, 총 3개 키가 처음부터 존재했다. 탐색기 주소창을 이용해 %UserProfile%(사용자 홈폴더) 경로에 직접 접근한 후 레지스트리를 확인해봤다. 아무런 변화가 없다. 탐색기를 정상 종료한 후 레지..