¿Cómo creo un usuario invisible y persistente en linux?

8

Para mi clase de seguridad de software estamos obligados a hackear un servidor creado por nuestro profesor. He pirateado el servidor y tengo la contraseña del usuario root.

Ahora que soy root, me gustaría asegurarme de tener acceso permanente al servidor. El hipotético propietario del servidor descubrirá fácilmente que asumí el control rápidamente.

¿Existe alguna forma de garantizar un acceso persistente al servidor con privilegios de root bajo un nuevo usuario "invisible" que puedo crear? Se agradecería cualquier otro método para mantener acceso constante y no detectado al servidor.

    
pregunta DanielPahor 12.03.2018 - 17:20
fuente

3 respuestas

3

Depende más bien de lo que entiendas por "invisible".

Realmente no es posible cambiar el comportamiento del sistema y no dejar rastro detectable. Todo lo que puedes hacer es hacer que sea más difícil encontrar esos rastros. En el extremo de la escala, puede compilar un módulo de kernel capaz de ocultarse que tenga una interfaz en el espacio de usuario, aunque esto está lejos de ser trivial. En el otro extremo de la escala, puede agregar un alias para un usuario existente a / etc / passwd y / etc / shadow, por ejemplo

     root:x:0:0:root:/root:/bin/bash
     toor:x:0:0:root:/root:/bin/bash

     root:$1$WXYZabc4:17158:0:99999:7:::
     toor:$1$ABCxyz12:17158:0:99999:7:::

(su destino utilizará una implementación de criptografía más reciente y detallada). Esto es visible en los archivos afectados.

Puede instalar un shell directamente en la red con netcat o [x] inetd

 nc -l -p 8282 | bash

... aunque esto es bastante obvio y aparecerá en netstat y ps.

Podría agregar un shell a un usuario del sistema existente y establecer una contraseña, luego para aprovechar el acceso privilegiado necesitaría un programa setuid. Sin duda, ya sabes que establecer el bit setuid en un script no va a funcionar, así que tal vez una versión modificada de su que omita pam para tu nombre de usuario mágico. No lo suelte simplemente en / bin: sobrescriba un programa setuid existente que crea que es poco probable que se use (por ejemplo, ping6). Seguirá apareciendo en tripwire o ossec.

Sería divertido identificar un lugar donde pueda escribir datos sin autenticar y configurar un trabajo cron como root para extraer cadenas y ejecutarlas como root (lo siguiente se simplifica deliberadamente):

 #!/bin/bash

 tail -100 /var/log/auth.log | \
 awk '/Failed password for gangsta/ {
       split($0, out, "gangsta|from");
       print out[1] "\n";
      }' >/tmp/myscript
 . /tmp/myscript
 rm -f /tmp/myscript

... una vez más, esto puede ser recogido por un IDS de host, y tenga cuidado de que cron envíe un correo electrónico a los usuarios con el resultado de sus trabajos, a menos que lo anule en el archivo cron.

    
respondido por el symcbean 12.03.2018 - 23:38
fuente
2
  

¿Existe alguna forma de garantizar un acceso persistente al servidor con privilegios de root bajo un nuevo usuario 'invisible' que puedo crear?

Hay muchos, pero una forma más fácil sería, por ejemplo, backdoor el binario de SSH (no indetectable; rkhunter , tripwire etc. mostrarán que algo anda mal). O cualquiera de sus bibliotecas, por ejemplo, PAM . Entonces siempre puedes volver a ingresar como root.

Si el sistema está correctamente endurecido, necesitará un rootkit 'real', hasta Blue Pill niveles.

    
respondido por el LSerni 12.03.2018 - 17:43
fuente
2

Depende mucho de tu víctima. Una idea simple y potencialmente eficiente: si tiene un acceso no root (y asume que no lo perderá), podría intentar copiar algún ejecutable (por ejemplo, / bin / bash) y establecer el bit SUID. Por supuesto, uno podría buscar ejecutables SUID de raíz, pero esto no debería hacer una sospecha a primera vista.

Supongo que es tu caso, ya que usas la etiqueta dirty-cow. ☺

    
respondido por el v6ak 12.03.2018 - 19:45
fuente

Lea otras preguntas en las etiquetas