이 페이지는 번역본입니다. 공식 원문은 영어판입니다. 2026년 10월 23일 기준 영어 원문과 일치합니다. 영어로 읽기
malware · cryptomining · rootkit · linux · kernel · monero · privilege-escalation · cve-2026-31431 · container-escape
Rootpacket: 커널에 숨는 Linux 크립토재킹 툴킷
Kinryū Labs는 CPU 및 메모리 사용률을 위조하는 커널 루트킷을 포함하고, CVE-2026-31431(컨테이너를 탈출해 호스트까지 장악하는 AF_ALG 페이지 캐시 결함)을 통해 root 권한을 획득하며, Intel 드라이버로 위장하고, 경쟁 마이너가 침입에 사용하는 노출 서비스를 스스로 차단하는 Linux 크립토재킹 툴킷 Rootpacket을 분석하였다.
작성자 Davis Zheng·
TLP:CLEAR. 공개 배포가 승인되었다. Kinryū Labs 허니팟 센서 네트워크에서 수집하였다. 아래 지표는 디팽(defang) 처리하였다.
요약
- ~45%실제로는 100%에 가까울 때 top이 표시하는 CPU 사용률
- 3지속성 유지 메커니즘
- 7.8CVSS, CVE-2026-31431 (AF_ALG 페이지 캐시 LPE)
- 호스트비특권 컨테이너에서 획득한 root 권한
Rootpacket은 다중 구성요소로 이루어진 Linux용 크립토재킹 툴킷이다. 은폐를 위한 커널 수준 루트킷, Linux AF_ALG 암호화 인터페이스의 CVE-2026-31431을 악용하는 권한 상승 익스플로잇, xrandom으로 이름이 변경된 UPX 패킹 XMRig 6.26.0 Monero 마이너, 그리고 경쟁자 제거 스크립트를 함께 묶어 배포한다. 코드는 대부분 터키어로 작성되어 있으며(변수명, 주석, 상태 문자열), 이는 터키어 사용 운영자를 가리킨다.
이 툴킷은 두 가지 모드 중 하나로 동작한다. root 모드에서는 intel_uncore_freq_aux로 위장한 로드 가능 커널 모듈(LKM) 루트킷을 적재하고, DKMS를 통해 설치하여 커널 업그레이드 후에도 살아남게 하며, systemd 서비스를 등록하고, 호스트에서 경쟁자를 제거한다. root 권한을 얻지 못하면 crontab으로 지속성을 확보하고 마이너를 데몬으로 실행하는 사용자 영역 모드로 대체 동작한다. 마이너는 stratum+ssl을 통해 pool.supportxmr.com:443에 접속하여 RandomX로 Monero를 채굴한다.
주목할 만한 구성요소는 루트킷이다. 마이너가 프로세서를 100퍼센트 근처로 고정시키는 동안, 루트킷은 /proc/stat을 다시 작성하여 top과 htop이 평온한 40~50퍼센트를 보고하도록 하고, jiffies를 이용해 그 수치를 진동시켜 고정된 값이 아닌 실제 부하처럼 보이게 한다. /proc/meminfo에도 같은 조작을 하며, 디렉터리 목록을 필터링하여 자신의 프로세스와 파일을 숨긴다.
- 목적은 크립토재킹이다(높은 확신). 툴킷은 XMRig 6.26.0, 하드코딩된 Monero 지갑,
pool.supportxmr.com채굴 설정을 포함하며, XMRig 개발자 기부 기능은 꺼져 있어 수익 전액이 운영자에게 돌아간다. - 권한 상승에 사용되는 취약점은 CVE-2026-31431("Copy Fail")로, Linux AF_ALG
algif_aead경로에서 발생하는 결정론적 페이지 캐시 쓰기다(CVSS 7.8, 2026년 4월 공개). 페이지 캐시는 호스트 전역에서 공유되므로 동일한 쓰기가 컨테이너를 탈출해 호스트의 root 권한을 획득하며, 따라서 감염된 컨테이너는 침해된 호스트와 같다(높은 확신). - 운영자의 역량은 전형적인 투하 후 채굴 수준의 조직을 크게 상회한다(높은 확신). ftrace 훅을 사용하는 맞춤형 LKM 루트킷, 새 커널에 맞춰 자동 재빌드되는 DKMS 지속성, 동작하는 CVE-2026-31431 페이지 캐시 익스플로잇, systemd/DKMS/cron을 계층화한 지속성은 대다수 크립토재커가 도달하지 못하는 수준의 엔지니어링이다.
- 운영자는 터키어 사용자일 가능성이 높다(중간 확신). 터키어 변수명, 주석, 그리고
ROOT ele gecirildi!같은 상태 메시지가 툴킷 전반에 걸쳐 나타난다. - Rootpacket은 호스트를 독점적으로 장악하고 유지하도록 만들어졌다.
killservice.sh는 경쟁 마이너를 제거한 뒤 크립토재커가 초기 침투에 사용하는 외부 노출 서비스를 비활성화하는데, 여기에는 2375/2376 포트의 Docker API가 포함된다. 이는 RedTail 분석 보고서에서 다룬 것과 동일한 침투 경로다. 이들 조직은 동일한 설정 오류 호스트를 두고 경쟁하고 있다.
툴킷 구조
Rootpacket은 모듈식 드로퍼다. 구성요소는 다음과 같다.
setup.sh Entry point. Checks privilege level, picks a deployment mode.
getroot Privilege escalation. Exploits CVE-2026-31431 (AF_ALG) for local root.
xrandom UPX-packed XMRig 6.26.0, renamed to dodge name-based detection.
kernel/
stealth.c LKM rootkit, compiled via DKMS, disguised as an Intel driver.
install.sh DKMS persistence engine.
killservice.sh Competitor elimination and "hardening".
rootpacket.tar.gz An inner copy of the whole toolkit, packaged for redistribution.
root 모드. setup.sh는 아직 root가 아닌 경우 getroot를 실행하고, xrandom을 /opt/kernel-kd/로 복사하고, systemd 서비스를 생성하고, kernel/install.sh를 실행하여 DKMS를 통해 루트킷을 컴파일 및 적재하고, killservice.sh를 실행하여 경쟁자를 제거한 다음, 마이너를 상시 서비스로 시작한다.
사용자 영역 대체 동작. root 권한을 얻을 수 없을 때 setup.sh는 xrandom을 ~/.xrandom/으로 복사하고, PID 락이 있는 런처를 작성하고, 재부팅 시점과 매 분마다 실행되는 crontab 항목을 설치하며, setsid로 마이너를 실행하여 부모 셸이 종료되어도 살아남게 한다.
| 항목 | root 모드 | 사용자 영역 모드 |
|---|---|---|
| 마이너 위치 | /opt/kernel-kd/xrandom | ~/.xrandom/xrandom |
| 지속성 | systemd (kernel-kd.service) | crontab (@reboot + */1 * * * *) |
| 루트킷 | 예 (DKMS를 통한 LKM) | 아니오 |
| 경쟁자 제거 | 예 (killservice.sh) | 아니오 |
| 실행 주체 | root (systemd) | 현재 사용자 (setsid 데몬) |
getroot: CVE-2026-31431, 페이지 캐시 손상을 통한 root 권한 획득
getroot는 getroot.c로 빌드된 정적 링크, 심볼 비제거 ELF64 x86-64 바이너리다. 2026년 4월 29일에 공개된 Linux 커널 AF_ALG algif_aead 인터페이스의 논리 결함인 CVE-2026-31431(“Copy Fail”)을 악용한다(CVSS 7.8). 이 버그는 커널 페이지 캐시에 대해 결정론적이고 공격자가 제어 가능한 4바이트 쓰기를 허용하며, getroot는 이를 이용해 SUID 바이너리를 메모리에서 패치하고 root 권한으로 빠져나온다.
| 속성 | 값 |
|---|---|
| 유형 | ELF 64-bit LSB executable, x86-64, 정적 링크, 심볼 비제거 |
| CVE | CVE-2026-31431 “Copy Fail” (CVSS 7.8, AV:L/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H) |
| 서브시스템 | AF_ALG algif_aead, AEAD 템플릿 authencesn(hmac(sha256),cbc(aes)) |
| 영향 범위 | Linux 4.14부터 6.19.11까지(결함은 2017년 커밋 72548b093ee3에 도입됨); 6.18.22, 6.19.12, 7.0+에서 수정 |
| 표적 | /usr/bin/su: 페이지 캐시에 있는 메모리 상의 .text가 패치됨 |
| 안정성 | 결정론적, 경쟁 조건 없음 |
| 사용법 / 대체 동작 | ./getroot <cmd> [args...]; 익스플로잇이 실패하면 현재 권한으로 명령을 그대로 실행 |
동작 원리. 2017년 AEAD 코드에 적용된 인플레이스 최적화로 인해 splice된 페이지 캐시 페이지가 원본과 대상 scatterlist 양쪽에 모두 남게 되었다. authencesn 템플릿이 공격자가 선택한 오프셋 assoclen + cryptlen 위치에 4바이트 ESN 스크래치 값을 기록할 때, 그 쓰기는 사용자가 읽을 수 있는 파일의 페이지 캐시 페이지 내부에 떨어진다. 이후 HMAC 검증이 실패하여 recvmsg()가 EBADMSG를 반환하지만, 커널은 해당 쓰기를 되돌리지 않는다. getroot는 /usr/bin/su의 ELF 헤더를 파싱하여 진입점의 파일 오프셋을 계산한 뒤, 셸코드의 4바이트 단위마다 splice → sendmsg(쓸 4바이트를 AAD에 담아 전달) → recvmsg를 반복하여 페이지 캐시 상의 /usr/bin/su를 패치한다. 그다음 /usr/bin/su를 execve하면 커널이 손상된 페이지를 적재하고, 셸코드가 SUID-root로 실행되며, getroot는 getuid() == 0을 확인한 후 운영자의 명령을 실행한다(터키어 [+] ROOT ele gecirildi!를 출력한다). 디스크 상의 파일은 전혀 건드리지 않으므로 파일 무결성 모니터링에는 아무것도 잡히지 않는다.
호스트로의 컨테이너 탈출. Linux 페이지 캐시는 호스트 전역이며, 컨테이너는 별도의 페이지 캐시를 갖지 않는다. 비특권 컨테이너 내부의 프로세스가 호스트의 /usr/bin/su를 splice하면 호스트의 캐시된 사본이 손상되므로, execve는 컨테이너 내부가 아니라 호스트에서 root 권한을 산출한다. 따라서 감염된 컨테이너는 침해된 호스트와 같으며, setup.sh는 이어서 커널 루트킷을 호스트에 적재한다. 컨테이너를 중지하고 삭제하는 것만으로는 충분하지 않고, 호스트를 재구축해야 한다.
격리된 VM(Kali, 커널 6.6.15)에서 getroot를 한 번 실행하였다. 전체 AF_ALG 시퀀스를 수행하였으나 해당 빌드에서는 root 권한을 획득하지 못하고 명령을 비특권으로 실행하는 동작으로 대체되었는데, 이는 특정 커널 레이아웃을 표적으로 하는 익스플로잇의 특성과 부합한다. 마이너는 실행하지 않았다.
xrandom: 마이너
xrandom은 오픈소스 Monero 마이너 XMRig 6.26.0의 이름을 변경하고 UPX로 패킹한 사본이다.
| 속성 | 값 |
|---|---|
| 실제 정체 | XMRig 6.26.0 |
| 패킹 | UPX 4.2.4 (패킹 2.8 MB, 언패킹 10.1 MB) |
| 알고리즘 | RandomX (rx/0) |
| 풀 | stratum+ssl을 통한 pool.supportxmr.com:443 |
| 지갑 | 46NVDFL6v5STw5Qw4j77PoBSHRTYnHZGZ8WRoGvHmpaMX7ZyhNUP2u24TLV9pNgncz1bZF2Vm8KkaNTzU7SXqrnFUx5zgHQ |
| 기부 수준 | 0 (XMRig 개발자 기부 비활성화) |
443 포트에서 TLS로 채굴 트래픽을 전송하면 겉보기에는 일반 HTTPS와 섞이게 되지만, stratum 핸드셰이크는 자세히 들여다보는 쪽에게는 다른 TLS 핑거프린트를 보인다.
stealth.c: 커널 루트킷
툴킷에서 가장 정교하게 개발된 부분이다. ftrace 함수 후킹으로 커널 함수를 가로채 악성코드의 흔적을 지우는 LKM 루트킷이며, 전반에 걸쳐 Intel 하드웨어 드라이버로 위장한다.
| 속성 | 값 |
|---|---|
| 모듈명 | intel_uncore_freq_aux |
| 위조 메타데이터 | MODULE_AUTHOR("Intel Corporation"), MODULE_DESCRIPTION("Intel Uncore Frequency Control Driver"), MODULE_VERSION("1.2.0") |
| 후킹 | kallsyms_lookup_name을 통한 ftrace (커널 5.7 이상에서는 kprobe로 해결) |
| 제어 | /sys/kernel/intel_uncore_freq/의 sysfs (enabled, cpu_lo, cpu_hi, mem_lo, mem_hi, hide_tag) |
무엇을 후킹하며 그 목적은 다음과 같다.
- CPU 은폐.
show_stat을 후킹하여/proc/stat을 다시 작성하고, 설정 가능한 범위(기본값 40~50퍼센트) 안에서 사용률을 위조하며, jiffies에 따라 진동시켜 수치가 고정되어 있지 않고 실제 부하처럼 움직이게 한다. - 메모리 은폐.
meminfo_proc_show를 후킹하여/proc/meminfo를 다시 작성하고,MemFree,MemAvailable,Buffers,Cached,Active,Inactive를 위조한다. - 프로세스 은닉.
iterate_dir을 후킹하여/proc목록을 필터링하고, 하드코딩된 집합과 이름이 일치하는 PID를 숨긴다:stealth,masscan,sshruns,ransomx,cpumask,xrandom,cpm_,kcpm,mask_helper,ftrhook,kintel_aux. 운영자는/sys/kernel/intel_uncore_freq/hide_tag를 통해 런타임에 이름을 추가할 수 있다. - 파일 은닉.
stealth,cpumask,kintel_aux,intel_uncore_freq_aux와 일치하는 경로, 그리고 sysfs 디렉터리 자체를 숨긴다. - 자기 은닉. 적재 시
list_del_init으로 자신을/proc/modules와/sys/module/에서 제거하고, sysfs kobject를 삭제하며,try_module_get으로 자신의 참조 카운트를 증가시켜rmmod로 언로드되지 않게 한다.
이 은닉 목록 자체도 단서가 된다. 마이너와 함께 masscan, sshruns, ransomx를 숨기므로, 운영자는 스캐너를 함께 운용하고 있을 가능성이 높고 마이너 이상의 도구를 보유하고 있을 수 있다.
실질적인 효과는 관리자가 top을 보면 바쁘지만 정상적인 시스템으로 보이고, 악성 프로세스를 찾지 못하며, 거짓을 만들어내는 커널 모듈 자체도 볼 수 없다는 것이다. 단서는 물리적이고 대역 외에 있다. 시스템이 뜨거워지고, 팬이 빨라지고, 전력 소모가 올라가며, 이 가운데 어느 것도 루트킷이 위조할 수 없다.
지속성: 모드별로 나뉘는 세 가지 메커니즘
Rootpacket의 지속성은 어떤 모드로 자리 잡는지에 따라 달라진다. root 모드에서는 서로를 보강하는 두 가지 메커니즘을 계층화하고, 사용자 영역 모드에서는 세 번째 메커니즘으로 대체한다.
| # | 메커니즘 | 모드 | 세부 사항 |
|---|---|---|---|
| 1 | systemd 서비스 | root | kernel-kd.service, Type=simple, Restart=always, RestartSec=3 |
| 2 | DKMS 모듈 | root | 루트킷을 /lib/modules/$(uname -r)/extra/ 아래에 설치; 커널 업그레이드 후에도 유지 |
| 3 | crontab | 사용자 | @reboot 및 매 분(* * * * *), PID 락과 setsid 사용 |
끈질긴 쪽은 DKMS 항목이다. 커널 자체의 모듈 빌드 체계를 통해 루트킷을 설치하므로, 통상적인 커널 업그레이드가 루트킷을 제거하는 대신 다시 빌드하고 재무장시킨다.
killservice.sh: 호스트 정리와 차단
이 스크립트는 배너에서 스스로를 “cryptojacker hardening”이라 칭하며, 운영자의 관점에서는 그 설명이 정확하다. 세 단계로 실행된다.
1단계: 노출된 서비스 중단. 0.0.0.0에서 수신 대기하는 일반적인 크립토재킹 진입점 서비스를 표적으로 하여, 각각을 중지, 비활성화, 마스킹하고, 바이너리에 chmod 000을 설정하며, iptables DROP 규칙을 추가한다.
| 서비스 | 포트 |
|---|---|
| Redis | 6379 |
| Docker | 2375/2376 |
| PostgreSQL | 5432 |
| MongoDB | 27017 |
| Elasticsearch | 9200/9300 |
| Memcached | 11211 |
| Hadoop YARN | 8088 |
| Jenkins | 8080 |
| Confluence | 8090 |
Docker 항목은 RedTail 보고서와 연결되는 지점이다. Rootpacket은 RedTail이 통과하는 바로 그 2375/2376 문을 닫는다. 먼저 자리를 잡은 운영자는 호스트를 채굴하고 다음 조직을 차단하며, 그 조직이 사용했을 기법에 대해 호스트를 보강하는 것이다.
2단계: 경쟁 마이너 제거. XMRig, Kinsing(kdevtmpfsi), TeamTNT(tntrecht, mdrfckr), sustes, watchdogs, minerd를 포함한 알려진 크립토재킹 패밀리와 연관된 프로세스를 종료하고, 파일을 삭제하고, cron 작업을 정리하고, SSH 키를 제거하며, masscan, pnscan, zgrab 같은 스캐너도 함께 처리한다.
3단계: 사용자 영역 루트킷 제거. /etc/ld.so.preload에서 알려진 악성 LD_PRELOAD 항목(libprocesshider.so, libjdk.so, libpamx.so, 위조된 libselinux.so.3, xhide)을 걷어내고 해당 라이브러리를 삭제하여, 자신의 동작을 방해할 수 있는 경쟁자의 사용자 영역 루트킷을 정리한다.
귀속 분석
툴킷의 터키어 변수명, 주석, 상태 문자열(예: ROOT ele gecirildi!, “root 획득”)은 터키어 사용 운영자를 가리키며, 이는 중간 확신 수준이다. Cloudflare Pages에 호스팅된 배포 또는 스테이징 URL linuxutil5.pages[.]dev를 확인하였는데, 이는 무료이고 평판이 좋은 인프라에 페이로드를 스테이징하여 눈에 띄지 않게 하는 패턴과 부합한다. 툴킷 전체의 자기완결적 사본인 내부 rootpacket.tar.gz는 운영자가 다음 호스트로 밀어 넣을 수 있는 즉시 사용 가능한 패키지를 제공한다.
침해 지표
네트워크
| 지표 | 맥락 |
|---|---|
pool.supportxmr.com / pool.supportxmr.com:443 | 주 Monero 채굴 풀, stratum+ssl |
linuxutil5.pages[.]dev | 배포 / 스테이징 (Cloudflare Pages) |
api.xmrig.com, randomx.xmrig.com:443 | XMRig API 및 벤치마크 엔드포인트 |
donate.v2.xmrig.com, donate.ssl.xmrig.com | XMRig 개발자 기부 풀 (존재하지만 기부는 비활성화) |
443 포트로의 stratum+ssl:// | 외부로 나가는 TLS 채굴 트래픽 |
Monero 지갑: 46NVDFL6v5STw5Qw4j77PoBSHRTYnHZGZ8WRoGvHmpaMX7ZyhNUP2u24TLV9pNgncz1bZF2Vm8KkaNTzU7SXqrnFUx5zgHQ
파일 (SHA-256)
| 파일 | SHA-256 | MD5 |
|---|---|---|
rootpacket.tar.gz (외부) | e2d0dab6b29df89d123fe8581047a03ac9b89ae8fa0d1f334b5aefbb93152857 | |
getroot | dda96d8a4bcc39dc7679347a4386bf1024152d2ccc46d333725ad0cda855d952 | |
xrandom (패킹) | ec3ef3dce99fa6cbc480f0f0b0c292676afed68704c44396271c7dc6afea2937 |
빌드 ID: getroot 148d8d902efd93ed892a541972fbcea3a99d05a3, xrandom d7a91225bdd2e3ab67cabded9d7809bcc724401f.
호스트 흔적
| 경로 | 맥락 |
|---|---|
/opt/kernel-kd/xrandom | 마이너 바이너리 (root 모드) |
~/.xrandom/xrandom, ~/.xrandom/run.sh | 마이너 및 런처 (사용자 영역 모드) |
/tmp/.xrandom.lock | PID 락 (사용자 영역 모드) |
/etc/systemd/system/kernel-kd.service | 악성 systemd 유닛 |
/usr/src/intel_uncore_freq_aux-1.2.0/ | 루트킷의 DKMS 소스 |
/sys/kernel/intel_uncore_freq/ | 루트킷 sysfs 제어 인터페이스 |
/lib/modules/*/extra/intel_uncore_freq_aux.ko | 컴파일된 루트킷 모듈 |
행위 기반
- root 또는 현재 사용자로 실행되는
xrandom이라는 이름의 프로세스. - 하드웨어 성능 카운터(
perf stat)나 팬 속도 및 전력 소모와 일치하지 않는/proc/stat의 CPU 수치. kernel-kdsystemd 서비스(활성화,Type=simple,Restart=always).# xrandom-userland-autostart로 태그된 cron 항목.- 부팅 시 적재되지만
lsmod에는 나타나지 않는intel_uncore_freq_aux커널 모듈.
탐지
루트킷이 적재되지 않은 경우
systemctl status kernel-kd.service
ls -la /opt/kernel-kd/ ~/.xrandom/
dkms status | grep intel_uncore_freq
crontab -l | grep xrandom
lsmod | grep intel_uncore
루트킷이 적재된 경우
사용자 영역의 관측값은 신뢰할 수 없으므로, 탐지는 루트킷보다 아래 계층이나 루트킷 외부에서 이루어져야 한다.
perf stat으로 하드웨어 카운터와/proc/stat의 CPU 수치를 비교한다. 큰 격차가 단서다.show_stat,meminfo_proc_show,iterate_dir에 걸린 ftrace 훅을 감시한다.- 보고된 CPU 사용률과 실제 전력, 발열, 팬 속도 사이의 불일치를 강한 신호로 취급한다.
권한 상승 포착
- 알려진 암호화 도구(
cryptsetup,openssl,gpg,systemd-cryptsetup)가 아닌 프로세스가 여는AF_ALG,SOCK_SEQPACKET소켓이 핵심 단서다. 전체 순서는socket(AF_ALG)→bind→setsockopt(SOL_ALG)→accept→pipe→splice→sendmsg→splice→recvmsg(반복) 이후execve(/usr/bin/su)이다. - 각 SUID 바이너리의 디스크 상 바이트를 페이지 캐시 상의 내용과 비교한다.
sha256sum은 캐시를 통해 읽기 때문에 손상된 사본을 보여주므로,dd if=<file> iflag=direct로 디스크를 직접 읽어 해시한 뒤 비교해야 한다. SUID 바이너리에서 불일치가 나오면 페이지 캐시 손상이다.
YARA 규칙안
rule Rootpacket_Cryptojacker
{
meta:
description = "Rootpacket Linux cryptojacking toolkit"
reference = "Kinryu Labs CTI 2026-06-16"
strings:
$wallet = "46NVDFL6v5STw5Qw4j77PoBSHRTYnHZGZ8WRoGvHmpaMX7ZyhNUP2u24TLV9pNgncz1bZF2Vm8KkaNTzU7SXqrnFUx5zgHQ" ascii
$svc = "kernel-kd" ascii
$cron = "xrandom-userland-autostart" ascii
$mod = "intel_uncore_freq_aux" ascii
condition:
$wallet or 2 of ($svc, $cron, $mod)
}
조치 방안
- 알려진 정상 상태에서 루트킷을 제거한다. 라이브 또는 복구 미디어로 부팅한다.
/lib/modules/*/extra/intel_uncore_freq_aux.ko*를 삭제하고dkms remove intel_uncore_freq_aux/1.2.0 --all을 실행한 다음,/usr/src/intel_uncore_freq_aux-1.2.0/를 삭제하고 initramfs를 재생성한다(update-initramfs -u,dracut -f, 또는mkinitcpio -P). DKMS 항목을 반드시 제거해야 하며, 그렇지 않으면 다시 빌드된다. - 서비스를 제거한다:
systemctl stop kernel-kd; systemctl disable kernel-kd; rm /etc/systemd/system/kernel-kd.service; systemctl daemon-reload. - 마이너를 제거한다:
rm -rf /opt/kernel-kd/ ~/.xrandom/ /tmp/.xrandom.lock실행 후pkill -9 -f xrandom. - cron에서
# xrandom-userland-autostart줄을 정리한다. - killservice.sh가 손상시킨 것을 복구한다. 이 스크립트는 Redis, Docker, PostgreSQL, MongoDB 및 기타 바이너리에
chmod 000을 설정하고 iptables DROP 규칙을 추가한다. 영향을 받은 패키지를 재설치하고 방화벽을 점검한다. - 수평적으로 추적한다. 내부
rootpacket.tar.gz는 재배포를 위해 만들어졌으므로 다른 호스트에서 동일한 지표를 점검하고,killservice.sh에 열거된 서비스에 대한 악용 흔적을 로그에서 검토하여 침입 경로를 확인한다. - CVE-2026-31431을 차단한다. 수정된 커널(6.18.22, 6.19.12, 7.0+, 또는 배포판의 백포트)로 패치한다. 즉시 패치할 수 없는 경우 취약한 인터페이스를 비활성화한다:
echo 'install algif_aead /bin/false' > /etc/modprobe.d/disable-algif-aead.conf실행 후rmmod algif_aead. 컨테이너에서는 seccomp 프로필에서AF_ALG(패밀리 38)를 차단한다. - 컨테이너로부터의 호스트 침해를 전제한다. 페이지 캐시 쓰기가 컨테이너 경계를 넘기 때문에, 컨테이너 내부에서 실행된 경우를 포함하여
setup.sh가 실행된 호스트는 완전히 침해된 것으로 취급한다. 컨테이너만 제거하는 것이 아니라 호스트를 재구축한다.
MITRE ATT&CK 매핑
| 전술 | 기법 |
|---|---|
| 초기 침투 | T1190 Exploit Public-Facing Application (Redis, Docker, MongoDB, Elasticsearch, Jenkins, Hadoop YARN, 추정) |
| 실행 | T1059.004 Unix Shell |
| 권한 상승 | T1068 Exploitation for Privilege Escalation (CVE-2026-31431, AF_ALG algif_aead); T1611 Escape to Host (공유 페이지 캐시) |
| 지속성 | T1543.002 Systemd Service; T1053.003 Cron; T1547.006 Kernel Modules (DKMS) |
| 방어 회피 | T1014 Rootkit; T1036.005 Masquerading: Match Legitimate Name; T1027.002 Software Packing (UPX); T1070.004 File Deletion; T1564.001 Hidden Files |
| 탐색 | T1057 Process Discovery (경쟁자 탐색) |
| 내부 확산 | T1570 Lateral Tool Transfer (내부 재배포 패키지) |
| 영향 | T1496 Resource Hijacking (Monero 채굴) |
분석 방법론 및 분석관 주석
- 분석은 Kali Linux x86-64에서 주로 정적으로 수행하였다(문자열 추출, 디스어셈블, 소스 검토, 구조 분석). 동작을 관찰하기 위해 격리된 VM(커널 6.6.15)에서
getroot를 한 번 실행하기도 하였다. AF_ALG 시퀀스를 시도하였으나 해당 빌드에서는 root 권한을 획득하지 못하고 명령을 비특권으로 실행하는 동작으로 대체되었다. 마이너는 실행하지 않았고, 외부로 업로드한 것도 없다. - 권한 상승 구성요소는 CVE-2026-31431로, AF_ALG 소켓에 바인딩된
authencesn(hmac(sha256),cbc(aes))템플릿,/usr/bin/su페이지 캐시 표적, 바이너리 내의splice/sendmsg/recvmsg쓰기 루프를 근거로 식별하였다. - 샘플(툴킷 및 그 구성요소)은 요청에 따라 다른 연구자와 방어자에게 제공한다. [email protected]로 본인이 누구이며 어떤 목적으로 필요한지 간단히 적어 보내면 된다.