시스템(Linux)

BPF Door(Berkeley Packet Filter) 에 대해 알아보겠습니다.

forward error correction Circle 2025. 5. 26. 08:54
반응형

Ⅰ. BPF Door(Berkeley Packet Filter) 란?

 고도화된 리눅스 백도어 악성코드로, 2021년 PWC 위협 보고서를 통해 최초 공개되었습니다. 이 악성코드는 중국 기반 APT 그룹인 Red Menshen(Earth Bluecrow)이 중동 및 아시아 지역을 대상으로 수년간 사용해 왔으며, 최근 한국의 통신업체 해킹 사건에서도 사용된 것으로 확인되었습니다.

 

Ⅱ. BPF 기술과 BPFDoor의 구조

 ⅰ. Berkeley Packet Filter (BPF) 기술

 유저 모드 프로그램이 네트워크 필터에 연결하여 소켓을 통해 들어오는 데이터를 허용하거나 거부할 수 있게 하는 기술입니다. 원래는 네트워크 패킷 필터링을 위해 만들어진 커널 기술로, 네트워크 트래픽 중 필요한 정보만 빠르게 걸러내기 위한 목적으로 개발되었습니다. 이 기술은 리눅스 커널 안에서 직접 실행되기 때문에 매우 빠르고 효율적이라는 장점이 있습니다.

 ⅱ. BPFDoor의 매직 패킷 시스템
  공격자가 매직 패킷을 보내는 방식으로 동작합니다. 일반적인 백도어 유형의 악성코드들과 달리 BPFDoor는 먼저 C&C 서버에 접속하거나 실행 중 특정 포트를 지속적으로 열어두지 않아도 됩니다. BPFDoor가 설치한 패킷 필터는 TCP 프로토콜의 경우 0x5293, UDP 및 ICMP 프로토콜의 경우 0x7255를 검사하는 기능을 담당합니다.


Ⅲ. BPF Door 공격 원리 및 실행 과정

 ⅰ. 초기 설치 및 은폐
BPFDoor가 최초로 실행되면 "/dev/shm" 경로에 "kdmtmpflush"라는 이름으로 자신을 복사한 후 자가 삭제합니다. /dev/shm 경로는 리눅스에서 메모리 기반의 파일 시스템으로 디스크에 기록되지 않고 메모리 상에서만 운영되는 특징을 가지고 있어 공격자들에 의해 자주 악용됩니다.

 ⅱ. 정상 프로세스 위장
악성코드는 정상 프로세스로 위장하기 위해 prctl() 함수를 사용하여 다음과 같은 문자열들 중 하나로 이름을 변경합니다:
    ■ /sbin/udevd –d
    ■ /sbin/mingetty/
    ■ /usr/sbin/console-kit-daemon –no-daemon
    ■ hald-addon-acpi: listening on acpi kernel interface /proc/acpi/event
    ■ dbus-daemon –system

 ⅲ. 명령 처리 시스템
매직 패킷에 포함된 비밀번호에 따라 다음과 같은 기능을 제공합니다:

명령 비밀번호 기능
justforfun Reverse Shell
1 socket Bind Shell
2 N/A "1" 응답

비밀번호가 "justforfun"인 경우 매직 패킷에 포함된 IP/Port에 접속하여 Reverse Shell을 제공하며, "socket"인 경우 새로운 포트를 열고 방화벽을 설정하여 공격자로부터 연결을 확립합니다.

 ⅳ. 리버스 쉘 및 환경 변수 조작
BPFDoor는 리버스 쉘 세션 생성 시 execve 시스템 콜을 이용하여 /bin/bash를 실행하며, 정상 프로세스로 위장하기 위해 인자값을 "qmgr –l –t fifo –u"로 설정합니다. 또한 분석 및 탐지를 어렵게 만들기 위해 다음과 같은 환경 변수를 설정합니다:

환경 변수   용도
HOME /tmp 홈 디렉토리 설정
HISTFILE /dev/null bash 히스토리 저장 방지
MYSQL_HISTFILE /dev/null mysql 클라이언트 히스토리 저장 방지
TERM vt100 터미널 타입 설정


Ⅳ. BPF Door 탐지 방법

 ⅰ.BPF 필터 점검

