Una estrategia de seguridad en la nube alineada al NIST
Detección de vulnerabilidades IoT mediante fuzzing
1.
2.
3. Introducción
Derivado del rápido tecnologismo desenfrenado y su
irresistible invasión en todo proceso enfocado en el buen vivir
de los seres humanos, los ciberataques se han incrementado
en todo el mundo, permitiendo la exposición de datos
sensibles.
Actualmente, aproximadamente el 90% de los dispositivos
conectados a una red (incluyendo los IoT) se cree pueden ser
atacados.
4. Introducción
Existe una gran cantidad de metodologías de evaluación y
detección de riesgos (vulnerabilidades), que son aplicados al
desarrollo y construcción de los dispositivos.
Muchos de estos métodos suelen ser privativos y
desarrollados específicamente por las mismas empresas que
crean los dispositivos.
Dentro de estas metodologías se encuentran las pruebas Fuzz.
5. Introducción
El trabajo que se presenta se enmarca dentro de la
investigación tecnológica orientada a la práctica
metodológica, permitiendo así proponer el desarrollo e
implementación de un fuzzer, que es la parte esencial de una
metodología fuzzing.
6. Introducción
El objetivo principal es elaborar una metodología basada en
fuzzing para la detección de vulnerabilidades en componentes
IoT.
● Investigar y analizar pruebas aplicadas a los dispositivos IoT.
● Desarrollo de un fuzzer.
● Analizar los resultados de las pruebas realizadas.
7. Marco teórico
Muchas de nuestras necesidades como seres humanos están
ligadas a la interacción con un dispositivo que debe de contar
con algún tipo de conexión a Internet.
8. Marco teórico
Internet de las Cosas (IoT), es un
término introducido en 1999 por Kevin
Ashton durante una presentación a
P&G™.
IoT un proceso de evolución dentro del
mundo de la tecnología, que ha invadido
desde la industria hasta el cuerpo
humano.
Referencia de la figura: Vermesan, O. & Friess, P. (2013). Internet of Things: Converging Technologies for Smart Environments and Integrated Ecosystems. River Publishers.
10. Marco teórico
Internet de las Cosas es el paradigma
tecnológico más moderno y con un
crecimiento impresionante en la
actualidad, puede considerarse como
una red altamente interconectada de
entidades tecnológicas heterogéneas,
tales como, sensores, actuadores,
Internet, Cómputo en la Nube y algunas
de la infraestructura de comunicación
más moderna.
Referencia de la figura: Europe, O. (2020). ¿EN QUÉ GRANDES ENTORNOS ESTÁ SIENDO BENEFICIOSO EL USO DE IOT? Consultado desde
https://openexpoeurope.com/es/en-que-grandes-entornos-esta-siendo-beneficioso-el-uso-de-iot-informe-things-matter-de-telefonica/
14. Marco teórico
Proyecto: Desarrollo e Implementación de una Arquitectura de Iot (Internet-of-Things) segura, basado en
pruebas de penetración, utilizando modelos Fuzz y Sistemas de Detección con un IDS e IPS, con clave
5774.19-P aprobado en el año de 2019 por el Tecnológico Nacional de México (TecNM) en la
Convocatoria de Apoyo a la Investigación Científica y Tecnológica 2019 para los Institutos
Tecnológicos Federales, Descentralizados y Centros.
16. Marco teórico
Pruebas de penetración (pentesting) son la aplicación/ejecución de una gran diversidad de
pruebas (ataques) dirigidos a diferentes entornos con la finalidad de encontrar la mayoría de
las vulnerabilidades posibles.
Debido a que se requieren demasiado conocimientos en una infinidad de tecnologías son los
expertos en seguridad (o hackers) los que aplican estas pruebas.
Las pruebas se clasifican dependiendo de la información que se tiene respecto del objetivo
en: Black-, White- y Grey-Box.
Godefroid, 2020; Sutton ,Greene y Amini, 2007
Fuente de la imagen: Elaboración Propia.
18. Marco teórico
Actualmente, es imposible desarrollar algún tipo de sistema sin que éste tenga
defectos, detectarlos y “explotarlos” son puntos básicos para las personas que
se dedican de manera legal e ilegal a esta tarea.
El término detección en el área de la seguridad informática lo podemos definir
como el "proceso de hacer consciente al usuario o sistema sobre la presencia de una
amenaza", dejando claro que esto no impide que la amenaza pueda causar o
haya causado algún daño (Pipa, 2008).
Las vulnerabilidades se pueden categorizar en 3 grandes grupos:
1. Fase de diseño,
2. Fase de implementación, y
3. Fase de operación.
Pipa, D. (2008). Intrusion Detection and Prevention: Immunologically Inspired Approaches. University of London. Consultado desde http : / /www. rhul . ac . uk /mathematics/techreports
19. Marco teórico
Existen técnicas o tipos de análisis para
el descubrimiento de vulnerabilidades,
entre ellas el Fuzzing, puesto que es una
herramienta “poderosa”.
Muchas compañías lo utilizan para
probar sus desarrollo.
La popularidad del fuzzing se debe a que
ha ido adoptando cualidades de
diferentes áreas de las ciencias
computacionales como son los
algoritmos genéticos, técnicas de
mutación de datos, etc.
Fuente de la imagen: Adaptada de Xavi. (2019). Fuzzing - Finding bugs using BooFuzz. Consultado desde https://xavibel.com/2019/06/23/fuzzing-how-to-find-bugs-using-boofuzz/
20. Marco teórico
Tabla elaborada con información recopilada durante la investigación y es propia del trabajo presentado..
21. Marco teórico
Python es un lenguaje de programación
dinámico, interpretado, multiplataforma
y multiparadigma.
Sintaxis de fácil aprendizaje.
Gran cantidad de librerías y soporte.
Lenguaje ideal para el desarrollo de
proyectos enfocados en la seguridad de la
información.
Referencia de la figura: Logo de Python, sitio web oficial de Python (www.python.org). Top 10 de lenguajes de programación, de l sitio webde la revista SPECTRUM de la IEEE; https://spectrum.ieee.org/static/interactive-the-top-programming-languages-2020
22. Fuzz Testing (Fuzzing)
Barton Miller y su equipo de trabajo de la Universidad de Wisconsin-Madison
llama así por su descubrimiento casi accidental.
Durante una tormenta eléctrica en el año de 1988; observaron la impresión
de caracteres aleatorios en la línea de comandos al provocarse una
interferencia electromagnética durante la tormenta, lo que provocaba que los
programas ejecutados se bloquearan o comenzarán a trabajar de manera
errónea.
23. Fuzz Testing (Fuzzing)
Es un generador aleatorio
(semialetorio) de caracteres basado
en una “semilla”.
Aplicable en cualquier fase del
desarrollo de un producto.
Su implementación sigue la
metodología top-down, lo que obliga
a que ninguna de las etapas pueda
pasarse por alto.
Fuente de la imagen: Elaboración Propia.
24. Fuzz Testing (Fuzzing)
Para un desarrollador de software el
fuzzing le permite hacer software
mucho más robusto.
Los expertos en ciberseguridad lo
utilizan para saber si existen errores
que pueden ser potenciales y que
deben corregirse.
El hacker el fuzzing le permite
saber qué vulnerabilidades existen y
así explotarlas antes de que éstas
sean solucionadas o corregidas
(Wilson,2018).
Wilson, T. (2018). Evaluation of Fuzzing as a Test Method for an Embedded System(Electrical Engineering y Information Technology, Novia University of Applied Sciences / Yrkeshögskolan Novia).
Fuente de la imagen: Elaboración Propia.
25. Fuzz Testing (Fuzzing)
Clarke (2009) considera como
etapas opcionales dentro de la
metodología
● La Detección del objetivo,
● la Monitoreo y registro, y
● la Determinación de la
explotabilidad.
Clarke, T. (2009). Fuzzing for software vulnerability discovery. University of London. Consultado desde http://www.rhul.ac.uk/mathematics/techreports
Fuente de la imagen: Elaboración Propia.
26. Fuzz Testing (Fuzzing)
El Fuzzer, que es el componente
principal de este tipo de pruebas.
Está conformado por tres etapas
fundamentales que son:
1) Generación de los datos,
2) Transmisión de los datos, y
3) Monitoreo y registro
Fuente de la imagen: Elaboración Propia.
27. Fuzz Testing (Fuzzing)
Respecto a cómo se ha construido
el fuzzer, es como se pueden
clasificar este tipo de pruebas:
● Fuzzer basados en mutación.
● Fuzzer basados en
generación.
En la actualidad existen diferentes
situaciones donde se mezclan las
técnicas permitiendo la inexistencia
de una categorización (Wilson,
2018; Takanen y col., 2018; Clarke,
2009; Sutton y col., 2007).
Wilson, T. (2018). Evaluation of Fuzzing as a Test Method for an Embedded System (Electrical Engineering y Information Technology, Novia University of Applied Sciences / Yrkeshögskolan Novia).
Takanen, A., DeMont, J., Miller, C. & Kettunen, A. (2018). Fuzzing for Software Security Testing and Quality Assureance (A. Takanen, Ed.). Artech House.
Clarke, T. (2009). Fuzzing for software vulnerability discovery. University of London. Consultado desde http://www.rhul.ac.uk/mathematics/techreports
Sutton, M., Greene, A. & Amini, P. (2007). Fuzzing: brute force vulnerability discovery (M. Sutton, Ed.). Addison-Wesley.
Fuente de la imagen: Elaboración Propia.
28. Fuzz Testing (Fuzzing)
Fuzzer basado en mutación, o de
fuerza bruta, también se conocen
como dump fuzzer.
Poco o nulo conocimiento del
objetivo y sus entradas.
Rápidos y efectivos para producir
resultados.
Consumo alto de recursos de
cómputo y algoritmos sin
optimización.
Fuente de la imagen: Elaboración Propia.
29. Fuzz Testing (Fuzzing)
Fuzzer basado en generación, se
conocen como smart fuzzer.
Cierto nivel de conocimiento del
objetivo, permitiendo la creación de
frameworks.
Los datos generados preservan
ciertas estructuras pero con datos
inconsistentes.
Fuente de la imagen: Elaboración Propia.
30. Fuzz Testing (Fuzzing)
Los Random o blind fuzzer (Aleatorios), no requieren conocimientos
previos, permitiéndoles iniciar las pruebas con el mínimo esfuerzo.
No se limitan en el alcance que pueda tener la prueba, lo que permite la
viabilidad para generación de errores sobre los objetivos, o lo contrario nunca
encontrar combinaciones correctas para generación de error.
Desde 2007, salen las primeras implementaciones de los fuzzer evolutivos,
basados en la combinación de los algoritmos genéticos, los de
mutación-generación, etc. para entregar una mejor cobertura (DeMott,
Enbody y Punch, 2007; Hillman, 2013; Zhang, 2008).
DeMott, J. D., Enbody, R. J. & Punch, W. F. (2007). Revolutionizing the Field of Greybox Attack Surface Testing with Evolutionary Fuzzing. Black Hat and DEFCON 2007. Consultado desde https://www.
blackhat.com/presentations/bh-usa-07/DeMott_Enbody_and_Punch/Whitepaper/bh-usa-07-demott_enbody_and_punch-WP.pdf
Hillman, M. (2013). 15 Minute Guide to Fuzzing. Consultado desde https://www.mwrinfosecurity.com/our-thinking/15-minute-guide-to-fuzzing/
Zhang, K. Y. (2008). Evaluating Software Security Aspects through Fuzzing and Genetic Algorithms (Tesis de maestría, Electrical Engineering, Mathematics y Computer Science). Consultado desde
https://repository.tudelft.nl/islandora/object/uuid:8660f6f6-248a-4c50-8127-e8f8b3aab582?collection=education
31. Fuzz Testing (Fuzzing)
Fuzzing locales, trabajan sobre el
objetivo (archivos, variables de
entorno, etc.), siendo los más
utilizados en los sistemas
embebidos.
Fuzzing remotos, trabajan a
distancia, son los más comunes
dentro del área de los servidores o
aplicaciones basadas en web.
Son más lentos que los locales.
Sus usos más comunes son a
través de los protocolos de
comunicación externa o interna a los
sistemas.
32. Fuzz Testing (Fuzzing)
Limitaciones de este tipo de pruebas:
● Errores mucho más complejos debido a checksums,
● Encriptación de información,
● Detección de lógicas deficientes,
● Daños en la memoria principal del sistema,
● No tiene conocimientos de lo que accedió.
Desencadenamiento de otro tipo de errores en los sistemas u objetivos
analizados.
44. Conclusiones
El desarrollo e implementación de dispositivos fabricados en masa con nulos
o muy bajos niveles o protocolos de seguridad, lleva a que sigan en aumento
los índices de delincuencia informática, esto se traduce en la exposición de
información sensible.
Dispositivos utilizados cuentan con muy poca información sobre las pruebas
a las que son sometidos.
Herramientas fuzzing con curvas de aprendizaje, aplicación y utilización muy
amplias.
Poca información (documentación) de muchas herramientas libres, caso
contrario a las heramientas privativas.
45. Conclusiones
Desarrollar una herramienta para fuzzing, es una tarea que lleva mucho
tiempo y requiere de conocimientos en diferentes campos de la computación.
Se recomienda:
● Delimitación de pruebas y el enfoque de las mismas.
● Implementación de firewalls, IDS/IPS, antivirus, etc.
● Inteligencia Artificial.
46. Conclusiones
La legalidad del fuzzing, es un tema muy controvertido, ya que la mayoría
de las leyes que protegen la propiedad intelectual de los sistemas no se
basan en prohibir los exámenes o pruebas injustificados como pueden ser las
que hace el mismo usuario final.
En general las pruebas tipo Black-Box son los que se refieren a los análisis
de entrada/salida, lo que puede servir para argumentar que el usuario está
actuando bajo total legalidad de uso del sistema, ya que no pretende conocer
o comprender lo que protege la ley, que es la lógica de programación del
sistema.
Por otro lado, no se estaría rompiendo ningúno de los puntos que se incluyen
en los documentos de legalidad de los sistema y tampoco de alguna ley
sobre Anti-Ingeniería Inversa.