Las puertas traseras son trozos de código en un programa que permiten a
quién conoce su funcionamiento saltarse los métodos usuales de
autenticación para realizar cierta tarea. Habitualmente son insertados por
los programadores para agilizar la tarea de probar su código durante la
fase de desarrollo del mismo y se eliminan en el producto final, pero en
ciertas situaciones el programador puede mantener estas puertas traseras en el
programa funcional, ya sea deliberada o involuntariamente. Por ejemplo,
imaginemos una aplicación que para realizar cualquier tarea de seguridad
solicita a quien lo ejecuta cinco claves diferentes; evidentemente, durante
la fase de desarrollo es muy incómodo para el programador teclear estas
contraseñas antes de ver si el producto funciona correctamente, por lo que
es muy común que esta persona decida incluir una rutina en el código de
forma que si la primera clave proporcionada es una determinada no se soliciten
las cuatro restantes. Esta situación, aceptable durante la fase de desarrollo,
se convierte en una amenaza a la seguridad si se mantiene una vez el producto
está instalado en un sistema real: cualquiera que conozca la clave
inicial puede saltarse todo el mecanismo de protección del programa.
Aparte de puertas traseras en los programas, es posible - y típico -
situar puertas traseras en ciertos ficheros vitales para el sistema;
generalmente, cuando un atacante consigue acceso a una máquina Unix desea
mantener ese acceso aunque su penetración sea detectada. Por ejemplo, algo
muy habitual es añadir un usuario con UID 0 en el fichero de claves, de forma
que el pirata pueda seguir accediendo al sistema con ese nuevo login
aunque el administrador cierre la puerta que antes había utilizado para
entrar. También es clásico añadir un nuevo servicio en un puerto no
utilizado, de forma que haciendo telnet a ese número de puerto se
abra un shell con privilegios de root; incluso muchos atacantes
utilizan la facilidad cron para chequear periódicamente estos archivos
e insertar las puertas traseras de nuevo en caso de que hayan sido borradas.
>Qué hacer para evitar estos ataques? La prevención pasa por comprobar
periódicamente la integridad de los archivos más importantes (ficheros de
contraseñas, spoolers, configuración de la red, programas del arranque
de máquina...); también es conveniente rastrear la existencia de nuevos
archivos setuidados que puedan `aparecer' en los sistemas de ficheros:
cualquier nuevo programa de estas características suele indicar un ataque
exitoso, y una puerta trasera - generalmente un shell setuidado -
colocada en nuestra máquina. Los más paranoicos no deben olvidar efectuar
una búsqueda bajo los dispositivos montados (existen utilidades para hacerlo),
ya que un find normal no suele encontrar ficheros setuidados que se
guarden en un directorio que es a su vez punto de montaje para otra unidad.
© 2002 Antonio Villalón Huerta