From 15586459fdff9c1f5233b15c793797b523fcc4c9 Mon Sep 17 00:00:00 2001 From: Abderrahmane Smimite Date: Wed, 1 May 2024 21:24:50 +0200 Subject: [PATCH] Add ANSSI recommendations for genAI security --- README.md | 4 +- ...si-genai-security-recommendations-1.0.yaml | 567 ++++++++++++++++++ ...si-genai-security-recommendations-1.0.xlsx | Bin 0 -> 19941 bytes 3 files changed, 569 insertions(+), 2 deletions(-) create mode 100644 backend/library/libraries/anssi-genai-security-recommendations-1.0.yaml create mode 100644 tools/anssi/anssi-genai-security-recommendations-1.0.xlsx diff --git a/README.md b/README.md index 644012744c..6315a34022 100644 --- a/README.md +++ b/README.md @@ -82,7 +82,7 @@ Check out the online documentation on https://intuitem.gitbook.io/ciso-assistant 10. Essential Eight 🇦🇺 11. NYDFS 500 with 2023-11 amendments 🇺🇸 12. DORA 🇪🇺 -13. NIST AI Risk Management Framework 🇺🇸 +13. NIST AI Risk Management Framework 🇺🇸🤖 14. NIST SP 800-53 rev5 🇺🇸 15. France LPM/OIV rules 🇫🇷 16. CCB CyberFundamentals Framework 🇧🇪 @@ -101,6 +101,7 @@ Check out the online documentation on https://intuitem.gitbook.io/ciso-assistant 29. CSA CCM (Cloud Controls Matrix)\* 30. FADP (Federal Act on Data Protection) 🇨🇭 31. NIST SP 800-171 rev2 🇺🇸 +32. ANSSI : recommandations de sécurité pour un système d'IA générative 🇫🇷🤖
@@ -113,7 +114,6 @@ Checkout the [library](/backend/library/libraries/) and [tools](/tools/) for the ### Coming soon -- ANSSI: RECOMMANDATIONS DE SÉCURITÉ POUR UN SYSTÈME D'IA GÉNÉRATIVE - FBI CJIS - CCPA - AI Act diff --git a/backend/library/libraries/anssi-genai-security-recommendations-1.0.yaml b/backend/library/libraries/anssi-genai-security-recommendations-1.0.yaml new file mode 100644 index 0000000000..ea13edc70e --- /dev/null +++ b/backend/library/libraries/anssi-genai-security-recommendations-1.0.yaml @@ -0,0 +1,567 @@ +urn: urn:intuitem:risk:library:anssi-genai-security-recommendations-1.0 +locale: fr +ref_id: anssi-genai-security-recommendations-1.0 +name: "ANSSI: RECOMMANDATIONS DE S\xC9CURIT\xC9 POUR UN SYST\xC8ME D'IA G\xC9N\xC9\ + RATIVE" +description: "Ce document a pour objet de donner des recommandations de s\xE9curit\xE9\ + \ sur la mise en oeuvre\nde solutions d\u2019IA g\xE9n\xE9rative reposant sur des\ + \ LLM au sein d\u2019entit\xE9s publiques et priv\xE9es." +copyright: ANSSI Etalab +version: 1 +provider: ANSSI +packager: intuitem +objects: + framework: + urn: urn:intuitem:risk:framework:anssi-genai-security-recommendations-1.0 + ref_id: anssi-genai-security-recommendations-1.0 + name: "ANSSI: RECOMMANDATIONS DE S\xC9CURIT\xC9 POUR UN SYST\xC8ME D'IA G\xC9\ + N\xC9RATIVE" + description: "Ce document a pour objet de donner des recommandations de s\xE9\ + curit\xE9 sur la mise en oeuvre\nde solutions d\u2019IA g\xE9n\xE9rative reposant\ + \ sur des LLM au sein d\u2019entit\xE9s publiques et priv\xE9es." + requirement_nodes: + - urn: urn:intuitem:risk:req_node:anssi-genai-security-recommendations-1.0:3.1 + assessable: false + depth: 1 + ref_id: '3.1' + name: "Cycle de vie d'un syst\xE8me d'IA g\xE9n\xE9rative" + - urn: urn:intuitem:risk:req_node:anssi-genai-security-recommendations-1.0:r1 + assessable: true + depth: 2 + parent_urn: urn:intuitem:risk:req_node:anssi-genai-security-recommendations-1.0:3.1 + ref_id: R1 + name: "Int\xE9grer la s\xE9curit\xE9 dans toutes les phases du cycle de vie\ + \ d\u2019un syst\xE8me d\u2019IA" + description: "Des mesures de s\xE9curit\xE9 doivent \xEAtre identifi\xE9es et\ + \ appliqu\xE9es dans chacune des 3 phases du cycle de vie d'un syst\xE8me\ + \ d'IA : entra\xEEnement, d\xE9ploiement et production. Ces mesures d\xE9\ + pendent fortement du sc\xE9nario de partage de responsabilit\xE9s retenu et\ + \ de la sous-traitance associ\xE9e. Elles doivent \xE9galement tenir compte\ + \ des interactions avec d'autres applications ou composants internes ou externes\ + \ au SI.\nIl est possible de se r\xE9f\xE9rer au guide d'hygi\xE8ne de l'ANSSI\ + \ pour disposer d'un socle de base de s\xE9curit\xE9 \xE0 appliquer." + - urn: urn:intuitem:risk:req_node:anssi-genai-security-recommendations-1.0:4 + assessable: false + depth: 1 + ref_id: '4' + name: Analyse de risque + - urn: urn:intuitem:risk:req_node:anssi-genai-security-recommendations-1.0:r2 + assessable: true + depth: 2 + parent_urn: urn:intuitem:risk:req_node:anssi-genai-security-recommendations-1.0:4 + ref_id: R2 + name: "Mener une analyse de risque sur les syst\xE8mes d\u2019IA avant la phase\ + \ d\u2019entra\xEEnement" + description: "L\u2019analyse de risque d\u2019un syst\xE8me d\u2019IA doit int\xE9\ + grer les probl\xE9matiques suivantes :\n- cartographier l\u2019ensemble des\ + \ \xE9l\xE9ments en lien avec le mod\xE8le d\u2019IA : biblioth\xE8ques tierces,\ + \ sources de donn\xE9es, applications interconnect\xE9es, etc. ;\n- identifier\ + \ les sous-parties du syst\xE8me d\u2019IA qui traiteront les donn\xE9es de\ + \ l\u2019organisation, en particulier celles contenues dans les requ\xEAtes\ + \ des utilisateurs ;\n- prendre en compte le sc\xE9nario de partage de responsabilit\xE9\ + s et la question de la sous-traitance pour chacune des phases ;\n- identifier\ + \ les impacts directs et indirects en cas de r\xE9ponses erron\xE9es ou malveillantes\ + \ du mod\xE8le d\u2019IA aux utilisateurs ;\n- consid\xE9rer la protection\ + \ des donn\xE9es d\u2019entra\xEEnement du mod\xE8le d\u2019IA." + - urn: urn:intuitem:risk:req_node:anssi-genai-security-recommendations-1.0:5.1 + assessable: false + depth: 1 + ref_id: '5.1' + name: "Recommandations g\xE9n\xE9rales" + - urn: urn:intuitem:risk:req_node:anssi-genai-security-recommendations-1.0:r3 + assessable: true + depth: 2 + parent_urn: urn:intuitem:risk:req_node:anssi-genai-security-recommendations-1.0:5.1 + ref_id: R3 + name: "\xC9valuer le niveau de confiance des biblioth\xE8ques et modules externes\ + \ utilis\xE9s dans le syst\xE8me d\u2019IA" + description: "Il est recommand\xE9 de cartographier l\u2019ensemble des biblioth\xE8\ + ques et modules externes utilis\xE9s dans le cadre du projet et d\u2019\xE9\ + valuer leur niveau de confiance." + - urn: urn:intuitem:risk:req_node:anssi-genai-security-recommendations-1.0:r4 + assessable: true + depth: 2 + parent_urn: urn:intuitem:risk:req_node:anssi-genai-security-recommendations-1.0:5.1 + ref_id: R4 + name: "\xC9valuer le niveau de confiance des sources de donn\xE9es externes\ + \ utilis\xE9es dans le syst\xE8me d\u2019IA" + description: "Il est recommand\xE9 de cartographier l\u2019ensemble des sources\ + \ de donn\xE9es externes utilis\xE9es dans le cadre du projet et d\u2019\xE9\ + valuer leur niveau de confiance." + - urn: urn:intuitem:risk:req_node:anssi-genai-security-recommendations-1.0:r5 + assessable: true + depth: 2 + parent_urn: urn:intuitem:risk:req_node:anssi-genai-security-recommendations-1.0:5.1 + ref_id: R5 + name: "Appliquer les principes de DevSecOps sur l\u2019ensemble des phases du\ + \ projet" + description: "Il est recommand\xE9 d\u2019appliquer les bonnes pratiques de\ + \ d\xE9veloppement s\xE9curis\xE9 sur l\u2019ensemble des phases du projet,\ + \ par exemple :\n- d\xE9ployer et s\xE9curiser des cha\xEEnes d\u2019int\xE9\ + gration et de d\xE9ploiement en continu (CI/CD) en appliquant le principe\ + \ de moindre privil\xE8ge pour l\u2019acc\xE8s aux outils de ces cha\xEEnes\ + \ CI/CD ;\n- mettre en oeuvre une gestion s\xE9curis\xE9e des secrets utilis\xE9\ + s dans toutes les phases du projet ;\n- pr\xE9voir des tests de s\xE9curit\xE9\ + \ automatis\xE9s sur le code source (analyse statique de code) et lors de\ + \ l\u2019ex\xE9cution de ce code source (analyse dynamique de code) ;\n- prot\xE9\ + ger en int\xE9grit\xE9 le code source et s\xE9curiser l\u2019acc\xE8s \xE0\ + \ celui-ci (authentification multifacteur, signature du code, droits d\u2019\ + acc\xE8s, etc.) ;\n- recourir \xE0 des langages de d\xE9veloppement s\xE9\ + curis\xE9s (scripts de fine tuning, d\xE9veloppement du mod\xE8le, maintenance,\ + \ d\xE9ploiement, etc.)." + - urn: urn:intuitem:risk:req_node:anssi-genai-security-recommendations-1.0:r6 + assessable: true + depth: 2 + parent_urn: urn:intuitem:risk:req_node:anssi-genai-security-recommendations-1.0:5.1 + ref_id: R6 + name: "Utiliser des formats de mod\xE8les d\u2019IA s\xE9curis\xE9s" + description: "Il est recommand\xE9 d\u2019utiliser des formats \xE0 l\u2019\xE9\ + tat de l\u2019art du point de vue de la s\xE9curit\xE9, comme le format safetensor\ + \ par exemple. Certains formats peu s\xE9curis\xE9s, comme le format pickle,\ + \ sont \xE0 proscrire." + - urn: urn:intuitem:risk:req_node:anssi-genai-security-recommendations-1.0:r7 + assessable: true + depth: 2 + parent_urn: urn:intuitem:risk:req_node:anssi-genai-security-recommendations-1.0:5.1 + ref_id: R7 + name: "Prendre en compte les enjeux de confidentialit\xE9 des donn\xE9es d\xE8\ + s la conception du syst\xE8me d\u2019IA" + description: "L\u2019\xE9tude du projet doit cartographier l\u2019ensemble des\ + \ jeux de donn\xE9es utilis\xE9s \xE0 chaque phase du syst\xE8me d\u2019IA\ + \ : entra\xEEnement (jeux de donn\xE9es d\u2019entra\xEEnement), d\xE9ploiement\ + \ (jeux de tests) et production (donn\xE9es additionnelles, base de donn\xE9\ + es vectorielle, etc.).\nCette \xE9tude doit inclure les donn\xE9es d\u2019\ + usage du syst\xE8me d\u2019IA en production, \xE0 savoir les requ\xEAtes des\ + \ utilisateurs ainsi que les r\xE9ponses apport\xE9es par le mod\xE8le d\u2019\ + IA. L\u2019analyse peut \xE9galement traiter le cas de la protection en confidentialit\xE9\ + \ des param\xE8tres du mod\xE8le lui-m\xEAme, par exemple pour des mod\xE8\ + les propri\xE9taires." + - urn: urn:intuitem:risk:req_node:anssi-genai-security-recommendations-1.0:r8 + assessable: true + depth: 2 + parent_urn: urn:intuitem:risk:req_node:anssi-genai-security-recommendations-1.0:5.1 + ref_id: R8 + name: "Prendre en compte la probl\xE9matique de besoin d\u2019en conna\xEEtre\ + \ d\xE8s la conception du syst\xE8me d\u2019IA" + description: "Il est important de d\xE9finir en amont du projet les options\ + \ structurantes du mod\xE8le pour g\xE9rer le besoin d\u2019en conna\xEEtre\ + \ :\n- le choix des donn\xE9es utilis\xE9es pour l\u2019entra\xEEnement (sans\ + \ la possibilit\xE9 de g\xE9rer des droits d\u2019acc\xE8s) et des donn\xE9\ + es additionnelles en production (avec la possibilit\xE9 de g\xE9rer des r\xF4\ + les et des droits d\u2019acc\xE8s) ;\n- la strat\xE9gie d\u2019apprentissage\ + \ du mod\xE8le, c\u2019est-\xE0-dire \xE0 quel moment est-ce que l\u2019on\ + \ r\xE9-entra\xEEne le mod\xE8le et sur la base de quelles donn\xE9es (donn\xE9\ + es additionnelles m\xE9tier, requ\xEAtes des utilisateurs, r\xE9ponses du\ + \ mod\xE8le, etc.)." + - urn: urn:intuitem:risk:req_node:anssi-genai-security-recommendations-1.0:r9 + assessable: true + depth: 2 + parent_urn: urn:intuitem:risk:req_node:anssi-genai-security-recommendations-1.0:5.1 + ref_id: R9 + name: "Proscrire l\u2019usage automatis\xE9 de syst\xE8mes d\u2019IA pour des\ + \ actions critiques sur le SI" + description: "Un syst\xE8me d\u2019IA doit \xEAtre configur\xE9 de mani\xE8\ + re \xE0 ne pas \xEAtre en mesure d\u2019ex\xE9cuter de mani\xE8re automatis\xE9\ + e des actions critiques sur le SI.\nCes actions peuvent \xEAtre des actions\ + \ critiques d\u2019un point de vue m\xE9tier (transactions bancaires, production\ + \ de contenu public, impact direct sur des personnes, etc.) ou bien des actions\ + \ critiques sur l\u2019infrastructure du SI (reconfiguration de composants\ + \ r\xE9seaux, cr\xE9ations d\u2019utilisateurs \xE0 privil\xE8ge, d\xE9ploiement\ + \ de serveurs virtuels, etc.)." + - urn: urn:intuitem:risk:req_node:anssi-genai-security-recommendations-1.0:r10 + assessable: true + depth: 2 + parent_urn: urn:intuitem:risk:req_node:anssi-genai-security-recommendations-1.0:5.1 + ref_id: R10 + name: "Ma\xEEtriser et s\xE9curiser les acc\xE8s \xE0 privil\xE8ges des d\xE9\ + veloppeurs et des administrateurs sur le syst\xE8me d\u2019IA" + description: "L\u2019ensemble des op\xE9rations \xE0 privil\xE8ges sur le syst\xE8\ + me d\u2019IA doit respecter les bonnes pratiques d\u2019administration s\xE9\ + curis\xE9e, notamment :\n- les op\xE9rations \xE0 privil\xE8ge doivent \xEA\ + tre d\xE9finies et leur d\xE9clenchement doit \xEAtre valid\xE9 : r\xE9-entra\xEE\ + nement, modification des jeux de donn\xE9es, nouvelle interconnexion avec\ + \ une application, changement d\u2019h\xE9bergement, etc. ;\n- les op\xE9\ + rations \xE0 privil\xE8ge doivent \xEAtre r\xE9alis\xE9es avec des comptes\ + \ d\xE9di\xE9s et depuis un poste d\u2019administration d\xE9di\xE9 \xE0 cet\ + \ usage ;\n- le principe de moindre privil\xE8ge doit \xEAtre appliqu\xE9\ + \ et l\u2019usage de jetons d\u2019authentification (token) temporaires doit\ + \ \xEAtre privil\xE9gi\xE9 ;\n- l\u2019environnement de d\xE9veloppement doit\ + \ \xEAtre ma\xEEtris\xE9 et administr\xE9 au m\xEAme niveau de s\xE9curit\xE9\ + \ que l\u2019environnement de production." + - urn: urn:intuitem:risk:req_node:anssi-genai-security-recommendations-1.0:r11 + assessable: true + depth: 2 + parent_urn: urn:intuitem:risk:req_node:anssi-genai-security-recommendations-1.0:5.1 + ref_id: R11 + name: "H\xE9berger le syst\xE8me d\u2019IA dans des environnements de confiance\ + \ coh\xE9rents avec les besoins de s\xE9curit\xE9" + description: "L\u2019h\xE9bergement du syst\xE8me d\u2019IA lors des 3 phases\ + \ du cycle de vie doit \xEAtre coh\xE9rente avec les besoins de s\xE9curit\xE9\ + \ du projet, et notamment les besoins en confidentialit\xE9 et en int\xE9\ + grit\xE9. En particulier, la s\xE9curisation des donn\xE9es d\u2019entra\xEE\ + nement du mod\xE8le (au repos, en transit, lors d\u2019un traitement) ne doit\ + \ pas \xEAtre n\xE9glig\xE9e." + - urn: urn:intuitem:risk:req_node:anssi-genai-security-recommendations-1.0:r12 + assessable: true + depth: 2 + parent_urn: urn:intuitem:risk:req_node:anssi-genai-security-recommendations-1.0:5.1 + ref_id: R12 + name: "Cloisonner chaque phase du syst\xE8me d\u2019IA dans un environnement\ + \ d\xE9di\xE9" + description: "Il est recommand\xE9 de cloisonner les 3 environnements techniques\ + \ correspondant \xE0 chacune des phases du cycle de vie du syst\xE8me d\u2019\ + IA. Ce cloisonnement peut porter sur :\n- un cloisonnement r\xE9seau : chaque\ + \ environnement est int\xE9gr\xE9 dans un r\xE9seau physiquement ou logiquement\ + \ d\xE9di\xE9 ;\n- un cloisonnement syst\xE8me : chaque environnement dispose\ + \ de ses propres serveurs physiques ou hyperviseurs d\xE9di\xE9s ;\n- un cloisonnement\ + \ du stockage : chaque environnement dispose de son propre mat\xE9riel de\ + \ stockage ou de disques d\xE9di\xE9s. Au minimum, un cloisonnement logique\ + \ est appliqu\xE9 ;\n- un cloisonnement des comptes et des secrets : chaque\ + \ environnement dispose de ses propres comptes utilisateurs et administrateurs\ + \ et de secrets distincts." + - urn: urn:intuitem:risk:req_node:anssi-genai-security-recommendations-1.0:r13 + assessable: true + depth: 2 + parent_urn: urn:intuitem:risk:req_node:anssi-genai-security-recommendations-1.0:5.1 + ref_id: R13 + name: "Impl\xE9menter une passerelle Internet s\xE9curis\xE9e dans le cas d\u2019\ + un syst\xE8me d\u2019IA expos\xE9 sur Internet" + description: "Dans le cas d\u2019un syst\xE8me d\u2019IA expos\xE9 sur Internet,\ + \ il est recommand\xE9 de suivre les bonnes pratiques de cloisonnement du\ + \ guide de l\u2019ANSSI \xE0 ce sujet, notamment :\n- d\xE9dier une fonction\ + \ de reverse-proxy avant l\u2019acc\xE8s au service web du syst\xE8me d\u2019\ + IA ;\n- mettre en place deux zones logiques pour le filtrage r\xE9seau \xE0\ + \ l\u2019aide de pare-feux : un filtrage externe en frontal d\u2019Internet\ + \ et un filtrage interne avant l\u2019acc\xE8s au syst\xE8me d\u2019IA ;\n\ + - ne pas exposer un annuaire interne de l\u2019entit\xE9 pour l\u2019authentification\ + \ sur le syst\xE8me d\u2019IA ;\n- \xE9viter de mutualiser sur un m\xEAme\ + \ hyperviseur des fonctions de s\xE9curit\xE9 distinctes de la passerelle\ + \ Internet s\xE9curis\xE9e (pare-feux, reverse-proxy, serveur de journalisation,\ + \ etc.)." + - urn: urn:intuitem:risk:req_node:anssi-genai-security-recommendations-1.0:r14 + assessable: true + depth: 2 + parent_urn: urn:intuitem:risk:req_node:anssi-genai-security-recommendations-1.0:5.1 + ref_id: R14 + name: "Privil\xE9gier un h\xE9bergement SecNumCloud dans le cas d\u2019un d\xE9\ + ploiement d\u2019un syst\xE8me d\u2019IA dans un Cloud public" + description: "Si l\u2019entit\xE9 fait le choix d\u2019utiliser un h\xE9bergement\ + \ dans un Cloud public, il est recommand\xE9 de privil\xE9gier une offre de\ + \ confiance SecNumCloud dans les cas suivants :\n- les donn\xE9es trait\xE9\ + es par le syst\xE8me d\u2019IA sont consid\xE9r\xE9es comme sensibles ;\n\ + - l\u2019impact du syst\xE8me d\u2019IA sur le m\xE9tier est consid\xE9r\xE9\ + \ comme critique ;\n- les utilisateurs du syst\xE8me d\u2019IA ne sont pas\ + \ consid\xE9r\xE9s comme de confiance." + - urn: urn:intuitem:risk:req_node:anssi-genai-security-recommendations-1.0:r15 + assessable: true + depth: 2 + parent_urn: urn:intuitem:risk:req_node:anssi-genai-security-recommendations-1.0:5.1 + ref_id: R15 + name: "Pr\xE9voir un mode d\xE9grad\xE9 des services m\xE9tier sans syst\xE8\ + me d\u2019IA" + description: "Afin de pr\xE9venir des dysfonctionnements ou des incoh\xE9rences\ + \ dans les r\xE9ponses apport\xE9es par le mod\xE8le d\u2019IA, il est recommand\xE9\ + \ de pr\xE9voir au minimum une proc\xE9dure de contournement du syst\xE8me\ + \ d\u2019IA pour les utilisateurs, afin de r\xE9pondre aux besoins m\xE9tier." + - urn: urn:intuitem:risk:req_node:anssi-genai-security-recommendations-1.0:r16 + assessable: true + depth: 2 + parent_urn: urn:intuitem:risk:req_node:anssi-genai-security-recommendations-1.0:5.1 + ref_id: R16 + name: "D\xE9dier les composants GPU au syst\xE8me d\u2019IA" + description: "Il est recommand\xE9 de d\xE9dier les composants physiques GPU\ + \ aux traitements r\xE9alis\xE9s par le syst\xE8me d\u2019IA. Dans le cas\ + \ de la virtualisation, il est recommand\xE9 que les hyperviseurs ayant acc\xE8\ + s aux cartes GPU soient d\xE9di\xE9s au syst\xE8me d\u2019IA, ou bien au minimum\ + \ qu\u2019il y ait une fonction de filtrage mat\xE9riel (ex. : IOMMU) permettant\ + \ de restreindre les acc\xE8s des machines virtuelles \xE0 la m\xE9moire de\ + \ ces cartes GPU." + - urn: urn:intuitem:risk:req_node:anssi-genai-security-recommendations-1.0:r17 + assessable: true + depth: 2 + parent_urn: urn:intuitem:risk:req_node:anssi-genai-security-recommendations-1.0:5.1 + ref_id: R17 + name: "Prendre en compte les attaques par canaux auxiliaires sur le syst\xE8\ + me d\u2019IA" + description: "Il est recommand\xE9 de s\u2019assurer que le syst\xE8me d\u2019\ + IA n\u2019est pas vuln\xE9rable \xE0 des attaques par canaux auxiliaires (temporels,\ + \ consommation, etc.) qui pourraient par exemple permettre \xE0 un attaquant\ + \ de reconstruire une r\xE9ponse apport\xE9e par un mod\xE8le d\u2019IA." + - urn: urn:intuitem:risk:req_node:anssi-genai-security-recommendations-1.0:5.2 + assessable: false + depth: 1 + ref_id: '5.2' + name: "Recommandations pour la phase d\u2019entra\xEEnement" + - urn: urn:intuitem:risk:req_node:anssi-genai-security-recommendations-1.0:r18 + assessable: true + depth: 2 + parent_urn: urn:intuitem:risk:req_node:anssi-genai-security-recommendations-1.0:5.2 + ref_id: R18 + name: "Entra\xEEner un mod\xE8le d\u2019IA uniquement avec des donn\xE9es l\xE9\ + gitimement accessibles par les utilisateurs" + description: "Il est fortement recommand\xE9 d\u2019entra\xEEner un mod\xE8\ + le avec des donn\xE9es dont la sensibilit\xE9 est coh\xE9rente avec le besoin\ + \ d\u2019en conna\xEEtre des utilisateurs." + - urn: urn:intuitem:risk:req_node:anssi-genai-security-recommendations-1.0:r19 + assessable: true + depth: 2 + parent_urn: urn:intuitem:risk:req_node:anssi-genai-security-recommendations-1.0:5.2 + ref_id: R19 + name: "Prot\xE9ger en int\xE9grit\xE9 les donn\xE9es d\u2019entra\xEEnement\ + \ du mod\xE8le d\u2019IA" + description: "Il est recommand\xE9 de s\u2019assurer de l\u2019int\xE9grit\xE9\ + \ des donn\xE9es d\u2019entra\xEEnement du mod\xE8le tout au long du cycle\ + \ d\u2019entra\xEEnement. Cette protection peut prendre la forme d\u2019une\ + \ v\xE9rification syst\xE9matique de la signature ou de l\u2019empreinte (hash)\ + \ des fichiers utilis\xE9s ou bien des archives compress\xE9s de l\u2019ensemble\ + \ de ces donn\xE9es." + - urn: urn:intuitem:risk:req_node:anssi-genai-security-recommendations-1.0:r20 + assessable: true + depth: 2 + parent_urn: urn:intuitem:risk:req_node:anssi-genai-security-recommendations-1.0:5.2 + ref_id: R20 + name: "Prot\xE9ger en int\xE9grit\xE9 les fichiers du syst\xE8me d\u2019IA" + description: "Il est recommand\xE9 de prot\xE9ger en int\xE9grit\xE9 les fichiers\ + \ du mod\xE8le entra\xEEn\xE9, et de contr\xF4ler r\xE9guli\xE8rement que\ + \ ceux-ci n\u2019ont pas \xE9t\xE9 alt\xE9r\xE9s. La recommandation vaut \xE9\ + galement par extension pour tous les fichiers inh\xE9rents au fonctionnement\ + \ du syst\xE8me d\u2019IA (scripts, binaires, etc.)." + - urn: urn:intuitem:risk:req_node:anssi-genai-security-recommendations-1.0:r21 + assessable: true + depth: 2 + parent_urn: urn:intuitem:risk:req_node:anssi-genai-security-recommendations-1.0:5.2 + ref_id: R21 + name: "Proscrire le r\xE9-entra\xEEnement du mod\xE8le d\u2019IA en production" + description: "Il est fortement recommand\xE9 de ne pas r\xE9-entra\xEEner un\ + \ mod\xE8le d\u2019IA directement en production. Cette action de r\xE9-entra\xEE\ + nement doit d\xE9marrer avec le cycle en 3 phases, dans les environnements\ + \ ad\xE9quats pour chacune des phases." + - urn: urn:intuitem:risk:req_node:anssi-genai-security-recommendations-1.0:5.3 + assessable: false + depth: 1 + ref_id: '5.3' + name: "Recommandations pour la phase de d\xE9ploiement" + - urn: urn:intuitem:risk:req_node:anssi-genai-security-recommendations-1.0:r22 + assessable: true + depth: 2 + parent_urn: urn:intuitem:risk:req_node:anssi-genai-security-recommendations-1.0:5.3 + ref_id: R22 + name: "S\xE9curiser la cha\xEEne de d\xE9ploiement en production des syst\xE8\ + mes d\u2019IA" + description: "Il est recommand\xE9 d\u2019op\xE9rer le d\xE9ploiement des syst\xE8\ + mes d\u2019IA g\xE9n\xE9rative depuis un SI d\u2019administration, en respectant\ + \ les bonnes pratiques du guide d\u2019administration s\xE9curis\xE9e de l\u2019\ + ANSSI." + - urn: urn:intuitem:risk:req_node:anssi-genai-security-recommendations-1.0:r23 + assessable: true + depth: 2 + parent_urn: urn:intuitem:risk:req_node:anssi-genai-security-recommendations-1.0:5.3 + ref_id: R23 + name: "Pr\xE9voir des audits de s\xE9curit\xE9 des syst\xE8mes d\u2019IA avant\ + \ d\xE9ploiement en production" + description: "Il est recommand\xE9 de pr\xE9voir des tests de robustesse et\ + \ de s\xE9curit\xE9 des syst\xE8mes d\u2019IA. Ces tests peuvent \xEAtre :\n\ + - des tests d\u2019intrusion standards sur les composants techniques usuels\ + \ d\u2019un syst\xE8me d\u2019IA : serveurs web, orchestrateur, base de donn\xE9\ + es, etc.\n- des tests de s\xE9curit\xE9 sur les d\xE9veloppements r\xE9alis\xE9\ + s dans le syst\xE8me d\u2019IA (via des outils SAST ou DAST par exemple) ;\n\ + - des tests automatis\xE9s 20visant sp\xE9cifiquement des vuln\xE9rabilit\xE9\ + s li\xE9es aux mod\xE8les d\u2019IA (attaques adverses, extraction du mod\xE8\ + le, etc.) ;\n- des tests manuels d\u2019auditeurs visant sp\xE9cifiquement\ + \ \xE0 tester la robustesse d\u2019un mod\xE8le d\u2019IA g\xE9n\xE9rative\ + \ sur des sc\xE9narios d\u2019attaques plus sophistiqu\xE9s." + - urn: urn:intuitem:risk:req_node:anssi-genai-security-recommendations-1.0:r24 + assessable: true + depth: 2 + parent_urn: urn:intuitem:risk:req_node:anssi-genai-security-recommendations-1.0:5.3 + ref_id: R24 + name: "Pr\xE9voir des tests fonctionnels m\xE9tier des syst\xE8mes d\u2019IA\ + \ avant d\xE9ploiement en production" + description: "Il est recommand\xE9 de pr\xE9voir des tests de performance et\ + \ de qualit\xE9 des r\xE9ponses apport\xE9es par un syst\xE8me d\u2019IA g\xE9\ + n\xE9rative." + - urn: urn:intuitem:risk:req_node:anssi-genai-security-recommendations-1.0:5.4 + assessable: false + depth: 1 + ref_id: '5.4' + name: Recommandations pour la phase de production + - urn: urn:intuitem:risk:req_node:anssi-genai-security-recommendations-1.0:r25 + assessable: true + depth: 2 + parent_urn: urn:intuitem:risk:req_node:anssi-genai-security-recommendations-1.0:5.4 + ref_id: R25 + name: "Prot\xE9ger le syst\xE8me d\u2019IA en filtrant les entr\xE9es et les\ + \ sorties des utilisateurs" + description: "Il est recommand\xE9 de mettre en place des fonctions permettant\ + \ de se pr\xE9munir d\u2019une fuite de donn\xE9es ou d\u2019une fuite de\ + \ mod\xE8le dans les r\xE9ponses :\n- une fonction de filtre de requ\xEAtes\ + \ malveillantes des utilisateurs avant envoi au mod\xE8le ;\n- une fonction\ + \ de filtre de requ\xEAtes jug\xE9es non l\xE9gitimes d\u2019un point de vue\ + \ m\xE9tier ;\n- une fonction de filtre d\u2019informations internes du mod\xE8\ + le (param\xE8tres, entra\xEEnement) dans les r\xE9ponses ;\n- une fonction\ + \ de filtre d\u2019informations d\xE9finies comme sensibles dans les r\xE9\ + ponses (ex. : coordonn\xE9es personnelles, r\xE9f\xE9rences de projets, etc.)\ + \ ;\n- une limite sur la taille des r\xE9ponses (nombre de caract\xE8res maximum)." + - urn: urn:intuitem:risk:req_node:anssi-genai-security-recommendations-1.0:r26 + assessable: true + depth: 2 + parent_urn: urn:intuitem:risk:req_node:anssi-genai-security-recommendations-1.0:5.4 + ref_id: R26 + name: "Ma\xEEtriser et s\xE9curiser les interactions du syst\xE8me d\u2019IA\ + \ avec d\u2019autres applications m\xE9tier" + description: "L\u2019ensemble des interactions et des flux r\xE9seaux du syst\xE8\ + me d\u2019IA doit \xEAtre document\xE9 et valid\xE9. Les flux r\xE9seaux entre\ + \ le syst\xE8me d\u2019IA et d\u2019autres ressources doivent respecter l\u2019\ + \xE9tat de l\u2019art en mati\xE8re de s\xE9curit\xE9 :\n- ils doivent \xEA\ + tre strictement filtr\xE9s au niveau r\xE9seau, chiffr\xE9s et authentifi\xE9\ + s (ex. : en suivant le guide TLS de l\u2019ANSSI [22]) ;\n- ils doivent utiliser\ + \ des protocoles s\xE9curis\xE9s (ex. : OpenID Connect) en cas d\u2019usage\ + \ d\u2019un fournisseur d\u2019identit\xE9 [23] ;\n- ils doivent int\xE9grer\ + \ un contr\xF4le des autorisations d\u2019acc\xE8s \xE0 la ressource en compl\xE9\ + ment de l\u2019authentification ;\n- ils doivent faire l\u2019objet d\u2019\ + une journalisation au niveau de granularit\xE9 ad\xE9quat." + - urn: urn:intuitem:risk:req_node:anssi-genai-security-recommendations-1.0:r27 + assessable: true + depth: 2 + parent_urn: urn:intuitem:risk:req_node:anssi-genai-security-recommendations-1.0:5.4 + ref_id: R27 + name: "Limiter les actions automatiques depuis un syst\xE8me d\u2019IA traitant\ + \ des entr\xE9es non-ma\xEEtris\xE9es" + description: "Il est fortement recommand\xE9 de limiter voire de proscrire les\ + \ actions automatiques sur le SI d\xE9clench\xE9es depuis un syst\xE8me d\u2019\ + IA et \xE0 partir d\u2019entr\xE9es non-ma\xEEtris\xE9es (ex. : donn\xE9es\ + \ issues d\u2019Internet ou de mails, etc.)." + - urn: urn:intuitem:risk:req_node:anssi-genai-security-recommendations-1.0:r28 + assessable: true + depth: 2 + parent_urn: urn:intuitem:risk:req_node:anssi-genai-security-recommendations-1.0:5.4 + ref_id: R28 + name: "Cloisonner le syst\xE8me d\u2019IA dans un ou plusieurs environnements\ + \ techniques d\xE9di\xE9s" + description: "Il est recommand\xE9 que le syst\xE8me d\u2019IA soit cloisonn\xE9\ + \ dans des zones logiques d\xE9di\xE9es, afin de limiter les risques de lat\xE9\ + ralisation d\u2019un attaquant qui aurait compromis ce syst\xE8me." + - urn: urn:intuitem:risk:req_node:anssi-genai-security-recommendations-1.0:r29 + assessable: true + depth: 2 + parent_urn: urn:intuitem:risk:req_node:anssi-genai-security-recommendations-1.0:5.4 + ref_id: R29 + name: "Journaliser l\u2019ensemble des traitements r\xE9alis\xE9s au sein du\ + \ syst\xE8me d\u2019IA" + description: "Il est recommand\xE9 de journaliser au bon niveau de granularit\xE9\ + \ l\u2019ensemble des traitements r\xE9alis\xE9s sur le syst\xE8me d\u2019\ + IA, notamment :\n- les requ\xEAtes des utilisateurs (en prenant garde \xE0\ + \ leur protection si ces requ\xEAtes contiennent des donn\xE9es sensibles)\ + \ ;\n- les traitements r\xE9alis\xE9s en entr\xE9e sur cette requ\xEAte avant\ + \ l\u2019envoi au mod\xE8le ;\n- les appels \xE0 des plugins ;\n- les appels\ + \ \xE0 des donn\xE9es additionnelles ;\n- les traitements r\xE9alis\xE9s par\ + \ les filtres en sortie ;\n- les r\xE9ponses aux utilisateurs." + - urn: urn:intuitem:risk:req_node:anssi-genai-security-recommendations-1.0:5.5 + assessable: false + depth: 1 + ref_id: '5.5' + name: "Cas particulier de la g\xE9n\xE9ration de code source assist\xE9e par\ + \ l'IA" + - urn: urn:intuitem:risk:req_node:anssi-genai-security-recommendations-1.0:r30 + assessable: true + depth: 2 + parent_urn: urn:intuitem:risk:req_node:anssi-genai-security-recommendations-1.0:5.5 + ref_id: R30 + name: "Contr\xF4ler syst\xE9matiquement le code source g\xE9n\xE9r\xE9 par IA" + description: "Le code source g\xE9n\xE9r\xE9 par IA doit faire l\u2019objet\ + \ de mesures de s\xE9curit\xE9 afin de v\xE9rifier son innocuit\xE9 :\n- proscrire\ + \ l\u2019ex\xE9cution automatique de code source g\xE9n\xE9r\xE9 par IA dans\ + \ l\u2019environnement de d\xE9veloppement ;\n- proscrire le commit automatique\ + \ de code source g\xE9n\xE9r\xE9 par IA dans les d\xE9p\xF4ts ;\n- int\xE9\ + grer un outil d\u2019assainissement de code source g\xE9n\xE9r\xE9 par IA\ + \ dans l\u2019environnement de d\xE9veloppement ;\n- v\xE9rifier l\u2019innocuit\xE9\ + \ des biblioth\xE8ques r\xE9f\xE9renc\xE9es dans le r\xE9sultat du code source\ + \ g\xE9n\xE9r\xE9 par IA ;\n- faire contr\xF4ler r\xE9guli\xE8rement par un\ + \ humain la qualit\xE9 du code source g\xE9n\xE9r\xE9 \xE0 partir de requ\xEA\ + tes types suffisamment sophistiqu\xE9es." + - urn: urn:intuitem:risk:req_node:anssi-genai-security-recommendations-1.0:r31 + assessable: true + depth: 2 + parent_urn: urn:intuitem:risk:req_node:anssi-genai-security-recommendations-1.0:5.5 + ref_id: R31 + name: "Limiter la g\xE9n\xE9ration de code source par IA pour des modules critiques\ + \ d\u2019applications" + description: "Il est fortement recommand\xE9 de ne pas utiliser un outil d\u2019\ + IA g\xE9n\xE9rative pour g\xE9n\xE9rer des blocs de code source destin\xE9\ + s \xE0 des modules critiques d\u2019applications :\n- les modules de cryptographie\ + \ (authentification, chiffrement, signature, etc.) ;\n- les modules de gestion\ + \ des droits d\u2019acc\xE8s des utilisateurs et administrateurs ;\n- les\ + \ modules de traitement de donn\xE9es sensibles." + - urn: urn:intuitem:risk:req_node:anssi-genai-security-recommendations-1.0:r32 + assessable: true + depth: 2 + parent_urn: urn:intuitem:risk:req_node:anssi-genai-security-recommendations-1.0:5.5 + ref_id: R32 + name: "Sensibiliser les d\xE9veloppeurs sur les risques li\xE9s au code source\ + \ g\xE9n\xE9r\xE9 par IA" + description: "Il est recommand\xE9 d\u2019effectuer des campagnes de sensibilisation\ + \ sur les risques li\xE9s \xE0 l\u2019utilisation de code source g\xE9n\xE9\ + r\xE9 par IA. Cette sensibilisation peut s\u2019appuyer sur des rapports publics\ + \ sur ce sujet ou bien des papiers de recherche 23d\xE9montrant la pr\xE9\ + sence de vuln\xE9rabilit\xE9s dans le code g\xE9n\xE9r\xE9 par IA.\nEn compl\xE9\ + ment, les d\xE9veloppeurs peuvent \xE9galement \xEAtre form\xE9s sur les outils\ + \ d\u2019IA pour l\u2019optimisation de leurs requ\xEAtes (prompt engineering\ + \ 24) afin d\u2019am\xE9liorer la qualit\xE9 et la s\xE9curit\xE9 du code\ + \ g\xE9n\xE9r\xE9." + - urn: urn:intuitem:risk:req_node:anssi-genai-security-recommendations-1.0:5.6 + assessable: false + depth: 1 + ref_id: '5.6' + name: "Cas particulier de services d'IA grand public expos\xE9s sur Internet" + - urn: urn:intuitem:risk:req_node:anssi-genai-security-recommendations-1.0:r33 + assessable: true + depth: 2 + parent_urn: urn:intuitem:risk:req_node:anssi-genai-security-recommendations-1.0:5.6 + ref_id: R33 + name: "Durcir les mesures de s\xE9curit\xE9 pour des services d\u2019IA grand\ + \ public expos\xE9s sur Internet" + description: "Il est recommand\xE9 d\u2019apporter une attention particuli\xE8\ + re sur certaines mesures de s\xE9curit\xE9 pour les services expos\xE9s au\ + \ grand public, notamment :\n- entra\xEEner le mod\xE8le d\u2019IA uniquement\ + \ \xE0 partir de donn\xE9es publiques ;\n- s\u2019assurer que les utilisateurs\ + \ du syst\xE8me d\u2019IA ont fait l\u2019objet d\u2019une authentification\ + \ au pr\xE9alable ;\n- analyser syst\xE9matiquement les requ\xEAtes des utilisateurs\ + \ sur le syst\xE8me d\u2019IA ;\n- faire un contr\xF4le et une validation\ + \ des r\xE9ponses avant l\u2019envoi aux utilisateurs ;\n- prot\xE9ger en\ + \ confidentialit\xE9 les donn\xE9es des utilisateurs (historique des requ\xEA\ + tes et des r\xE9ponses, etc.) ;\n- mettre en place des mesures contre les\ + \ d\xE9nis de service distribu\xE9s (DDoS);\n- s\xE9curiser le service web\ + \ en frontal des utilisateurs." + - urn: urn:intuitem:risk:req_node:anssi-genai-security-recommendations-1.0:5.7 + assessable: false + depth: 1 + ref_id: '5.7' + name: "Cas particulier de l'utilisation de solutions d'IA g\xE9n\xE9rative tierces" + - urn: urn:intuitem:risk:req_node:anssi-genai-security-recommendations-1.0:r34 + assessable: true + depth: 2 + parent_urn: urn:intuitem:risk:req_node:anssi-genai-security-recommendations-1.0:5.7 + ref_id: R34 + name: "Proscrire l\u2019utilisation d\u2019outils d\u2019IA g\xE9n\xE9rative\ + \ sur Internet pour un usage professionnel impliquant des donn\xE9es sensibles" + description: "L\u2019entit\xE9 cliente n\u2019ayant pas la ma\xEEtrise du service\ + \ d\u2019IA g\xE9n\xE9rative, il n\u2019est pas possible de s\u2019assurer\ + \ que la protection en confidentialit\xE9 des donn\xE9es soumises en entr\xE9\ + e respecte les besoins de s\xE9curit\xE9 de l\u2019entit\xE9.\nPar mesure\ + \ de pr\xE9caution, il est donc obligatoire de ne jamais int\xE9grer de donn\xE9\ + es sensibles de l\u2019entit\xE9 dans les requ\xEAtes des utilisateurs." + - urn: urn:intuitem:risk:req_node:anssi-genai-security-recommendations-1.0:r35 + assessable: true + depth: 2 + parent_urn: urn:intuitem:risk:req_node:anssi-genai-security-recommendations-1.0:5.7 + ref_id: R35 + name: "Effectuer une revue r\xE9guli\xE8re de la configuration des droits des\ + \ outils d\u2019IA g\xE9n\xE9rative sur les applications m\xE9tier" + description: "Il est recommand\xE9 de faire une revue des droits d\u2019acc\xE8\ + s des outils d\u2019IA g\xE9n\xE9rative d\xE8s l\u2019activation du produit\ + \ dans l\u2019entit\xE9, afin de s\u2019assurer que les droits positionn\xE9\ + s par d\xE9faut ne sont pas trop laxistes ou trop ouverts par conception.\n\ + Enfin, une revue r\xE9guli\xE8re des droits d\u2019acc\xE8s doit \xEAtre r\xE9\ + alis\xE9e (ex. : tous les mois), afin notamment de s\u2019assurer que les\ + \ mises \xE0 jour fonctionnelles et de s\xE9curit\xE9 du produit ne viennent\ + \ pas impacter le besoin d\u2019en conna\xEEtre pour les utilisateurs." diff --git a/tools/anssi/anssi-genai-security-recommendations-1.0.xlsx b/tools/anssi/anssi-genai-security-recommendations-1.0.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..6dbf538395a214f11fac36e07275dd6fada6336f GIT binary patch literal 19941 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