이번 SK텔레콤(SKT) 유심 해킹 사건에서 사용된 악성코드는 'BPFDoor' 계열로 알려져있다. 기본적으로 네트워크를 공부하거나 업으로 삼고 있는 사람들이라면 BPF (Berkeley Packet Filter) 에 대해서 한 번 쯤은 들어봤을 거라 생각한다. 들어보지 못했더라도 한번 쯤은 봤을 거로 생각한다.
그렇기에 관심이 있는 사람들은 BPF와 BPFDoor는 다르다는 것을 알 것이다.
하지만 직업으로 삼고 있는 사람들이 아니라면 잘 모를 수도 있긴 하다.
또한 이번 사건의 공격방식으로 쓰였던 BPFDoor이라는 백도어 프로그램과 BPF라는 필터 기술이 아예 같은 것이라고 인식하고 있는 사람들도 꽤나 있는 것 같았다.
우선 BPFDoor와 BPF는 명백히 다르다.
BPFDoor는 Berkeley Packet Filter(BPF)를 활용하여 네트워크 트래픽을 감시하고, 특정 "매직 패킷"을 통해 명령을 수신하는 악성코드이며, 해당 악성코드는 방화벽을 우회하며, 시스템에 포트를 열지 않고도 원격 명령을 실행할 수 있게 하는 것으로 BPF를 이용한 백도어 프로그램이다.
BPF란 무엇인가?
그렇다면 BPF는 무엇일까?
위키에 따르면
BPF의 정의로
커널 레벨에서 패킷 필터링 및 이벤트 모니터링을 수행하는 저수준 가상 머신 기반 기술로 원래는 네트워크 패킷을 필터링하기 위한 목적으로 개발되었지만, 현재는 매우 다양한 분야에서 활용된다.
라고 말한다.
그런데 이렇게 설명하면 커널 레벨은 무엇이고, 저수준 가상 머신 기반 기술은 또 무엇이며, 왜 만들어졌고 왜 필요한건지에 대해서는 알 수가 없다. 그래서 조금 더 쉽게 설명해보려고 한다.
BPF(Berkeley Packet Filter) = 정의된 단어의 뜻 그대로 필터 역할
BPF(Berkeley Packet Filter)는 컴퓨터의 운영체제(커널)에서 특정 데이터를 효율적으로 걸러내거나 감시하는 기술이다. 쉽게 말해, 컴퓨터가 처리하는 엄청난 양의 정보(예: 네트워크 데이터나 시스템 이벤트) 중에서 원하는 정보만 골라내는 말 그대로 "필터" 같은 역할이라고 생각하면 될 것 같다.
원래 BPF는 네트워크에서 들어오고 나가는 데이터(패킷)를 골라내기 위해 만들어졌다.
1992년 처음으로 개발되었고 목적 자체도 유닉스 또는 리눅스에서 불필요한 패킷까지 처리하여 보여지는 것을 원치 않아서 필터링 목적으로 개발되었다고 한다.
그렇기에 BPF 기술의 장점은 특정 서버 또는 특정 pc에서 보낸 데이터만 보고 싶을 경우, 불필요한 다른 데이터를 무시하고 원하는 데이터만 빠르게 보여줄 수 있다.
더 쉽게 말하면 BPF는 컴퓨터 안에서 아주 가볍고 빠르게 동작하는 "작은 프로그램" 같은 걸 만들어서, 커널(컴퓨터의 핵심 관리자)에게 부탁하는 거다. 이 프로그램은 가상 머신(VM)이라는 환경에서 실행된다. 그래서 서버의 성능을 덜 먹으면서도 원하는 정보를 정확하고 빠르게 얻을 수 있다.
tcpdump에서 BPF를 활용하는 법을 예시로 보자.
실제로 tcp 통신을 하는 경우 가장 쉽게 패킷통신을 하고 있는지 확인하는 명령어로 tcpdump를 이용한다.

tcpdump 로만 입력해도 패킷들이 찍히긴 한다. 다만 일반 tcpdump의 경우 모든 패킷에 대해 직관적이지 못하기에 옵션을 넣어서 설명 하도록 한다.
위의 예시와 같이 특정 인터페이스(eth1)를 통해 장비가 구성되어 있거나 특정 스위치 라인에 물려있는 장비의 tcp 통신을 하고 있는 경우 명령어로 인터페이스까지만 입력을 하게 되면 해당 인터페이스를 통해 통신하는 모든 패킷 뿐 아니라 통신을 시도하는 패킷까지 전부 다 찍혀서 내가 원하는 호스트 또는 포트만을 보기가 어려워 진다.

인터페이스를 통하는 모든 패킷들이 보여지는 모습
나는 빨간 구역에서 나타나는 패킷들만 보고 싶지만 실제로 통신하는 패킷들 중엔 igmp 부터 icmp ping 뿐 아니라 통신 시도중인 ip대역, port들 까지 온갖 패킷들이 보여지기에 분석하기가 어려워진다.
이럴때 우리는 BPF 를 이용하여 내가 원하는 패킷만 볼 수 있다.

인터페이스를 통해 오는 패킷중 port가 1115 인 port만 찍겠다는 BPF 필터

1115 포트로 통신하는 패킷만 보고 싶을 때 화면이다.
아까와는 다르게 1115 port를 통해 패킷이 push 되거나 syn 이 되는 것만 보여지고 그 외의 icmp나 igmp 등 다른 불필요한 패킷들은 찍어내지 않는다. 이 외의 특정 방향에서 오고가는 패킷을 찍어내기, host와 port가 일치하는 것만 찍어내기 등등 더 복잡하고 자세하고 정확한 정보들을 BPF를 이용하면 여러번 검색할 필요 없이 한번에 확인할 수 있게 된다.
BPF는 이렇듯 네트워크를 효율적으로 관리하고 분석할 수 있도록 도와주는 유용한 기술이다. 그래서 현재 리눅스계열에서, 그리고 네트워크와 관련된 부분에선 없으면 안되는 기술로 여겨지고 있다.
그렇다면 왜 해커들은 많은 악성코드 방식중에 BPFDoor를 이용했을까?
에 대해선 차츰차즘 정리해보려고 한다.
다음 포스트에는 BPF 작동 방식과 활용 방법 등 또한 공부 후에 조금 더 정리하도록 해야겠다.
'Linux' 카테고리의 다른 글
리눅스 기록용 ( iptables) (0) | 2023.05.09 |
---|