2024/09 29

COM HOOK #2 예제 DXGI v11

COM을 이용한 화면 캡처 이 문서에서는 Windows의 Direct3D 11과 DXGI(DirectX Graphics Infrastructure)를 사용하여 화면을 캡처하는 방법을 설명합니다. DXGI는 COM 기반의 API로, 화면 출력을 캡처하는 데 사용할 수 있습니다. 특히 IDXGIOutputDuplication 인터페이스를 사용하여 현재 디스플레이의 화면을 캡처할 수 있습니다. DXGI와 Direct3D 11 개요 Direct3D 11은 그래픽 처리를 위한 DirectX의 한 부분이며, COM 인터페이스로 제공됩니다. DXGI는 DirectX와 GPU 간의 통신을 관리하는 기능을 제공하며, 이를 통해 ..

개발/WIN32-MFC 2024.09.12

COM HOOK #1 개념

COM 인터페이스 vtable 후킹COM(컴포넌트 객체 모델) 인터페이스 후킹은 특정 COM 객체의 메서드 호출을 가로채고 이를 수정하거나 모니터링하는 기법입니다. 이 문서에서는 vtable 후킹을 사용하여 COM 인터페이스의 메서드를 후킹하는 방법을 설명합니다.vtable 후킹 개념COM 인터페이스는 C++의 가상 함수 테이블(vtable)을 통해 메서드 호출을 관리합니다. vtable 후킹은 이 가상 함수 테이블을 수정하여 원래 메서드 대신 사용자가 정의한 함수로 대체하는 방식입니다.COM vtable 후킹 코드 예제다음은 C++로 COM 인터페이스의 QueryInterface 메서드를 후킹하는 예제입니다.// C++ 코드 예제#include #include #include typedef HRESUL..

개발/WIN32-MFC 2024.09.12

SNI 필드

**SNI (Server Name Indication)**는 클라이언트가 TLS 핸드셰이크 과정에서 서버에 접속할 때 요청하는 서버의 도메인 이름을 명시하는 TLS 확장 필드입니다.SNI는 주로 **하나의 IP 주소에 여러 도메인 이름(웹사이트)**을 호스팅하는 서버에서 사용됩니다. 이를 통해 클라이언트가 접속하려는 도메인 이름을 서버에 전달할 수 있어, 서버는 해당 요청에 맞는 올바른 SSL/TLS 인증서를 제공할 수 있습니다.SNI의 동작 방식:클라이언트가 서버에 연결을 요청할 때, TLS 핸드셰이크를 시작합니다.클라이언트는 Client Hello 메시지를 전송하며, 이 메시지에 SNI 확장 필드를 포함시켜 접속하고자 하는 도메인 이름(예: www.example.com)을 서버에 알려줍니다.서버는 해..

TLS 1.3 vs 1.2

TLS 1.2 vs TLS 1.3 1. 핸드셰이크 과정 TLS 1.2: 핸드셰이크 과정에서 최대 2라운드 트립(Round Trip Time, RTT)이 필요합니다. TLS 1.3: 핸드셰이크가 1라운드 트립(RTT)으로 단축되어, 세션 설정이 더 빠르게 이루어집니다. 2. 암호화 알고리즘 TLS 1.2: 다양한 암호화 알고리즘을 지원하며, 일부 안전하지 않은 알고리즘도 포함되어 있습니다. TLS 1.3: 약한 암호화 알고리즘을 모두 제거하고, AES-GCM, ChaCha20-Poly1305와 같은 강력한 알고리즘만 지원합니다. 3. 암호 스위트 단순화 TLS 1.2: 복잡한 암호 스위트 구성..

T.L.S(Thread Local Storage)

C++ Thread Local Storage (TLS) and GetLastError 1. TLS 설명 C++에서 TLS (Thread Local Storage)는 각 스레드가 고유한 변수를 저장하고 접근할 수 있게 해주는 메커니즘입니다. TLS는 다중 스레드 환경에서 각 스레드가 서로 독립적으로 데이터를 저장할 수 있도록 도와줍니다. thread_local 키워드를 사용하여 각 스레드마다 별도의 변수를 선언할 수 있습니다. 스레드 간 경합을 피할 수 있으므로 동기화 없이 안전한 데이터 처리가 가능합니다. 2. TLS 예제 코드 #include #include thread_local int counter = 0;void..

CFI

**CFI (Control Flow Integrity)**는 프로그램의 제어 흐름이 악의적으로 변경되지 않도록 보호하는 보안 기법입니다. 주로 Return-Oriented Programming (ROP), **Jump-Oriented Programming (JOP)**와 같은 공격으로부터 시스템을 방어하는 데 사용됩니다. CFI는 실행 중인 프로그램의 제어 흐름이 예상된 정상적인 흐름을 따르고 있는지 확인하여, 공격자가 제어 흐름을 변경하는 시도를 탐지하고 차단합니다.CFI의 주요 개념:제어 흐름 그래프 (CFG, Control Flow Graph): CFI는 프로그램의 소스 코드에서 미리 제어 흐름 그래프(CFG)를 생성합니다. CFG는 프로그램의 모든 가능한 제어 흐름을 나타낸 그래프입니다. CFI는..

ROV

ROV(Return-Oriented Vulnerability)은 **Return-Oriented Programming (ROP)**과 밀접한 관계가 있습니다. **ROP(리턴 지향 프로그래밍)**는 메모리의 기존 코드 조각을 악용하여 임의의 동작을 수행하게 만드는 익스플로잇 기술로, 특히 DEP(Data Execution Prevention) 같은 방어 기법을 우회하는 데 사용됩니다.ROP(Return-Oriented Programming) 개념:기존 코드 조각 재사용: ROP는 공격자가 시스템 메모리에 있는 기존 코드 조각들을 재사용하여 악성 동작을 수행합니다. 이때 코드 조각은 작은 부분, 즉 **가젯(gadget)**이라고 부르는 기계어 명령의 모음입니다. 각 가젯은 RET(return) 명령으로 ..

ASLR

ASLR(Address Space Layout Randomization)은 시스템 보안을 강화하기 위한 기법 중 하나로, 프로세스가 메모리에 로드되는 주소를 무작위로 배치하여 공격자가 특정 메모리 주소를 예측하기 어렵게 만드는 기술입니다. 주로 메모리 기반 공격, 특히 버퍼 오버플로우 공격으로부터 시스템을 보호하는 데 사용됩니다.ASLR의 주요 개념:메모리 주소 무작위화: ASLR은 실행 중인 프로세스가 사용하는 메모리 공간(예: 실행 파일, 라이브러리, 스택, 힙 등)의 위치를 매번 무작위로 배치합니다. 이를 통해 공격자가 미리 특정 메모리 주소를 파악하고 악성 코드를 주입하는 것을 방지할 수 있습니다.재배치되는 요소:프로그램 코드: 실행 파일의 코드가 메모리 내에서 예측 불가능한 위치에 로드됩니다.동..

DEP

Windows DEP(Data Execution Prevention)는 시스템 메모리의 특정 영역에서 코드가 실행되지 않도록 방지하는 보안 기능입니다. DEP는 주로 메모리에서 발생할 수 있는 악성 코드의 실행을 차단하여 시스템의 보안성을 강화하는 역할을 합니다.DEP의 주요 개념:실행 방지 메모리 영역: DEP는 시스템 메모리의 일부를 "실행 불가"로 표시합니다. 즉, 그 메모리 영역에서는 데이터만 저장할 수 있으며, 코드를 실행할 수 없습니다. 이러한 메모리 보호는 주로 버퍼 오버플로우 공격과 같은 악성 코드 실행을 방지합니다.하드웨어 기반 DEP: 하드웨어 기반 DEP는 CPU의 기능을 사용하여 메모리 영역을 보호합니다. 하드웨어에서 제공하는 NX(Non-Executable) 비트 또는 XD(eXe..

임계영역 설정 종류 및 방법

임계영역 설정 방법 및 C++ 예제 1. 임계영역(Critical Section)이란? 임계영역(Critical Section)은 멀티스레드 프로그램에서 공유 자원에 대한 접근을 제어하기 위해 사용되는 코드 블록입니다. 여러 스레드가 동시에 임계영역에 접근하게 되면 데이터가 손상되거나 일관성이 깨질 수 있기 때문에, 한 번에 하나의 스레드만 임계영역에 접근할 수 있도록 동기화 메커니즘을 적용합니다. 2. 임계영역 보호 기법의 종류 뮤텍스(Mutex): 상호 배제를 통해 한 번에 하나의 스레드만 자원에 접근할 수 있게 합니다. 스핀락(Spinlock): 스레드가 잠금을 얻기 위해 계속 루프를 돌며 대기하는 방식입니다. 세마포어(Semaphore)..