침해 탐지

BPFDoor, 포트를 열지 않고 명령을 기다리는 백도어

BPFDoor는 서버에 포트를 열지 않고 지나가는 패킷을 지켜보다가 약속된 신호에만 반응한다.
포트와 리슨, BPF와 RAW 소켓의 기초부터 2025년 통신사 침해 사고, 점검 결과를 읽을 때 헷갈리기 쉬운 점까지 정리한다.

이 글의 목차포트가 열려 있다는 것은 무슨 뜻일까8
  1. 포트가 열려 있다는 것은 무슨 뜻일까
  2. BPF는 원래 진단 도구를 위한 기술이다
  3. BPFDoor가 신호를 기다리는 방식
  4. 포트를 다 닫으면 안전한가
  5. 2022년에 처음 알려졌다
  6. 2025년 통신사 사고에서 확인된 것
  7. 점검 도구의 ‘의심’ 표시를 읽는 법
  8. 평소 모습을 적어 두면 판단이 빨라진다

2025년 봄, SK텔레콤의 유심 정보 유출 사고를 다룬 뉴스에 BPFDoor라는 이름이 자주 나왔다.
서버 안에 숨어서 몇 년 동안 들키지 않았다는 악성코드다.

서버 보안을 처음 배우면 어떤 포트가 열려 있는지부터 확인하라고 배운다.
그런데 BPFDoor는 포트를 열지 않고도 밖에서 오는 명령을 받는다.
어떻게 그럴 수 있는지 포트에서부터 차례로 따라간다.

포트가 열려 있다는 것은 무슨 뜻일까

서버 한 대에서는 여러 프로그램이 함께 돈다.
그래서 서버에 도착한 통신을 어느 프로그램에 넘길지 정하는 번호가 필요한데, 이 번호가 포트다.
웹 서버는 보통 443번, 원격 접속에 쓰는 SSH는 22번을 쓴다.

밖에서 오는 연결을 받으려는 프로그램은 쓸 포트를 운영체제에 등록해 두고 연결을 기다린다.
이 상태를 리슨(LISTEN)⁠이라고 한다.
포트와 방화벽의 기초는 포트와 방화벽 글에서 따로 다룬다.

서버를 점검할 때도 리슨 중인 포트 목록부터 본다.
모르는 번호가 없으면 밖에서 들어올 길도 없다고 생각하기 쉽다.

백도어(backdoor)⁠는 공격자가 정상 로그인과 인증을 건너뛰고 다시 들어오려고 남겨 두는 통로다.
자기 포트를 열고 연결을 기다리는 백도어라면 이 목록에 나타난다.
BPFDoor는 나타나지 않았다.

BPF는 원래 진단 도구를 위한 기술이다

네트워크로 오가는 데이터는 패킷이라는 작은 묶음으로 나뉘어 이동한다.
통신 문제를 찾을 때는 패킷을 직접 들여다봐야 하는데, 오가는 패킷을 전부 가져오면 양이 너무 많다.

BPF(Berkeley Packet Filter)⁠는 이 문제를 풀려고 만든 패킷 필터다.
운영체제의 핵심부인 커널 안에서 필요 없는 패킷을 최대한 일찍 버려서, tcpdump 같은 분석 도구가 원하는 패킷만 받게 해 준다.

이 방식은 1993년 로렌스 버클리 연구소의 Steven McCanne과 Van Jacobson이 발표한 논문에서 처음 소개되었다.

이런 필터는 RAW 소켓에 붙인다.
소켓은 프로그램이 네트워크로 데이터를 주고받는 통로인데, RAW 소켓은 포트 번호로 연결을 기다리지 않고 장치에 들어온 패킷을 가공하지 않은 채 받는다.

리눅스에서는 이런 통로를 패킷 소켓이라고 부르고, 네트워크 장치 드라이버 수준에서 패킷을 주고받는 데 쓴다.
리슨 상태로 기다리지 않으니 리슨 포트 목록에도 나오지 않는다.

오가는 패킷을 모두 볼 수 있는 통로여서, 리눅스는 관리자 권한이 있는 프로그램에만 이것을 열어 준다.

