Servidor Web. Programar de forma segura

Antonio Galisteo

Muchos editores de texto o IDE’s vienen configurados para guardar una copia de respaldo de los archivos que se van editando, de tal modo que, si tenemos un archivo llamado mi_conexion.php se creará una copia de respaldo del archivo con nombre mi_conexion.php~

Con estos archivos terminados con el caracter ~ debemos tener mucho cuidado porque NO son archivos PHP que el servidor web entienda que debe ejecutar, sino que los trata como un archivo de texto más, por tanto si cometemos el error de subir ese archivo al servidor de producción tendremos nuestro código expuesto para cualquiera. En ocasiones, este código puede que no sea de utilidad para un posible atacante pero en la mayoría de los casos tenemos accesos a bases de datos o consultas, con lo que si tienen acceso al código con estos archivos, estamos publicando la estructura de la base y si no está, por ejemplo, bien diseñada la podemos exponer a ataques por ID y fuerza bruta o incluso podemos estar diciéndole al atacante que no se almacenan las claves de los usuarios cifradas, cosa que por cierto, NUNCA se debe hacer.

Sabido esto, debemos ser muy cuidadosos de no subir archivos a nuestros servidor que NO sean HTML, CSS, PHP, JSP y demás, dependiendo del lenguaje de programación que estemos usando. Esto incluye no solo a los archivos terminados en el caracter ~, sino por ejemplo, archivos .sql. Si cometemos el error de subir este tipo de archivos, muy probablemente estemos dando, usuarios y pass de acceso, además de la estructura de toda la base de datos por lo que hackear el sitio web es un simple juego de niños.

Hace un tiempo, comentábamos el peligro de los backups y cómo descubrirlos en Google.

Si no hemos tenido en cuenta esta primitiva de seguridad o no somos los únicos que subimos archivos al servidor y queremos comprobar que no haya archivos de este tipo en el servidor, podemos hacerlo con un simple comando en el terminal logeados como root para poder acceder a todos los directorios. Podemos hacer:

find / -name *~

Con el comando anterior buscamos desde la raiz los archivos cuyo nombre termine con el caracter ~

find / -name *.sql

Con éste comando buscamos los archivos .sql que se pudieran haber subido al servidor.

Por último, nunca está de más hacer un

find / -name *.txt

Para descartar que no tengamos archivos de texto en nuestro directorio de fuentes.

Podemos optimizar un poco la búsqueda, limitando el directorio a buscar con el directorio donde se almacenan los fuentes de la web. En este caso podemos hacer un

find /var/www/ -name *~

Con esto ya no buscamos desde la raíz, sino solo en el directorio de los archivos fuente del web.

Estas búsquedas arrojarán un listado, si los hay, de los archivos que cumplen con lo especificado en el nombre. Si alguna de estas búsquedas devuelve archivos, tenemos que hacer lo siguiente. Primero examinarlos todos y cada uno para ver qué hemos estado exponiendo, si son usuarios y/o contraseñas, debemos cambiarlos, actualizar nuestro código, subirlo y borrar dichos archivos de respaldo del servidor. Si no se ha comprometido información de acceso y/o estructura de la base de datos, simplemente borramos estos archivos.

rm /ruta_archivo/archivo_respaldo.extension~

Esperamos que os haya sido de utilidad.

Publicado el 13-01-2014

Compartelo!

Deja un comentario

Comentanos

*
Ir arriba de la pagina