Post

[Linux] eBPF란?

[Linux] eBPF란?

eBPF (Extended Berkeley Packet Filter) 개요

  • eBPF (Extended Berkeley Packet Filter)는 리눅스 커널에서 네트워크 패킷 필터링을 넘어선 다양한 작업을 수행할 수 있게 해주는 기술이다.
  • 본래 패킷 필터링 및 분석을 목적으로 개발되었지만, 현재는 성능 모니터링, 보안, 트레이싱, 시스템 관찰 등 다양한 분야에 활용되고 있다.

  • eBPF는 일반적으로 커널의 실행을 중단하지 않고 안전하게 코드를 삽입하거나 후킹할 수 있는 기능을 제공한다.
  • 이로 인해 커널 모듈을 직접 수정하지 않고도 커널 수준에서 다양한 작업을 수행할 수 있게 되었다.

1. eBPF의 동작 방식

  • eBPF는 “프로그램”을 커널 내부에 삽입하여 실행하는 방식으로 작동한다.
  • 이 프로그램은 주로 C 언어로 작성되며, 사용자 공간에서 컴파일된 후 커널에 로드된다.
  • eBPF 프로그램은 커널의 특정 이벤트나 트리거에서 실행된다.
  • 예를 들어, 네트워크 패킷을 필터링하거나 시스템 호출을 추적하는 작업을 수행할 수 있다.

eBPF 프로그램의 흐름

  1. 프로그램 작성: C 언어로 작성된 eBPF 프로그램이 커널에서 실행될 수 있도록 컴파일됩니다.
  2. 프로그램 로드: 사용자 공간에서 커널에 eBPF 프로그램을 로드합니다.
  3. 핸들러(후킹): eBPF 프로그램은 특정 커널 함수, 시스템 호출, 네트워크 스택 등에서 후킹될 수 있습니다.
  4. 실행: 해당 이벤트나 트리거가 발생하면, 커널은 해당 eBPF 프로그램을 실행합니다.
  5. 결과 처리: eBPF 프로그램은 결과를 커널에 전달하거나, 특정 작업을 수행한 후 사용자 공간으로 결과를 반환할 수 있습니다.

2. eBPF의 주요 특징

  • 커널과 사용자 공간 분리: eBPF는 사용자 공간에서 작성된 프로그램을 커널에 안전하게 로드하고 실행할 수 있게 해줍니다. 커널을 직접 수정하지 않으므로 시스템 안정성에 영향을 주지 않습니다.
  • 경량화: eBPF는 코드가 매우 작고 효율적입니다. 이는 성능에 미치는 영향을 최소화하면서 커널 내에서 고급 작업을 처리할 수 있게 합니다.
  • 안전성: eBPF는 특정 검증 과정을 거쳐 안전하게 실행될 수 있도록 보장합니다. 프로그램이 잘못된 작업을 수행하지 않도록 커널은 로드되는 프로그램을 검증합니다.
  • 확장성: eBPF는 다양한 서브시스템에서 사용할 수 있으며, 네트워크, 트레이싱, 보안, 성능 모니터링 등 여러 분야에 활용됩니다.

3. eBPF의 주요 활용 사례

3.1. 네트워크 필터링 (BPF)

  • eBPF는 처음에 네트워크 패킷 필터링을 위해 사용되었다.
  • tcpdumpWireshark와 같은 도구들이 이 기술을 활용하여 네트워크 패킷을 효율적으로 캡처하고 분석할 수 있다.
  • eBPF는 커널 내에서 실시간으로 패킷을 필터링하고, 이를 기반으로 고급 분석을 수행할 수 있다.

3.2. 성능 모니터링 및 트레이싱

  • eBPF는 성능 모니터링 및 트레이싱 도구에서 매우 중요한 역할을 한다.
  • 예를 들어, bpftraceperf 같은 도구는 eBPF를 활용하여 시스템 콜, 함수 호출, 스레드 상태 변화 등을 추적한다.
  • 이를 통해 실시간으로 시스템의 성능을 분석하고 최적화할 수 있다.

3.3. 보안

  • eBPF는 보안에도 중요한 역할을 한다.
  • 예를 들어, Seccomp(Secure Computing Mode)와 결합된 eBPF는 시스템 호출을 제어하고, 불법적인 시스템 호출을 차단하여 보안을 강화한다.
  • 또한 Cilium과 같은 eBPF 기반 보안 솔루션은 네트워크 트래픽을 검사하고, 이상 징후를 실시간으로 차단하는 기능을 제공한다.

3.4. 커널 오버헤드 감소

  • eBPF는 커널 모듈을 작성하지 않고도 커널 기능을 확장할 수 있는 기능을 제공한다.
  • 이는 커널을 재구성하거나 새로 컴파일할 필요 없이 실시간으로 커널 기능을 변경할 수 있게 해준다.

3.5. 프로파일링 및 디버깅

  • eBPF는 시스템의 동작을 실시간으로 모니터링하고 문제를 추적하는 데 유용하다.
  • 예를 들어, 시스템의 특정 함수가 얼마나 자주 호출되는지, 어떤 리소스를 많이 사용하는지 등을 추적할 수 있다.
  • 이는 성능 문제나 버그를 찾는 데 유용하다.

4. eBPF와 관련된 도구들

  • bpftrace: 사용자 공간에서 eBPF 프로그램을 작성하고 실행할 수 있는 도구입니다. 시스템 트레이싱 및 프로파일링을 위한 고급 스크립팅 언어를 제공합니다.
  • Cilium: eBPF를 기반으로 한 네트워크 보안 및 로드 밸런싱 솔루션입니다. Kubernetes 환경에서 네트워크 보안을 관리하는 데 많이 사용됩니다.
  • BCC (BPF Compiler Collection): eBPF 프로그램을 작성하고 관리하는 데 도움이 되는 라이브러리와 툴셋을 제공합니다. 시스템 모니터링, 디버깅, 성능 분석 등을 위한 다양한 도구들이 포함되어 있습니다.
  • BPF Type Format (BTF): eBPF 프로그램을 작성할 때 사용할 수 있는 커널 데이터 구조에 대한 메타데이터 형식입니다. 이를 통해 eBPF 프로그램이 커널 내부 구조를 보다 효율적으로 다룰 수 있게 합니다.

5. eBPF의 발전

  • eBPF는 계속해서 발전하고 있으며, 최신 리눅스 커널(4.x, 5.x)에서는 더 많은 기능과 확장성이 추가되었다.
  • 특히, eBPF는 커널 버전마다 새로운 기능을 제공하고, 성능 향상 및 다양한 보안 메커니즘을 추가하는 데 기여하고 있다.

결론

  • eBPF는 네트워크 패킷 필터링에서 시작하여, 보안, 성능 모니터링, 트레이싱 등 다양한 영역에 걸쳐 커널과 사용자 공간 사이의 경계를 허물며 중요한 역할을 하고 있다.
  • 이를 통해 시스템 관리자와 개발자들은 커널의 복잡한 부분을 안전하고 효율적으로 제어할 수 있으며, 다양한 문제를 실시간으로 해결할 수 있다.
This post is licensed under CC BY 4.0 by the author.