BPF와 RAW 소켓 자체는 악성 기술이 아니다.
패킷을 들여다보는 것은 진단 도구가 원래 하는 일이다.

BPFDoor가 신호를 기다리는 방식

수신 방식에 따른 포트 목록 가시성 전용 LISTEN 소켓이 없는 수신 경로는 포트 목록에 BPFDoor 항목을 남기지 않는다. 개념 도해 수신 방식에 따른 포트 목록 가시성 패킷 수신 경로 ① 패킷 도착 ② RAW 소켓 ③ BPF 조건 일반 패킷 조건 불일치 수신기 제외 매직 패턴 조건 일치 명령 통로 포트 목록 가시성 LISTEN 등록선 전용 LISTEN 전용 소켓 등록 목록 표시 RAW 소켓 · BPF 패킷 직접 수신 새 항목 없음 수신 경로 전용 LISTEN 소켓이 없는 수신 경로는 포트 목록에 BPFDoor 항목을 남기지 않는다. SOSHIN · DEV NOTES
BPFDoor는 평소 전용 포트를 열지 않고, 지나가는 패킷 가운데 약속된 신호만 기다린다.

BPFDoor는 이 진단 기능을 수신기로 썼다.
RAW 소켓을 열고 BPF 필터를 붙여서, 대부분의 패킷은 흘려보내고 미리 정한 모양의 패킷만 골라낸다.
이 신호용 패킷을 매직 패킷(magic packet)⁠이라고 부른다.

매직 패킷은 특별한 포트로 보낼 필요가 없다.
TCP 443번만 열어 둔 웹 서버라도, 그 443번으로 보낸 매직 패킷을 BPFDoor가 받아 본다.
UDP 패킷이나 ping에 쓰는 ICMP 패킷도 마찬가지다.

필터 조건에 따른 패킷 선별 BPF 필터는 정상 트래픽을 흘려보내고 약속된 매직 패턴과 맞는 패킷만 수신기에 남긴다. 개념 도해 필터 조건에 따른 패킷 선별 패킷 선별 경로 정상 트래픽과 약속된 신호 TCP DNS MAGIC UDP ① RAW 소켓 ② BPF 조건 조건 일치 ③ 매직 패킷 조건 불일치 선별 제외 필터 판정 결과 BPF 조건선 일반 패킷 조건 불일치 제외 매직 패킷 조건 일치 수신기 전달 판정 경로 BPF 필터는 정상 트래픽을 흘려보내고 약속된 매직 패턴과 맞는 패킷만 수신기에 남긴다. SOSHIN · DEV NOTES
BPF 필터는 일반 패킷을 흘려보내고, 약속된 패턴과 맞는 매직 패킷만 수신기로 넘긴다.

BPFDoor는 서버에서 돌아가는 방화벽과 리슨 포트보다 앞에서 패킷을 본다.
신호를 받으면 그제야 방화벽 규칙을 고쳐서, 공격자 주소에서 온 연결을 셸로 넘긴다.
셸은 명령어를 입력해 서버를 조작하는 프로그램이다.

밖에서 보면 여전히 443번으로 가는 평범한 웹 트래픽처럼 보인다.
명령을 주고받을 통로는 신호를 받은 뒤에야 생긴다.

서버 안 수신 순서에 따른 신호 경로 패킷 소켓은 서버 방화벽과 리슨 포트보다 먼저 패킷을 받고, 셸로 가는 통로는 신호를 받은 뒤 방화벽 규칙을 바꾸면서 생긴다. 개념 도해 서버 안 수신 순서에 따른 신호 경로 서버 안 수신 경로 ② 패킷 소켓 · BPF 필터 BPFDoor 수신기 방화벽 · 리슨 포트보다 먼저 ① 네트워크 장치 패킷 도착 ③ 서버 방화벽 규칙 판정 ④ 리슨 포트 포트 번호로 전달 웹 서버 리슨 중인 프로그램 차단 규칙 → 버림 닫힌 포트 → 미도달 신호 이후 연결 경로 ① 매직 패킷 일치 BPF 필터 조건 ② 방화벽 규칙 변경 공격자 주소 대상 ③ 443번 연결 바뀐 규칙 적용 공격자 주소 다른 주소 ④ 셸 명령 입력 웹 서버 평소 응답 시간 패킷 소켓은 서버 방화벽과 리슨 포트보다 먼저 패킷을 받고, 셸로 가는 통로는 신호를 받은 뒤 방화벽 규칙을 바꾸면서 생긴다. SOSHIN · DEV NOTES
서버 방화벽이 버리는 패킷이나 닫힌 포트로 온 패킷도, 그보다 앞에 있는 패킷 소켓은 이미 받아 본다.

