[en] The present Master's Dissertation (MD) exposes the design and development of fingerAI, an Operating System (OS) fingerprinting tool based on Artificial Intelligence (AI). OS fingerprinting aims to identify the OS of a machine analysing its network traffic. Traditional OS fingerprinting tools use a rule-based approach to perform this task, analysing the traffic characteristics of the target machine and comparing these values against an OS signature database in order to obtain a result. The problem with this approach arises when there is no signature in the database that matches the values of the tests carried out. This situation can occur due to configuration changes, installation of hardening tools or the appearance of new OSs. In this sense, the application of AI techniques to this task has shown to offer good results, while it can solve some of the problems exposed. In this context, the main objective of this project is to create a new OS fingerprinting tool, modular and easily extensible, that bases its operation on the application of AI models. First, a capture module capable of collecting and processing network traffic from a target has been designed and implemented. This module can collect traffic both actively, interacting with the target machine, and passively, capturing the usual network traffic of the target. Secondly, a module has been created that allows us to generate signatures from that traffic and identify their OS applying AI models. The data used to train these models was extracted from the databases of the most relevant active and passive OS fingerprinting tools, nmap and p0f, respectively. Finally, a command line user interface has been designed, allowing the user to easily specify the different scanning parameters and view the results in different formats, allowing its integration into security scripts. For the development of fingerAI, well-established practices within software engineering have been used. Special emphasis has been placed on the use of design principles and patterns with the aim of achieving an easily adaptable and extensible tool, the main objective of the project. To facilitate the organisation of work, Scrum, an agile development framework based on Sprints, has been used. Finally, the developed tool was evaluated. Various tests have been executed considering all the possible scan configurations available in the tool. These tests were performed both in an environment with virtual machines and in different real networks. The obtained results show that our tool is capable of effectively classifying the different OSs considered during development. FingerAI has been published as an open-source project under a GNU GPL v3.0 licence in the following GitHub public repository: https://github.com/rubenpjove/fingerAI.

[es] En el presente Trabajo Fin de Máster (TFM) se expone el diseño y desarrollo de fingerAI, una herramienta de fingerprinting de Sistemas Operativos (SOs) basada en Inteligencia Artificial (IA). El fingerprinting de SOs pretende identificar el SO de una máquina analizando su tráfico de red. Las herramientas de fingerprinting de SOs tradicionales utilizan una aproximación basada en reglas para realizar esta tarea, analizando las características del tráfico de la máquina objetivo y comparando estos valores contra una base de datos de firmas de SOs para así obtener un resultado. La problemática de esta aproximación surge cuando no existe una firma en la base de datos que encaje con los valores de las pruebas realizadas. Esta situación puede ocurrir por cambios de configuración, instalación de herramientas de hardening o aparición de nuevos SOs. En este sentido, la aplicación de técnicas de IA a esta tarea ha demostrado ofrecer buenos resultados, a la vez que puede solucionar algunos de los problemas expuestos. En este contexto, el principal objetivo del presente proyecto es crear una nueva herramienta de fingerprinting de SOs, modulable y fácilmente extensible, que base su funcionamiento en la aplicación de modelos de IA. En primer lugar, se ha diseñado e implementado un módulo de captura que es capaz de recolectar y procesar tráfico de red de un objetivo. Este módulo es capaz de capturar tráfico tanto de forma activa, interaccionando con la máquina objetivo, como pasiva, capturando el tráfico de red habitual del objetivo. En segundo lugar, se ha creado un módulo que permite generar firmas a partir de ese tráfico e identificar sus SOs a partir de modelos de IA. Los datos de entrenamiento utilizados para crear estos modelos se han extraído de las bases de datos de las herramientas de fingerprinting activo y pasivo de SOs más relevantes, nmap y p0f, respectivamente. Por último, se ha diseñado una interfaz de usuario por línea de comandos que permite al usuario especificar fácilmente los distintos parámetros del escaneo y visualizar los resultados en diferentes formatos, facilitando su integración en scripts de seguridad. Para el desarrollo de fingerAI se han empleado prácticas bien asentadas dentro de la ingeniería del software. Se ha hecho especial énfasis en el uso de principios y patrones de diseño para conseguir una herramienta fácilmente adaptable y extensible, objetivo principal del proyecto. Para facilitar la organización del trabajo se ha utilizado Scrum, marco de desarrollo ágil basado en Sprints. Finalmente, se ha realizado una evaluación de la herramienta desarrollada. Se han ejecutado varias pruebas considerando todas las posibles configuraciones de escaneo disponibles en la herramienta. Estas pruebas se han llevado a cabo tanto en un entorno con máquinas virtuales como en diferentes redes reales. Los resultados obtenidos muestran que nuestra herramienta es capaz de clasificar de forma eficaz los diferentes SOs considerados durante el desarrollo. FingerAI se ha publicado en forma de proyecto open-source bajo licencia GNU GPL v3.0 en el siguiente repositorio público de GitHub: https://github.com/rubenpjove/fingerAI.