
BPFDoor Linux Malware
BPFDoor는 리눅스 시스템을 노리는 고급 백도어 악성코드로, 주로 중국과 관련된 APT 그룹(Advanced Persistent Threat)인 Red Menshen (또는 Red Dev 18)에 의해 사용된 것으로 알려져 있습니다. 이 백도어는 BPF (Berkeley Packet Filter) 기술을 활용해 일반적인 탐지를 우회하는 것이 특징입니다.

🔍 BPFDoor 개요
항목 | 내용 |
---|---|
🧠 이름 | BPFDoor (Berkeley Packet Filter Door) |
🎯 대상 시스템 | Linux |
🧬 공격 주체 | Red Menshen (중국계 APT 그룹으로 추정) |
📅 발견 시점 | 2021~2022년에 본격적으로 분석됨 |
🔐 주요 기능 | 패킷 필터링 기반의 통신 우회, 루트킷 수준의 은폐, 원격 쉘 실행 |
🛠️ 사용 기술 | Raw Socket, BPF, 포트리스닝 우회, 역방향 셸 등 |
🚫 방화벽 우회 | 가능 (패킷을 직접 감지하고 응답함으로써 포트 열림 없이 통신 가능) |
⚙️ 주요 동작 방식
- BPF로 네트워크 패킷 감시
Berkeley Packet Filter
를 이용해 시스템의 네트워크 트래픽을 직접 감시- 운영 체제 수준의 패킷 필터링을 통해 일반적인 방화벽이나 IDS를 우회함
- 포트리스닝 없이 명령 수신
- 특정 시그니처를 가진 패킷만 감지
- 열려 있지 않은 포트로도 패킷을 수신 → 흔적이 적어 탐지 어려움
- 역방향 셸(reverse shell) 제공
- 공격자가 시스템 내부로 명령을 보낼 수 있도록 함
- 파일 업로드/다운로드, 명령 실행 가능
- 지속성 확보
- 일정 경로에 자기 복사 및 실행 파일 등록
- 시스템 재시작 후에도 자동 실행
🛡️ 보안 권고 사항
항목 | 설명 |
---|---|
✅ 침해지표(IOC) 탐지 | 파일 경로, 프로세스 이름, 네트워크 동작 기반 로그 확인 |
✅ 패킷 필터링 점검 | BPF 관련 소켓이나 커널 후킹 여부 점검 |
✅ EDR/IDS 업그레이드 | 사용자 공간 패킷 감시도 가능한 도구 사용 필요 |
✅ 취약 서버 점검 | 공개 서비스 포트 점검 및 불필요한 서비스 종료 |
✅ 최신 패치 적용 | 커널, 네트워크 도구 등 최신 보안 패치 적용 |
📂 IOC(Indicator of Compromise) 예시
- 프로세스 이름:
/dev/shm/kdmtmpflush
,/usr/lib/libxselinux
- 숨김 프로세스 사용
- 의심스러운 BPF 소켓 존재
- 비정상적 ICMP/UDP 패킷 송수신 기록
🧩 결론
BPFDoor는 비전통적인 방법으로 백도어 통신을 수행하여 탐지가 어려운 고급형 리눅스 악성코드입니다. 특히 포트를 열지 않고도 명령을 주고받을 수 있어 기존 보안 장비의 탐지를 우회합니다. 클라우드 서버, 공개 웹서버 등 리눅스를 사용하는 조직은 정기적인 포렌식 분석과 로그 모니터링이 중요합니다.
📌 탐지방법
다음은 BPFDoor 악성코드 탐지를 위한 IOC(Indicators of Compromise) 탐지 스크립트 예시입니다. 이 스크립트는 Linux 시스템에서 다음과 같은 항목을 탐지합니다:
- 이상한 프로세스 이름 또는 경로
- 숨겨진 BPF 소켓 및 raw socket 사용 여부
- 비정상적인 네트워크 연결
/dev/shm
,/tmp
등 임시 디렉터리에 존재하는 실행 파일
🛠 IOC 탐지 Bash 스크립트 예시
#!/bin/bash
echo "=== BPFDoor IOC 탐지 시작 ==="
# 1. 의심스러운 경로에서 실행 중인 프로세스 탐지
echo "[1] 의심 경로의 프로세스 확인"
ps aux | grep -E "/dev/shm|/tmp|/var/tmp" | grep -v grep
# 2. BPF 또는 raw socket 사용 여부 확인 (root 권한 필요)
echo "[2] BPF 및 raw socket 사용 프로세스 탐지"
lsof -nP | grep -E "raw|bpf"
# 3. 의심 프로세스명/경로 검색
echo "[3] 의심 프로세스 경로 확인"
find / -type f \( -name "kdmtmpflush" -o -name "libxselinux*" \) 2>/dev/null
# 4. 비정상 네트워크 포트/연결 확인
echo "[4] 열려 있는 포트 및 LISTEN 상태 확인"
ss -tunlp
# 5. 시스템 내 BPF 사용 흔적 확인
echo "[5] BPF 관련 소켓 존재 여부 확인"
ls /proc/*/fd/* 2>/dev/null | xargs -I{} ls -l {} 2>/dev/null | grep -i "socket:\[" | grep -i "bpf"
# 6. 최근 수정된 실행파일 탐지 (1일 이내)
echo "[6] 최근 생성/수정된 실행파일 탐지 (/tmp, /dev/shm)"
find /tmp /dev/shm -type f -executable -mtime -1 2>/dev/null
echo "=== BPFDoor IOC 탐지 완료 ==="
🧪 사용법
chmod +x check_bpfd_ioc.sh
sudo ./check_bpfd_ioc.sh
📌 참고: 탐지 시 조치
- 발견된 의심 파일은 격리 후
strings
,md5sum
,sha256sum
등으로 분석 - 시스템 전체 포렌식 필요 (로그, bash history, cron, 서비스 등록 여부 등)
- 감염이 의심되면 즉시 네트워크에서 격리
리눅스 시스템에서 BPFDoor와 같은 악성코드가 사용하는 **BPF 소켓(Berkeley Packet Filter socket)**은 일반적인 netstat
, ss
, lsof
명령어로 잘 보이지 않습니다. 하지만 다음과 같은 방법으로 의심스러운 BPF 소켓을 탐지할 수 있습니다.
✅ 1. /proc/*/fd
로 열린 소켓 확인
echo "[*] BPF 소켓 확인 중..."
for pid in $(ls /proc | grep -E '^[0-9]+$'); do
for fd in /proc/$pid/fd/*; do
if [ -L "$fd" ]; then
target=$(readlink -f "$fd")
if echo "$target" | grep -qi "bpf"; then
echo "[!] PID $pid (프로세스: $(cat /proc/$pid/comm)) → $target"
fi
fi
done
done
🔎 결과 예시:
[!] PID 2156 (프로세스: bpfd) → socket:[123456] (bpf)
✅ 2. /proc/net/bpf
확인 (있는 경우)
일부 시스템에서는 /proc/net/bpf
또는 /sys/fs/bpf/
아래에 BPF 관련 핸들이 존재할 수 있습니다:
ls -alh /proc/net/bpf 2>/dev/null
ls -alh /sys/fs/bpf 2>/dev/null
대부분의 경우 일반 사용자에겐 비어 있음. 하지만 공격자가 BPF 핸들을 직접 생성했다면 흔적이 남을 수 있습니다.
✅ 3. BPF 필터를 사용 중인 소켓 탐지 (고급)
이 방법은 bpftool
명령어 사용이 가능합니다 (Linux Kernel 4.9+ 및 bpftool 설치 필요):
sudo bpftool prog show
sudo bpftool map show
확인 포인트:
- prog type: socket_filter 로 등록된 항목
- BPF 프로그램 이름이 이상하거나 정체불명일 경우
✅ 4. 의심되는 BPF 사용 프로세스 정보 확인
ps aux | grep -E "bpfd|bpf|raw|sniff" | grep -v grep
또는
sudo lsof -nP | grep raw
📌 참고: 탐지 후 조치
- PID 확인 →
cat /proc/<pid>/cmdline
,ls -l /proc/<pid>/exe
로 상세 정보 확인 - 필요시 해당 프로세스를
strace
,gcore
,strings
등으로 분석 - 감염 확정 시 시스템 재부팅 전 전체 포렌식 백업
통합 자동 스캔 스크립트
다음은 의심스러운 BPF 소켓 및 BPFDoor 활동을 자동 탐지하는 통합 스크립트입니다.
이 스크립트는 다음을 수행합니다:
- 의심스러운 BPF 소켓 확인
socket_filter
BPF 프로그램 탐지 (bpftool
사용 가능 시)/dev/shm
,/tmp
경로 실행 파일 점검- 의심 프로세스 확인
- 결과를 파일(
bpfd_ioc_scan.log
)로 저장
🛠 BPFDoor 자동 탐지 스크립트 (bash)
#!/bin/bash
LOGFILE="bpfd_ioc_scan.log"
echo "=== [BPFDoor IOC 자동 스캔 시작] ===" | tee $LOGFILE
echo "스캔 시간: $(date)" | tee -a $LOGFILE
# 1. BPF 소켓 탐지
echo -e "\n[1] /proc/*/fd/* 내 BPF 소켓 확인:" | tee -a $LOGFILE
for pid in $(ls /proc | grep -E '^[0-9]+$'); do
for fd in /proc/$pid/fd/*; do
if [ -L "$fd" ]; then
target=$(readlink "$fd" 2>/dev/null)
if echo "$target" | grep -qi "socket"; then
if grep -qi "bpf" <<< "$(ls -l $fd 2>/dev/null)"; then
pname=$(cat /proc/$pid/comm 2>/dev/null)
echo "[BPF 소켓] PID $pid ($pname) → $target" | tee -a $LOGFILE
fi
fi
fi
done
done
# 2. bpftool 사용 가능 여부 확인
if command -v bpftool >/dev/null; then
echo -e "\n[2] bpftool 사용 가능 - BPF 프로그램 확인:" | tee -a $LOGFILE
sudo bpftool prog show | tee -a $LOGFILE
else
echo -e "\n[2] bpftool 명령어가 없습니다. (설치 시 추가 확인 가능)" | tee -a $LOGFILE
fi
# 3. /tmp, /dev/shm 내 실행파일 탐지
echo -e "\n[3] /tmp, /dev/shm 내 최근 실행파일 탐지:" | tee -a $LOGFILE
find /tmp /dev/shm -type f -executable -mtime -3 2>/dev/null | tee -a $LOGFILE
# 4. 의심 프로세스명 및 소켓 유형 확인
echo -e "\n[4] 의심 프로세스 탐지 (raw, bpf 포함):" | tee -a $LOGFILE
ps aux | grep -Ei "bpfd|bpf|raw|sniff" | grep -v grep | tee -a $LOGFILE
echo -e "\n[5] Raw 소켓 사용 프로세스 탐지:" | tee -a $LOGFILE
sudo lsof -nP | grep raw | tee -a $LOGFILE
# 6. 비정상 네트워크 리스닝 포트 확인
echo -e "\n[6] 열려 있는 포트 및 LISTEN 상태 확인:" | tee -a $LOGFILE
ss -tunlp | tee -a $LOGFILE
echo -e "\n=== [BPFDoor IOC 자동 스캔 종료] ===" | tee -a $LOGFILE
echo "결과 파일: $LOGFILE"
🧪 사용법
chmod +x bpfd_ioc_scan.sh
sudo ./bpfd_ioc_scan.sh
결과는 bpfd_ioc_scan.log
파일로 저장됩니다.
📌 권장 후속 조치
- 이상 항목 발견 시
sha256sum
,strings
,gdb
,chkrootkit
등으로 분석 - 해당 프로세스 메모리 덤프:
gcore <pid>
- 즉시 네트워크 차단 및 격리 후 대응