Páginas web virtualmente inhackeables

El titulo es algo pretencioso, porque todos sabemos que no hay nada unbreakable aunque para la mayoría, la gran mayoría de los ataques y atacantes si será así, solo espero que mis amigos programadores que son muchos no se enojen por lo siguiente. Si estos consejos se aplicaran en la mayoría de las paginas y sistemas, ser hackers seria aburrido, no tendrían patio de juego, no tendrían que atacar. Si esto se aplicara mataría a todos los pseudo hackers. solo quedaria un redusido grupo de gente realmente experta

Existen muchas formas de endurecer la seguridad de un servidor, diferentes formas, para diferentes servicios, correo, vpn, ftp, pero ahora hablare solo de WEB

Hoy leí en el Twitter sobre una botnet que infecta sitios con WordPress, los vuelve zombies y a su vez atacan otros sitios web. Me doy cuenta que en lugar de que estemos mejor con administradores más preparados, estamos peor que antes. Lo que a continuación escribo era una verdad que ya sabía desde 1997 y que no ha perdido veracidad hasta hoy 14 de abril de 2013

Dicen que WordPress es inseguro, ¿ Muy inseguro ? dicen que es inseguro pero yo lo uso y los hechos dicen que nunca he sido hackeado desde que lo uso, es mas desde el 24 de enero del 2001, en 12 años jamás he sido hackeado y eso que a veces relajo la seguridad del sitio y desafío a algunos grupos a hackearlo abiertamente. Es más si ocurriera, que tan valido seria el hackeo. Prácticamente tengo que dejar la puerta abierta, prácticamente tengo que darles el root. ¿Contaría como hackeo?

Espero que estos consejos que no son más que sentido común ayuden a muchos, especialmente a administradores de sitio de gobierno a reforzar la seguridad de sus sitios.

Mi primer consejo es.

1 ) Nunca confíes en el programador

Administradores de servidores, nunca confíen en un programador, la visión de un programador no está orientada a la seguridad. Su visión está orientada a VISTAS, MODELO DE NEGOCIO y CONTROLADORES, No drivers, CONTROLADORES son conceptos de programación “moderna”, La mayoría de los programadores no entiende de seguridad, confían su seguridad a FrameWorks, los frameworks les dicen que están seguros y no saben por qué están seguros. Lo creen como un acto de fe, pero un administrador de servidores debe ser ateo. La FE es para el que no entiende una explicación racional.

NUNCA CONFIES EN UN PROGRAMADOR

Los CMS como WordPress, PHP-Nuke, Joomla, no se crearon de la nada, no son creados espontáneamente, todos estos sistemas fueron creados por programadores y recuerda el primer consejo, nunca confíes en un programador.

2 ) Servidor WEB

Apache, NginX httpd ligth, etc. Todos son exactamente igual, aunque te quieran vender que uno es mejor que otro. Todo es igual, la diferencia es que uno trae N cantidad de módulos y el otro no. Pero si al que no tiene módulos le pones los mismos que el que si trae por default será exactamente igual, igual de pesado, igual en su tiempo de reacción. Usa el que te sea cómodo. Solo que también usa tu sentido común.

Un servidor WEB debe sin duda despachar páginas, no es un FTP, no debe tener activado los métodos, delete, put.

Arrancar un servidor WEB como root.

El puerto 80 TCP conocido como http, desgraciadamente el puerto 80 TCP solo puede abrirlo root, un servidor WEB que se respete debe ser capaz de abrir el puerto 80 con root y después lanzar un hilo bajándolo a UID de otro usuario sin privilegios, incluso cada VHOST debería ser un UID diferente para que nunca haya hackeos masivos, el problema es que de entrada el proceso raíz corre como root, por eso puede abrir el puerto 80. El servidor WEB también es un programa y la regla máxima y consejo número 1 es, repítelo…. NUNCA CONFIES EN UN PROGRAMADOR.

La mayoría de los supuestos hackers son niños tarados que solo saben “hackear” usando SQL inyección, en su vida han oído de algún otro tipo ataque como Buffers Overflows y cosas más complicadas. Sin embargo habrá quienes de la vieja escuela si sepan esto. Recordemos que el servicio WEB inicia como root para abrir el puerto 80, si existe alguna forma de explotar esto, un verdadero hackers encontrara la forma de tomar root. No le des la oportunidad de tomarlo. Inicia tu servidor WEB con un usuario sin privilegios, el problema es que obviamente no podrá abrir el puerto 80 TCP. No importa. Configura tu servidor WEB para funcionar con puertos que no requieren permisos de root, los puertos root son del 1 al 1024, configura tu servidor WEB en el 1025 o en adelante. 8080 TCP, 8081, el que gustes. Hecho esto, por medio de tu firewall desvía todo el trafico 80 TCP al puerto que hayas designado para servidor WEB. De esta forma los clientes como Firefox, internet Explorer, chrome y otros podrán seguir entrando a tu página WEB como si nunca hubieras cambiado el puerto y tu servidor WEB jamás tendrá un hilo maestro con root.

3) Sistema de archivos para tu página WEB

Con tu servidor WEB sin privilegios de ningún tipo, lo siguiente es evitar que un atacante pueda modificar tus archivos. La mayoría de los novatos comenten el error de asignarle el mismo usuario con el que corre el servidor web a los archivos, directorios o carpetas. La mayoría de los CMS lo piden para configurar, pero una vez configurado esto ya no tiene más sentido.

Cambia el propietario de tus archivos a root, ¿ por qué no a otro usuario ? por que pueden ganar acceso con otro usuario y podrían hackearte. Pero si ganan acceso con root, el hackeo fue hecho desde antes, solo que no lo sabías y si tienen root da igual que permiso de usuario tengan.

