이 블로그의 인기 게시물
L2 Wireguard
Wireguard 소개 wireguard는 VPN 프로토콜 중 하나로 필수적인 기능만 구현되어있어 기존 ipsec 등의 vpn보다 훨씬 단순하고 직관적이다. wireguard protocol 메세지 유형은 다음 4가지 뿐이다. (출처: https://www.wireguard.com/papers/wireguard.pdf ) 일반적인 흐름을 아주 단순화하면 Initiation -> Response -> Transport Data 다. 공격 방어가 필요한 경우 Cookie Reply 가 개입할 수 있는 구조다. 테스트 환경 구성 === office-gw === Arch: x86_64 OS: Debian 13 (trixie) Kernel: 6.12.107+deb13-amd64 WG tool: v1.0.20210914 === home-gw === Arch: aarch64 OS: Debian 12 (bookworm) Kernel: 6.12.95+deb12-arm64 WG tool: v1.0.20210914 === raspberrypi === Arch: aarch64 OS: Raspbian 12 (bookworm) Kernel: 6.18.33-v8+ WG tool: v1.0.20210914 === fedora === Arch: x86_64 OS: Fedora 43 (Workstation Edition) Kernel: 6.17.12-300.fc43.x86_64 WG tool: v1.0.20260223 L3 Wireguard 동작 확인 // office-gw root@office-gw:/home/suunj# ping -c 3 10.1.1.1 PING 10.1.1.1 (10.1.1.1) 56(84) bytes of data. 64 bytes from 10.1.1.1: icmp_seq=1 ttl=64 time=0.971 ms 64 bytes from 10.1.1.1: icmp_seq=2 tt...
ELF 구조부터 로딩까지
ELF format ELF(Executable and Linking Format)는 실행 가능한 코드를 위한 표준화된 파일 형식이다. ELF는 주로 실행 파일(ET_EXEC)이나 공유 라이브러리(ET_DYN) 에 사용된다. 현재 거의 모든 현대적인 Unix 계열 운영체제는 ELF 의 이식성, 표준화된 기능, 처음부터 깔끔하게 설계된 구조 덕분에 ELF 형식을 지원한다. ELF 표준의 실제 버전은 1.2 이다. ELF 표준을 다루는 여러 문서가 있으며 자세한 내용은 Tool Interface Standard, Executeable and Linking Format, Version 1.2 를 참고하면 된다. ELF 바이너리 형식은 다음 두가지 요구사항을 모두 만족하도록 설계되었다. linker : 일반적으로 컴파일 과정에서 사용된다. loader : 일반적으로 프로그램 실행 시점에서 사용된다. 이 두가지 요구사항을 만족하기 위해 ELF 바이너리 파일 내부의 데이터를 설명하는 서로 구별되는 두가지 인터페이스가 포함되었다. 이 두 인터페이스는 서로 의존하지 않는다. ELF headers ELF 파일은 최소한 ELF header를 반드시 포함해야 한다. ELF 헤더에는 바이너리 파일의 내용을 어떻게 해석해야 하는지에 대한 정보와 바이너리를 설명하는 다른 구조체들이 파일의 어디에 위치하는지에 대한 정보가 들어있다. ELF 헤더는 파일 내부의 offset 0에서 시작하며 다음과 같은 형식을 가진다. #define EI_NIDENT (16) typedef struct { unsigned char e_ident[EI_NIDENT]; Elf32_Half e_type; Elf32_Half e_machine; Elf32_Word e_version; Elf32_Addr e_entry; Elf32_Off e_phoff; Elf32_Off e_shoff; } Elf32_Ehdr; [e_ident] e...
VM escape - QEMU의 메모리를 읽는 두 가지 방법
악성코드가 VM을 탈출하여 호스트 머신에서 코드를 실행할 수 있을까? KVM(Kernel-based Virtual Machine) 은 사용자 공간 프로그램에 완전 가상화 인프라를 제공하는 커널 모듈이다. 이를 통해 수정되지 않은 Linux 또는 Windows 이미지를 실행하는 여러 가상 머신을 구동할 수 있다. KVM 의 사용자 공간 구성요소는 메인라인 QEMU(Quick Emulator)에 포함되어있으며 특히 device emulation을 담당한다. 개발 환경 여기서 타겟으로 잡은 취약점은 이미 오래전 패치되었기 때문에 QEMU 소스에서 해당 취약점 수정 직전의 커밋으로 checkout 해야한다. QEMU 메모리 배치 게스트에 할당된 물리 메모리는 실제로 QEMU의 가상 주소 공간 내에서 mmap 된 private 영역이다. 게스트의 물리 메모리를 할당할 때 PROT_EXEC 플래그가 활성화되지 않는다는 점에 주목하는 것이 중요하다. 게스트 프로세스 +--------------------+ 가상 주소 공간 | | +--------------------+ | | \__ 페이지 테이블 \__ \ \ | | 게스트 커널 +----+--------------------+----------------+ 게스트 물리 메모리 | | | | +----+--------------------+--------...



댓글
댓글 쓰기