포트를 다 닫으면 안전한가

이 질문에는 두 가지를 나눠서 답해야 한다.
먼저 서버 앞단의 방화벽은 여전히 의미가 있다.
클라우드 보안 그룹처럼 서버에 닿기 전에 패킷을 막으면 신호도 서버에 닿지 못한다.

문제는 웹 서버처럼 어떤 포트든 밖에 열어 둬야 하는 서버다.
그 포트로 들어오는 패킷이면 무엇이든 신호를 실어 나를 수 있다.

둘째, BPFDoor는 처음 들어오는 수단이 아니다.
이 프로그램을 실행하려면 서버의 최고 관리자 권한인 root 권한이 필요하다.
다른 방법으로 이미 서버를 장악한 공격자가 다시 들어올 길로 심어 두는 도구다.

숨는 방법도 여럿이다.
BPFDoor는 메모리에 머물고, 실행한 뒤 자기 파일을 지우고, 흔한 시스템 프로세스 이름으로 자신을 꾸민다.

2022년에 처음 알려졌다

2022년 5월, 한 보안 연구자가 이 백도어를 세계 곳곳에서 쓰이는 감시 도구로 소개했다.
며칠 뒤에는 공개된 소스 코드를 바탕으로 동작을 뜯어본 분석이 나왔고, 앞에서 본 동작 방식도 대부분 이때 알려졌다.

이 분석은 BPFDoor를 중국 기반 공격 집단 Red Menshen과 연결된 도구로 소개했다.

2025년 통신사 사고에서 확인된 것

일반 뉴스에 이름이 오른 것은 2025년이다.
SK텔레콤은 2025년 4월 19일 밤, 악성코드로 유심 관련 정보가 유출된 정황을 발견했다고 밝혔다.

유심(USIM)⁠은 휴대폰에 꽂는 작은 카드로, 통신망이 가입자를 알아보는 데 필요한 정보를 담는다.

과학기술정보통신부가 꾸린 민관합동조사단의 최종 조사 결과를 보면 공격은 2021년부터 이어졌다.
공격자는 2021년 8월 인터넷과 맞닿은 관리용 서버에 원격 제어 악성코드를 설치했다.

조사단은 공격자가 그 서버에 평문으로 저장돼 있던 계정 정보로 다른 서버에 들어간 것으로 보았다.
같은 해 12월에는 음성통화 인증을 맡은 서버에 BPFDoor를 설치했다.

그 뒤 몇 년에 걸쳐 악성코드를 더 심었고, 2025년 4월 18일 유심 정보를 밖으로 빼냈다.

조사단은 전체 서버 4만 2,605대를 점검해 공격받은 서버 28대를 찾아냈다.
거기서 나온 악성코드 33종 가운데 27종이 BPFDoor 계열이었다.

유출된 것은 IMSI를 포함한 유심 정보 25종, IMSI 기준 약 2,696만 건이었다.
IMSI⁠는 통신망이 가입자를 구별할 때 쓰는 번호다.

사건 시점에 따른 침해 가시성 침입, 설치, 공개 분석, 유출 발견은 서로 다른 시점의 기록으로 이어졌다. 개념 도해 사건 시점에 따른 침해 가시성 사건 재구성 경로 ① 2021.08 첫 거점 ② 2021.12 BPFDoor 설치 ③ 2022.05 공개 분석 ④ 2025.04 유출 발견 시간 순서 시점별 가시성 2025.04 · 사고 발견 서버 내부 BPFDoor 흔적 · 2021.12부터 개별 사고 확인 공개 정보 작동 방식 분석 · 2022.05부터 시간 순서 침입, 설치, 공개 분석, 유출 발견은 서로 다른 시점의 기록으로 이어졌다. SOSHIN · DEV NOTES
최초 침입과 BPFDoor 설치, 외부 공개, 정보 유출 발견은 서로 다른 시점에 일어났다.

