본문 바로가기

보안동향

SELinux를 통한 BPFdoor 대응 가능할까?

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 및 커널 침투형 백도어에 대응하기 위해, 이제는 커널 수준 방어도 기본 전략에 포함되어야 할 시점이다.