¿Cómo detectar un proceso oculto en Linux?

10

Tenemos una caja que sospechamos que ha sido rooteada en el trabajo. La pregunta es ¿cómo lo encontramos? No soy administrador del sistema, pero me llevaron al equipo para resolver la situación y tengo curiosidad por saber dónde pueden encontrarse buenos lugares, como un problema.

La razón por la que sospechamos esto es que hemos notado una utilización de red más alta de lo normal en la máquina desde puertos altos (lo que parecen ser aleatorios).

¿Qué podemos hacer para localizar al niño problemático? ¿Qué podemos hacer para protegernos de esto en el futuro? ¿Hay algún monitoreo que podamos ejecutar para hacernos conscientes de esto en el futuro? (Aparte del monitoreo de la red, en el que ya estamos trabajando para vigilar más de cerca).

Gracias de antemano y puedo proporcionar más detalles si es necesario. Aprecia tu tiempo.

Chris
fuente
2
Solución garantizada: destrúyelo desde la órbita y restaure desde la copia de seguridad.
Chris S
Esto parece duplicar esta pregunta reciente .
Steven lunes
1
"No soy administrador del sistema, pero me llevaron al equipo para resolver la situación". Esto no tiene precio. Para aclarar las cosas: su pregunta está perfectamente bien. Tu situación de la vida real no lo es. Quien haya decidido involucrarte está equivocado.
Halp
@ Chris S: Esta es una pregunta de aprendizaje, no tanto cuál es la forma más rápida de resolver la pregunta del problema.
Chris
Halp: No soy responsable de resolver esto, pero soy parte de aprender de ello. Soy un recién graduado de CSE que acaba de mojarme los pies en el trabajo.
Chris

Respuestas:

6

No puede confiar en ninguna herramienta del sistema que tenga en la máquina. Los rootkits reemplazarán ps, netstat, ls y más para ocultar su presencia. Debería desconectar la máquina, sacar su disco duro, hacer una copia forense (piense en dd) y luego trabajar desde eso en una máquina secundaria para buscar el rootkit.

Si insiste en trabajar en la máquina en vivo (que generalmente es inútil), puede intentar descargar una distribución de rescate en CD (es muy importante que la copia sea de solo lectura) y usar sus copias de ps, lsmod, etc.

Incluso esto puede fallar ya que un rootkit puede instalar módulos del kernel para ocultar entradas en / proc donde normalmente operan herramientas como ps.

¡Buena suerte!

bot403
fuente
Si tiene una distribución basada en RPM, puede ejecutarla rpm -V -f /bin/pspara verificar si se modificó, de lo contrario. Por supuesto, esto solo funcionará si el atacante no ha modificado rpmo la base de datos RPM. Aunque podría modificar algunos de rpmlos archivos y luego ejecutarlos rpm -V rpmy verificar si están mintiendo o no.
Cristian Ciupitu
5

El problema con rootkit bien construido es que modifican el comando de su sistema; como ps y top para no mostrar los procesos del rootkit y ls para no mostrar los archivos del rootkit.

Entonces, lo que tendrá que hacer es obtener estos comandos posiblemente de la fuente o en forma de binairies. (Asegúrese de estar bien firmado). Pero el truco de un kit raíz (lo he visto) es que quizás también corrompieron su compilador. Entonces, cuando el compilador sabe que está compilando ls o ps o cualquier comando, también los infecta.

Cuando vi este problema dije que bien recompilemos gcc, pero no es lo que necesito para compilar gcc ... el infecte gcc ... así que cuando sabe que se está compilando, lo infecta para que pueda infectar el comando.

Dirás que esto es grande y difícil de detectar, sí, pero es raro que el kit raíz sea tan resistente a las balas que acabo de darte el peor de los casos.

En serio, si está seguro de que hay un kit raíz en su servidor, ¡vuelva a instalarlo!

Gopoi
fuente
Agradezco la respuesta, y sí, reinstalarla es la solución por ahora. Sin embargo, lo que quiero saber es esto, así que en el futuro podría detectarlo y recuperarme sin tener que reconstruir todo el servidor. A nuestros ejecutivos ya no les gusta el tiempo de inactividad que el próximo ejecutivo.
Chris
@Chris, la prevención es tu única cura ... Calcula cómo sucedió para que podamos ayudarte a responder ... "cómo" para evitar que vuelva a suceder
Arenstar es el
¿Elegirás un buen respondedor a la pregunta?
Gopoi
5

La mejor manera de saber si su servidor ha sido "rooteado" es ejecutar un sistema de detección de intrusiones (HIDS) basado en host. Desafortunadamente, si no está ejecutando un HIDS ahora, entonces es demasiado tarde para instalar uno. El momento adecuado para instalar un HIDS es cuando el servidor se instala por primera vez y antes de que se conecte a una red.

Brevemente, la mayoría de los HIDS funcionan calculando hashes criptográficos de todos los archivos binarios del sistema y almacenando esos hashes (junto con muchas otras estadísticas de archivos) en una base de datos, llamada base de datos de referencia. Luego, periódicamente, el HIDS vuelve a analizar su sistema, comparando todos los archivos de su base de datos de línea de base con los archivos reales del sistema.

Sí, por supuesto, es posible que un rootkit modifique su base de datos de línea de base, por lo que debe tomar una copia de esa base de datos y almacenarla por separado del servidor antes de poner el servidor en línea. Luego, si sospecha que está "rooteado" (y sospecha que su base de datos de base también fue alterada), puede iniciar su sistema desde los medios de instalación, restaurar la base de datos en buen estado desde su copia de seguridad y luego ejecutar un análisis contra el bien conocido Sin embargo, es mucho más probable que un rootkit no prevea tener que derrotar a su HIDS particular, por lo que recibirá una notificación de HIDS de que los archivos del sistema han cambiado, lo que indica una probable intrusión del sistema.

