eBPF 라이브러리 제품군 사용
홈 » Security Bloggers Network » eBPF 라이브러리 제품군 사용
작성자: Artem Dinaburg
Trail of Bits는 eBPF 애플리케이션의 생성 및 배포를 간소화하도록 설계된 오픈 소스 라이브러리 제품군을 개발했습니다. 이러한 라이브러리는 효율적인 프로세스 및 네트워크 이벤트 모니터링, 기능 추적, 커널 디버그 기호 구문 분석 및 eBPF 코드 생성을 촉진합니다.
이전에는 Linux 커널 버전 차이와 C-eBPF 바이트코드 변환을 위한 외부 도구의 필요성으로 인해 이식 가능하고 종속성이 없는 eBPF 애플리케이션을 배포하는 데 상당한 어려움이 있었습니다. 우리는 최신 eBPF 및 Linux 커널 기능을 사용하여 외부 종속성을 줄이는 혁신적인 라이브러리로 이러한 문제를 해결했습니다. 온머신 에이전트를 생성하고 클라우드 네이티브 모니터링을 활성화하는 데 이상적인 이러한 도구는 적극적으로 유지 관리되며 다양한 Linux 배포판 및 커널 릴리스와 호환됩니다. 일부는 유명한 엔드포인트 가시성 프레임워크인 osquery의 기능에 필수적입니다.
이 제품군의 라이브러리는 linuxevents, ebpfpub, btfparse 및 ebpf-common입니다. 이를 함께 사용하면 높은 수준의 정확성과 효율성으로 간소화된 이벤트 모니터링을 개발할 수 있습니다. 이들 애플리케이션의 범위는 네트워크 이벤트 모니터링, 함수 추적, 커널 디버그 기호 구문 분석에서 eBPF 코드 생성 및 사용 지원에 이르기까지 다양합니다.
linuxevents 라이브러리는 eBPF가 이벤트를 모니터링하는 방법을 보여줍니다.정확한 커널 헤더나 기타 외부 종속성이 필요하지 않음 . 더 이상 커널 헤더 배송, 미리 컴파일된 eBPF 바이트코드의 여러 복사본 또는 BCC에 대한 종속성이 없습니다! linuxevents 라이브러리는 빌드 도중이 아니라 런타임에 사용자 정의 프로브를 생성하기 위한 런타임 코드 생성을 지원합니다. 또한 단일 시스템에서 여러 컨테이너의 이벤트를 모니터링할 때 필수적인 기능인 기존 시스템 호출 기반 후킹보다 훨씬 빠릅니다. linuxevents는 이를 어떻게 수행합니까?
첫째, linuxevents는 btfparse 라이브러리를 통해 Linux 커널의 BTF 디버깅 데이터를 사용하여 함수 프로토타입과 커널 데이터 구조를 정확하게 식별합니다. 이를 통해 linuxevents는 데이터 구조 레이아웃의 변화에 자동으로 조정되고 추적을 크게 단순화하는 방식으로 임의의 비공개 기호를 연결할 수 있습니다.
이 접근 방식은 더 적은 수의 항목(sched_process_exec 대 execve, execveat 등)을 연결해야 할 뿐만 아니라 비용이 많이 드는 상관 관계를 피할 수 있기 때문에 기존 시스템 호출 기반 후킹보다 빠릅니다. 예를 들어, 디스크의 어떤 프로그램이 execve를 통해 실행되는지 추적하려면 일반적으로 execve에 전달된 파일 설명자를 공개 호출 및 다중 chdir 호출과 연관시켜 프로그램의 전체 경로를 가져와야 합니다. 상관관계는 계산 비용이 많이 들고, 특히 여러 활성 컨테이너가 있는 머신에서는 더욱 그렇습니다. linuxevents 라이브러리는 정확한 커널 데이터 구조 표현을 사용하여 하나의 함수만 연결하고 커널의 vfs 계층에서 경로를 추출합니다.
라이브러리와 함께 제공되는 execsnoop 예제의 일부로 사용되는 linuxevents 라이브러리 기록
linuxevents 라이브러리는 여전히 개념 증명입니다. 이는 osquery에서 전환 가능한 실험으로 사용됩니다. 라이브러리에는 컨테이너 간 가시성을 통해 실행된 프로세스를 추적하는 표준적인 예도 있습니다.
ebpfpub 라이브러리를 사용하면 최소한의 외부 런타임 종속성에 의존하면서 여러 Linux 커널 버전에서 시스템 호출을 모니터링할 수 있습니다. ebpfpub에서 eBPF 프로브는 추적점 설명자에서 생성할 수 있는 간단한 사용자 정의 언어를 통해 정의된 함수 프로토타입에서 자동 생성됩니다. 이 접근 방식에는 실행 중인 커널에 대한 적절한 헤더가 필요했으며 파일 설명자를 시스템 호출과 일치시켜야 하는 등 성능 저하가 발생했습니다.
원하는 대상 이벤트에 따라 ebpfpub는 커널 추적점, kprobe 또는 uprobes를 기본 추적 메커니즘으로 사용할 수 있습니다. 라이브러리에는 다음 예제가 포함되어 있습니다.
ebpfpub 라이브러리는 현재 osquery에서 실행된 시스템 호출을 추적하여 프로세스 및 소켓 이벤트를 캡처하는 데 사용됩니다. ebpfpub는 여전히 특정 상황(예: 이전 커널을 지원하고 런타임 코드 생성을 사용해야 하는 경우)에서 유지되고 유용하지만 새 프로젝트에서는 대신 linuxevents 접근 방식을 사용해야 합니다.