Hardening eBPF for runtime security: Lessons from Datadog Workload Protection | Datadog (새 탭에서 열림)
대규모 분산 시스템에서 발생하는 초당 수백만 건의 커널 이벤트를 실시간으로 처리하기 위해선 기존의 사용자 공간 필터링 방식으로는 성능적 한계가 명확합니다. 이 글은 eBPF(Extended Berkeley Packet Filter)를 활용하여 이벤트가 발생하는 커널 내부에서 불필요한 데이터를 직접 필터링함으로써 시스템 부하를 최소화하는 아키텍처를 제안합니다. 이를 통해 CPU 사용량을 최적화하고 데이터 유실 없는 안정적인 대규모 파일 모니터링 시스템을 구축한 기술적 성과를 다룹니다. ### 기존 모니터링 방식의 병목 현상 * 수십억 개의 파일 이벤트를 사용자 공간(User-space)으로 모두 전송한 뒤 필터링하는 방식은 과도한 컨텍스트 스위칭과 데이터 복사 비용을 발생시킵니다. * 커널에서 사용자 공간으로 데이터를 넘겨주는 버퍼가 가득 찰 경우, 처리 속도가 발생 속도를 따라가지 못해 중요한 보안 또는 운영 이벤트가 누락되는 문제가 발생합니다. * 특정 프로세스의 반복적인 작업이나 무의미한 임시 파일 생성과 같은 '노이즈'가 전체 시스템 리소스의 대부분을 점유하여 모니터링 효율을 저해합니다. ### eBPF 기반의 인-커널(In-Kernel) 필터링 * eBPF를 사용하여 파일 시스템 관련 시스템 콜(open, read, write 등)이 호출되는 즉시 커널 내에서 필터링 로직을 실행합니다. * 사용자 공간의 제어부(Control Plane)가 모니터링 대상 경로(Allowlist)나 제외 대상(Denylist) 정보를 eBPF Map에 저장하면, 커널 내 eBPF 프로그램이 이 맵을 참조해 데이터를 즉시 선별합니다. * 유의미한 이벤트만 선별하여 전송하기 때문에 사용자 공간으로 전달되는 데이터의 양을 90% 이상 획기적으로 줄일 수 있습니다. ### LPM Trie를 활용한 경로 매칭 최적화 * 파일 경로는 단순 문자열 비교로 처리하기에 복잡하므로, 가장 긴 접두사 일치(LPM, Longest Prefix Match) Trie 구조를 사용하여 필터링 효율을 높입니다. * 특정 디렉토리 하위의 모든 파일이나 특정 패턴을 포함하는 경로를 효율적으로 식별하며, 규칙이 늘어나도 $O(L)$(L은 경로 깊이)의 일정한 검색 속도를 보장합니다. * 이 방식을 통해 수천 개의 복잡한 필터링 규칙이 적용된 환경에서도 커널 성능 저하 없이 실시간 매칭이 가능해집니다. ### Ring Buffer를 통한 안정적인 데이터 전달 * 기존의 Perf Buffer 방식 대신 최신 커널의 BPF Ring Buffer를 활용하여 메모리 효율성과 데이터 공유 성능을 극대화했습니다. * Ring Buffer는 여러 CPU 코어에서 동시에 발생하는 이벤트를 안전하게 처리하며, 메모리 경합을 줄이고 사용자 공간과의 통신 오버헤드를 최소화합니다. * 특히 가변 길이의 파일 경로 데이터를 처리할 때 메모리 할당 효율이 뛰어나 데이터 유실 가능성을 크게 낮춥니다. 실시간 대규모 모니터링을 설계할 때 가장 중요한 것은 '데이터 처리의 위치'입니다. eBPF를 통해 데이터의 발생지인 커널에 가깝게 필터링 로직을 전진 배치함으로써 인프라 비용을 절감하고 시스템 관측성을 높일 수 있습니다. 성능 저하 없는 정밀한 보안 감시나 실시간 파일 추적이 필요한 환경이라면 eBPF 기반의 조기 필터링 아키텍처 도입을 적극 권장합니다.