# BPF 소켓 확인
[root@feccle ~] # ss -0bp

오류 발생 시 다음 명령어를 사용합니다:

[root@feccle ~] # ss -0p


ⅱ. 매직 패킷 값 검사
다음 명령어로 매직 패킷 관련 필터를 검사할 수 있습니다:

# 매직 패킷 값 확인
[root@feccle ~] # ss -0bp | grep -EB1 "$((0x7255))|$((0x5293))|$((0x39393939))"

□ 매직 패킷 값은 다음과 같습니다:
0x7255 (29269), 0x5293 (21139), 0x39393939 (960051513)

 ⅲ. 의심 포트 확인
BPFDoor는 42391~43391 포트 범위를 사용하므로 다음 명령어로 확인할 수 있습니다:

# 의심 포트 확인
[root@feccle ~] # netstat -lpn | grep -E ':42[3-9][0-9]{2}|43[0-3][0-9]{2}'


 ⅳ. 위장 프로세스 검사
다음 명령어로 위장된 프로세스를 확인할 수 있습니다:

# 위장 프로세스 확인
[root@feccle ~] # ps -ef | grep "abrtd"


의심 프로세스가 발견된 경우 다음 명령어로 상세 정보를 확인
[root@feccle ~] # ls -l /proc/{프로세스_PID}/exe


ⅴ. 파일 경로 검사
다음 경로들을 우선적으로 점검해야 합니다:
 1) /dev/shm
 2) /var/run
 3) /tmp
 4) 기타 파일 실행 가능 경로

ⅵ. YARA 규칙 및 해시 검사
공개된 12종의 BPFDoor 악성코드에 대한 해시값 검사가 필요하며, KISA에서 공개한 IoC 정보를 활용할 수 있습니다:
  ■ a47d96ffe446a431a46a3ea3d1ab4d6e
  ■ 227fa46cf2a4517aa1870a011c79eb54
  ■ f4ae0f1204e25a17b2adbbab838097bd
  ■ 714165b06a462c9ed3d145bc56054566

Ⅴ. BPF Door 대응 방법

 ⅰ. 즉시 대응 조치
 1) 시스템 격리: 감염 의심 시스템을 네트워크에서 즉시 격리하여 측면 이동(lateral movement)을 방지해야 합니다.

 2) 프로세스 종료: 의심 프로세스를 즉시 종료하고 관련 파일을 삭제합니다.

 3) 로그 분석: 시스템 로그, 네트워크 로그를 분석하여 침해 범위를 파악합니다.
 ⅱ. 보안 강화 조치
 1) 방화벽 정책 강화: 불필요한 포트를 차단하고 네트워크 접근 제어를 강화합니다.

 2) EDR 솔루션 도입: 엔드포인트 탐지 및 대응(EDR) 솔루션을 통해 실시간 위협 탐지 체계를 구축합니다.

 3) 네트워크 모니터링 강화: 비정상적인 네트워크 트래픽 및 비허가된 포트 활동을 지속적으로 모니터링합니다.
 ⅲ. 시스템 및 운영 환경 강화
 1) 권한 관리: BPF 기능에 대한 권한을 제한하고, unprivileged eBPF를 비활성화합니다. SUSE Linux의 경우 /proc/sys/kernel/unprivileged_bpf_disabled 값을 1 또는 2로 설정하여 권한 있는 사용자만 eBPF를 사용할 수 있도록 제한할 수 있습니다.

 2) 정기적인 보안 패치: 운영체제 및 애플리케이션의 최신 보안 패치를 적용합니다.

 3) 침입 탐지 시스템 강화: IDS(침입 탐지 시스템) 및 IPS(침입 방지 시스템)를 강화하여 BPF 기반 공격을 탐지할 수 있도록 설정합니다.
 ⅳ. 예방 조치
 1) 보안 의식 교육: 직원들에게 사회공학적 공격 및 악성코드에 대한 교육을 실시합니다.

 2) 백업 및 복구 계획: 정기적인 백업과 복구 테스트를 통해 침해 사고 발생 시 신속한 복구가 가능하도록 준비합니다.

 3) 취약점 관리: 정기적인 취약점 스캔과 보안 점검을 통해 시스템의 보안 상태를 지속적으로 관리합니다.

반응형