[LUG.ro] Debian informa del asalto a sus servidores

Sebastián D. Criado lugro@lugro.org.ar
Sun, 30 Nov 2003 00:55:35 -0300


-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Extraido de Barrapunto

Traducción a vuelapluma  (Puntos:5, Informativo) por pobrecito hablador el 
Sábado, 29 de Noviembre 2003, a las 14:18h (nº239979) Hola,

Nota: Hay que tener en cuenta que:
  a) la información sobre la intrusión viene de máquinas comprometidas, por lo 
que debe ser tomada con el suficiente escepticismo.
  b) la investigación sigue adelante - de forma que la información que estoy 
escribiendo puede ser inválida según salgan a la luz más datos [O no, depende 
de cómo vaya].

Detección

El 20 de Noviembre se comprobó que master estaba teniendo fallos de núcleo. 
Mientras estábamos investigándolo, se descubrió que murphy estaba teniendo 
los mismos fallos. Además tanto murphy como gluck tienen instalados ayudantes 
para monitorizar los cambios en el sistema de archivos y casi al mismo tiempo 
comenzaron a alertar que /sbin/init había sido reemplazado y que habían sido 
cambiados los timestamps de mtime y de ctime de /usr/lib/locale/en_US.

La investigación reveló que la causa de ambas cosas había sido el root kit 
'Suckit' (ver el apéndice "Suckit" para más información).

¿Que ha ocurrido?

El 19 de Noviembre de 2003, aproximadamente a las 5pm GMT, una contraseña 
robada (sniffed) fué usada para acceder a una cuenta sin privilegios en 
klecker.debian.org. De alguna manera consiguieron root en klecker e 
instalaron el Suckit en él. La misma cuenta fué utilizada entonces para 
acceder a master y ganar el root (e instalar el Suckit) también. Entonces 
intentaron entrar en murphy con la misma cuenta. Esto falló, porque murphy es 
una máquina restringida a la que sólo pueden acceder una pequeña porción de 
desarrolladores. Entonces usaron su acceso raiz en master para acceder a una 
cuenta de administración utilizada para hacer los backups, y la usaron para 
ganar acceso a murphy. Consiguieron root en murphy e instalaron también allí 
el Suckit. Al día siguiente usaron una contraseña robada (sniffed) de master 
para acceder a gluck, conserguir root, e instalar Suckit.

Ver el apéndice "Línea de Tiempos" para más detalles de los tiempos.

Respuesta

Gluck fué desactivado, y se hizo una imagen de sus discos para hacer un 
análisis forense.

Debido a que no tenemos acceso físico a klecker, fué desconectado de Internet, 
y las imágenes fueron realizadas a través de consola serie a una máquina 
local que se encontraba tras una conexión de red con cortafuegos.

master y murphy se mantuvieron en funcionamiento durante un tiempo, el 
suficiente para anunciar el compromiso, después de lo cual, fueron 
desconectados y realizadas sus imágenes.

Limpieza

Después de la limpieza y reinstalación de los archivos modificados, los 
archivos non-US y los de seguridad fueron verificados buscando cambios en los 
logs de los mirrors y comparando los checksums MD5 de los archivos de klecker 
con los de tres de los mirrors seguros.

Gluck, Master y Murphy fueron borrados y reinstalados desde CD. Los datos y 
servicios están en proceso de ser restaurados.

Todas las máquinas y toda la información fué comprobada buscando devices fuera 
de /dev, ejecutables suid, archivos con permiso de escritura, etc. y todos 
los archivos sospechosos fueron borrados. Los servicios (y sus programas/
scripts) fueron comparados con fuentes garantizados y sanitizados antes de 
ser reactivados.

Ya que sabíamos que teníamos cuentas comprometidas y sniffers entre nuestras 
manos, debíamos suponer que un número desconocido de cuentas estaban 
comprometidas, por lo que se bloquearon todas las cuentas, se invalidaron 
todas las contraseñas,y las claves ssh autorizadas fueron borradas.

¿Cómo pudo suceder esto?

Todas las máquinas comprometidas corrían núcleos recientes [1] y tenían casi 
todas las actualizaciones de seguridad [2].

De todas formas había dos problemas.

(1) Los núcleos que corrían en las máquinas en cuestión, no todos ellos tenían 
el ptrace arreglado como a uno le hubiera gustado. Gluck, Master y Murphy 
tuvieron el nuevo kernel en mayo, pero Gluck, por diferentes razones no fué 
actualizado hasta Agosto (aunque creo que tenía /proc/sys/kernel/modprobe 
arreglado para bloquear los exploit más comunes hasta entonces).

(2) Master tenía una copia de su viejo disco duro por accidente. 
Desafortunadamente era muy vieja, con binarios suid sin parchear.

Aunque ese pudo ser el verctor de ataque, yo no lo creo. (2) no parece ser ya 
que master no fué la primera máquina comprometida, por lo que sabemos. Aunque 
es posible que un atacante con acceso local a gluck pudiera conseguir root a 
través de (1), parece improbable que esperaran durante meses para utilizarlo 
entonces en varias máquinas sólo para instalar el rootkit en varias máquinas 
de debian.org y por lo menos un sistema (que sepamos) no relacionado (y que 
no tenía la vulnerabilidad de ptrace).

Basado en ello, y en el estudio forense del sistema no relacionado mencionado 
antes, creo que había un exploit local de root todavía no conocido que fué 
utilizado para pasar de tener acceso local sin privilegios hasta ganar el 
root.

¿Hacia dónde va la cosa?

Desafortunadamente debido a que (creo que) hay un desconocido exploit local de 
root 'in the wild', no podemos desbloquear todavía las cuentas en Debian. 
Obviamente no podemos continuar sin las cuentas LDAP por mucho tiempo. Por 
ahora, pido un poco más de paciencia a) mientras se completa la tarea 
dolorosa y cuidadosa de restaurar las máquinas una por una y b) mientras 
intentamos y agotamos todas las posibilidades razonables de investigación 
para determinar cómo el atacante consiguió root desde una cuenta sin 
privilegios.

Obviamente estamos mirando cómo asegurar nuestras máquinas y ajustar nuestros 
procedimientos para intentar evitar que ocurra de nuevo. Comunicaré más 
detalles sobre esto más tarde.

Finalmente

Los desarrolladores preocupados por sus máquinas deberían echar un vistazo a 
http://www.wiggy.net/debian/developer-securing/ [wiggy.net]

Apéndices

Gracias a Adam Heath y Brian Wolfe, a Wichert Akkerman, Dann Frazier y Matt 
Taggart, Michael Stone y Robert van der Meulen, Jaakko Niemi, Colin Watson, 
Josip Rodin. [Este texto está basado en el borrador realizado por Wichert 
Akkerman].

Línea de Tiempos

Todas las horas son GMT.

# Klecker init timestamp: Nov 19 17:08
# Master sk timestamp: Nov 19 17:47
# Murphy sk timestamp: Nov 19 18:35
# Los fallos en Murphy comenzaron: Nov 19 19:25
# Los fallos en Master comenzaron: Nov 20 05:38
# Gluck init timestamp: Nov 20 20:54

Suckit

Suckit es un rootkit que instala un sniffer, un ocultador de procesos, un 
ocultador de archivos, y una puerta trasera de entrada a nivel de núcleo. 
Aparentemente había un fallo en su código que hizo que saltaran los fallos de 
kernel en master y en murphy. Esto también explicaría porqué /sbin/init fué 
reemplazado: el nuevo init carga Suckit en el núcleo y después procede a 
arrancar el verdadero init, asegurándose que todavía está activo después del 
rearranque.

Notas

[1] Klecker: 2.4.22, Master y Murphy: 2.4.21-rc2, Gluck: 2.4.22rc2

[2] A klecker le faltaba la última actualización de postgresql. El ssh en 
todas las máquinas era una versión personalizada para DSA a la que le 
faltaban sólo la tercera parte y última (esto es, los parches de Solar 
Designer) de las actualizaciones de ssh.

PD. Como siempre, hablo sólo en mi nombre.

James



Saludos.-
- -- 
- --
Sebastián D. Criado - scriado@ciudad.com.ar
L.U.G.R.o - http://www.lugro.org.ar
GNU/Linux Registered User # 146768
- -------------------------------------------------------------------
"Si el Universo fuera un programa estaría hecho en C, y correría sobre
un sistema UNIX"
                                                   Anónimo.

			
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.3 (GNU/Linux)

iD8DBQE/yWo+8hmHQ8ZCg0IRAt2aAKCOs75tC05z26OQn3L638GDd4WJkwCbBnnW
jplZJhoa46S4HpA1B9TMmvc=
=6LGN
-----END PGP SIGNATURE-----