Consejos para mantener un sitio seguro en Drupal

El software libre es algo incre&iacute;ble. Hay que admitirlo, miles de personas trabajando en algo en com&uacute;n sin buscar r&eacute;dito personal parece m&aacute;s una utop&iacute;a que una realidad. Y sin embargo, desde hace muchos a&ntilde;os es un fen&oacute;meno que crece y crece, cada vez m&aacute;s.<br />
<br />
En lo que a seguridad respecta, es crucial la cantidad de ojos que revisan c&oacute;digo. Imagine, un programador desarrolla una pieza de software, y cientos de personas, muchas con m&aacute;s conocimientos que &eacute;l, validan y corrigen o sugieren mejoras. El resultado final es un mejor c&oacute;digo, m&aacute;s seguro y estable.<br />
<br />
Como ejemplo m&aacute;s cercano de esto est&aacute; el n&uacute;cleo de Drupal. Un d&iacute;a como cualquiera:<br />
<br />
K&aacute;roly N&eacute;gyesi (chx) publica una idea sobre una nueva funcionalidad para el n&uacute;cleo. Como primera medida, &eacute;l env&iacute;a un c&oacute;digo inicial.<br />
<br />
Horas despu&eacute;s, Neil Drumm revisa ese c&oacute;digo y sugiere mejoras. Le siguen Larry Garfield, Dave Reid, Dries Buytaert, Angie Byron y muchos otros.<br />
<br />
Cuando uno se quiere dar cuenta, el c&oacute;digo que fue revisado por decenas de personas y que cambi&oacute; bastante desde su versi&oacute;n original esta listo para agregarse al n&uacute;cleo.<br />
<br />
Muchos meses despu&eacute;s un tal Heine Deelstra descubre un peque&ntilde;o error en ese c&oacute;digo que representa una brecha en la seguridad de todo el sistema, y a las horas o tal vez minutos, el problema esta solucionado.<br />
<br />
Mientras tanto, usted y yo, y muchos otros solo ven esto como un aviso en el sitio de www.drupal.org/security y piensa, &iexcl;otra vez! pero actualic&eacute; Drupal hace dos semanas!.<br />
Responsabilidades a la hora de desarrollar con software libre:<br />
<br />
Lo crea o no, es mejor que esto suceda a que no suceda. Esto es como cuando el antivirus dice &quot;Virus detectado&quot;, hubiese sido peor que no lo detecte, su pc seguramente ya estar&iacute;a infectada.<br />
<br />
Cada persona que utilice Drupal deber&iacute;a saber que tiene la responsabilidad de actualizar sus instalaciones cada vez que alguien descubre un nuevo agujero de seguridad. M&aacute;s a&uacute;n si su cliente desconoce que esto puede ocurrir y conf&iacute;a que usted se va a encargar &quot;de todo&quot;.<br />
<br />
Por eso, el primer consejo que me gustar&iacute;a darle a los reci&eacute;n iniciados en Drupal es: No desestimen las advertencias de seguridad de Drupal. Esa gente sabe m&aacute;s que usted seguramente, y otros que saben tanto como ellos pueden estar interesados en explotar esa vulnerabilidad.<br />
Los consejos infaltables<br />
<br />
Sin embargo, aunque alguien mantenga su sitio perfectamente actualizado, probablemente esto no garantice la seguridad de su sitio.<br />
<br />
C&oacute;digo en PHP, el camino m&aacute;s simple al desastre:<br />
<br />
Me veo en la obligaci&oacute;n de aclararlo, pido disculpas por su simplicidad pero es importante aclararlo: Nunca, nunca, en serio, nunca, le de acceso a la ejecuci&oacute;n de c&oacute;digo en PHP a alguien en que no conf&iacute;e. Y de hecho, no deber&iacute;a confiar en nadie para esta tarea. Salvo que sea su compa&ntilde;ero de trabajo (otro programador o dise&ntilde;ador como usted), la respuesta que encontrar&aacute; en much&iacute;simos lugares es: No, no lo haga.<br />
<br />
Este detalle es tan importante que desde Drupal 6, la posibilidad de ejecutar c&oacute;digo en PHP debe activarse desde un m&oacute;dulo aparte que viene desactivado por defecto.<br />
<br />
El m&oacute;dulo PHP Filter<br />
<br />
Y nunca, nunca por lo que m&aacute;s quiera!, haga esto:<br />
activar el modulos php filter<br />
<br />
Nunca permita ejecutar PHP a usuarios no confiables<br />
no des permisos a usuarios anonimos u otros usuarios a utlizar codigo php<br />
Ni esto:<br />
<br />
Habilitar la ejecuci&oacute;n de php para todos los usuarios<br />
<br />
Disculpen la efusividad, pero el tema es realmente cr&iacute;tico.<br />
<br />
XSS. Ese peque&ntilde;o diablillo<br />
<br />
Seg&uacute;n una estad&iacute;stica que ahora no puedo ubicar para citar, m&aacute;s del 40% de los ataques que sufren los sitios de Drupal son del tipo XSS.<br />
<br />
Este tipo de ataques consiste en que alguien, de forma mal intencionada coloca un trozo de c&oacute;digo en javascript en alg&uacute;n nodo, comentario, o lo que sea que permita el sitio. Y luego, otro usuario (generalmente un administrador), visualizando el contenido, le permite realizar tareas un tanto peligrosas.<br />
<br />
Seguramente habr&aacute; visto ese simple ejemplo de ataque XSS:<br />
<br />
&lt;script&gt;<br />
alert(&quot;hola&quot;);<br />
&lt;/script&gt;<br />
<br />
Por favor, no crea que esto es lo m&aacute;s &quot;peligroso&quot; que puede hacer este tipo de ataques. Hay explicaciones detalladas de como cambiar la contrase&ntilde;a del administrador con este tipo de ataques. Si ley&oacute; bien.<br />
<br />
Afortunadamente es bastante sencillo evitar este tipo de ataques, por lo menos a nivel b&aacute;sico:<br />
<br />
&nbsp;&nbsp;&nbsp; Primero: Revise sus filtros de entrada, nunca permita HTML sin filtrar en sus contenidos. Solo permita etiquetas confiables.<br />
&nbsp;&nbsp;&nbsp; Segundo: Actualice regularmente sus m&oacute;dulos si presentan fallas de seguridad.<br />
&nbsp;&nbsp;&nbsp; Tercero: Si programa sus propios m&oacute;dulos, siga las normas de seguridad.<br />
<br />
Un cuarto &iacute;tem es importante de destacar. Si descubre que un sitio tiene problemas con sus filtros de entrada, av&iacute;sele al administrador del sitio.<br />
<br />
Si un usuario no confiable (como los usuarios an&oacute;nimos) al momento de crear un comentario (o un nodo) puede ver esto en su sitio, usted deber&iacute;a revisar sus permisos:<br />
<br />
Los usuarios an&oacute;nimos no deber&iacute;an poder escribir c&oacute;digo con Full HTML<br />
<br />
Inyecciones SQL, la cosa se pone fea...<br />
<br />
Atenci&oacute;n programadores novatos. Drupal posee una capa de abstracci&oacute;n de base de datos para evitar este tipo de ataques. &Uacute;sela y su c&oacute;digo ser&aacute; m&aacute;s robusto. No los use y seguramente su m&oacute;dulo sea un hoyo en la seguridad de todo su sitio.<br />
<br />
Los ataques de inyecci&oacute;n de SQL permiten ejecutar consultas directamente sobre la base de datos. El detalle, imagine si alguien le borra todos los nodos de su sitio. &iexcl;Que bueno!, &iquest;no?.<br />
<br />
En este error suelen caer los reci&eacute;n iniciados en Drupal. Alguien con unos pocos conocimientos de PHP puede programar un m&oacute;dulo para Drupal. Seguir estas normas es lo m&iacute;nimo que podr&iacute;an hacer para evitar ser despedidos :)<br />
<br />
Este link es la referencia fundamental para todo aquel que quiera escribir c&oacute;digo seguro:<br />
<br />
Escribiendo c&oacute;digo seguro<br />
<br />
A modo de ejemplo:<br />
<br />
&lt;?php<br />
// c&oacute;digo inseguro:<br />
$res = db_query(&quot;SELECT nid FROM node WHERE type = &#39;$tipo&#39;&quot;);<br />
<br />
<br />
// c&oacute;digo seguro:<br />
$res = db_query(&quot;SELECT nid FROM {node} WHERE type = &#39;%s&#39;&quot;, $tipo);<br />
?&gt;<br />
<br />
La diferencia principal entre ambos c&oacute;digos es que en el primero si $tipo vale<br />
<br />
&#39;; DELETE FROM users;--<br />
<br />
Todos los usuarios de su sitio se van de vacaciones. (y no volver&aacute;n m&aacute;s...)<br />
Pero espere, a&uacute;n hay m&aacute;s... :(<br />
<br />
No s&oacute;lo a nivel superficial puede haber problemas de seguridad:<br />
<br />
Controle los permisos de archivos<br />
<br />
Si usted ve este cartel en su reporte de estado Administrar -&gt; Reportes -&gt; Reporte de estado<br />
<br />
settings.php no protegido<br />
<br />
Tambi&eacute;n tiene fallas de seguridad. Si settings.php no esta debidamente protegido por permisos de usuario, alg&uacute;n atacante podr&iacute;a leer nada m&aacute;s y nada menos que la clave de acceso a la base de datos del sitio. Ups, peque&ntilde;o desliz...<br />
<br />
Si usted a&uacute;n utiliza Drupal 5, deber&iacute;a tomar muy en serio la seguridad, sobre todo si permite a sus usuarios que suban archivos a su sitio. Drupal 6 introduce muchas mejoras en lo que respecta al manejo de los archivos adjuntos en el sitio.<br />
Algunas sugerencias<br />
<br />
El reporte de estado es la primer fuente de informaci&oacute;n . En el figuran todas las configuraciones erroneas que detect&oacute; Drupal y pueden ser peligrosas para el sitio. No crea que si no hay errores esta todo bien. Simplemente intente que no se vean adevertencias en esa secci&oacute;n.<br />
<br />
Habilite el m&oacute;dulo Update. Este m&oacute;dulo inclu&iacute;do en Drupal 6 y disponible para Drupal 5 bajo el nombre de Module Update Status, indica si hay alg&uacute;n m&oacute;dulo que est&eacute; desactualizado.<br />
<br />
No se alarme si tiene alg&uacute;n m&oacute;dulo desactualizado. Despues de todo puede ser que el error corregido en la nueva versi&oacute;n no represente una mejora en lo que respecta a seguridad. Si lee en rojo brillante &iexcl;Se requiere una actualizaci&oacute;n de seguridad! deber&iacute;a entonces considerar una actualizaci&oacute;n del m&oacute;dulo.<br />
<br />
Drupal desactualizado<br />
<br />
Revise los reportes de seguridad de Drupal. Lea de que se trata el reporte y cuan cr&iacute;tico es. Por ejemplo, meses atr&aacute;s el m&oacute;dulo Views fue actualizado por un problema de SQL Injection, sin embargo fue indicado como Moderadamente Cr&iacute;tico porque tenian que cumplirse muchas condiciones para que el problema fuese posible de explotar.<br />
<br />
Reporte de seguridad para el m&oacute;dulo views<br />
<br />
Hay mucha documentaci&oacute;n sobre como mejorar la seguridad de su sitio. La mayor&iacute;a se aplican si usted es programador. Les dejo algunos links para aquellos que quieran profundizar m&aacute;s sobre esto de la seguridad en Drupal.<br />
<br />
Vea que es lo que puede ver un usuario con menos privilegios. Cierre sesi&oacute;n y navegue su sitio an&oacute;nimamente, muchas veces utilizamos el usuario admin y controlar que cosas estan activas y que no.<br />
<br />
En ingl&eacute;s:<br />
<br />
&nbsp;&nbsp;&nbsp; Gu&iacute;a fundamental para programar c&oacute;digo seguro: http://drupal.org/writing-secure-code<br />
&nbsp;&nbsp;&nbsp; Sitio oficial de anuncios de seguridad en Drupal: http://drupal.org/security<br />
&nbsp;&nbsp;&nbsp; Sito web de Heine Deelstra, miembro del equipo de seguridad de drupal: http://heine.familiedeelstra.com/security<br />
&nbsp;&nbsp;&nbsp; Art&iacute;culo sobre multisitios seguros: http://justinhileman.info/articles/a-more-secure-drupal-multisite-instal... />
<br />
En espa&ntilde;ol:<br />
<br />
&nbsp;&nbsp;&nbsp; Carmel Hassan escribi&oacute; un interesante art&iacute;culo sobre &iquest;Cu&aacute;ndo actualizar drupal?<br />
<br />
Lo importante de todo esto no es asustarse. Todo problema de seguridad conocido en Drupal tiene una soluci&oacute;n, s&oacute;lo hay que estar atento y las cosas funcionaran bien... Esperemos :)
Autor original: 
Orelvis Rodríguez Remón
Categoría: