BPFdoor는 최근 리눅스 환경에서 지속적으로 탐지되는 고급 백도어 중 하나이다.
해당 백도어는 일반적인 포트 바인딩 방식 없이 raw socket과 BPF (Berkeley Packet Filter)를 활용하여 백그라운드에서 은밀하게 명령 제어(C2) 통신을 수행한다.
상용 백신과 EDR(Endpoint Detection & Response)은 기업 환경에서 필수적인 보안 도구로 자리잡았지만, 모든 공격을 탐지할 수 있는 만능 솔루션은 아니다. 특히 APT 공격이나 BPFdoor 같은 백도어 도구는 점점 더 탐지를 회피하는 기술을 사용하고 있으며 이는 기존 EDR만으로는 탐지·차단에 한계가 있다는 것을 명확히 보여준다.
그렇다면 우리는 무엇으로 이를 보완할 수 있을까? 근본적인 보안 대응이 중요한데, 그 중 하나가 SELinux이다.
SELinux는 커널 수준에서 시스템 행위를 강제 제어(MAC)하며, EDR이 놓치는 로우레벨 행위까지 감시 및 차단할 수 있는 강력한 도구이다.
1. EDR이 탐지하지 못하는 이유
| 탐지대상 | 우회방식 | 한계 |
| 백도어 실행 파일 | 메모리 상주, 파일 삭제 | 정적 파일 기반 탐지 실패 |
| 네트워크 포트 | raw socket 사용 | 포트 기반 감시 불가 |
| 프로세스 명령어 | 정상 프로세스로 위장 (.sshd) | 프로세스 이름 기반 탐지 우회 |
| 커널 호출 | bpf(), mprotect() 등 비정상 syscall | 유저랜드 이벤트 중심 구조 |
| 파일 경로 | /tmp, /dev/shm, .config/ 은닉 | 실행 경로 필터링 회피 |
정상적인 인터페이스를 거치지 않는 저수준 행위는 EDR의 기본 탐지 모델로는 포착되지 않는다.
2. SELinux의 대응 방식
범주 SELinux 제어 내용
| 파일 접근 | 실행권한, 쓰기 제한, tmp 디렉토리 접근 제한 |
| 시스템 호출 | bpf, ptrace, execmem 등 syscall deny |
| 소켓 생성 | raw socket 생성, netlink 통신 제한 |
| 사용자 도메인 | unconfined_t, initrc_t 최소화 |
| 자동 실행 | /etc/rc*, cron, systemd 실행 권한 차단 가능 |
EDR은 "이상이 발생한 후 탐지"하고, SELinux는 "정책에 어긋난 시도 자체를 차단"한다.
3. SELinux가 보완하는 탐지 사각지대
공격 기술 EDR 탐지 한계 SELinux 대응 가능 여부
| Raw Socket 생성 | 감지 불가 | socket_create 권한으로 차단 |
| BPF syscall 사용 | 유저랜드 미탐지 | bpf class 접근 deny 가능 |
| /tmp 실행 | 파일 삭제 후 실행 불가 | noexec + tmp_exec_t deny |
| 프로세스 위장 실행 | .sshd, .bash_history 우회 | execmem, proc_exec_t 차단 |
| 마스킹된 쉘 실행 | audit 및 로그 미남김 | SELinux context 기반 실행 통제 |
4. 정책 기반 대응 예시
(1) BPF syscall 차단 정책
require {
type unconfined_t;
class bpf { map create load };
}
deny unconfined_t self:bpf { map create load };
(2) /tmp에서 실행 금지
require {
type tmp_t;
class file execute;
}
deny unconfined_t tmp_t:file execute;
(3) Raw Socket 생성 차단
require {
type unconfined_t;
class socket create;
class capability net_raw;
}
deny unconfined_t self:socket create;
deny unconfined_t self:capability net_raw;
이러한 정책을 적용하면, EDR에서 놓친 행위에 대해서도 커널 수준에서 강제 차단이 가능하다.
5. auditd를 통한 BPFdoor 행위 탐지
(1) bpf syscall 감시
auditctl -a always,exit -F arch=b64 -S bpf -k detect_bpfdoor
(2) raw socket 생성 감시
auditctl -a always,exit -F arch=b64 -S socket -F a0=AF_PACKET -k detect_bpfdoor
(3) 로그 예시
type=SYSCALL msg=audit(1714725939.523:104): arch=c000003e syscall=321 success=yes \
exe="/usr/bin/.sshd" key="detect_bpfdoor"
syscall=321은 bpf 호출이며, exe를 통해 실행 위치 추적이 가능하다.
6. 실무 적용 전략
항목 권장 설정
| SELinux 상태 | getenforce 결과가 Enforcing일 것 |
| SELinux context | 주요 데몬, 사용자 프로세스에 unconfined_t 회피 적용 |
| Audit 룰 | bpf, socket, execmem, mprotect syscall 감시 |
| 로그 확인 | ausearch -k detect_bpfdoor, sealert -a 활용 |
| 사용자 지정 정책 | .te 파일로 최소 권한 정책 적용 |
| 보안 솔루션 연동 | EDR, YARA, Sysmon-Linux 연계 탐지 도입 병행 |
SELinux는 BPFdoor의 핵심 행위(BPF syscall, raw socket, execmem 등)를 정책적으로 차단할 수 있는 유일한 커널 레벨 MAC 시스템이다.
그러나 다음 전제가 충족되어야 한다.
- SELinux가 Enforcing 모드일 것
- 프로세스가 confined domain에 있을 것
- 공격자가 SELinux 정책을 우회하지 못할 것
EDR + SELinux + auditd의 조합은 서로의 약점을 보완하며, 고급 위협 대응 체계로 매우 효과적이다.
APT 및 커널 침투형 백도어에 대응하기 위해, 이제는 커널 수준 방어도 기본 전략에 포함되어야 할 시점이다.
'보안동향' 카테고리의 다른 글
| KT 소액결제 사고 분석, 유령 기지국이란? (2) | 2025.09.10 |
|---|---|
| SGI 서울보증 랜섬웨어 '건라'(Gunra) - 원인은 SSL VPN? (0) | 2025.07.18 |
| 딥시크의 보안, 개인정보 보호, 거버넌스: 오픈소스 AI의 숨겨진 위험성 (0) | 2025.02.10 |
| 『금융분야 망분리 개선 로드맵』 톺아보기 (1) | 2024.08.26 |
| CVE-2024-2193 GhostRace 취약점 (0) | 2024.04.01 |