Si quieres que tu sitio web no sea hackeado, no lo crees. Te explicamos por qué se puede hackear cualquier cosa y te damos algunos consejos para protegerlo.
Si sigues las noticias de IT, seguramente escuchas regularmente que se descubren fugas de datos de clientes de grandes compañías, se encuentran vulnerabilidades críticas en aplicaciones populares y los servidores son víctimas de ataques.
La seguridad es un gran problema en el mundo moderno. Qué lástima que todas estas grandes empresas escriban código tan malo. ¡A diferencia de mí, a mí no me da miedo el hacking! (sarcasmo) O, ¿tal vez sí?
¿Por qué algunas empresas son hackeadas y otras no? Vamos a entender cómo funcionan los hackers y cómo protegerse de ellos.
El Algoritmo del Hacking
Lo principal es recordar que no existen sistemas que sean imposibles de hackear. Acepta esto como un axioma. La única diferencia es el tiempo que tardarán en hackearte. Nuestra tarea es hacer que los hackers gasten tanto tiempo tratando de eludir nuestras medidas de seguridad que simplemente no les resulte rentable atacarnos.
Aquí tienes un algoritmo aproximado de un ataque:
- Tratar de arreglárselas sin hackear.
- Utilizar métodos de hackeo conocidos.
- Usar la fuerza bruta.
- Crear su propia herramienta.
- Abordar la tarea desde otro ángulo y empezar de nuevo.
Vamos a recorrer juntos el camino del hacker y ver cómo hace todo esto.
¡IMPORTANTE!: No hackeamos a nadie y no te lo recomendamos. Toda la información en el artículo se proporciona para que aprendas a proteger tus sitios y aplicaciones.
Objetivo del Hackeo
Imaginemos que un hacker planea acceder a la cuenta de un usuario específico en un sitio específico.
Primer paso: ingeniería social
El mejor hackeo es el que no ocurrió. Y para obtener acceso sin hackeo, necesitas que el usuario te proporcione todos los datos. Para esto se utiliza la ingeniería social. Estos son los métodos más conocidos.
Correos de la administración
Necesitas escribirle a una persona haciéndote pasar por un empleado de la compañía que posee el sitio. Para esto, puedes falsificar los encabezados del correo para que el usuario piense que realmente proviene de los representantes oficiales.
El contenido puede ser el siguiente:
“¡Hola, %username%! Hemos recibido información de que tu cuenta ha sido objeto de un intento de hackeo. Logramos eliminar la amenaza a tiempo, pero necesitamos acceso a tu cuenta personal para realizar una investigación adicional.
Para esto, debes proporcionar el nombre de usuario y la contraseña de tu cuenta.
Esperamos tu comprensión y cooperación.
Atentamente,
Angel Varol,
Jefe del Departamento de Seguridad de Nombre-del-Sitio.COM”
Cuando recibes un correo así, primero te preocupas pensando que ha sucedido algo terrible. Y solo cuando las emociones se calman, el sentido común puede advertirte que probablemente son estafadores.
Encanto
De repente, te escribe alguien que quiere saberlo todo sobre ti: de dónde eres, qué te gusta, si amas a los animales, cuál es el apellido de soltera de tu madre, etc. Usualmente esta persona parece ser el chico o la chica de tus sueños — ¿cómo no confiar en alguien tan encantador?
Por supuesto, mantienes la conversación y luego, de repente, la comunicación cesa. Un tiempo después, notas que no puedes acceder al sitio. Lo que pasó es que el hacker descubrió la respuesta a la pregunta secreta necesaria para recuperar el acceso a la cuenta.
Phishing
Recibes un mensaje de un amigo o conocido pidiéndote que entres a un sitio y votes en un concurso. Después de seguir el enlace, por alguna razón necesitas volver a iniciar sesión, pero, al hacerlo, no pasa nada. Cierras la pestaña, pero ya es demasiado tarde.
En realidad, es un sitio falso: puede tener el mismo diseño e incluso la misma dirección que el verdadero, pero es solo una farsa que se usa para que introduzcas tus datos.
Métodos de protección
Para proteger a los usuarios de hackeos mediante ingeniería social, es necesario informarles constantemente sobre lo siguiente:
- La administración nunca solicita datos de inicio de sesión.
- No se debe compartir contraseñas de un solo uso ni respuestas a preguntas secretas con nadie.
- No se debe ingresar a otros sitios desde tu sitio y luego iniciar sesión en ellos, especialmente si el enlace se vio en comentarios o se recibió en un mensaje privado.
- Si alguien accede a la cuenta de un usuario desde otro dispositivo, envía un correo con instrucciones sobre qué hacer si no fue el propio usuario quien se autenticó.
Segundo paso: hackeo utilizando vulnerabilidades conocidas
Si no se logró obtener la contraseña del usuario, se debe seguir adelante y probar vulnerabilidades a las que son susceptibles prácticamente todos los sitios web. La más conocida de ellas es la inyección SQL.
SQL está diseñado de manera que se pueden enviar varias consultas a la vez, separadas por punto y coma.
Por ejemplo, en tu sitio web hay un formulario de inicio de sesión en el que se debe ingresar el nombre de usuario y la contraseña. La consulta que se envía para verificar a los usuarios generalmente luce así:
"SELECT * FROM users WHERE login = '" . $login . "' AND password = '" . $password . "';"
Sabiendo esto, un hacker puede introducir en el campo de la contraseña algún comando de inyección. Por ejemplo:
qwerty'; UPDATE users SET password = '12345' WHERE login = 'user_login
Entonces, la consulta completa se verá así:
"SELECT * FROM users WHERE login = '" . $login . "' AND password = 'qwerty'; UPDATE users SET password = '12345' WHERE login = 'user_login';"
Aquí ya hay dos consultas: la primera intenta encontrar al usuario con los datos especificados y la segunda cambia la contraseña del usuario con el nombre de usuario user_login
a 12345
. Si la inyección funciona, el hacker podrá simplemente iniciar sesión utilizando la nueva contraseña.
Métodos de protección
Hay muchas formas. Por ejemplo, se puede prohibir la entrada de comillas, puntos y comas o palabras clave de SQL. Pero el método más seguro es pasar los datos por separado de la consulta.
Así, el sistema de gestión de bases de datos (SGBD) percibirá la inyección no como parte de la consulta, sino solo como la contraseña ingresada. Puedes leer más sobre la protección contra inyecciones SQL aquí.
Tercer paso: fuerza bruta
Si hasta ahora nada ha funcionado, el hacker puede intentar el ataque de fuerza bruta (bruteforce) — el intento de todas las combinaciones posibles de contraseñas. Ejecutará un script especial que intentará autenticarse en tu cuenta con contraseñas aleatorias.
Generalmente, primero probará las opciones más comunes:
- qwerty
- 12345
- 0000
- password
- dartvader y otros.
Métodos de protección
La mejor protección en este caso es limitar el número de intentos de inicio de sesión.
Cuarto paso: desarrollo de sus propios métodos de hackeo
Si nada de esto ha funcionado, el hacker puede intentar estudiar el código fuente de las páginas para identificar qué vulnerabilidades tiene tu sitio web.
En un grupo de riesgo particular están aquellos que utilizan CMS (sistemas de gestión de contenidos): el hacker puede averiguar en qué plataforma funciona tu sitio, instalar el mismo CMS en su propio entorno y buscar vulnerabilidades desde dentro.
Métodos de protección
Siempre se deben usar las versiones más recientes de los CMS, en las cuales ya se han solucionado las vulnerabilidades antiguas y aún no se han encontrado nuevas.
Quinto paso: cambio de enfoque
Si el hackeo puntual no funcionó, el hacker puede intentar otro enfoque. Por ejemplo, intentará obtener acceso al hosting donde se encuentra el sitio web. Para esto, utilizará todos los pasos mencionados anteriormente o probará algo diferente.
Si en el sitio web hay una opción para cargar un avatar, el hacker puede intentar subir a través de ella algún script al servidor. Por ejemplo, un administrador de archivos, de modo que pueda examinar todos los archivos que hay en el sitio, incluidos aquellos donde se almacenan los datos para conectarse a la base de datos.
Métodos de protección
Para proteger el sitio contra estos métodos, se debe:
- Limitar los tipos de archivos permitidos para cargar.
- Escanear los archivos cargados para detectar scripts maliciosos.
- Configurar correctamente los permisos de los archivos y directorios en el servidor.
- Utilizar un firewall de aplicaciones web (WAF) para filtrar el tráfico malicioso.
Es recomendable agregar varias verificaciones en el sitio para todos los formularios de carga de archivos. Por ejemplo, para imágenes se pueden agregar las siguientes:
$imageFileType = strtolower(pathinfo(basename($file["name"]), PATHINFO_EXTENSION));
$check = getimagesize($file["tmp_name"]); // Intentamos obtener las dimensiones de la imagen: si el usuario intenta cargar algún script con la extensión de imagen, se devolverá false.
if($check !== false) {
if($imageFileType == "jpg" || $imageFileType == "png"
|| $imageFileType == "jpeg" || $imageFileType == "gif") { // Verificación de la extensión
// El archivo se puede cargar
}
}
De esta forma, el hacker no podrá cargar nada que no sean imágenes reales. Sin embargo, esta protección no es absoluta, ya que un script malicioso podría estar contenido dentro de la imagen.
Alternativamente, el hacker podría intentar conectarse al FTP y reemplazar los scripts del servidor. Si logra obtener el nombre de usuario y la contraseña para acceder a phpMyAdmin, tendría acceso a toda la base de datos.
Protegerse contra la filtración de datos es posible mediante el cifrado. Por ejemplo, es mejor hash los passwords usando SHA-2 y cifrar los datos personales importantes con el cifrado de Vigenère o algo más serio. Lo principal es asegurarse de que no se roben las claves para descifrar.
Conclusión
La ciberseguridad es una guerra invisible en la que hackers y especialistas en seguridad inventan constantemente nuevas formas de reforzar las defensas y burlarlas.
Pero si no trabajas en una empresa de nivel mundial, es poco probable que alguien quiera gastar su tiempo hackeando tu sitio web, especialmente si lo proteges contra los principales métodos de hackeo.