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_enter 및 sys_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 활용)한 것입니다. 따라서 틀린 내용을 포함할 수 있습니다. 뉴스의 자세한 내용을 확인하시려면 해당 뉴스 링크를 클릭해주세요.