Development 16

#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

#5 MiniFilter - FilterGetMessage 비동기I/O

Table of Contents Abstract FilterGetMessage 비동기 I/O 관련 검색어로 내 블로그에 들어온 기록이 있길래 생각난 김에 정리했다. 본 글에서는 OVERLAPPED를 이용해 FilterGetMessage를 비동기식으로 받는 방법을 알아본다. Port 유저 모드 어플리케이션에서 미니 필터로 포트 연결은 앞선 글과 깃허브 예제를 참고하길 바란다. #3 MiniFilter - Communication Port (user → minifilter) https://geun-yeong.tistory.com/53 #4 MiniFilter - Communication Port (minifilter → user) https://geun-yeong.tistory.com/54 Create an..

Development/Windows 2021.12.09

#2 WFP - WFP Callout Driver 만들기

Table of Contents Abstract 본 글에서는 앞서 설명한 WFP 어플리케이션을 직접 만들어보겠다. 본 예제 코드에서는 필터의 조건(Condition)을 설정하지 않고 모든 트래픽에 대해서 콜아웃을 호출하도록 했다. WFP 기능을 이용하기 위한 최소한의 코드만을 담고 있으니 본 예제 코드가 정석이라고 생각하진 말자. 전체 코드는 깃허브에 올려놨다. WFP에 대한 개요는 이전 글을 참고하길 바란다. #1 WFP - 개요 https://geun-yeong.tistory.com/55 Create a WDF Device WFP를 사용하기 위해서는 Device Object가 필요하다. MS가 모던한 드라이버 개발을 위해 만든 WDF를 이용해 디바이스 오브젝트를 만들어보자. Create a WDF D..

Development/Windows 2021.12.05

#1 WFP - 개요

Table of Contents Abstract WFP는 Windows Filtering Platform이란 뜻이다. Windows 시스템에서 네트워크 필터링 프로그램을 만들기 위한 인터페이스와 API를 제공한다. WFP를 통해 트래픽을 허용, 차단할 수 있고, 패킷 데이터를 볼 수도 있으며, 변조도 가능하다. WFP는 기존의 네트워크 필터링 기술인 TDI/NDIS 필터를 개선하고 대체하기 위해 만들어졌다. Windows Vista, 서버 제품군의 경우 2008부터 WFP가 지원됐는데, 10년이 넘었음에도 생각보다 자료가 많지 않아 본 글을 작성하게 됐다. WFP는 Windows 시스템에서 방화벽 어플리케이션을 만드는데 사용된다. Vista 이상부터는 Windows의 기본 방화벽 프로그램도 WFP로 만들..

Development/Windows 2021.11.28

#4 MiniFilter - Communication Port (minifilter → user)

Table of Contents Abstract 앞선 글에서는 유저 모드 어플리케이션에서 미니 필터로 데이터를 전달하는 방법을 알아봤다. 본 글에서는 반대로 미니 필터에서 유저 모드 어플리케이션으로 데이터를 전달하는 방법을 알아본다. 예제 코드는 깃헙에 있다. Port Communicate Server Port in MiniFilter Create the Server Port 앞선 글을 참고하자. #3 MiniFilter - Communication Port (user → minifilter) https://geun-yeong.tistory.com/53 Common Structures 유저 모드 어플리케이션에서 커널로 데이터를 보낼 때 처럼 둘 사이의 데이터를 주고 받을 포맷을 먼저 구상해야 한다. 본 ..

Development/Windows 2021.11.27

#3 MiniFilter - Communication Port (user → minifilter)

Table of Contents Abstract Communication Port는 미니 필터와 유저 모드 어플리케이션 간에 데이터를 주고 받기 위해 만들어진 기능이자 인터페이스다. 필터 관리자에 의해 제공되는 기능이다. 동기식, 비동기식 송수신도 가능하고 미니 필터에서 유저 모드로, 유저 모드에서 미니 필터로 데이터를 전송하고 이에 대해 응답을 받을 수 있는 양방향 통신 시스템이다. 드라이버와 유저 모드 어플리케이션 간의 데이터 송수신이 제법 까다로운 걸 생각하면 포트는 혁명과도 같다. 본 글에서는 유저 모드 어플리케이션에서 미니 필터로 데이터를 보내고 이에 대한 응답을 동기식으로 받는 방법을 서술했다. 예제 코드를 담은 깃허브 주소를 본문 최하단에 적어놨으니 당장 예제 코드가 필요하다면 참고하길 바란..

Development/Windows 2021.11.25

#2 MiniFilter - 미니 필터 만들기

Table of Contents Abstract 앞서 미니 필터에 대해서 간략하게 알아봤다. 이번 글에서는 미니 필터를 작성하기 위한 최소한의 인사이트를 정리해보고자 한다. 본 글은 Visual Studio 2019를 사용해 프로젝트를 생성하는 것부터, 드라이버를 빌드하고 가상머신에서 테스트하는 과정을 담고 있다. 깃헙에 올린 미니 필터 예제를 보며 읽으면 큰 도움이 될 것이다. Develop the MiniFilter 개발 환경은 Windows 11 Pro 21H2 64bit, IDE는 Visual Studio 2019, WDK(Windows Driver Kit)는 10.0.22000.1을 사용했다. 개발한 드라이버를 테스트한 가상 머신은 Windows 10 Pro 21H2 64bit다. Create ..

Development/Windows 2021.11.23

#1 MiniFilter - 개요

Table of Contents Abstract MiniFilter는 Filter Manger에 의해 관리되며, 쉽게 개발할 수 있고 언로드가 가능한 파일 시스템 필터 드라이버다. 미니 필터 드라이버가 필터 관리자에게 어떤 요청(생성, 읽기, 쓰기)에 대해 작업할 것인지를 알려주면 필터 관리자는 해당 요청이 들어왔을 때 이에 대한 데이터를 미니 필터에게 전달하고 그 결과를 받아 I/O 관리자에게 넘겨준다. 즉 I/O 관리자와 직접 통신하던 기존 방식이 아닌 중간에 필터 관리자를 두고 작업을 함으로써 언로드도 가능하고, 개발도 한결 편해진다는 장점을 가질 수 있다. 본 글에서는 Windows의 파일 시스템 필터 드라이버 기능인 미니 필터에 대해 간단하게 정리했다. MiniFilter 많은 보안 프로그램들이..

Development/Windows 2021.11.20