Asegúrate que tus archivos y tus carpetas solo puedan ser modificados por root y solo leída por todos los demás.

Muchos CMS como wordpress permiten subir archivos, si pueden subir archivos pueden sobrescribir archivos y recuerda, JAMAS CONFIES EN UN PROGRAMADOR. Si el programador falla en sus medidas de seguridad. No importara, pues no tiene permiso de escribir en ninguna parte y por lo tanto no podrá modificar tu página WEB

4) Base de datos

Los programadores novatos e incluso los administradores de sitios novatos usan un solo usuario de base de datos, cualquier motor de base de datos que se respete maneja usuarios y estos usuarios pueden tener ACL aka Listas de acceso. El más usado para desarrollo WEB es MySQL y MySQL soporta perfectamente ACL

Crea N cantidad de usuarios para un mismo sitio WEB, tantos como necesites, haz tu análisis. Por ejemplo WordPress debe tener al menos 2 usuarios.

Cuando configuras WordPress solo te pide uno, ¿ por que ? por que los programadores de wordpress y muchos CMS son estúpidos. Usan el mismo usuario de la DB para los visitantes como para las conexiones administrativas. Por eso te lo repetiré de nuevo, NUNCA CONFIES EN EL PROGRAMADOR.

En que universo el sentido común dicta que un usuario de DB debe tener los permisos para insertar del lado del cliente que viene a visitar tu pagina WEB, solo le estas dando la oportunidad de hacer SQL Inyección.

Tomemos el caso de WordPress

¿ Que necesita hacer un visitante. ?

¿Un visitante escribe artículos?
No en la mayoría de los casos, los wordpress son personales y solo el autor escribe en el.
¿Un visitante escribe comentario?
Si, en la mayoría de los casos SI.

¿ Que hacer ?

La tabla de artículos debe ser de solo lectura, solo deben permitirse los selects, la tablas de comentarios deben poder escribir, ahí se debe permitir los inserts, pero solo eso. No updates, no delete, ni nada más que un simple y sencillo insert

¿ Que necesita hacer un autor de un sitio WordPress ?

El autor si debe poder hacer lo que quiera, borrar, modificar, escribir, ETC, pero por sentido común, esto lo hará con otra cuenta de usuario de MySQL ligada a su portal y a las tablas que interesa que pueda modificar. Con otra instancia del portal WordPress, un clon del portal que solo es accesible para el autor delimitándolo a una red o incluso a una sola ip

Este sencillo análisis a WordPress lo puedes aplicar para otros CMS o para desarrollos privados, sean WEB o Apps. Analiza y toma medidas

5) El Internet, no permitas que te usen para atacar otros sitios.

En la mayoría de los casos un servidor WEB recibe conexiones y envía datos por conexiones que un cliente remoto abrió. Nunca las conexiones proceden de INICIO del servidor WEB hacia internet. Si esto en la GRAN, GRAN, GRAN mayoría de los casos es así que no tiene sentido permitir que un servidor WEB inicie una conexión a otro servidor WEB, con tu firewall bloquea cualquier conexión saliente por el puerto 80 TCP y en el remoto caso de que realmente necesites iniciar una conexión desde el servidor, traza tu ruta a que host especifico debe permitírsele llegar a esa conexión y fuera de esa “lista blanca” no debe poder realizar conexiones a ningún lado

6) Desnuda a tu atacante y mitiga DDoS

Muchos sitios que son hackeados son paginas de gobierno y muchos son gobiernos locales, muchas empresas, son empresas con un mercado local. Debes preguntarte lo siguiente, en serio a alguien en china le importa lo que el presidente municipal de un pueblo olvidado de Oaxaca, Tabasco, Yucatán, Querétaro o cualquier otro estado de la republica; tenga que decir.

No la verdad es que a veces lo que dicen en la página de gobierno no le importa ni a sus propios ciudadanos. Para lo único que sirven esos sitios es para que ataques lamers y lamers en si ganen fama ya que los medios dan difusión del ataque como si fuera la gran cosa.

Si a sus propios ciudadanos no les importa, porque le habría de importar a alguien en China, Japón o cualquier otro país. No permitas conexiones de lugares que no necesitan saber de ti, en el caso de páginas de gobierno. Lo ideal es que solo permite conexiones de tu estado, pero siendo más flexibles, solo permite conexiones procedentes de México, ¿no sabes cuales ips permitir? Te lo voy a facilitar, descarga aquí la lista de redes ips homologadas mexicanas.

Este consejo se llama desnuda al atacante, ¿Por qué? Porque la mayoría de los atacantes son cobardes, intentaran usar Tor u otras conexiones que conmutar sus ips, la mayoría de esas ips son de Francia y otros países debido al onion routing del tor. Si tu solo permites conexiones nacionales, si un atacante quiere hacerlo, tendrá que quitarse el Tor, tendrá que dar “la cara” y su ip que podrás bloquear con un solo click

Como mitigas el DDoS

Los DDoS importantes son hechos por grupos de personas o botnets en el mundo, la gran mayoría del ataque vendrá del extranjero, si tus conexiones solo permiten trafico nacional, tal vez ni siquiera te enteres que estabas bajo ataque DDoS haciendo quedar en ridículo a muchos hackers

Existen muchas más opciones para hacer tan difícil un ataque a tus sitios pero ya con estos consejos puedes hacerle la vida infernal a pseudo hackersitos.

La seguridad se aplica con sentido común, usa tu sentido común aunque sea el menos común de los sentidos.

12 Comments

Add a Comment

Comment spam protected by SpamBam