분류 전체보기 71

#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 먼저 파티션과 볼륨에 대해 알아보고 넘어가자. 흔히 파티션과 볼륨을 혼용해서 쓰기도 하고, 크게 구분하지 않는 탓에 동일한 것으로 취급하지만 둘은 엄연히 다..

#1 ProcessNotify - 프로세스, 스레드, 이미지 콜백

Table of Contents Abstract Windows는 프로세스나 스레드의 생성/종료, 이미지 로드 같은 이벤트를 실시간으로 모니터링할 수 있는 기능을 제공한다. 본 글에서는 Windows 시스템에서 발생하는 모든 프로세스, 스레드, 이미지 로드 이벤트를 감시하는 기능의 사용법을 간략하게 알아본다. 예제 코드는 깃허브에 올려져있다. Notifies for Process, Thread and Loaded Image Notify for Creating Process CreateProcessNotifyRoutine은 프로세스가 생성되거나 종료될 때 호출되는 콜백 함수다. 이 콜백 함수가 호출될 때는 아직 해당 프로세스의 이미지도 올라오지 않은 상태이다. 프로세스 Notify 콜백은 PsSetCreat..

Development/Windows 2021.12.25

#3 WFP - Filter와 Condition을 이용한 통신 차단

Table of Contents Abstract WFP의 필터와 조건을 이용하면 콜아웃을 호출하는 오버헤드를 줄이면서도 강력한 방화벽 기능을 제공할 수 있다. 필터의 조건에는 어플리케이션이나 원격지/로컬 IP 주소, 포트, 프로토콜, 인바운드/아웃바운드 등 다양한 유형이 존재하며 내가 원하는 조건의 트래픽만 차단하거나 허용할 수 있다. 본 글에서는 8.8.8.8과의 모든 통신을 차단하는 예제를 만들고 설명함으로써 필터 오브젝트를 사용한 방화벽 기능을 어떻게 만드는 지 알아볼 것이다. 예제 코드는 깃헙에 공개했으며, 본문 가장 하단에 링크가 있다. Blocking a communication using Filter & Condition 본 글에서는 8.8.8.8과의 모든 통신을 차단하는 필터 오브젝트를 만..

Development/Windows 2021.12.23

KeAcquireSpinLock과 KeReleaseSpinLock

Table of Contents Abstract Windows의 커널 레벨 어플리케이션에서 공유 자원으로의 접근을 동기화하는 스핀 락과 스핀 락을 사용해 상호배제를 제공하는 KeAcquireSpinLock, KeReleaseSpinLock 함수의 사용법에 대해 알아본다. 또한 두 함수의 기본 원리인 IRQL에 대해서도 간략하게 알아본다. Ke*SpinLock Spin Lock 스핀 락은 Windows 커널 모듈에서 동기화 메커니즘을 제공하는 불투명한(opaque) 구조다. 공유 자원에 접근하는 스레드들의 동기화를 맞춰주는 뮤텍스에서 잠금을 획득한 스레드만이 공유 자원에 접근할 수 있는 것처럼, 스핀 락을 획득한 스레드만이 공유 자원에 접근할 수 있도록 한다. Windows에서 스핀 락은 KSPIN_LOC..

Development/Windows 2021.12.20

#4 Volatility - URL 추출 플러그인 만들기

Table of Contents Abstract 이번 글에서는 프로세스의 가상 메모리에서 URL 문자열을 추출하는 플러그인을 만들어 본다. 플러그인 명령행 인자로 PID나 프로세스 이름을 선택적으로 입력받는다. 둘 다 입력되지 않으면 모든 프로세스의 가상 메모리에서 URL 문자열을 추출하고, PID가 주어지면 해당 프로세스만, 프로세스 이름이 주어지면 해당 프로세스들에서 URL 문자열을 추출한다. Volatility3 Documentation의 심플 플러그인 만드는 법을 따라했던 전 글을 참고하면 좋을 것 같다. #3 Volatility - 간단 플러그인 만들기 https://geun-yeong.tistory.com/61 Make an URL Finder Plugin Declare the Plugin C..

Tools/Volatility 2021.12.18

Log4Shell 공격 흔적 조사

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

#3 Volatility - 간단 플러그인 만들기

Table of Contents Abstract Volatility3 Documentation에는 간단한 플러그인을 만들어보는 예제 글이 있다. 이를 통해 플러그인을 만드는 법을 알아보자. https://volatility3.readthedocs.io/en/latest/simple-plugin.html How to write a Simple Plugin Volatility3 Location: D:\Volatility\volatility3 My Plugin Location: \volatility3\framework\plugins\myplugins My Plugin File Name: mydlllist.py Purpose 본 글에서 만들어볼 플러그인은 시스템에서 실행 중인 프로세스들의 모듈 목록을 출력하는 ..

Tools/Volatility 2021.12.11