점검 도구의 ‘의심’ 표시를 읽는 법

숨는 악성코드를 찾을 때는 이미 알려진 파일 이름이나 해시만 확인해서는 부족하다.
공격자가 이름과 내용을 조금만 바꿔도 놓친다.

그래서 점검 도구는 행동도 함께 본다.
처음 보는 BPF 필터가 붙은 RAW 소켓, 실행 파일이 지워진 채 돌아가는 프로세스, 시스템 프로그램 이름을 쓰는 낯선 프로세스 같은 것들이다.

문제는 정상 프로그램도 같은 행동을 한다는 점이다.
tcpdump 같은 분석 도구가 RAW 소켓과 BPF를 쓰는 것은 BPF가 만들어진 목적 그대로다.

점검 결과에 붙는 ‘Suspicious’(의심) 표시는 조사를 시작하라는 뜻이지, 감염이 확인됐다는 뜻은 아니다.
정상 동작을 공격으로 잘못 잡은 결과를 오탐(false positive)⁠이라고 한다.

경고가 뜨면 그 동작을 어떤 프로그램이 언제 왜 만들었는지부터 확인한다.
아래 세 가지가 출발점이다.

확인할 것정상일 때 보이는 모습의심을 키우는 모습
그 동작을 만든 실행 파일패키지 관리자가 설치한 경로에 있다임시 디렉터리에 있거나 삭제된 상태로 떠 있다
프로세스의 이름과 실제 명령둘이 일치한다흔한 시스템 이름을 쓰지만 명령행이 다르다
그 통신을 연 시점부팅이나 배포 시각과 맞는다설명되지 않는 시각에 혼자 생겼다

평소 모습을 적어 두면 판단이 빨라진다

점검 범위에 따른 BPFDoor 가시성 전용 포트가 없는 BPFDoor는 LISTEN 목록이 아니라 RAW 소켓과 BPF 필터의 실행 맥락에서 드러난다. 개념 도해 점검 범위에 따른 BPFDoor 가시성 점검 경로 포트 기준 ① LISTEN 목록 ② 열린 포트 전용 포트 없음 미검출 행위 기준 ① RAW 소켓 ② BPF 필터 ③ 실행 주체·용도 판별 가능 관찰 범위 전용 포트 RAW 소켓 BPF 필터 실행 맥락 열린 포트 점검 조회 미포함 미포함 미포함 수신 행위 점검 없음 조회 조회 조회 관찰 대상 전용 포트가 없는 BPFDoor는 LISTEN 목록이 아니라 RAW 소켓과 BPF 필터의 실행 맥락에서 드러난다. SOSHIN · DEV NOTES
리슨 포트만 보는 점검은 BPFDoor를 놓치고, RAW 소켓과 BPF 필터의 실행 주체와 용도까지 봐야 가려낼 수 있다.

실무에서는 평소 상태를 적어 두어 오탐을 빨리 가려낸다.
서버마다 어떤 프로그램이 어느 포트에서 리슨하는지, 어떤 관리 도구가 RAW 소켓을 여는지 알고 있으면 새로 생긴 것만 눈에 띈다.

이 기록이 없으면 정상 필터 하나를 확인하는 데도, 그 프로그램을 누가 왜 설치했는지부터 다시 찾아야 한다.

그보다 먼저 막아야 할 것은 첫 침입이다.
조사단 발표에서도 공격자는 서버에 평문으로 남은 계정 정보를 이용해 더 중요한 서버로 옮겨 갔다.

계정 정보를 평문으로 두지 않고 관리용 접속 경로를 좁혀 두면, 공격자가 BPFDoor 같은 도구를 심는 단계까지 가기가 그만큼 어려워진다.

소신을 상징하는 까마귀 목판화 일러스트
작성자소신 · Soshin

웹과 서버를 만들고, 개발하며 배운 것들을 글로 남깁니다.

좌우로 움직여 보세요