eBPF- 14

[eBPF Advanced] 05. LSM을 사용한 보안 탐지 & 방어

LSM (Linux System Modules)LSM은 Linux 2.6 부터 리눅스 커널의 공식 보안 프레임 워크로 사용되어왔다. 리눅스 5.7에서 BPF LSM이 도입되면서 시스템 개발자는 함수 수준의 보안 검사를 자유롭게 구현할 수 있게 됐다. LSM은 커널이 특정 자원에 접근하기 전에 보안 훅을 심어두고 이를 통해 보안 모듈이 커널 동작을 허용할지 판단할 수 있도록 만들었다.LSM에서 지원하는 훅 지점의 예시로는 아래와 같다.파일 열기, 생성, 삭제 및 이동파일 시스템 마운트작업 및 프로세스에 대한 운영소켓 관련 작업(소켓 생성, 바인딩, 메시지 송수신 등)더 많은 훅 포인트는 아래 링크에서 확인할 수 있다.https://github.com/torvalds/linux/blob/master/incl..

eBPF-/Advanced 2026.06.03

[eBPF Advanced] 04. TCP 연결 상태와 TCP RTT 기록

개요전 실습인 TCP 연결 지연 확인에서 TCP connect를 호출한 시점부터 연결이 완료되는 시점까지 시간을 확인했다. 이번 실습에서는 연결이 성립된 이후에 데이터의 왕복 지연 시간을 기록한다. connent가 끝난 뒤에 내트워크는 혼잡/지연 등 여러 요인으로 RTT가 변하게되는데, 이번 실습을 통해 어느 state에서 얼마나 걸렸는지 확인할 수 있는 방법을 알아본다. tcpstatestcprtt와 tcpstates 도구를 사용하면 네트워크 문제를 더 쉽게 찾을 수 있도록 TCP 연결의 왕복 시간을 모니터링하고 네트워크 품질을 평가하여 문제를 식별하는데 도움을 줄 수 있다. TCP State transition실습 코드// SPDX-License-Identifier: (LGPL-2.1 OR BSD-2..

eBPF-/Advanced 2026.06.03

[eBPF Advanced] 03. TCP 연결 지연 확인

TCP 연결 지연개발을 할 때 데이터베이스를 호출하거나, 원격 호출을 수행하는 경우가 종종 나타난다. 이럴 때 구현은 보통 TCP 프로토콜을 기반으로 한다. 이는 안정적인 연결과 오류가 일어날 때 재전송, 혼잡 제어 등의 장점을 가지고 있기 때문이다. 하지만 TCP는 이러한 장점을 가지지만 UDP 보다 연결 지연이 크다는 단점이 있다. TCP 연결 지연을 분석하면 네트워크의 성능 분석과 문제 해결에 유용하다. tcpconnlattcpconnlat 도구는 TCP 연결을 수행하는 connect()와 같은 커널 함수를 추적하고, 연결지연 시간에 해당하는 SYN 패킷 전송부터 응답 패킷 수신까지의 시간을 측정하고 표시할 수 있다. 3-Way HandshakeTCP 연결은 일반적으로 3방향 핸드셰이킹 과정을 거치..

eBPF-/Advanced 2026.06.03

[eBPF Advanced] 02. 메모리누수 모니터링

메모리 누수메모리 누수는 컴퓨터 프로그래밍에서 자주 나오는 문제이다.메모리 누수가 발생하게 되면 시간이 지나면서 시스템의 가용 메모리를 점진적으로 소비하게 되고, 이러한 현상은 시스템 전반의 성능을 저하시킨다.메모리 누수의 원인은 다양한데, 대표적인 원인은 아래와 같다.동적 메모리 할당 및 해제 과정에서의 구성 오류소프트웨어의 버그, 메모리 관리 전략 오류예를 들어 더 이상 사용하지 않는 메모리를 해제하지 않게되면 메모리 누수가 발생한다. 추가로 메모리 사용량이 급격하게 증가하면 페이징과 스와핑이 빈번하게 발생하야 시스템 성능이 저하된다. 메모리 누수 디버깅의 어려움메모리 누수 문제를 디버깅하는 과정은 굉장히 복잡하고 난이도가 높다.원인파악을 위해 프로그램의 구조뿐만 아니라 메모히 할당과 해제 흐름을 세..

eBPF-/Advanced 2026.06.03

[eBPF Advanced] 01. libbpf를 사용한 유저공간 프로그램: exec() exit() 함수 추적

Bootstrap이번에 실습할 프로그램은 이눅스 커널에서 발생하는 exec과 exit를 추적하여 프로세스들의 생성과 종료를 관찰하는 것을 목표로 한다.커널공간과 우저공간의 역할 분리를 명확히하며 확장이 가능한 구조를 따른다. 사용자 부분은 libbpf 라이브러리를 사용해서 커널공간의 프로그램을 로드하고 실행하며, 커널공간 프로그램에서의 수집한 데이터를 처리하는 구조를 따른다. 실습 코드커널공간: bootstrap.bpf.c// SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause/* Copyright (c) 2020 Facebook */#include "vmlinux.h"#include #include #include #include "bootstrap.h"char LI..

