
읽기 전용, 에이전트 없는 Linux 커널 보안 구성 감사 도구(로컬 및 SSH). 초기 초점: CVE-2026-98432에 대한 TCP 마이그레이션 / MPTCP 검사.
Python으로 작성된 경량 오픈소스 Linux 보안 감사 도구입니다.
에이전트를 설치하거나 시스템 구성을 수정하지 않고 SSH를 통해 로컬 및 원격 Linux 서버를 감사합니다.
이것은 구성 및 패치 상태 감사 도구이며, 취약점 스캐너가 아닙니다. 취약점과 관련된 커널 설정 및 사용 현황을 보고하고, 실행 중인 커널 패키지를 벤더의 수정 버전과 비교합니다. 취약점을 트리거하려는 시도는 절대 하지 않습니다.
| 기능 | v0.2.0 |
|---|---|
| Python 3.8+, 서드파티 의존성 없음 | ✅ |
| 로컬 Linux 감사 | ✅ |
| SSH를 통한 원격 감사 (에이전트리스) | ✅ |
| 다중 서버 병렬 스캔 | ✅ |
| Ubuntu / Debian / Rocky / AlmaLinux / RHEL / Fedora | ✅ |
| TCP 요청 소켓 마이그레이션 검사 | ✅ |
| MPTCP 구성 및 사용 검사 | ✅ |
| 커널, 배포판 및 재부팅 대기 감지 | ✅ |
| JSON / CSV 보고 | ✅ |
| 커널 CVE 패치 검증 (Ubuntu, Debian, RHEL, Rocky, AlmaLinux, CentOS) | ✅ |
| 자동 보안 업데이트 | ❌ 절대 안 함 |
| 서버 구성 변경 | ❌ 절대 안 함 |
컨트롤러(Mac 또는 Linux 워크스테이션)는 선택된 검사 항목으로 작은 POSIX sh
스크립트를 생성하고, SSH를 통해 각 대상에 sh -s로 파이프합니다. 대상에는
아무것도 복사되거나 설치되지 않습니다. 스크립트는 key=value 형식의 사실을
출력하며, 모든 평가는 컨트롤러에서 이루어지고, 컨트롤러는 대상의 출력을
신뢰할 수 없는 것으로 취급합니다(제어 문자 제거, 값 잘라내기, CSV 수식
인젝션 무력화).
실행하기 전에 서버에서 정확히 무엇이 실행될지 검토하십시오:
python3 netviser_cve_audit.py --print-script
타깃에는 sh와 표준 도구(iproute2의 ss, awk,
grep, sed)만 필요합니다. 타깃에 Python은 필요하지 않습니다.
컨트롤러에는 Python 3.8+와 OpenSSH가 필요합니다(macOS 또는 Linux).
git clone https://github.com/maxigentr/netviser-linux-security-auditor.git
cd netviser-linux-security-auditor
# Audit this Linux machine
python3 netviser_cve_audit.py --local
# Audit a remote server
python3 netviser_cve_audit.py --host [email protected]
# Custom SSH port and key
python3 netviser_cve_audit.py --host [email protected] --port 2290 --identity ~/.ssh/audit_ed25519
# Multiple servers, 10 in parallel
python3 netviser_cve_audit.py --hosts servers.txt --workers 10
# Non-root SSH user with passwordless sudo, for full process and BPF visibility
python3 netviser_cve_audit.py --host admin@web01 --sudo
# Watch MPTCP counters for 60 seconds to see if MPTCP is used right now
python3 netviser_cve_audit.py --hosts servers.txt --sample-interval 60
# Also check whether other kernel CVEs are patched
python3 netviser_cve_audit.py --hosts servers.txt --cve CVE-2024-1086,CVE-2024-26925
이 도구는 설치(pip install .)한 뒤 netviser-audit 또는
python3 -m netviser_audit로 실행할 수도 있습니다.
호스트 파일 형식은 examples/servers.example.txt를
참고하세요. 호스트별 포트는 ssh://user@host:port 또는 ~/.ssh/config
별칭을 사용합니다.
| 옵션 | 설명 |
|---|---|
--local / --host H / --hosts FILE | 감사 대상 |
--checks IDS | 쉼표로 구분된 하위 집합(--list-checks 참고); 종속 항목은 자동으로 추가됨 |
--cve IDS | 해당 CVE들의 커널 패치 상태도 보고(반복 지정 또는 쉼표 구분) |
--offline | 벤더 권고 데이터를 다운로드하지 않음 |
--advisories FILE | 이전에 저장한 권고 데이터 사용; 누락된 레코드는 --offline이 아닌 한 여전히 다운로드됨 |
--save-advisories FILE | 사용한 권고 데이터를 저장하여 오프라인 또는 반복 실행에 사용 |
--sudo | 수집기를 sudo -n으로 실행(암호를 묻지 않음) |
--sample-interval N | MPTCP 카운터를 N초 간격으로 두 번 읽음 |
--output PREFIX | 보고서 접두사(기본값 netviser_audit → .json, .csv) |
--no-report | 터미널에만 출력 |
--fail-on-review | REVIEW 발견 항목이 하나라도 있으면 종료 코드 3(CI / cron용) |
-v, --verbose | REVIEW / UNKNOWN뿐 아니라 모든 발견 항목 표시 |
SSH는 BatchMode=yes(키 기반 인증만)와
StrictHostKeyChecking=accept-new로 실행됩니다.
종료 상태: 0 성공, 1 대상 스캔 불가, 2 사용법 오류,
3 검토 발견 항목 존재(--fail-on-review 사용 시에만).
| Id | 검사 내용 |
|---|---|
kernel | 배포판, 커널 릴리스, 실행 중인 커널 패키지, 더 새로운 설치된 커널 / 재부팅 필요 여부 |
patch | 벤더 권고 데이터를 기반으로 실행 중인 커널 패키지에 대한 각 CVE의 패치 상태 |
tcp_migration | net.ipv4.tcp_migrate_req; 로드된 sk_reuseport BPF 프로그램(root + bpftool) |
mptcp | net.mptcp.enabled, 경로 관리자, CONFIG_MPTCP, MPTCP 소켓 및 프로세스, 핸드셰이크 카운터, mptcpize 사용 여부 |
cve_2026_98432 | CVE-2026-98432 관련 구성; 패치 상태는 patch.CVE-2026-98432 |
모든 발견 항목에는 상태(OK, INFO, REVIEW 또는 UNKNOWN)와
기계 판독 가능한 판정(예: mptcp.usage = IN_USE)이 있습니다.
patch 검사는 CVE마다 한 가지 질문에 답합니다: 지금 실행 중인 커널이
배포판 벤더 기준으로 수정되었는가?
dpkg-query / rpm -qf)를
식별합니다: 이름, 정확한 버전, 소스 패키지. 또한 해당 패키지의 체인지로그와
로드된 라이브패치(canonical-livepatch, kpatch-patch)에 언급된 CVE id를
나열합니다.~ 버전이 올바르게 처리됩니다.| 배포판 | 권고 출처 |
|---|---|
| Ubuntu | Ubuntu Security API — 릴리스 및 커널 플레이버별(linux, linux-hwe-*, linux-aws, …) |
| Debian | OSV를 통한 Debian Security Tracker 데이터 |
| RHEL, Rocky Linux, AlmaLinux, CentOS | Red Hat Security Data API — 메인 RHEL 스트림 |
이 서비스들에는 CVE 식별자만 전송되며, 호스트에 관한 어떤 정보도
컨트롤러를 벗어나지 않습니다. 에어갭 환경에서는
--save-advisories adv.json으로 한 번 실행한 뒤 나중에 --offline --advisories adv.json으로
실행하세요.
| 판정 | 상태 | 의미 |
|---|---|---|
PATCHED | OK | 실행 중인 커널 버전 ≥ 벤더의 수정 버전 |
NOT_AFFECTED | OK | 벤더가 해당 릴리스/커널은 영향을 받지 않는다고 명시 |
LIVEPATCHED | OK | 로드된 라이브패치가 해당 CVE를 수정된 것으로 표시 |
VULNERABLE | REVIEW | 수정 사항이 릴리스되었으나 실행 중인 커널이 더 오래됨. 설치 후 재부팅 필요 |
FIX_PENDING | REVIEW | 벤더가 수정 사항을 준비했으나 아직 릴리스되지 않음 (Ubuntu) |
FIX_NOT_AVAILABLE | REVIEW | 영향받음, 아직 수정 사항이 공개되지 않음 |
WONT_FIX | REVIEW | 벤더가 해당 릴리스를 수정하지 않을 예정 (예: 지원 종료) |
MENTIONED_IN_CHANGELOG | INFO | 벤더 판정은 없으나 실행 중인 커널의 변경 로그가 해당 CVE를 언급함 |
NO_DATA | UNKNOWN | 벤더가 해당 CVE, 릴리스 또는 커널 플레이버에 대한 기록을 보유하지 않음 |
UNSUPPORTED | UNKNOWN | 해당 배포판에 대한 권고 소스가 없음 (예: Fedora, SUSE) |
NOT_CHECKED | UNKNOWN | 권고 데이터를 사용할 수 없거나(--offline, 네트워크 오류) 커널 패키지를 알 수 없음 |
제한 사항:
VULNERABLE로 표시되며, 결과에도 그렇게 명시됩니다.NOT_CHECKED).net.mptcp.enabled = 1은 MPTCP 소켓이 생성될 수 있음을 의미할 뿐입니다.
누군가 MPTCP를 비활성화하기 전에, mptcp 검사는 실제 사용 증거를 수집합니다:
| 증거 | 출처 |
|---|---|
| 리스닝/연결된 MPTCP 소켓 및 해당 프로세스 | ss -M -a -n -p |
핸드셰이크 카운터 (MPCapableSYNRX, MPJoinSynRx, …) | /proc/net/netstat (MPTcpExt) |
| 샘플링 구간 동안의 카운터 증가 | --sample-interval N |
| mptcpize로 래핑된 서비스 | mptcpize 또는 libmptcpwrap을 참조하는 systemd 유닛 / 드롭인 |
libmptcpwrap이 로드된 실행 중인 프로세스 | /proc/<pid>/maps |
결과는 mptcp.usage에 요약됩니다:
| 판정 | 의미 | 권장 조치 |
|---|---|---|
IN_USE | 연결된 MPTCP 연결, mptcpize로 래핑된 서비스, 또는 MPTCP 연결을 수락한 MPTCP 리스너 | 변경 전에 의존 서비스를 파악할 것 |
ACTIVE_TRAFFIC | 샘플링 중 핸드셰이크 카운터 증가 | 트래픽의 출처를 찾을 것 |
LISTENING_ONLY | MPTCP 리스너는 있으나 부팅 이후 MPTCP 핸드셰이크 없음 — 일반적으로 MPTCP를 기회적으로 활성화하는 프로그램 (Go 1.24+는 리스너에 대해 기본적으로 이렇게 함) | 보통 의존성 없음; 열린 리스너는 재시작 전까지 MPTCP를 유지함 |
PAST_ACTIVITY | 부팅 이후 카운터가 0이 아니었으나 현재 소켓 없음 | --sample-interval 60으로 다시 실행할 것 |
NONE_OBSERVED | 소켓 없음, 카운터 활동 없음, mptcpize 없음 | 계획된, 되돌릴 수 있는 비활성화 테스트가 가능함 |
DISABLED / NOT_APPLICABLE | MPTCP가 꺼져 있거나 커널에 빌드되지 않음 | — |
NONE_OBSERVED는 특정 시점의 관찰일 뿐 증명이 아닙니다. IPPROTO_MPTCP
소켓을 직접 여는 애플리케이션은 소켓을 보유하는 동안에만 나타나며, root가
아니면 자신의 프로세스만 볼 수 있습니다.
MPTCP 비활성화를 테스트하기로 결정했다면 유지보수 시간에 수행하고, 먼저
런타임에서(sysctl -w net.mptcp.enabled=0) 실행한 뒤 서비스 연결과 로그를
관찰한 후 영구적으로 적용하십시오. 이 도구는 그러한 변경을 대신 수행하지
않습니다.
최초 릴리스는 Linux 커널 IPv4 TCP use-after-free 취약점인 CVE-2026-98432와 관련된 구성에 초점을 맞춥니다. 이 도구는 다음을 검사합니다:
net.ipv4.tcp_migrate_req 및 sk_reuseport BPF 프로그램net.mptcp.enabled 및 실제 MPTCP 사용패치 상태는 patch.CVE-2026-98432로 보고됩니다.
kernel.pending_reboot 발견 항목은 여전히 이전 커널을 실행 중인 호스트를 표시합니다.이 도구는 다음을 수행하지 않습니다: