¿Cómo saber que nuestro sistema ha sido comprometido?

En este post no busco ahondar mucho sobre las formas y procedimientos que un profesional forense debe considerar. Solo quiero hacer un escrito lacónico que ayude a los neófitos como yo, a buscar la mejora ante las adversidades. Las ideas las tomé de Linux Hardening, un libro ya entrado en años pero que se mantiene vigente con la respectiva evolución de las herramientas que ilustra. 

Cuando un sistema es vulnerado, o pensamos que lo ha sido; de alguna manera es tarde y ésto sólo nos ayudará a prevenir por medio de la rutinaria inspección de cada servidor (puede contarse con una automatización y paulatinamente con herramientas más profesionales).

En medida de lo posible, recomiendo que prevengamos una cosa. Aseguremos que cada comando que utilicemos sea el que instalamos. Pienso que si un atacante puede comprometer nuestro sistema y sembrar piezas de software que lo mantengan oculto, no le será nada difícil manipular algunos de los comandos que nos permitirían reconocerlo. Para esto generaremos las firmas digitales de los comandos, y por qué no, archivos de configuración que son importantes para nosotros. Por ejemplo, el comando fin (sobre el cual vamos a desarrollar este post).

Ubicamos el binario, nos aseguramos que no sea una liga simbólica y obtenemos la firma. 



En teoría, no debería cambiar esta firma digital, a menos que hagamos una actualización. Como sea, podemos de esta manera intentar mantener a salvo la integridad de lo que ejecutamos.

Posterior a esto, y con el pasar del tiempo, las próximas revisiones de anomalías en el sistema comenzarán con la validación de los binarios.


Uso de find para detectar anomalías


Como he mencionado anteriormente, nos auxiliaremos de find en nuestro entorno GNU/Linux para evaluar los contenidos residentes en nuestros sistemas de archivos. A continuación describo los parámetros utilizados.

setuid y setgid

1000 --> Sticky bit
2000 --> setgid
4000 --> setuid

# find / -type f -perm /6000 -ls 2>/dev/null

Con la salida obtenida podemos decidir si todos los archivos listados son nuestros y es necesario que conserven esos permisos. En caso de no requerirlos, los podemos retirar.

Archivos con permisos de escritura para todo el mundo

No requiere mayor explicación esta búsqueda. 

# find / -perm -o+w -exec ls -lrth {} \;

Archivos con nombres inusuales

Los archivos que comienzan por un "." normalmente no los listamos cuando navegamos entre directorios. Sabiendo esta diafana omisión, el atacante puede valerse de ella. 

# find / -name ".*" 2>/dev/null
# find / -name "..*" 2>/dev/null

Archivos sin dueño ni grupo

# find / -nouser -o -nogroup -ls

Adicional, podemos usar la redirección de los errores a /dev/null para eliminar la basura en el análisis posterior.


Comentarios

Entradas populares de este blog

Análisis de conexiones TIME_WAIT

Agregar un usuario a un grupo secundario

Desencriptar passwords AES y DES en WebLogic 10