eBPF-/Advanced 2026.06.03

[eBPF Advanced] 00. Advanced 환경 세팅

Advanced 단게 부터는 bpf 코드 뿐만 아니라 이를 제어하기 위한 유저 공간에서의 코드도 함께 제공된다. ebpf 프로그램을 커널에 붙이기 위해 libbpf를 사용하여 컴파일 할 것이다.물론 기존 흐름에서는 ecli를 사용하기 때문에 사용자가 직접 유저 공간을 컴파일할 필요가 없지만, 직접 빌드하고 결과를 느껴보는 것이 중요하다고 생각하기 때문에 이렇게 환경을 세팅하게 되었다. 실행 환경OS : ubuntu server 24.04.03 LTS 필수 패키지sudo apt updatesudo apt install -y clang llvm lld make gccsudo apt install -y libbpf-dev libelf-dev zlib1g-devsudo apt install -y linux-to..

eBPF-/Advanced 2026.06.03

[eBPF] 08. Capturing Scheduling Latency & visualization record

runqlat (RUN Queue LATency)runqlat은 리눅스의 CPU 스케줄러 지연 시간을 측정하는 eBPF 성능 분석 도구이다. runqlat은 리눅스 커널의 스케줄러 이벤트에 훅을 걸어 작동한다.프로세스는 sleep에서 깨어난 이후 아래와 같은 흐름을 거친다.Runnable 상태Run Queue에 등록 (아직 실행 중은 아님)스케줄러에 의해 선택CPU에서 실행이때 Run Queue Latency는 Run Queue에 들어간 시점부터 CPU에서 실행되기까지의 시간을 측정한 것이다.아래와 같이 결과가 나온다.# runqlatTracing run queue latency... Hit Ctrl-C to end.^C usecs : count distributi..

eBPF-/Basic 2026.04.14

[eBPF] 07. ring buffer를 활용한 프로세스 종료 캡쳐

ring buffer를 활용한 프로세스 종료 캡쳐Ring Buffer지난 시간에 다루었던 Perf event array는 각 CPU 코어마다 독립된 버퍼를 가진다. 이 방식은 메모리 낭비와 데이터의 순서가 꼬일 수 있는 문제점이 있다.이 문제를 해결하기 위해 커널 5.8 버전부터 Ring Buffer가 추가되었다.Ring buffer는 고정된 크기의 메모리 공간을 원형으로 순환하며 사용하는 자료구조이다. 버퍼의 끝에 데이터가 차면 다시 첫번째 공간으로 돌아가서 데이터를 사용한다.ebpf에서 Ring Buffer는 모든 CPU가 공유한다. 이로써 FIFO를 보장하여 데이터 순서 꼬임 문제와 메모리 낭비 문제를 해결한다. 데이터를 전송할 때 사용하는 주요 함수 몇가지를 알아보고 실습으로 넘어가보자.void ..

eBPF-/Basic 2026.04.14

[eBPF] 06. perf event array를 활용한 프로세스 실행 캡쳐

perf bufferebpf 프로그램이 커널에서 수집한 데이터를 유저 공간으로 전송해야할 때, bpk_printk만으로는 성능과 기능면에서 부족하다. 이때 데이터를 효율적으로 주고받기 위해 perf buffer를 활용한다.버퍼가 필요한 이유는 ebpf가 커널 내에서 실행되므로 유저 공간에 데이터를 보낼 때 고성능 통신 채널이 필요하다. 이를 위해 ebpf 는 두가지 유형의 링버퍼를 제공하며, 자세한 내용은 아래 표로 정리해보았다.구분Perf Event ArrayBPF Ring Buffer도입 버전커널 4.15 이상커널 5.8 이상특징CPU마다 개별 버퍼 할당 (Per-CPU)모든 CPU가 공유하는 단일 버퍼장점호환성 범위가 매우 넓음메모리 효율성 및 데이터 순서 보장 우수단점데이터 순서 뒤섞임 발생 가능..

eBPF-/Basic 2026.04.14

[eBPF] 05. Hashmap을 사용한 signal snooping

sigsnoop이번 실습은 프로세스에 signal를 보내는 syscall을 스누핑하여 해시맵을 사용하여 상태를 저장하는 방법을 소개한다. sigsnoop.bpf.c 실습 파일#include #include #include #define MAX_ENTRIES 10240#define TASK_COMM_LEN 16struct event { unsigned int pid; unsigned int tpid; int sig; int ret; char comm[TASK_COMM_LEN];};struct { __uint(type, BPF_MAP_TYPE_HASH); __uint(max_entries, MAX_ENTRIES); __type(key, __u32); __type(value, struct event);} va..

eBPF-/Basic 2026.04.14