회사는 지난 18일 오후 6시9분쯤 보안관제센터에서 비정상적 데이터 이동을 처음 감지했다. 당시 9.7GB에 달하는 데이터가 외부로 전송됐다.
SK텔레콤은 18일 밤 11시20분쯤 과금분석장비(WCDR)에서 악성코드를 발견했다. 19일 밤 11시40분쯤에는 음성 인증장비(HSS)에서 데이터 유출 의심 정황도 확인했다.
---
### BPF door
## 개요
BPFDoor는 BPF([[Berkeley Packet Filter]]) 메커니즘을 활용하여 커널 내에 은밀한 활성화 채널을 구축하는 정교한 Linux 백도어입니다. 이 백도어는 네트워크 트래픽에서 사전 정의된 “매직” 바이트 시퀀스를 감지할 때까지 비활성 상태로 대기하며, BPF 검사는 방화벽 규칙보다 먼저 수행되므로 방화벽을 우회하여 역쉘(reverse shell) 또는 기타 페이로드를 실행할 수 있습니다.
## 위협 배경
BPFDoor는 2021년 PwC 연구진에 의해 처음 식별되었으며, 이후 APT 그룹인 Red Menshen(別名 Earth Bluecrow)에 의해 아시아·중동 지역의 Linux 및 Solaris 서버를 표적으로 삼는 장기 사이버 스파이 활동 도구로 진화했습니다. 특히 한국, 홍콩, 미얀마, 말레이시아, 이집트 등의 통신·금융·소매 분야에서 활발히 사용된 것으로 보고되고 있습니다.
## 아키텍처 및 배포
BPFDoor 샘플은 `setsockopt()` 시스템 콜의 `SO_ATTACH_FILTER` 옵션을 사용해 Linux 커널에 BPF 프로그램을 로드하거나, Solaris에서는 libpcap 기능을 통해 필터를 삽입합니다. 이 필터들은 Classic BPF(cBPF) 바이트코드—커널 내 BPF 가상 머신에서 실행되는 고정 길이 명령어—로 작성되어 있으며, 네트워크 포트를 열지 않고도 패킷을 감시할 수 있습니다.
## 활성화 메커니즘 및 매직 패킷
BPFDoor의 핵심은 BPF 필터 로직으로, 들어오는 패킷의 특정 오프셋을 검사하여 “매직 넘버”와 일치하는지 확인합니다.
```c
udp[8:2]==0x7255 ||
(icmp[8:2]==0x7255 && icmp[icmptype]==icmp-echo) ||
tcp[((tcp[12]&0xf0)>>2):2]==0x5293
```
초기 버전(2018–2022)은 약 30개의 BPF 명령어로 구성되었으나, 최근 변종은 추가 매직 상수(e.g., `0x39393939` 등)를 인식하도록 명령어 수를 200개 이상으로 확장하여 시그니처 기반 탐지를 회피합니다.
## 통신 및 제어 인터페이스
BPFDoor는 사용자 모드의 컨트롤러 프로그램과 짝을 이루어 다음과 같은 기능을 제공합니다:
- TCP, UDP, ICMP 역쉘 열기
- 임의 포트로 연결 리디렉션
- 실제 코드 실행 없이 백도어 존재 확인
- 매직 시퀀스 및 암호 실시간 커스터마이징
주요 CLI 옵션에는 `-c`(암호화), `-l/-m`(원격 호스트), `-s`(리스닝 포트), `-f/-x`(매직 바이트), `-p`(비밀번호) 등이 있으며, 비밀번호는 고정 솔트와 MD5 해시를 통해 검증됩니다.
## 은폐 및 회피 기법
1. **방화벽 우회**: BPF 필터가 netfilter 이전에 실행되어 매직 패킷이 iptables에 도달하지 않음
2. **프로세스 위장**: 감염된 프로세스가 정식 데몬 이름으로 변경
3. **안티 포렌식**: 쉘 및 MySQL 기록 비활성화(`HISTFILE=/dev/null`)
4. **리스닝 소켓 미사용**: 실제 포트를 열지 않아 네트워크 스캔에 포착되지 않음
## 탐지 및 포렌식
BPFDoor를 탐지하려면 라이브 BPF 프로그램과 관련 프로세스를 감사하면 됩니다:
```bash
ss -0pb
# -0 PACKET 소켓 표시
# -p 프로세스 표시
# -b 연결된 BPF 바이트코드 덤프
```
명령어 수가 비정상적으로 많거나(`>30`), 매직 상수(`0x7255`, `0x5293`, `0x39393939`)가 포함된 필터를 주목하세요. `bpftool` 또는 Radare2 플러그인을 사용해 바이트코드를 분석하고, IDS/IPS에 매직 패킷 서명을 추가하면 보다 효과적입니다.
## 방어 및 완화 권장 사항
- **권한 최소화**: 신뢰할 수 없는 애플리케이션에서 `CAP_NET_RAW` 및 `CAP_NET_ADMIN` 제거
- **커널 업데이트**: BPF 권한 강화 및 취약점 패치 적용
- **BPF 프로그램 모니터링**: 자동화된 주기적 검사 도구(예: Sandfly Security) 사용
- **IDS/IPS 룰 배포**: Trend Micro, TippingPoint, Deep Discovery Inspector 등의 매직 패킷 탐지 규칙 적용
- **네트워크 분할**: 중요 서버에 대한 직접 관리자 접근 제한
## 부록: BPF 필터 예제
|변형|명령어 수|필터 표현식(libpcap 문법)|
|---|---|---|
|A|30|`udp[8:2]==0x7255 ... tcp[((tcp[12]&0xf0)>>2):2]==0x5293`|
|B|39|A에 `tcp[((tcp[12]&0xf0)>>2)+26:4]==0x39393939` 검사 추가|
|C/D/E|205–229|MAC 닙블 체크 또는 추가 매직 상수까지 포함하도록 명령어 확장|
> **참고**: 실제 필터는 `ss -b`로 바이트코드를 추출하여 정확히 분석해야 합니다.