검색
회원가입로그인

eBPF를 사용하여 시스템 호출 추적기 작성

  • 제목: "eBPF를 사용하여 시스템 호출 추적기 작성하기"

  • 전제 조건: 시스템 호출, eBPF, C, 저수준 프로그래밍 기본 지식

  • 소개:

    • eBPF(Extended Berkeley Packet Filter) 소개
    • eBPF의 장점: 안전성, 이식성, 유지보수성
    • eBPF 프로그램 작성을 위한 고수준 방법들: Cilium의 go 라이브러리, bpftrace, libbpf 등
  • 목표:

    • 유명한 도구 strace와 유사한 시스템 호출 추적기 개발 목표
    • 예시: ./beetrace /bin/ls
  • 개념:

    • 트레이스포인트: 커널 코드 내 특정 이벤트나 코드 경로를 후킹하는 기능
    • SEC 매크로: 대상 ELF 내에 새로운 섹션을 생성
    • : eBPF 프로그램과 사용자 공간 애플리케이션 간의 공유 데이터 구조
  • eBPF 프로그램 작성:

    • 몇 가지 일반적인 시스템 호출에 집중
    • eBPF 프로그램과 로더 작성
    • 데이터 구조 설정 예시 제공
  • 로더 구현:

    • 명령줄 인수로 ELF 파일 경로를 읽어와 로더가 자식 프로세스 생성 및 프로그램 실행
    • 부모 프로세스가 eBPF 프로그램의 로딩 및 연결 설정
  • 시스템 호출 추적을 위한 eBPF 프로그램 작성:

    • sys_entersys_exit 트레이스포인트 사용
    • 시스템 호출 번호, 인수, 반환 값 추적
    • 해시맵링버퍼를 사용하여 사용자 공간 프로그램과 정보 공유
  • 예제 코드:

    • 시스템 호출 입력 추적 프로그램: detect_syscall_enter
    • 시스템 호출 출력 추적 프로그램: detect_syscall_exit
    • 메인 로더 프로그램: loader.c
    • eBPF 프로그램: controller.c
  • 테스트 프로그램 및 Makefile 작성:

    • “tracer in action” 문자열 출력 프로그램 작성
    • 컴파일 명령어 예시 제공
  • 실행 예시:

    • 루트 권한으로 로더 실행: sudo ./beetrace ./test
  • 전체 코드 GitHub 레포지토리에서 확인 가능

  • 참조 자료:

    • eBPF 공식 웹사이트
    • libbpf GitHub 레포지토리

요약: 이 글은 eBPF를 사용하여 시스템 호출을 추적하는 도구를 만드는 과정을 설명하며, 이를 위해 필요한 기본 개념과 코드를 제시한다.


3sh4dy.com링크 복사하기
AI 뉴스 요약은 뉴스의 내용을 AI가 요약(GPT-4 활용)한 것입니다. 따라서 틀린 내용을 포함할 수 있습니다. 뉴스의 자세한 내용을 확인하시려면 해당 뉴스 링크를 클릭해주세요.
원본 뉴스 보기