Transcripción del vídeo
Los hackers y los ciberataques: Crash Course Computer Science #32
Hola, me llamo Carrie Anne. ¡Bienvenidos al Crash Course Computer Science!
En el último episodio, hablamos de los aspectos básicos de la seguridad informática, los principios y las
técnicas utilizadas para mantener los sistemas seguros. Sin embargo, a pesar de nuestros mejores
esfuerzos, las noticias están llenas de historias de personas, compañías y gobiernos que son objeto de
ciberataques de hackers que, con su conocimiento técnico, se infiltran en sus sistemas.
No obstante, no todos los hackers son malos. Hay hackers que buscan errores e intentan cerrar las
brechas de seguridad en el software para que los sistemas sean más seguros y resistentes. Las
empresas y los gobiernos los contratan a menudo para realizar evaluaciones de seguridad. Estos
hackers se denominan de Sombrero blanco, y son los buenos de la película. En el otro lado, están los
hackers de Sombrero negro, que son hackers maliciosos tienen el objetivo de robar, explotar y vender
datos y vulnerabilidades del sistema.
Las motivaciones de los hackers también varían mucho. Algunos piratean por diversión y curiosidad,
mientras que los ciberdelincuentes lo hacen casi siempre por dinero. Por otro lado, están los hactivistas,
que utilizan sus conocimientos para promocionar un objetivo social o político.
Y esto es solo la punta del iceberg. Básicamente, la visión estereotipada de un hacker como un joven
inadaptado sentado en una habitación oscura llena de cajas de pizza vacías probablemente describa
mejor a John Green que a los hackers. Hoy no vamos a enseñar cómo ser un hacker. En su lugar,
analizaremos algunos ejemplos clásicos de cómo los hackers se infiltran en los sistemas para que
tengan una idea de cómo se hace.
INTRODUCCIÓN
La forma más común que tienen los hackers de entrar en los sistemas no es con ningún ataque, es
engañando a los usuarios para que les dejen entrar. Esto se denomina ingeniería social, donde una
persona es manipulada para divulgar información confidencial o configurar su sistema para permitir la
entrada de atacantes. El tipo de ataque más común es el phishing, que aparece a menudo como un
correo electrónico donde le piden que inicie una sesión en una cuenta de un sitio web, por ejemplo, su
banco.
Le pedirán que pulse un enlace en el correo electrónico que lleva a un sitio que parece de fiar para el
observador casual, pero que realmente es un clon malicioso. Cuando especifica su nombre de usuario y
contraseña, esa información va directamente a los hackers, que pueden iniciar una sesión en el sitio
web suplantándoles. ¡Eso no trae nada bueno!
Incluso con un 0,1% de tasa de éxito, un millón de correos electrónicos de phishing pueden generar mil
cuentas afectadas.
Otro ataque de ingeniería social es el pretexto, donde los atacantes llaman, por ejemplo, a una
compañía fingiendo ser de su departamento de TI. A menudo, los atacantes llamarán a un primer
número y pedirán que les transfieran a un segundo, para que el número de teléfono parezca que es
interno de la empresa. A continuación, el atacante pedirá a un usuario incauto que configure su
1
ordenador de forma vulnerable o que revele detalles confidenciales como, por ejemplo, contraseñas o
configuraciones de red.
Perdón, un segundo…
Oh. Hola, soy Susan de TI. Estamos teniendo algunos problemas de red, ¿puedes verificarme este
valor?”
... y así empieza.
Los atacantes pueden ser muy convincentes, especialmente con un poco de investigación previa para
encontrar datos como los nombres de los empleados. Pueden necesitar diez llamadas telefónicas hasta
encontrar una víctima, pero solo necesitan una para entrar.
Los correos electrónicos son también un mecanismo de entrega común de troyanos, programas que se
hacen pasar por adjuntos inofensivos, por ejemplo, una foto o una factura, pero que realmente
contienen software malicioso o malware. Los programas maliciosos pueden ser muy variados. Algunos
pueden robar sus datos, por ejemplo, sus credenciales bancarias. Otros pueden cifrar los archivos y
pedir un rescate, lo que se conoce como ransomware.
Si no pueden ejecutar malware o conseguir que un usuario les deje entrar, los atacantes pueden forzar
su entrada por otros medios. Un método que hemos descrito brevemente en el último episodio es un
ataque de fuerza bruta en una contraseña, es decir, probar cualquier combinación de contraseña hasta
conseguir la entrada. Los sistemas más modernos se defienden contra este tipo de ataque haciéndole
esperar periodos de tiempo cada vez más largos después de cada intento fallido, o incluso bloqueándole
completamente después de varios intentos.
Un ataque reciente para sortear esta defensa se denomina duplicación NAND donde, si tiene acceso
físico a un sistema, puede conectar cables al chip de memoria del dispositivo y hacer una copia perfecta
de su contenido. Con esta configuración, puede probar una serie de contraseñas hasta que el dispositivo
empiece a hacerle esperar. Cuando esto ocurra, solo tiene que recargar la memoria con la copia original
que ha realizado, básicamente restablecerla, lo que permitirá probar más contraseñas inmediatamente
sin necesidad de ninguna espera. Esta técnica se ha utilizado con éxito en los iPhone 5C, pero muchos
nuevos dispositivos incluyen mecanismos para impedir este tipo de ataque.
Si no tiene acceso físico a un dispositivo, deberá encontrar una forma de atacarlo remotamente, por
ejemplo, a través de Internet. En general, el atacante deberá encontrar y aprovechar un error del
sistema; el uso con éxito de un error para conseguir prestaciones o acceso se denomina un exploit.
Un tipo común de exploit es un desbordamiento de almacenamiento intermedio. El almacenamiento
intermedio es un término general para un bloque de memoria reservada para almacenar datos. Hemos
hablado del almacenamiento intermedio de vídeo para almacenar datos de píxeles en el episodio 23.
Como ejemplo simple, podemos imaginar una solicitud de inicio de sesión del sistema operativo, que
tiene campos para el nombre de usuario y la contraseña.
En segundo plano, el sistema operativo utiliza el almacenamiento intermedio para almacenar los valores
de texto que se han especificado. A efectos ilustrativos, supongamos que los almacenamientos
intermedios se han especificado con un tamaño de diez. En la memoria, los dos almacenamientos
intermedios de texto serán parecidos al siguiente:
2
Obviamente, el sistema operativo realiza un seguimiento de mucho más que un nombre de usuario y una
contraseña, por lo que se almacenarán datos antes y después en la memoria. Cuando un usuario
especifica un nombre de usuario y una contraseña, los valores se copian en el almacenamiento
intermedio, donde pueden verificarse.
Un ataque por desbordamiento del almacenamiento intermedio hace exactamente lo que sugiere su
nombre: desborda el almacenamiento intermedio. En este caso, cualquier contraseña de más de diez
caracteres sobrescribirá los datos adyacentes en la memoria. A veces, esto solo hace que el programa o
el sistema operativo se bloquee, porque hay valores importantes que se sobrescriben con contenido
ininteligible. El bloqueo del sistema es un incordio y quizás sea todo lo que desea hacer el hacker
malicioso, incordiar. Pero los atacantes también pueden explotar este error de manera inteligente
inyectando aposta nuevos valores en la memoria de un programa, por ejemplo, estableciendo una
variable “is admin” en true. Con la capacidad de manipular arbitrariamente la memoria de un programa,
los hackers pueden omitir pasos como las solicitudes de inicio de sesión y, a veces, incluso utilizar el
programa para apropiarse de todo el sistema.
Hay muchos métodos para combatir los ataques por desbordamiento del almacenamiento intermedio.
El más sencillo es probar siempre la longitud de la entrada antes de copiarla en el almacenamiento
intermedio, lo que se denomina verificación de límites. Muchos lenguajes de programación modernos
implementan automáticamente la verificación de límites. Los programas también pueden aleatorizar la
ubicación de memoria de las variables, por ejemplo, nuestro hipotético distintivo “isadmin”, para que
los hackers no sepan qué ubicación de memoria deben sobrescribir y tengan más probabilidades de
bloquear el programa que de obtener acceso. Los programas también pueden dejar un espacio sin
utilizar después del almacenamiento intermedio y supervisar dichos valores para ver si cambian; si lo
hacen, sabrán que un atacante está trasteando la memoria. Estas regiones se denominan canarios,
llamadas así por los canarios que llevan los mineros en la mina para avisarles cuando hay condiciones
peligrosas.
Otro ataque clásico es la inyección de código. Se utiliza comúnmente para atacar sitios web que utilizan
bases de datos, lo que hacen prácticamente todos los grandes sitios web. No incluiremos las bases de
datos en esta serie, por lo que vamos a ver un ejemplo sencillo que ilustre este tipo de ataque.
Utilizaremos el lenguaje de consulta estructurado o SQL, también denominado Sequel, una API de base
de datos muy conocida. Supongamos que nuestra solicitud de inicio de sesión se ejecuta ahora en una
página web. Cuando un usuario pulsa “login”, los valores de texto se envían a un servidor, que ejecuta el
código que comprueba si ese nombre de usuario existe y, en caso afirmativo, verifica si la contraseña
coincide. Para ello, el servidor ejecutará un código, conocido como una consulta SQL, que será parecido
al siguiente.
En primer lugar, debe especificar qué datos estamos recuperando de la base de datos. En este caso,
queremos captar la contraseña. El servidor también debe especificar de qué lugar en la base de datos se
va a recuperar el valor. En este caso, supongamos que los datos de todos los usuarios están
almacenados en una estructura de datos que es una tabla con la etiqueta “users”. Por último, el servidor
no desea obtener una lista gigante de contraseñas para cada usuario en la base de datos, por lo que
especifica que solo desea datos para la cuenta cuyo nombre de usuario es igual a un determinado valor.
El servidor copia ese valor en la consulta SQL, en función de lo que el usuario haya escrito. El mandato
real que se envía a la base de datos SQL será parecido al siguiente, done el nombre de usuario es igual a
philbin. Obsérvese también que los mandatos SQL terminan con un punto y coma.
3
¿Cómo se puede piratear? Enviando un nombre de usuario malicioso con mandatos SQL incorporados.
Por ejemplo, podemos enviar al servidor este original nombre de usuario:
Cuando el servidor copia este texto en la consulta SQL, el resultado es parecido al siguiente:
Como he explicado antes, se utilizan un punto y coma para separar los mandatos, por lo que el primer
mandato que se ejecuta es este: si hay un usuario llamado ‘whatever’, la base de datos devolverá la
contraseña. Obviamente, no tenemos ni idea de cuál es la contraseña de ‘whatever’, por lo que nos
equivocaremos y el
servidor nos rechazará. Si no hay ningún usuario llamado ‘whatever’, la base de datos no devolverá
ninguna contraseña o dará un error, y el servidor nos rechazará de nuevo. En ambos casos, no nos
importa, porque el siguiente mandato SQL es el que nos interesa: “drop table users”, un mandato que
hemos inyectado manipulando el campo de nombre de usuario.
Este mandato indica a la base de datos SQL que suprima la tabla que contiene todos los datos de
usuario. ¡Que la elimine completamente! Esto generará una gran cantidad de problemas en un lugar
como, por ejemplo, un banco… o realmente en cualquier sitio. Observemos que ni siquiera hemos tenido
que infiltrarnos en el sistema; no es que hayamos adivinado un nombre de usuario y una contraseña.
Incluso sin acceso formal, hemos podido sembrar el caos explotando un error.
Se trata de un ejemplo muy sencillo de inyección de código, contra el que prácticamente todos los
servidores actuales tienen defensas. Con ataques más sofisticados, es posible añadir registros a la base
de datos (por ejemplo, una nueva cuenta de administrador) o incluso pedir a la base de datos que revele
datos, lo que permite a los hackers robar datos como números de tarjeta de crédito, números de la
seguridad social y todo tipo de dulces envenenados. Pero no vamos a enseñarles cómo hacerlo.
Al igual que con los desbordamientos de almacenamiento intermedio, los programadores siempre
deben asumir que la entrada que proviene del exterior puede ser potencialmente peligrosa y examinarla
atentamente. La mayoría de formularios de nombre de usuario y contraseña en la web no permiten
incluir símbolos especiales como el punto y coma o comillas como primer nivel de defensa. Los buenos
servidores también sanean la entrada eliminando o modificando los caracteres especiales antes de
ejecutar las consultas de base de datos. Los exploits operativos a menudo se venden o se comparten en
línea. Cuanto más extendido esté el error o más dañina sea el exploit, mayor será el precio o el prestigio
que suscitará.
Incluso los gobiernos compran a veces exploits, lo que les permite atacar sistemas, por ejemplo, para
fines de espionaje. Cuando se descubre un nuevo error explotable que los creadores del software no
han tenido en cuenta, se denomina una vulnerabilidad de día cero. Los hackers de Sombrero negro
utilizan el exploit para su máximo beneficio, antes de que los programadores de Sombrero blanco
publiquen un parche para el error. Por este motivo es tan importante mantener actualizado el software
del sistema; muchas de dichas descargas son parches de seguridad. Si se dejan abiertos errores en
suficientes sistemas, los hackers podrán escribir un programa que salte automáticamente de un sistema
a otro, lo que se denomina un gusano.
Si un hacker puede controlar un gran número de sistemas, puede utilizarlos conjuntamente para formar
lo que se denomina un botnet. Puede tener muchas aplicaciones, por ejemplo, enviar grandes
volúmenes de correo no deseado, minar bitcoins utilizando la electricidad y potencia informática de
otros usuarios, y lanzar ataques de Denegación de servicio distribuida o DDoS a los servidores.
4
En un ataque DDoS, todos los sistemas del botnet envían una avalancha de mensajes ficticios. Esto
puede dejar los servicios fuera de línea, para forzar a los propietarios a pagar un rescate o solo por
incordiar. A pesar del trabajo duro de los hackers de Sombrero blanco, los exploits que se describen en
línea y las mejores prácticas de ingeniería de software, todos los días ocurren ciberataques. Cuestan a la
economía global alrededor del medio billón de dólares al año, una cifra que solo puede aumentar a
medida que nos volvemos más dependientes de los ordenadores. Es especialmente preocupante para
los gobiernos, ya que las infraestructuras están cada vez más controladas por ordenadores, por ejemplo,
las centrales de energía, la red eléctrica, los semáforos, las plantas potabilizadoras, las refinerías de
petróleo, el control del tráfico aéreo y muchos otros sistemas clave. Muchos expertos pronostican que la
siguiente gran guerra se luchará en el ciberespacio, donde las naciones serán vencidas no por ataques
físicos, sino económicamente paralizadas y con las infraestructuras incapacitadas debido la guerra
informática. No se dispararán muchas balas, pero el potencial de vidas perdidas es muy elevado… más
alto que en una guerra convencional.
Por lo tanto, debemos adoptar todos buenas prácticas de ciberseguridad. Como comunidad
interconectada en Internet, debemos asegurarnos de que nuestros sistemas estén protegidos contra
aquellos que desean utilizar su capacidad para ocasionar daños. Así que basta ya de ignorar las
notificaciones de actualizaciones. Nos vemos la semana que viene.