2024년 9월 15일
eBPF (extended BPF)
1. eBPF (extended BPF)의 개념 및 필요성
- eBPF(extended BPF): BPF는 원래 Berkeley Packet Filter의 약자였지만, eBPF가 패킷 필터 외 다양한 기능을 수행함으로 BPF의 약어는 의미가 없으며, eBPF는 독립된 용어로 사용함.
개념 | 필요성 |
---|---|
패킷 분석 등 커널 기능의 안전 및 효율적 확장 위해 커널 소스 코드 변경 없이 OS 커널 공간 내 샌드박스 프로그램을 실행하는 기술 | – 향상된 패킷 필터링 프로세스 수행 – 고급 성능 분석, 디버깅 기능 제공 – 시스템/네트워크 관측가능성 구현 – JIT 컴파일러 기반 분석 성능 향상 |
- 초기 BPF(Classic Berkeley Packet Filter)는 단순 패킷 분석/필터링 형태로 시작되었고, eBPF를 통해 OS 커널 수준부터 전체 S/W 스택에 노코드 기반 관측가능성(Observability)을 구현
2. eBPF의 아키텍처, 구성요소 및 동작 절차
(1) eBPF의 아키텍처
- eBPF를 통해 Application 기능 추가 시 운영 체제는 JIT(Just-In-Time) 컴파일러와 검증 엔진 기반 OS 커널 내 네이티브로 컴파일된 것처럼 안전성과 실행 효율성을 보장하여 추가 기능 실행
(2) eBPF의 구성요소
구분 | 구성요소 | 역할 |
---|---|---|
사용자 App 개발 측면 | Observability | – 메트릭, 추적, 로그 기반 시스템 상태 예측 – 시스템 로그, 패킷 분석/필터링 기능 |
eBPF Byte Code | – 패킷 분석/필터링 등 eBPF 프로그램 컴파일 – eBPF 아키텍처 준수, 런타임 오류 방지 | |
User Space Loader | – eBPF 맵을 관리하는 사용자 공간 프로그램 – 바이트코드를 커널에 로드, 적절한 후크에 연결 | |
커널 런타임 측면 | JIT Complier | – 바이트코드를 특정 플랫폼의 기계어로 즉시 변환 – Just-In-Time, 하드웨어 네이티브 수준 성능 향상 |
Maps | – Key-Value, Read/Write 액세스 데이터 구조 – 커널과 사용자 공간 App 간 상호 작용 지원 | |
eBPF Hook | – 커널 코드를 eBPF 프로그램에 연결하는 지점 – XDP 등 커널이 후크에 도달 시 eBPF 코드 실행 | |
Helper Function | – 시스템 호출 API 기반 커널 함수 집합 – 명령어 집합 내 미지원 작업 수행 지원 |
(3) eBPF 동작 절차
# | 동작 절차 | 세부 동작 내용 |
---|---|---|
① | 바이트코드 컴파일 | 개발자가 eBPF 프로그램(CPU 사용량 모니터링, 패킷 필터링 등)을 작성하고 바이트코드를 컴파일 |
② | 커널에 로드 | eBPF 컴파일러가 상위 수준 C 코드를 하위 수준 바이트코드로 변환, 사용자 공간 로더는 BPF 시스템 호출을 생성하여 프로그램을 커널에 로드 |
③ | 프로그램 안전성 검증 | 프로그램 바이트코드와 맵이 준비되면 eBPF는 프로그램이 커널에서 실행하기에 안전한지 확인하기 위해 검증 프로세스 실행 |
④ | 기계어 변환 | eBPF는 인터프리터나 JIT 컴파일러를 사용하여 바이트코드를 실행 가능한 기계어로 변환 |
⑤ | 프로그램 상호 작용 | eBPF 프로그램이 실행되면 개발자는 eBPF 맵을 사용하여 사용자 공간에서 프로그램과 상호 작용 |
⑥ | 커널에서 언로드 | eBPF가 작업을 완료하면 로더는 BPF 시스템 호출을 다시 사용하여 커널에서 언로드 |
- eBPF는 커널 수준의 관측가능성 구현 및 다양한 기능 활용이 가능하나, 이로 인해 심각한 보안 취약점이 발생할 수 있으므로 eBPF 검증기 등으로 취약점 해결 필요
3. eBPF의 문제점 및 대응방안
문제점 | 대응방안 |
---|---|
– eBPF 프로그램은 검증 과정의 복잡성으로 인해 안전성 보장 어려움 – CVE-2023-2163 취약점 등 악용하여 컨테이너, 임의 읽기/쓰기, 커널 루트 권한 탈취 가능 | – Google Buzzer 기반 eBPF 검증기 취약점 자동 감사 – 오픈소스 커뮤니티 기여를 통해 퍼저 도구 개발 등 보안 취약점 해결 |
- eBPF는 관측가능성 구현 및 다양한 기능 추가가 가능하여 Meta(Facebook) 데이터 센터 로드밸런서, Google GKE의 네트워킹 및 보안, 네이버의 NAT 시스템, 카카오의 L2DSR 로드밸런서 등에 활용되며, 상기 보안 문제점을 개선하여 네트워크 외 다양한 분야로 확장될 것으로 전망
[참고]
- 한국전자통신연구원(ETRI), 클라우드 네이티브 환경에서 네트워킹 및 보안을 위한 eBPF 기술 동향
- IBM, eBPF란 무엇인가요