Feature

  • Project
  • Using Lang
    • Kernel Space : C
    • User Space : Go Lang
  • Main Spec
    • HTTPS 패킷 Capture
      • 상위 버전의 CA 인증서가 필요 없음
      • Language(예, Python) 종속성 환경을 다운로드하거나 SSL 라이브러리를 다시 패키징 등을 할 필요가 없음.
        • 특히 점점 더 까다로워지는 Android 환경에서의 HTTPS Plaintext 패킷 캡쳐를 손쉽게 할 수 있도록 도움을 줌.
      • 유사 툴인 ssldump와 비교하여 더 뛰어난 성능과 사용 편리성을 갖춤
    • HTTPS 외 Capture
      • tls hooking
        • Capturing plaintext communication from Golang programs encrypted with TLS/HTTPS.
        • eBPF를 활용, CA 인증서 없이 HTTPS/TLS plaintext 를 캡쳐
      • bash hooking
        • command hooking
      • Database hooking
        • capture sql queries (MySQL, Postgres)
        • It can also capture bash commands, which is suitable for security auditing scenarios, such as database auditing of mysqld, etc
  • eCapture vs ssldump
    • eCapture는 ssldump보다 다양한 모듈을 캡쳐 가능
    • eCapture는 HTTPS 패킷 캡쳐 시 eBPF를 사용하고 CA 인증서가 필요 없음
      (ssldump -Ad -k ~/server.pem -p foobar -i eth0 host myserver)
    • 출처
      https://www.libhunt.com/compare-ecapture-vs-ssldump

Supported Arch

  • x86_64
    • Linux Kernel 4.18 or higher
  • ARM (aarch64)
    • Linux/Android Kernel 5.5 or higher

RUNS

  • Requirements (on x86_64)
    • Linux Kernel 4.18 or higher
    • BPF CO-RE 기능 (BTF)
            (CO-RE[Compile Once – Run Everywhere] : eBPF 프로그램이 다른 커널 버전간에 동작될 수 있게 하는 기능)
      • BTF 활성화 여부 확인
        # cat /boot/config-`uname -r` | grep CONFIG_DEBUG_INFO_BTF
        CONFIG_DEBUG_INFO_BTF=y
        CONFIG_DEBUG_INFO_BTF_MODULES=y

  • Download & Install
    # wget https://github.com/gojue/ecapture/releases/download/v0.6.4/ecapture-v0.6.4-linux-x86_64.tar.gz
    # tar zxvf ecapture-v0.6.4-linux-x86_64.tar.gz
    # ls
    CHANGELOG.md  ecapture  LICENSE README_CN.md  README.md

  • Test
    • Test Env
      • Ubuntu 22.04.2 LTS
      • 5.15.0-1026-x86_64
    • Capture Test - TLS
      • matching - application & library

        wget - https plain text packet capture
        • 1) wget이 사용하는 TLS/SSL library 확인

          → wget은 libssl을 사용
          2) 모든 프로세스를 대상으로 tls 통신 Capture 대기 (libssl / libgnutls / libnspr4)

          3) wget 수행 (다른 tty에서)

          Capture 진행

      • firefox - https plain text packet capture (nspr)
        • 1) firefox가 사용하는 TLS/SSL library 확인

          2) 모든 프로세스를 대상으로 tls 통신 Capture 대기 (libssl / libgnutls / libnspr4)
  • eCapture Architecture

    • Work Flow
      • compile by clang/llvm → eBPF Byte Code → Go-Bindata 변환 → ehids/ebpfmanager Class Library를 통해 로딩 → Hook 및 Map 읽기를 위해 bpf() syscall
      • ( * profiling events (kprobes, uprobes, tracepoints, USDT, perf_events) )
        The eBPF networking specific use including loading BPF programs with tc (traffic control) and XDP
    • eBPF Loading Mechanism
      • User Mode에서 암호화 및 암호 해독 기능을 연결 →  tcpdump(libpcap)는 패킷을 수신 → 수신된 패킷을 XDP에서 처리 한 후 패킷을 복제 → 해당 패킷을 복사하여 User Mode 프로세스로 전송
    • Hook Mechanism
      • eCapture는 eBPF uprobe 관련 함수를 사용하여 HOOK을 수행함
        • 따라서 symbol table 및 offset를 포함하는 타겟 User Mode 함수 정보가 필요
      • 대부분의 Linux 배포판에서 사용되는 ELF에는 symbol table이 포함되어 있음
        • ELF 파일의 경우 대상이 되는 class library는 static하게 컴파일되어 반영되어 있거나 dynamic link library를 통해 참조됨.
          Library 참조 형태 두 가지 모두 eCapture는 다양한 시나리오에 따라 자동으로 검색, 만약 찾을 수 없는 경우 사용자는 명령 줄 옵션(매개변수)를 통해 이를 지정할 수 있음.
      • eCapture는 두 가지 모드 (HOOK ELF 및 ELF SO) 모두 지원함
        • ELF 파일을 자동으로 분석하고, .dynamic 및 .dynsym과 같은 세그먼트 정보를 읽고, 관련 링크 라이브러리 이름, 함수 이름 및 오프셋 주소를 찾음.

Reference

eCapture tool, eBPF

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다