Como no estaba ejecutando un HIDS, no tiene una forma rápida de determinar con certeza si ha sido rooteado o qué archivos del sistema se han modificado. Podría pasar mucho tiempo comparando los archivos de su sistema con archivos conocidos que se extrajeron de medios de instalación conocidos, pero es probable que ese tiempo se dedique mejor a la reinstalación de su sistema desde ese medio. Si desea investigar cómo fue rooteado después del hecho, el mejor curso es tomar una imagen de su sistema antes de borrarlo y reinstalarlo.

Steven Monday
fuente
Samhain es un HIDS.
pefu
4

Consulte una publicación anterior realizada

Dolor al eliminar un rootkit perl

Es realmente importante que leas esto ...

En cuanto a responder sus preguntas ..

Normalmente ejecuto un IDS / IPS (sistema de detección / protección de intrusiones) como snort ... hace un gran trabajo contra el juego sucio, y lo he visto haciendo un GRAN trabajo en acción ...

También uso Syslog Servers para mantener los mensajes de registro fuera de los servidores de producción, para que pueda rastrear problemas y cambios / ser rootkit'd

También utilizo a menudo herramientas de administración como cactus, que grafican CPU, memoria, disco, uso de red e informan si algo está fuera de lo común.

Ser rootkit'd es un problema grave, definitivamente intenta resolver la causa.

Espero que esto ayude ...: D

Arenstar
fuente
3

Los puertos altos aleatorios son los puertos efímeros, lo que indica que es probable que tenga uno o más programas de conexión externa desde este sistema.

Si no está rooteado, entonces netstat -np | grep -v ^unixpuede darle una pista sobre qué programa (s) están generando el tráfico.

También es posible que pueda escanear el tráfico de un sistema cercano usando tcpdump para volcar los paquetes que se originan en el sistema que cree que está rooteado. Si el programa problemático no se ejecuta como root, puede hacerlo desde el sistema infectado.

Hay varias cosas que puede hacer para evitar enraizarse:

  • Mantenga su sistema parcheado, especialmente el kernel. Monitoree las razones de la liberación del núcleo para determinar los vectores de ataque.
  • Solo instale y use los programas necesarios. Realice la instalación mínima posible.
  • Ejecute lo menos posible como root. Muchos programas cambiarán a ID de usuario sin privilegios una vez que hayan completado la configuración que requiere privilegios de root.

EDITAR: si está rooteado, el uso de programas ps y ls vinculados estáticamente puede indicar una diferencia entre los programas en ejecución que encuentran las dos herramientas. Las diferencias en la lista también pueden surgir a medida que los programas de corta duración desaparecen.

BillThor
fuente
1

La solución real para un sistema que puede estar rooteado es reinstalarlo desde fuentes seguras. Al igual que los CD de instalación. Luego restaure sus datos solo desde la copia de seguridad. Cualquier binario o script en su copia de seguridad puede haber sido comprometido y guardado en su copia de seguridad.

Para encontrar el kit raíz en un sistema en ejecución, una forma de hacerlo es compilar un módulo kernel diseñado para detectar rootkits. Compílelo en una máquina diferente que ejecute la misma versión del sistema operativo. Luego cópielo e insmodéelo.

Un detector de rootkit tendrá herramientas integradas en el módulo del núcleo para volcar la tabla de proceso en ejecución, verificar la tabla syscall (para buscar intercepciones syscall) y otras características. Puede tener scripts que tomarán la salida del módulo y la compararán con la salida de ps, netstat, ls, etc. O puede escanear la memoria en el espacio del kernel para encontrar firmas e informes de rootkit conocidos.

Zan Lynx
fuente
1

Esto es como los ratones: si ves uno, hay cien viviendo allí. Si ve signos de un compromiso, debe asumir que todo el sistema está comprometido. Es por eso que todo el mundo sugiere que reinstales el sistema en lugar de pasar mucho tiempo buscando. Me he encontrado con varias situaciones en las que una máquina estaba comprometida y los administradores de sistemas pensaban que habían limpiado el desastre, solo para arrepentirse más tarde.

Es muy común que los rootkits reemplacen los binarios del sistema, como ps, top, netstat. Y también es común al troyano ssh. Por lo tanto, buscar rarezas de suma de verificación en esos archivos es un enfoque principal. Si está en un sistema basado en rpm, rpm -V suele ser una buena herramienta, o dpkg-verificar en Debian / Ubuntu. O puede verificar las sumas de verificación directamente (pero tenga cuidado con el preenlace, que cambia los binarios sobre la marcha por razones de velocidad). Esto no es confiable, pero muchos ataques de script kiddie no cubren estos rastros. (En otras palabras, si encuentras algo, bien. Si no encuentras algo, no prueba que estás limpio).

Otras cosas a tener en cuenta: los puertos que se muestran abiertos desde un externo nmapque no se ven abiertos a través netstatde la máquina y los pids en los /procque no aparecen ps. Y si tiene habilitado syslog remoto, busque inicios de sesión ssh que no tengan registros en el último registro.

mattdm
fuente
0

Obtenga una copia de RKhunter y chkrootkit. Por lo general, son bastante decentes para ayudar a encontrar cosas que no deberían estar allí.

Siempre es bueno ejecutar mod_security también en su capa Apache junto con un firewall. Por lo general, encontrarán una aplicación web o script obsoletos y mejorarán el acceso desde allí con scripts de shell Perl y otras cosas divertidas.

ps auxfww suele ser genial para encontrar procesos que no pertenecen.

Además: netstat -anp para ver qué se escucha en ciertos puertos.

Nuevamente, estos son buenos si no has sido rooteado, solo comprometido.

Steven Leggett
fuente