SKT 유심 해킹 — BPFDoor 백도어 공격
개요 : 2025년 4월 18일, SK텔레콤의 이동통신 가입자 인증 서버인 HSS(Home Subscriber Server)에서 약 9.82GB 규모의 개인정보가 외부로 유출됐다. 피해 규모는 최대 2,300만 가입자의 유심 인증 정보에 달했고, 개인정보보호위원회는 역대 최대 규모인 1,348억 원의 과징금을 부과했다.
BPFDoor
BPFDoor는 BPF(Berkeley Packet Filter)를 악용하는 리눅스 기반 백도어 악성코드다.
BPF는 운영체제 가상머신에서 코드를 실행하는 기술로, 커널 단에서 동작하기 때문에 네트워크 방화벽이나 탐지 시스템을 완전히 우회할 수 있다.
공격 흐름
- 초기 침투 :
- BPFDoor 설치 : BPFDoor 백도어 설치 (리눅스 커널 레벨) - 커넬 레벨 -- 보안솔루션 우회
- 은닉 통신
- 데이터 탈취
1. BPF : BPF(Berkeley Packet Filter)는 원래 1992년에 만들어진 정상적인 리눅스 커널 기술이다. tcpdump, Wireshark 같은 네트워크 분석 도구들이 전부 BPF를 써서 패킷을 캡처한다. 문제는 이 기술이 커널에서 가장 먼저 패킷을 보는 위치에 있다는 것. BPFDoor는 이 정상 기술을 백도어 통신 채널로 악용한 것이다.
2. BPFDoor의 핵심 트릭 — 매직 패킷 : BPFDoor는 평소엔 완전히 침묵한다. 열린 포트도 없고, 네트워크 연결도 없고, 프로세스 목록에도 안 보인다. bpf 는 딱 하나의 조건이 충족될 때만 나타난다.
시나리오 A - 일반 포트 스캐너가 보내는 패킷
포트 스캐너/IDS → 일반 TCP SYN 패킷 → BPFDoor 무반응
시나리오 B - 공격자가 보내는 매직 패킷
공격자 원서버 → 매직 패킷 구조 → BPFDoor 활성화
활성화 이후 — 역방향 셸(Reverse Shell) 생성
피해 서버( BPFDoor 실행중 ) -( 서버가 공격자에게 먼저 연결 (인바운드 차단 우회) )→ 공격자 서버 (명령 수신 대기)
탐지 불가한 이유
1. 포트 없음
2. 프롯스 위장
3. 트래픽 없음
실제 코드 수준
// 일반 백도어 방식 — 소켓 열고 포트 Listen
int sock = socket(AF_INET, SOCK_STREAM, 0);
bind(sock, &addr, sizeof(addr)); // 포트 4444 열림 → netstat에 보임
listen(sock, 5);
// BPFDoor 방식 — 커널 레이어에서 직접 패킷 캡처
int sock = socket(AF_PACKET, SOCK_RAW, htons(ETH_P_ALL));
// 포트를 열지 않고 NIC에서 바로 모든 패킷을 훔쳐봄
// netstat, ss 어디에도 안 보임
2. BPF 필터로 매직 바이트만 골라내기
// 커널에게 이런 패킷만 나한테 올려줘 라고 필터 등록
struct sock_filter filter[] = {
// ICMP 패킷인지 확인
BPF_STMT(BPF_LD | BPF_B | BPF_ABS, 23),
BPF_JUMP(BPF_JMP | BPF_JEQ | BPF_K, IPPROTO_ICMP, 0, 3),
// 매직 바이트 0x5293 있는지 확인
BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 54),
BPF_JUMP(BPF_JMP | BPF_JEQ | BPF_K, 0x5293, 0, 1),
BPF_STMT(BPF_RET | BPF_K, 0xFFFF), // 통과 → BPFDoor 깨어남
BPF_STMT(BPF_RET | BPF_K, 0), // 나머지 → 무시
};
// 이 필터가 커널 안에서 동작 → 사용자 공간 어떤 도구도 볼 수 없음
3. 프로세스명 위장
// argv[0]을 덮어써서 ps 명령에 다른 이름으로 표시
strcpy(argv[0], "/usr/bin/dbus-daemon");
// 실제로는 악성코드인데 ps 결과엔 정상 시스템 프로세스처럼 보임
4. 기존 도구가 잡지 못한 이유
| 탐지 시도 | 왜 실패하는가 | 대안 |
| netstat -anp | 열린 포트 없음 — AF_PACKET은 포트 개념 자체가 없음 | ss -a + type:raw 필터 |
| ps aux | dbus-daemon 등으로 프로세스명 위장 | /proc/PID/exe 실제 바이너리 경로 비교 |
| 방화벽 로그 | 패킷이 방화벽 레이어에 도달하기 전에 BPF가 가로챔 | tcpdump로 NIC 레벨 원시 패킷 직접 캡처 |
| 바이러스 백신 | 파일 시그니처 없음 — 메모리에서만 실행되기도 함 | 메모리 포렌식 (Volatility 등) |
| 네트워크 IDS | 평소엔 트래픽 자체가 없음 | 행위 기반 탐지 — AF_PACKET 소켓 생성 이벤트 감시 |
해킹 원리 분석
1. 초기 침투: 웹셸 & VPN 취약점
- 민관합동조사단은 BPFDoor 외에도 웹셸 악성코드를 추가로 발견했으며, 이것이 2022년 최초 공격의 핵심 수단이었을 것으로 추정.
웹셸 공격이란?
해커가 서버에 심어두는 원격 조종 리모컨같은 것이다. 웹 서버의 취약점을 뚫고 악성 스크립트 파일 하나를 올려두면, 그 이후론 브라우저만으로 서버 내부를 마음대로 조종할 수 있다. SKT 해킹에서도 BPFDoor를 심기 전 단계로 웹셸이 먼저 사용됐을 가능성이 유력하게 지목되었다.
- 전문가들은 Ivanti의 VPN 장비 취약점을 통해 최초 해킹이 이뤄졌을 것으로 본다.
2. BPFDoor의 핵심 원리: 왜 못 잡았나
- BPF는 운영체제가 패킷을 처리하기 전, 네트워크 인터페이스 카드(NIC)에서 가장 먼저 패킷을 가로채는 커널 수준 기능. 이 덕분에 BPFDoor는 방화벽이나 소켓 열림 여부와 무관하게 네트워크를 직접 들여다보고 데이터를 주고받을 수 있다.
3. 탈취 목표: 왜 HSS였나
- HSS(Home Subscriber Server)는 SKT 가입자가 네트워크에 접속할 때 본인인지 인증하는 핵심 정보를 저장하는 시스템이다. 여기서 해커가 노린 정보는 유심 인증키(Ki 값) 이었다. 이걸 확보하면 통신망 조작, 스푸핑, 위치 추적, 금융 범죄까지 가능하다.
'knights Frontier' 카테고리의 다른 글
| 논문 리뷰 (0) | 2026.05.31 |
|---|---|
| 최신 보안 사고 사례 분석 - 3 (0) | 2026.05.29 |
| 최신 보안 사고 사례 분석 - 1 (0) | 2026.05.29 |
| IDS/IPS의 원리와 활용 방법 (0) | 2026.05.29 |
| 리눅스 기반 시스템 탐색 및 분석 - 2 (0) | 2026.05.29 |