{"id":19197463,"url":"https://github.com/jiep/adversarial-machine-learning","last_synced_at":"2025-07-23T00:31:05.037Z","repository":{"id":58151271,"uuid":"427397179","full_name":"jiep/adversarial-machine-learning","owner":"jiep","description":"Taller de Adversarial Machine Learning","archived":false,"fork":false,"pushed_at":"2023-11-27T08:32:37.000Z","size":24231,"stargazers_count":10,"open_issues_count":1,"forks_count":0,"subscribers_count":3,"default_branch":"main","last_synced_at":"2025-05-09T00:47:34.535Z","etag":null,"topics":["adversarial-attacks","adversarial-examples","adversarial-machine-learning","adversarial-robustness-toolbox","counterfit","evasion-attacks","extraction-attacks","inversion-attacks","poisoning-attacks"],"latest_commit_sha":null,"homepage":"","language":"Jupyter Notebook","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/jiep.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2021-11-12T14:56:27.000Z","updated_at":"2024-12-19T18:21:18.000Z","dependencies_parsed_at":"2025-04-20T10:52:08.002Z","dependency_job_id":null,"html_url":"https://github.com/jiep/adversarial-machine-learning","commit_stats":null,"previous_names":[],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/jiep/adversarial-machine-learning","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jiep%2Fadversarial-machine-learning","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jiep%2Fadversarial-machine-learning/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jiep%2Fadversarial-machine-learning/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jiep%2Fadversarial-machine-learning/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jiep","download_url":"https://codeload.github.com/jiep/adversarial-machine-learning/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jiep%2Fadversarial-machine-learning/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":266596689,"owners_count":23953891,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-07-22T02:00:09.085Z","response_time":66,"last_error":null,"robots_txt_status":null,"robots_txt_updated_at":null,"robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["adversarial-attacks","adversarial-examples","adversarial-machine-learning","adversarial-robustness-toolbox","counterfit","evasion-attacks","extraction-attacks","inversion-attacks","poisoning-attacks"],"created_at":"2024-11-09T12:16:53.223Z","updated_at":"2025-07-23T00:31:04.986Z","avatar_url":"https://github.com/jiep.png","language":"Jupyter Notebook","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Introducción al Adversarial Machine Learning\n\n## ¿Qué es el Adversarial Machine Learning?\n\nEl [Adversarial Machine Learning](https://en.wikipedia.org/wiki/Adversarial_machine_learning) es la rama del machine learning que trata de averiguar los ataques que puede sufrir un modelo en la presencia de un adversario malicioso y cómo protegerse de ellos.\n\n### Taxonomía de ataques\n\nEl Adversarial Machine Learning establece que existen 4 tipos de ataque que pueden sufrir los modelos de ML.\n\n  \u003cp align=\"center\"\u003e\n    \u003cimg alt=\"Taxonomía\" src=\"./img/attacks/taxonomia.png\" data-canonical-src=\"./img/attacks/taxonomia.png\" width=\"50%\" /\u003e\n  \u003c/p\u003e\n\n* **Extracción (o robo de modelos)**: permiten a un adversario robar los parámetros de un modelo de machine learning.\n  \u003cp align=\"center\"\u003e\n    \u003cimg alt=\"Ataques de extracción\" src=\"./img/attacks/extraccion.png\" data-canonical-src=\"./img/attacks/extraccion.png\" width=\"50%\" /\u003e\n  \u003c/p\u003e\n  \n* **Inversión**: tienen como objetivo invertir el flujo de información de un modelo de machine learning. Permiten a un adversario tener un conocimiento del modelo que no pretendía ser compartido de forma explícita.\n  \u003cp align=\"center\"\u003e\n    \u003cimg alt=\"Ataques de inversión\" src=\"./img/attacks/inversion.png\" data-canonical-src=\"./img/attacks/inversion.png\" width=\"50%\" /\u003e\n  \u003c/p\u003e\n\n* **Envenenamiento**: buscan corromper el conjunto de entrenamiento haciendo que un modelo de machine learning reduzca su precisión. Pueden añadir puertas traseras en el modelo.\n  \u003cp align=\"center\"\u003e\n    \u003cimg alt=\"Ataques de envenenamiento\" src=\"./img/attacks/envenenamiento.png\" data-canonical-src=\"./img/attacks/envenenamiento.png\" width=\"50%\" /\u003e\n  \u003c/p\u003e\n  \n* **Evasión**: un adversario inserta una pequeña perturbación (en forma de ruido) en la entrada de un modelo de machine learning para que clasifique de forma incorrecta (ejemplo adversario).\n  \u003cp align=\"center\"\u003e\n    \u003cimg alt=\"Ataques de evasión\" src=\"./img/attacks/evasion.png\" data-canonical-src=\"./img/attacks/evasion.png\" width=\"50%\" /\u003e\n  \u003c/p\u003e\n\n## Herramientas empleadas\n\n* [Adversarial Robustness Toolkit (ART)](https://adversarial-robustness-toolbox.readthedocs.io/en/latest): es una librería opensource de Adversarial Machine Learning que permite comprobar la robustez de los modelos de machine learning. Está desarrollada en Python e implementa ataques y defensas de extracción, inversión, envenenamiento y evasión. ART soporta los frameworks más populares: Tensorflow, Keras, PyTorch, MxNet, ScikitLearn, entre muchos otros). Además, no está limitada al uso de modelos que emplean imágenes como entrada, sino que soporta otros tipos de datos como audio, vídeo, datos tabulares, etc.\n\n  \u003cp align=\"center\"\u003e\n    \u003cimg alt=\"Logo de ART\" src=\"./img/tools/art_logo.png\" data-canonical-src=\"./img/tools/art_logo.png\" width=\"30%\" /\u003e\n  \u003c/p\u003e\n  \n* [Counterfit](https://github.com/Azure/counterfit) es una CLI escrita en Python y desarrollada por Microsoft. Desarrollada para auditorías de seguridad sobre modelos de ML. Implementa algoritmos de evasión de caja negra. Se basa en los ataques de las herramientas ART y [TextAttack](https://github.com/QData/TextAttack).\n\n  \u003cp align=\"center\"\u003e\n    \u003cimg alt=\"Logo de Counterfit\" src=\"./img/tools/counterfit_logo.png\" data-canonical-src=\"./img/tools/counterfit_logo.png\" width=\"40%\" /\u003e\n  \u003c/p\u003e\n\n## Notebooks\n\n\u003e Todos los notebooks se pueden ejecutar más rápidamente empleando una GPU. \n\u003e Se recomienda el uso de [Colab](https://colab.research.google.com), que permite emplear GPUs de forma gratuita y no tener que instalar nada en el equipo.\n\u003e\n\u003e \u003cp align=\"center\"\u003e\n\u003e    \u003cimg alt=\"Logo de Google Colab\" src=\"./img/colab/colab.jpg\" data-canonical-src=\"./img/colab/colab.jpg\" width=\"40%\" /\u003e\n\u003e \u003c/p\u003e\n\nLa carpeta `notebooks` contiene 5 notebooks que cubren ataques de extracción, inversión, envenenamiento y evasión en ART.\n\n* `art_install.ipynb`: contiene la instalación de ART y verificar que todo funciona correctamente.\n* `evasion.ipynb`: contiene cómo realizar ejemplos adversarios (no dirigidos y no dirigidos) y cómo proteger los modelos frente a ellos.\n* `inversion.ipynb`: contiene un ataque de inversión, que permite inferir datos de entrenamiento.\n* `poisoning.ipynb`: contiene cómo generar una puerta trasera en un modelo y cómo defenderse de ella.\n* `extraction.ipynb`: contiene cómo robar un modelo y aplicar defensas para minimizar el robo.\n\nEl orden en el que se ejecuten los notebooks es irrelevante, pero es recomendable comenzar por `art_install`.\n\nEn el mismo directorio, se encuentra el fichero `counterfit.md`, que muestra cómo instalar `counterfit` en una máquina local y el uso básico de la CLI.  \n\n## Importar notebooks en Colab\n\n1. Entrar en [Google Colab](https://colab.research.google.com), iniciando sesión con una cuenta de `Google`.\n\n2. Importar todos los notebooks de este repositorio usando la pestaña `GitHub`, copiando la url de este repositorio.\n  \u003cp align=\"center\"\u003e\n    \u003cimg alt=\"Importar notebooks\" src=\"./img/colab/importar-repos.png\" data-canonical-src=\"./img/colab/importar-repos.png\" width=\"75%\" /\u003e\n  \u003c/p\u003e\n\n3. Cambiar el entorno de ejecución a `GPU`. Se realiza desde el menú `Entorno de ejecución` \u003e `Cambiar entorno de ejecución`. Esto acelera la ejecución de los notebooks.\n  \u003cp align=\"center\"\u003e\n    \u003cimg alt=\"Cambiar entorno de ejecución a GPU\" src=\"./img/colab/cambiar-entorno-ejecucion.png\" data-canonical-src=\"./img/colab/cambiar-entorno-ejecucion.png\" width=\"40%\" /\u003e\n  \u003c/p\u003e\n\n## Crédito\n\nLos notebooks de inversión y envenenamiento se basan en los [ejemplos](https://github.com/Trusted-AI/adversarial-robustness-toolbox/tree/main/examples) y [notebooks](https://github.com/Trusted-AI/adversarial-robustness-toolbox/tree/main/notebooks) proporcionados por ART. \n\n# Ediciones anteriores\n\n* [Taller de Adversarial Machine Learning](./presentations/CCN-CERT_2021_Introducción_al_Adversarial_Machine_Learning.pdf)  para las [XV Jornadas STIC CCN-CERT](https://www.ccn-cert.cni.es/xvjornadas).\n\n  \u003cp align=\"center\"\u003e\n    \u003cimg alt=\"XV Jornadas STIC CCN-CERT\" src=\"./img/cons/xv-jornadas-ccn-cert.png\" data-canonical-src=\"./img/cons/xv-jornadas-ccn-cert.png\" width=\"100%\" /\u003e\n  \u003c/p\u003e\n\n* [Charla de Adversarial Machine Learning](./presentations/DragonJAR_Security_Conference_2022-Introducción_al_Adversarial_Machine_Learning.pdf) para [DragonJAR 2022](https://www.dragonjarcon.org).\n\n  \u003cp align=\"center\"\u003e\n    \u003cimg alt=\"DragonJAR 2022\" src=\"./img/cons/dragonjar-2022.png\" data-canonical-src=\"./img/cons/dragonjar-2022.png\" width=\"100%\" /\u003e\n  \u003c/p\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjiep%2Fadversarial-machine-learning","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjiep%2Fadversarial-machine-learning","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjiep%2Fadversarial-machine-learning/lists"}