악성코드 분석 2025-05-13
1. 개요
2025년 4월 통신사 해킹 사건이 발생했으며, 해당 공격에 BPFDoor라는 악성코드가 사용되었다. 해당 악성코드는 리눅스 기반 백도어로 중국 및 아시아 국가를 표적으로 삼는 APT 그룹인 Red Menshen(또는 Earth Bluecrow라고도 함)에서 주로 사용해 왔다. 해당 공격 그룹에서 21년부터 꾸준히 개선해 왔으며, 22년도에 소스코드가 공개되면서 누구나 변종을 개발할 수 있게 되었다. 이번에 해킹 공격에 사용된 악성코드도 변종으로 누구나 변종을 개발할 수 있어 배후 특정에 어려움이 있다.
파일명 |
/var/run/hald-smartd.pid |
/var/run/system.pid |
/var/run/hp-health.pid |
/var/run/hald-addon.pid |
<표 1> 하드코딩 된 파일 명
3) 정상 프로세스 위장
BPFDoor는 정상 프로세스로 위장하기 위해 실행 중인 악성코드를 하드코딩 된 값으로 변경한다. 깃허브에 공개된 BPFDoor 소스코드에서는 하드코딩 된 문자열 중 랜덤으로 설정하였으나 최근 발견된 샘플에는 각 샘플마다 1개의 문자열이 하드코딩되어 있다.
프로세스 이름 |
|
/sbin/udevd –d |
hald-runner |
/sbin/mingetty/ |
pickup –l –t fifo –u |
/usr/sbin/console-kit-daemon –no-daemon |
avahi-daemon: chroot helper |
hald-addon-acpi: listening on acpi kernel interface /proc/acpi/event |
/sbin/auditd –n |
dbus-daemon –system |
/usr/lib/system/system-journald |
<표 2> 공개된 소스 코드에 하드코딩 된 이름 목록
<그림 3> 최근 발견된 샘플 2개
<그림 4> 변경된 프로세스 명
4) 리버스 쉘
BPFDoor는 리버스 쉘 기능을 지원한다. 리버스 쉘은 공격자가 공격 대상 시스템에 원격으로 시스템을 제어할 수 있는 환경을 구성하는 것을 말한다. 쉘 세션이 생성되면 공격자는 원격에서 공격 대상 시스템을 제어할 수 있다.
리버스쉘 세션을 생성할 때 execve 시스템 콜을 이용하여 /bin/bash를 실행한다. 이때 정상 프로세스로 위장하기 위해 인자값을 “qmgr –l –t fifo –u” 로 설정한다. 추가적으로 다양한 환경 변수도 설정하여 분석 및 탐지를 어렵게 만든다.
<그림 5> 정상 프로세스 위장 및 환경변수 설정
환경 변수 |
||
HOME |
/tmp |
홈 디렉토리 설정 |
PS1 |
[\u@\h \W]\\$ |
셀 프롬프트 표시 변경 |
HISTFILE |
/dev/null |
bash 히스토리 저장 방지 |
MYSQL_HISTFILE |
/dev/null |
mysql 클라이언트 히스토리 저장 방지 |
PATH |
/bin:/usr/kerveros/sbin:/usr/Kerberos/bin:/sbin:/usr/bin:/usr/sbin: /usr/local/bin:/usr/local/sbin:/usr/X11R6/bin:./bin |
명령어 경로 설정 |
TERM |
vt100 |
터미널 타입 설정 |
<표 3> 환경 변수 설정
BPFDoor는 수신한 패킷에 포함된 비밀번호를 기반으로 이후 행위가 달라진다. 패킷의 0xA 오프셋부터 최대 14바이트 길이의 비밀번호 문자열을 추출하고, 고정된 Salt 문자열(I5*AYbs@LdaWbsO)을 앞에 붙여 전체 문자열을 구성한 후 MD5 해시를 계산한다. 계산된 해시는 하드코딩된 두 개의 해시 값과 비교되어 인증 여부를 결정한다.
<그림 6> 해시 값 생성
<그림 7> 하드코딩된 해시 값
첫 번째 해시와 일치하면 0을 반환하고, 두 번째 해시와 일치하면 1을 반환한다. 둘 다 일치하지 않으면 2를 반환한다. BPFDoor는 두 조건 중 하나라도 만족할 경우 자식 프로세스를 생성해 추가적인 악성 행위를 수행한다.
<그림 8> 해시 값에 따른 분기문
또한 쉘 통신을 위한 인증서가 악성코드 내부에 포함되어 있다.
<그림 9> 내부에 포함된 인증서
5) 방화벽 정책 설정
반환된 해시 값이 1일 경우 공격자 IP에서 지정된 포트로 들어오는 트래픽을 내부 랜덤 포트(42931 ~ 43390 범위)로 보내는 방화벽 정책을 설정한다. 공격자 IP에 대한 접근을 허용하는 정책 또한 설정한다.
<그림 10> 방화벽 정책 설정
3. 대응방안
1) 의심스러운 프로세스 및 파일 이름 검사
- /var/run/hald-smartd.pid, /var/run/system.pid, /var/run/hp-health.pid, /var/run/hald-addon.pid 등 의심스러운 파일이 있는지 확인한다.
- /sbin/udevd –d, dbus-daemon –system, /sbin/auditd –n 등의 의심스러운 프로세스가 동작중인지 확인한다.
2) 네트워크 검사
- BPFDoor에서 iptables에 42391 ~ 43390 포트로 리다이렉션하는 방화벽 정책을 설정하기 때문에 해당 포트 범위에서 비정상 트래픽이 발생하는지 확인한다.
위 대응 방안 외에도 파이오링크에서는 BPFDoor 악성코드 점검 도구(https://www.piolink.com/kr/service/Security-Analysis.php?bbsCode=security&vType=view&idx=141&page=1)를 배포하고 있으며, 해당 도구를 통해 악성코드 감염 여부를 확인할 수 있다.
4. 결론
BPFDoor가 오픈소스를 기반으로 생성한 악성코드기 때문에 앞으로 다양한 변종 악성코드가 등장할 것으로 예상되며, 이에 따른 지속적인 모니터링 및 주의가 필요하다.
5. IoC 정보
C2
- 165[.]232[.]174[.]130
악성코드(SHA256)
- c7f693f7f85b01a8c0e561bd369845f40bff423b0743c7aa0f4c323d9133b5d4
- 3f6f108db37d18519f47c5e4182e5e33cc795564f286ae770aa03372133d15c4
- 95fd8a70c4b18a9a669fec6eb82dac0ba6a9236ac42a5ecde270330b66f51595
- aa779e83ff5271d3f2d270eaed16751a109eb722fca61465d86317e03bbf49e4
- 925ec4e617adc81d6fcee60876f6b878e0313a11f25526179716a90c3b743173
- 29564c19a15b06dd5be2a73d7543288f5b4e9e6668bbd5e48d3093fb6ddf1fdb
- be7d952d37812b7482c1d770433a499372fde7254981ce2e8e974a67f6a088b5
- 027b1fed1b8213b86d8faebf51879ccc9b1afec7176e31354fbac695e8daf416
- a2ea82b3f5be30916c4a00a7759aa6ec1ae6ddadc4d82b3481640d8f6a325d59
- e04586672874685b019e9120fcd1509d68af6f9bc513e739575fc73edefd511d
- adfdd11d69f4e971c87ca5b2073682d90118c0b3a3a9f5fbbda872ab1fb335c6
- 7c39f3c3120e35b8ab89181f191f01e2556ca558475a2803cb1f02c05c830423
[참고자료]
- https://www.boho.or.kr/kr/bbs/view.do?bbsId=B0000133&pageIndex=1&nttId=71726&menuNo=205020
- https://www.trendmicro.com/en_us/research/25/d/bpfdoor-hidden-controller.html