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.
muy bueno mi estimado.
*tambien lo que puedes a hacer es montar la base de datos en otro
servidor, Casi todos lo dejan de modo local.
*agregar permisos extras a las areas de admin o solo permitir el acceso de modo local.
El problema real es que no todos tenemos un servidor para nuestro blog.
contamos con hosting de resellers. cuales estan muy limitados en la administracion.
A un que tengas buena seguridad web en tu codigo. sigues en un hosting compartido la vulnerabilidad posiblemente esta en otra web y te lleban entre las patas tu blog.
hola :9 leyendo este pedazo
“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”
para mi es igual de sencillo usar una tool para SQLI que una tool para explotar un BOF sencillito, lo importante seria entender como funcionan , pues las tools solo es para ahorrar tiempo
saludos last 🙂
Lo del servidor web no es completamente cierto, el protocolo podría decirse que es estandar, pero no es completamente así la forma de procesarlo, por ejemplo apache por defecto trabaja de la forma “prefork”, es decir según la cantidad de consultas que tiene en un determinado momento lanza varios forks a la espera de conexiones (supuestamente para responder más rápidamente cuando hay muchos clientes conectados), esto tiene como precio un mayor uso de ram y procesador (si la carga de usuarios baja, quedan más forks de los necesarios en memoria), pero otros servidores no hacen eso, si no que despliegan hilos según la cantidad de conexiones que tienen en el instante (tienen la cantidad de hilos justos para los usuarios que se conectan, y los despliegan en el momento en que llega una conexión, también se van de memoria cuando terminó de enviar la respuesta al cliente), esto tiene como desventaja, que tarda unos milisegundos más (el tiempo que tarda en desplegar el hilo para la conexión), no es gran cosa, pero en un sitio con muchos clientes, esto sí se puede sentir. Ahora bien, según el tipo de DoS algunos servidores responden mejor que otros (por ejemplo, si me llega una conexión, pero no recibo una consulta, no tiene caso cargar ciertos módulos), etc.
Saludos!
Gracias he muy buenos consejos
Muy buenos consejos, felicidades y gracias por los aportes tan interesantes que haces.
Gracias
Que web hosting me recomiendas 😀
No uso hosting, yo uso mis propios servidores, no sabría que recomendarte
Pero como busco o algo así porque no quiero tener todo el día el ordenador encendido y tampoco pagar una pasta.vi una q se llama goodady de momento es la q mejor pinta tiene y dice q es segura contra ddos y sql pero no estoy muy seguro si es cierto
Lo siento pero tu tutorial a partir del punto 6 no lo he entendido muy bien
Si podiesemos hablar por otra parte más cómoda dímelo porfavor gracias;😁
Te recomiendo hostgator, tengo usándolos muchos años y jamás he tenido problemas con ellos, además de que su soporte es fantástico. Alguna vez utilicé godaddy y no me pareció bueno su servicio y mucho menos su soporte. Aunque lo mejor sería que te rentes un vhost, linode es igual una opción que he usado por años, tienen precio razonable y desempeño excelente, igual su soporte siempre ha sido bastante bueno.
Muchas gracias por tus consejos.
Hay un detalle con la lista de direcciones ip de México, faltan más ip como por ejemplo 177.240.73.0/24.
Saludos.
Excelente.
Mi aporte, una forma fácil de bloquear por País
http://xmodulo.com/block-network-traffic-by-country-linux.html
Un saludo desde Santiago – Chile
Atte. Juan