The following data security requirements correspond to the 2023 Data Protection Assessment.
For assessment versions received after February 2024, please see this page.
Apps with access to certain types of Platform Data from Meta are required to complete the annual Data Protection Assessment (DPA). DPA is designed to determine whether developers meet the requirements of Meta Platform Terms as it relates to the use, sharing, and protection of Platform Data. A subset of the DPA questionnaire is focused on Platform Term 6, which outlines data security requirements. We recommend you utilize this document to understand the expectations, requirements, and related evidence with respect to data security use and processing as defined in Meta Platform Terms.
Please note there is a glossary included at the end of this document with key terms and definitions.
Find more video resources from Data Protocol.
Throughout this document, the phrase server side is used as a shorthand for any backend environment that an organization uses to process Platform Data, whether running on a cloud host like Amazon Web Services (AWS), hosted by the developer in a shared or exclusive data center, or a hybrid (combination of these).
Client side requirements refer to processing Platform Data within browsers, mobile devices, within apps on desktop and laptop computers, and other types of devices used by people.
Créez (ou mettez à jour, si nécessaire) un diagramme ou une description du flux de données qui illustre la manière dont l’application ou le système traite les données de la plateforme.
En fin de compte, le diagramme ou la description du flux de données devrait inclure :
Vous devrez peut-être fournir des justificatifs étayant vos réponses liées aux fonctionnalités de protection de la sécurité des données que vous mettez en œuvre. Nous vous recommandons de consulter le Guide des justificatifs dans ce document pour découvrir des exemples de justificatifs acceptables et les préparer en conséquence. Nous acceptons les types de fichiers courants, ainsi que les captures et les enregistrements d’écran. Veillez à ce que les fichiers ne soient pas protégés par un mot de passe. Vous pouvez importer plusieurs fichiers d’une taille maximale de 2 Go chacun. Nous acceptons les formats suivants : .xls, .xlsx, .csv, .doc, .docx, .pdf, .txt, .jpeg, .jpg, .png, .ppt, .pptx, .mov, .mp4, .zip et .zipx.
Veillez à bien supprimer les données sensibles du justificatif avant envoi.
Pour les applications invitées à importer des justificatifs relatifs aux fonctionnalités de protection de la sécurité des données, Meta exige deux types de documents différents :
Les justificatifs de politique ou de procédure, parfois appelés contrôle administratif, sont des documents écrits qui décrivent l’approche d’une fonctionnalité de protection de la sécurité des données en particulier. Ils peuvent prendre différentes formes : il peut s’agir d’un extrait d’un ensemble de politiques internes, d’une partie ou de la totalité d’une page wiki interne, ou d’un document nouvellement créé que vous utilisez pour décrire l’approche si vous n’avez pas de documentation préexistante. Dans tous les cas, les justificatifs de politique ou de procédure que vous importez doivent expliquer clairement comment l’approche d’une fonctionnalité de protection en particulier se rapporte aux exigences de Meta. Veillez à ne fournir que la politique ou le contenu pertinent et nécessaire pour l’examen de sécurité de Meta, ou utilisez le champ de texte libre associé à la question pour orienter nos équipes d’examen vers la ou les sections pertinentes.
Les justificatifs de mise en œuvre illustrent la façon dont vous avez mis en pratique la politique ou la procédure, directement par le biais d’une capture ou d’un enregistrement d’écran. Les équipes de développement disposant de configurations différentes, nous ne pouvons pas fournir d’exemples pour tous les scénarios. Cela dit, les justificatifs de mise en œuvre doivent, dans la mesure du possible, présenter le même niveau de détail que les exemples que nous avons fournis.
Nous comprenons qu’il peut être très difficile de préparer des justificatifs de mise en œuvre qui prouvent de manière exhaustive la mise en œuvre d’une fonctionnalité de protection de la sécurité des données en particulier. Dans cette optique, vous devez envoyer les justificatifs conformément aux conseils fournis ici, en prenant soin de supprimer les informations sensibles qui y figurent avant envoi :
N’envoyez pas de justificatifs qui contiennent l’une de ces valeurs sous une forme lisible (non supprimée). Si vous utilisez un éditeur d’images pour une capture d’écran, recouvrez les valeurs d’un rectangle noir. Si vous utilisez un éditeur PDF, assurez-vous de rédiger le texte à l’aide d’un outil qui supprime réellement les valeurs plutôt que de simplement ajouter une couche tout en préservant le texte (par exemple, l’outil de rédaction de l’application Aperçu d’Apple).
Question: Do you enforce encryption at rest for all Platform Data stored in a cloud, server, or data center environment?
Encryption at rest protects Platform Data by making the data indecipherable without a separate decryption key. This provides an additional layer of protection against unauthorized read access.
If you do store Platform Data server side:
If developer does NOT store Platform Data server side, this requirement is not applicable.
If you store Platform Data using IaaS hosting (e.g., AWS EC2, Microsoft Azure IaaS, and Google Compute Engine), self hosting, or a hybrid approach then this question does apply.
However, there are other backend hosting models that are special cases:
If you store Platform Data only via any of these (and not using IaaS, Self Hosting, or Hybrid Hosting), this question does not apply. You should instead describe this relationship in the Service Provider section of the DPA.
If you store Platform Data only via a Meta API, for example using player.setDataAsync()
, in the Instant Games SDK, this question does not apply.
If you are asked to submit evidence for this protection, follow the instructions in Preparing Evidence to prepare both policy/procedure and implementation evidence.
AWS RDS - encryption at rest is configurable in AWS RDS, so developers must make sure that the configuration option is set to apply this protection.
For a representative RDS instance that contains Platform Data, use the AWS CLI tool to fetch its StorageEncrypted configuration.
# List RDS instances in default region $ aws rds describe-db-instances \ --query 'DBInstances[*].DBInstanceIdentifier' [ "database-1", "database-2" ] # For each instance returned, retrieve the storage encrypted config $ aws rds describe-db-instances \ --db-instance-identifier database-1 \ --query 'DBInstances[*].StorageEncrypted' [ true ] $ aws rds describe-db-instances \ --db-instance-identifier database-2 \ --query 'DBInstances[*].StorageEncrypted' [ true ]
AWS DynamoDB is encrypted at rest by default. You can fetch the encryption at rest configuration for a table using these commands.
$ aws dynamodb list-tables --output table -------------- | ListTables | +------------+ ||TableNames|| |+----------+| || Users || |+----------+| $ aws dynamodb describe-table \ --table-name Users \ --query "Table.SSEDescription.Status" "ENABLED"
AWS DocumentDB must be configured to apply encryption at rest. For a representative cluster that contains Platform Data, use these commands to fetch the StorageEncrypted configuration.
$ aws docdb describe-db-clusters --query 'DBClusters[*].DBClusterIdentifier' [ "docdb-users" ] $ aws docdb describe-db-clusters \ --db-cluster-identifier 'docdb-users' \ --query 'DBClusters[*].StorageEncrypted' [ true ]
AWS S3 buckets may be configured to apply encryption at rest to all objects created within the bucket. Use these commands to list buckets and fetch the configuration for default bucket encryption.
$ aws s3api list-buckets --output table --query "Buckets[*].Name" --------------------------------------------- | ListBuckets | +-------------------------------------------+ | platform.storage | +-------------------------------------------+ $ aws s3api get-bucket-encryption \ --bucket platform.storage \ --query "ServerSideEncryptionConfiguration.Rules[*].ApplyServerSideEncryptionByDefault" \ --output table --------------------- |GetBucketEncryption| +-------------------+ | SSEAlgorithm | +-------------------+ | AES256 | +-------------------+
Consult Microsoft’s documentation on encryption at rest in Azure that’s relevant to the organization’s use of their services.
Consult Google’s documentation on encryption at rest on Google Cloud Platform.
If you do not implement encryption at rest in the server side environment, you may be protecting Platform Data in an alternative way that is still acceptable. In this case, you should describe the following:
Question : En ce qui concerne spécifiquement les données stockées sur des appareils personnels et de l’organisation : Imposez-vous le chiffrement au repos ou avez-vous mis en place des politiques et de règles visant à réduire le risque de perte de données, pour toutes les Données de la Plateforme stockées sur ces appareils ?
Si un développeur permet la présence de Données de la Plateforme dans des appareils comme les ordinateurs portables des employés ou les supports de stockage amovibles (par ex. les clés USB), ces données sont exposées à un risque élevé d’accès non autorisé en cas de perte ou de vol des appareils. Les développeurs devraient prendre des mesures pour limiter ce risque.
Pour réduire les risques d’accès non autorisé aux Données de la Plateforme, les Développeurs doivent mettre en place des solutions pertinentes de contrôle technique (option privilégiée) ou administratif (option non privilégiée mais valable) sur les appareils de l’organisation (par ex. les ordinateurs portables) et les supports amovibles.
Cette exigence s’applique que vous traitiez ou non les données de la plateforme côté serveur.
S’il vous est demandé de produire un justificatif de cette protection, veuillez suivre les instructions de la section Préparation de justificatif afin de préparer les justificatifs en matière de règlement/procédure et de mise en place.
Vous pouvez utiliser l’une de ces solutions ou les deux : a) contrôles techniques (par ex. chiffrement du disque), ou b) règles/politiques pour réduire le risque de perte des Données de la Plateforme stockées sur les appareils de l’organisation, comme les ordinateurs portables ou les téléphones mobiles.
Les contrôles techniques peuvent consister à :
Les règles/politique peuvent comprendre :
Une organisation classe les Données de la Plateforme de Meta comme « données confidentielles » dans le cadre de sa politique de classification des données. Elle a créé un Règlement sur la gestion des données que tout le personnel est tenu de comprendre et respecter.
Question : Activez-vous le protocole de sécurité TLS 1.2 ou supérieur pour toutes les connexions réseau qui passent par, ou connectent, ou traversent des réseaux publics où les Données de la Plateforme sont transmises ? De plus, veillez-vous à ce que les données de la plateforme ne soient jamais transmises via des réseaux publics de façon non chiffrée (ex. via HTTP ou FTP), et à ce que les protocoles de sécurité SSL v2 et SSL v3 ne soient jamais utilisés ?
Les Données de la Plateforme transmises sur Internet sont accessibles à quiconque peut observer le trafic réseau. Il faut donc les protéger à l’aide du chiffrement pour éviter que les parties non autorisées puissent les lire.
Indépendamment du fait que vous traitiez ou non les données de la plateforme côté serveur :
Le tableau ci-dessous résume la politique de chiffrement en transit pour différents types de transferts.
Type de transfert | Politique de chiffrement en transit |
---|---|
Entre des appareils d’utilisateur final (téléphones mobiles, PC, tablettes, etc.) et le serveur ou l’infrastructure cloud, dans un sens comme dans l’autre. |
|
Entre le serveur ou l’infrastructure cloud et tout serveur distant, infrastructure cloud ou service de prestataires externes, dans un sens comme dans l’autre | Le chiffrement TLS 1.2 ou versions ultérieures doit être mis en place |
Entre des composants strictement à l’intérieur du data center, serveur ou infrastructure de cloud privés | Le chiffrement TLS est recommandé, sans être exigé, pour les transferts de Données de la Plateforme strictement à l’intérieur d’un réseau cloud privé |
Entre Meta et tout appareil, serveur ou infrastructure de cloud, dans un sens ou dans l’autre | Hors champ d’application de l’Évaluation de la protection des données - Meta contrôle la politique de chiffrement TLS pour ces transferts |
S’il vous est demandé de produire un justificatif de cette protection, veuillez suivre les instructions de la section Préparation de justificatif afin de préparer les justificatifs en matière de règlement/procédure et de mise en place. Une façon simple de produire des justificatifs de mise en œuvre qui démontrent la configuration de l’un des auditeurs web est d’utiliser l’outil Qualys SSL Server Test.
Voici un exemple de sortie de l’outil Qualys SSL Server Test. Noter les annotations rouges dans la section Configuration, qui résume les versions SSL/TLS prises en charge. Remarque : cet exemple ne comprend que les deux premières pages, mais vous devriez inclure la totalité du résultat du test.
Vous pouvez protéger les données de la plateforme en transit en utilisant un autre type de chiffrement que TLS ; cela peut être acceptable si l’approche fournit une protection équivalente. En l’espèce, vous devez fournir des détails sur le chiffrement utilisé afin que Meta puisse l’examiner :
Question : testez-vous l’application et les systèmes pour identifier d’éventuelles vulnérabilités et problèmes de sécurité au moins tous les 12 mois ? (Effectuez-vous par exemple un test d’intrusion manuel ?)
Les équipes de développement doivent tester les vulnérabilités et problèmes de sécurité afin de les détecter proactivement, en évitant dans l’idéal les incidents de sécurité avant qu’ils ne se produisent.
Exigences pour toutes les équipes de développement :
Exigences supplémentaires pour les équipes de développement qui traitent les données de la plateforme côté serveur :
Si l’organisation envisage d’ajouter un outil SAST au processus de développement, le NIST dispose d’une liste d’outils open source et commerciaux qui peut vous servir de point de départ pour choisir un outil.
S’il vous est demandé de produire un justificatif de cette protection, veuillez suivre les instructions de la section Préparation de justificatif afin de préparer les justificatifs en matière de règlement/procédure et de mise en place.
Si l’organisation traite les données de la plateforme dans un environnement cloud ou de serveur :
Le logiciel sur serveur ou dans le cloud accessible par Internet (par exemple, une API REST utilisée par des clients web et mobiles) que vous utilisez pour traiter les données de la plateforme doit se trouver dans le champ d’application de ce test pour qu’il soit valable.
Si l’organisation ne traite PAS les données de la plateforme dans un environnement cloud ou de serveur :
Test d’intrusion : une organisation commande un test d’intrusion de son logiciel fonctionnant côté serveur qui s’intègre aux API Meta et traite les données de la plateforme. L’entreprise de test termine ce dernier et produit une lettre de synthèse semblable à celle présentée ci-dessous. Les annotations rouges indiquent la date à laquelle le test a eu lieu (dans les 12 derniers mois). On trouve également un résumé des résultats de gravité critique/élevée non résolus à la fin du test (ou du second test, le cas échéant). N’oubliez pas de supprimer les informations sensibles du rapport (en particulier toute étape détaillée de reproduction de la vulnérabilité) avant de l’envoyer.
Analyse statique : si vous utilisez une approche différente, par exemple un outil SAST, exportez les résultats dans un document qui comprend la date d’exécution du SAST et une liste de résultats comprenant le type de chaque résultat et sa gravité ou son état critique.
Examen de la configuration cloud
Une équipe de développement utilise NCC Scout Suite en utilisant l’ensemble de règles par défaut de son fournisseur cloud (dans ce cas, AWS) pour examiner sa configuration cloud en quête de vulnérabilités et de problèmes de sécurité. L’outil produit un fichier JSON contenant les résultats détaillés de l’exécution. Dans cet exemple, on constate un certain nombre de problèmes dont la gravité correspond à un « danger », et que l’équipe de développement doit examiner et résoudre.
Le fichier JSON brut de la suite NCC Scout contient des détails sur votre environnement cloud que vous ne devez pas télécharger. En revanche, filtrez les réponses pour afficher le nombre de résultats par gravité.
$ python3 scout.py aws –-no-browser 2022-08-22 11:39:38 localhost scout[76981] INFO Saving data to scoutsuite-report/scoutsuite-results/scoutsuite_results_aws-043954759379.js $ cd scoutsuite-report/scoutsuite-results $ tail -n +2 scoutsuite_results_aws-043954750000.js| jq '. | {last_run}' | pbcopy { "last_run": { "ruleset_about": "This ruleset consists of numerous rules that are considered standard by NCC Group. The rules enabled range from violations of well-known security best practices to gaps resulting from less-known security implications of provider-specific mechanisms. Additional rules exist, some of them requiring extra-parameters to be configured, and some of them being applicable to a limited number of users.", "ruleset_name": "default", "run_parameters": { "excluded_regions": [], "regions": [], "services": [], "skipped_services": [] }, "summary": { "acm": { "checked_items": 4, "flagged_items": 2, "max_level": "warning", "resources_count": 2, "rules_count": 2 }, "awslambda": { "checked_items": 0, "flagged_items": 0, "max_level": "warning", "resources_count": 0, "rules_count": 0 }, "cloudformation": { "checked_items": 11, "flagged_items": 0, "max_level": "warning", "resources_count": 11, "rules_count": 1 }, "cloudfront": { "checked_items": 0, "flagged_items": 0, "max_level": "warning", "resources_count": 0, "rules_count": 3 }, "cloudtrail": { "checked_items": 153, "flagged_items": 4, "max_level": "danger", "resources_count": 17, "rules_count": 9 }, "cloudwatch": { "checked_items": 2, "flagged_items": 0, "max_level": "warning", "resources_count": 2, "rules_count": 1 }, "codebuild": { "checked_items": 0, "flagged_items": 0, "max_level": "warning", "resources_count": 0, "rules_count": 0 }, "config": { "checked_items": 17, "flagged_items": 0, "max_level": "warning", "resources_count": 1227, "rules_count": 1 }, "directconnect": { "checked_items": 0, "flagged_items": 0, "max_level": "warning", "resources_count": 0, "rules_count": 0 }, "dynamodb": { "checked_items": 0, "flagged_items": 0, "max_level": "warning", "resources_count": 1, "rules_count": 0 }, "ec2": { "checked_items": 760, "flagged_items": 108, "max_level": "danger", "resources_count": 44, "rules_count": 28 }, "efs": { "checked_items": 0, "flagged_items": 0, "max_level": "warning", "resources_count": 0, "rules_count": 0 }, "elasticache": { "checked_items": 0, "flagged_items": 0, "max_level": "warning", "resources_count": 0, "rules_count": 0 }, "elb": { "checked_items": 0, "flagged_items": 0, "max_level": "warning", "resources_count": 0, "rules_count": 3 }, "elbv2": { "checked_items": 42, "flagged_items": 4, "max_level": "danger", "resources_count": 0, "rules_count": 5 }, "emr": { "checked_items": 0, "flagged_items": 0, "max_level": "warning", "resources_count": 0, "rules_count": 0 }, "iam": { "checked_items": 801, "flagged_items": 27, "max_level": "danger", "resources_count": 87, "rules_count": 37 }, "kms": { "checked_items": 15, "flagged_items": 0, "max_level": "warning", "resources_count": 15, "rules_count": 1 }, "rds": { "checked_items": 1, "flagged_items": 0, "max_level": "warning", "resources_count": 27, "rules_count": 9 }, "redshift": { "checked_items": 0, "flagged_items": 0, "max_level": "warning", "resources_count": 0, "rules_count": 6 }, "route53": { "checked_items": 0, "flagged_items": 0, "max_level": "warning", "resources_count": 1, "rules_count": 3 }, "s3": { "checked_items": 121, "flagged_items": 34, "max_level": "warning", "resources_count": 7, "rules_count": 18 }, "secretsmanager": { "checked_items": 0, "flagged_items": 0, "max_level": "warning", "resources_count": 1, "rules_count": 0 }, "ses": { "checked_items": 0, "flagged_items": 0, "max_level": "warning", "resources_count": 0, "rules_count": 4 }, "sns": { "checked_items": 0, "flagged_items": 0, "max_level": "warning", "resources_count": 0, "rules_count": 7 }, "sqs": { "checked_items": 0, "flagged_items": 0, "max_level": "warning", "resources_count": 0, "rules_count": 8 }, "vpc": { "checked_items": 271, "flagged_items": 211, "max_level": "warning", "resources_count": 0, "rules_count": 9 } }, "time": "2022-08-22 11:42:25-0400", "version": "5.11.0" } }
Autre approche d’examen de la configuration cloud pour les équipes de développement utilisant l’ensemble de règles d’Amazon Web Services.
# Show that AWS Foundational Security Best Practices are enabled $ aws securityhub get-enabled-standards { "StandardsSubscriptions": [ { "StandardsSubscriptionArn": "arn:aws:securityhub:us-west-1:043954759379:subscription/aws-foundational-security-best-practices/v/1.0.0", "StandardsArn": "arn:aws:securityhub:us-west-1::standards/aws-foundational-security-best-practices/v/1.0.0", "StandardsStatus": "READY" } ] } # Show that aggregator is configured for a representative region used to process Platform Data $ aws securityhub list-finding-aggregators $ aws securityhub get-finding-aggregator --finding-aggregator-arn '{REPLACE-WITH-FINDING-AGGREGATOR-ARN}' # Demonstrate that the ruleset is running by fetching active findings and counting the number of lines of output $ aws securityhub get-findings --query 'Findings[?RecordState==`ACTIVE`]' --filters '{"GeneratorId":[{"Value": "aws-foundational-security","Comparison":"PREFIX"}]}' --output text | wc -l 4876 # Demonstrate that there are no active critical severity findings $ aws securityhub get-findings --query 'Findings[?Severity.Label==`CRITICAL`] | [?RecordState==`ACTIVE`] | [*][Title, GeneratorId]' --filters '{"GeneratorId":[{"Value": "aws-foundational-security","Comparison":"PREFIX"}]}' []
Si vous exploitez un programme de divulgation des vulnérabilités (VDP) opérationnel, par exemple à l’aide des plateformes BugCrowd ou HackerOne, vous pouvez le présenter comme une fonctionnalité de protection alternative au lieu d’un test d’intrusion ou d’une analyse de vulnérabilité. Pour le prouver, vous devez soumettre des justificatifs selon lesquels :
Dans ce cas, les justificatifs doivent comprendre :
Question : La clé secrète et les tokens d’accès de l’API Meta sont-ils protégés de l’une des manières suivantes ?
La clé secrète et les tokens d’accès sont essentiels à la sécurité des décisions prises par l’API Meta concernant les actions à autoriser. Si une partie non autorisée accédait à ces identifiants, elle pourrait appeler les API de Meta, en usurpant l’identité du vrai développeur, et réaliser l’une des actions que nous avons accordées à l’application (par ex. lire des données de l’API Meta sur les utilisateurs de l’application).
Tokens d’accès
Clé secrète - l’une de ces deux exigences doit être respectée :
S’il vous est demandé de produire un justificatif de cette protection, veuillez suivre les instructions de la section Préparation de justificatif afin de préparer les justificatifs en matière de règlement/procédure et de mise en place.
Incluez des documents sur le règlement visant à protéger les tokens d’accès de l’API Meta et la clé secrète. Si l’application traite les tokens d’accès Meta côté serveur, incluez un justificatif des mesures de protection que vous appliquez (par ex. utiliser un modèle de base de données de type vault, démontrer que les valeurs sont stockées sous forme chiffrée, configurer l’application de manière à exiger des preuves de clé secrète).
Veillez à ne pas inclure (et donc supprimez) les valeurs de texte en clair de toutes les clés ou tokens d’accès dans le justificatif que vous envoyez.
Une organisation utilise AWS Secrets Manager pour le stockage sécurisé des données sensibles, et notamment de la clé secrète Meta.
Une organisation a configuré son application Meta pour demander une preuve de clé secrète pour les appels d’API :
Question : Testez-vous les systèmes et processus que vous utiliseriez pour répondre à un incident de sécurité (par ex., une violation de données ou une cyberattaque) au moins tous les 12 mois ?
Tôt ou tard, toutes les entreprises sont touchées par des incidents de sécurité. Il est donc essentiel que les organisations prévoient à l’avance quelles personnes seront chargées de traiter l’incident et de quelle manière, de communiquer avec les parties prenantes, de le régler et d’en tirer les leçons pour l’avenir.
Le développeur doit avoir mis en place :
Cette exigence s’applique que vous traitiez ou non les Données de la Plateforme côté serveur.
Veuillez suivre les instructions de la section Préparation de justificatif afin de préparer les justificatifs en matière de règlement/procédure et de mise en place.
Un développeur a créé un plan de réponse complet aux incidents d’après ce modèle. Ces images représentent seulement la table des matières, mais un lien vers l’intégralité du modèle figure en dessous.
Voir le modèle de plan de réponse en cas d’incident de Counteractive (format docx)
Un développeur a mené un test sur son plan de réponse en cas d’incident via un exercice de simulation et il a noté les résultats en utilisant ce modèle.
Seules les deux premières pages sont incluses ici, mais il vous faut envoyer le document complet.
Question : Exigez-vous l’authentification à plusieurs facteurs pour l’accès à distance à chaque compte pouvant se connecter au cloud ou à l’environnement serveur et/ou pour accéder aux services que vous utilisez afin de déployer, assurer la maintenance de, surveiller et exploiter les systèmes dans lesquels vous stockez des Données de la Plateforme de Meta ?
Une technique ordinaire utilisée par les adversaires pour accéder aux données confidentielles consiste à commencer par obtenir l’accès aux outils utilisés par le développeur pour créer ou exploiter son application/système. Il existe des outils sophistiqués permettant de pirater les comptes protégés seulement par des mots de passe ; l’authentification à plusieurs facteurs offre un niveau de sécurité supplémentaire contre ce risque.
Dans le cadre du traitement des Données de la Plateforme par une organisation, l’accès à distance à ces outils doit être protégé par l’authentification à plusieurs facteurs (c’est à dire pas simplement par un mot de passe) :
Plus particulièrement, l’authentification à plusieurs facteurs ou une autre mesure de protection valable sont exigées dans les cas suivants :
En ce qui concerne la mise en place de l’authentification à plusieurs facteurs :
S’il vous est demandé de produire un justificatif de cette protection, veuillez suivre les instructions de la section Préparation de justificatif afin de préparer les justificatifs en matière de règlement/procédure et de mise en place.
Une organisation utilise AzureAD comme solution d’authentification unique. Ce règlement exige une authentification à plusieurs facteurs.
Ce règlement est alors associé aux applications cloud auxquelles il est applicable. En utilisant cette approche, le justificatif devrait refléter la totalité de la section Éléments sélectionnés afin d’indiquer clairement quelles applications cloud exigent l’authentification à plusieurs facteurs.
Cette règle demande l’authentification à plusieurs facteurs pour toutes les connexions.
Voici un exemple de politique AWS IAM qui permet la configuration de l’authentification à plusieurs facteurs mais qui interdit d’autres actions en l’absence de cette dernière.
Une organisation a configuré l’authentification sur GitHub de manière à exiger l’authentification à plusieurs facteurs pour tous les membres de l’organisation.
Question : Disposez-vous d’un système pour la maintenance des comptes (affectation, révocation et examen des accès et des privilèges) ?
Les bonnes habitudes en matière de gestion de comptes sont importantes pour éviter que des comptes ne soient utilisés par des personnes non autorisées pour accéder aux données de la plateforme. Les développeurs doivent surtout s’assurer que l’accès aux ressources et aux systèmes est révoqué lorsqu’il n’est plus nécessaire.
Cette exigence s’applique que vous traitiez ou non les données de la plateforme côté serveur.
Suivez les instructions de la section Préparer vos justificatifs pour préparer vos documents démontrant vos politiques/procédures et votre mise en œuvre.
Politiques/procédures - Un développeur a créé un standard de gestion du cycle de vie des accès qui comprend des procédures visant à accorder, à examiner et à révoquer des accès.
Un développeur utilise Workday en tant que source de référence pour les données des ressources humaines (RH), notamment la situation professionnelle actuelle. Ce développeur utilise Google Cloud Identity en tant que fournisseur d’identité pour gérer les comptes et accorder des accès aux outils et aux systèmes d’information.
Un développeur fournit un justificatif démontrant que l’accès a été révoqué pour les membres du personnel qui ont quitté l’entreprise : un document indiquant qu’un rapport de rapprochement a été effectué récemment (au cours des 12 derniers mois) et montrant qu’il n’y a aucun compte Google Cloud Identity actif pour des personnes qui ne font pas actuellement partie du personnel, selon la liste du personnel de Workday.
Un développeur utilise Google Cloud Identity en tant que fournisseur d’identité pour gérer les comptes et accorder des accès aux outils et aux systèmes d’information.
Un développeur fournit un justificatif démontrant que l’accès est révoqué lorsque les comptes ne sont plus utilisés (par ex., aucune connexion au cours des 6 derniers mois), son annuaire de comptes trié par dernière connexion, afin de démontrer qu’il n’y a pas de comptes actifs avec une dernière connexion plus ancienne que cela.
Un développeur utilise un outil d’authentification unique pour gérer les identités et accorder des accès aux outils et aux systèmes d’information. Le développeur a configuré GitHub de façon à exiger une authentification unique.
Question : Avez-vous mis en place un système pour tenir à jour le code et les environnements du système, y compris les serveurs, les machines virtuelles, les distributions, les bibliothèques, les packages et les logiciels antivirus ?
Les composants logiciels sont régulièrement mis à jour ou corrigés pour régler les vulnérabilités de sécurité. Leur durée de vie se termine lorsqu’ils ne sont plus pris en charge. Les développeurs qui utilisent ou dépendent de ces composants doivent en faire le suivi pour éviter le fonctionnement de logiciels présentant des vulnérabilités identifiées.
Pour les composants logiciels suivants, le cas échéant, vous devez disposer d’une manière définie et réitérable d’identifier les correctifs disponibles pour régler les vulnérabilités de sécurité, en établissant des priorités en fonction du risque et en appliquant des correctifs de manière habituelle :
Meta n’exige pas l’utilisation d’un outil particulier pour ces activités. Il est courant que les organisations adoptent des approches différentes pour garder à jour différents types de logiciel (par ex. les bibliothèques intégrées à l’application vs la mise à jour de système pour les ordinateurs des employés).
Cette exigence est applicable quelle que soit l’approche d’hébergement (par ex. BaaS, PaaS, IaaS, auto-hébergement ou hybride), même si l’ensemble de composants que vous êtes tenu de tenir à jour varie.
Le diagramme ci-dessous illustre les cas dans lesquels un correctif peut être demandé pour différents types d’architecture.
S’il vous est demandé de produire un justificatif de cette protection, veuillez suivre les instructions de la section Préparation de justificatif afin de préparer les justificatifs en matière de règlement/procédure et de mise en place.
Commencez par identifier les types de logiciel concernés dans l’environnement, par ex. les bibliothèques, les SDK, les packages, les images de machines virtuelles, les conteneurs d’applications, les systèmes d’exploitation, les navigateurs et les autres applications utilisées par les employés/contributeurs.
Peut-être avez-vous un ou plusieurs outils que vous utilisez pour les activités suivantes :
Snyk pour une application NodeJS - Un développeur utilise l’interface de ligne de commande Synk pour identifier les dépendances de tiers intégrées ayant présenté des vulnérabilités de sécurité et établir des priorités en fonction de leur gravité.
Un développeur utilise NPM Audit pour trouver des vulnérabilités dans les dépendances utilisées dans une application Node. L’image figurant ci-dessous à titre d’exemple reflète des vulnérabilités à haute gravité demandant un correctif.
Un développeur utilise Trivy pour trouver des vulnérabilités dans une image de machine. L’image figurant ci-dessous à titre d’exemple reflète des vulnérabilités à haute gravité dans des bibliothèques demandant un correctif.
Un développeur utilise Windows Server Update Services (WSUS) pour la gestion de sa flotte de serveurs et PC/ordinateurs portables. L’image figurant ci-dessous à titre d’exemple montre une vue admin de l’outil WSUS, permettant la vérification, l’approbation et le déploiement des mises à jour de Windows.
En l’absence de fichiers journaux fiables, il peut être difficile, voire impossible, pour un développeur de détecter les accès non autorisés aux Données de la Plateforme.
Si vous traitez des Données de la Plateforme côté serveur, dans cet environnement :
S’il vous est demandé d’importer un justificatif, ce dernier doit montrer que :
Une bonne compréhension de la manière dont les Données de la Plateforme doivent être traitées et dont la surveillance de ce traitement doit se dérouler permet aux organisations de veiller à ce que les Données de la Plateforme ne soient utilisées qu’aux fins prévues.
Si vous traitez des Données de la Plateforme côté serveur, dans cet environnement serveur, vous devriez :
S’il vous est demandé de produire un justificatif de cette protection, veuillez suivre les instructions de la section Préparation de justificatif afin de préparer les justificatifs en matière de règlement/procédure et de mise en place.
Vous devriez fournir des justificatifs montrant que :
Il n’est pas réaliste de confier à des humains l’examen et l’identification de comportements inattendus dans un système moderne accessible sur Internet. Mieux vaut faire appel aux outils existants, capables de traiter les fichiers journaux et autres signaux pour déclencher des alertes. Ces alertes peuvent alors être soumises à un examen humain plus poussé.
Si vous traitez des Données de la Plateforme côté serveur, dans cet environnement serveur, vous devriez :
Les développeurs adoptent en général à cet effet un outil de gestion des informations et des évènements de sécurité (SIEM), par exemple :
Vous devriez fournir des justificatifs montrant que les sources de signaux pertinentes sont transmises à l’outil correspondant, que les déclencheurs et les alertes ont été configurés, que les alertes sont transmises au personnel responsable du suivi, et enfin qu’il existe un processus permettant d’ajuster régulièrement les alertes (par ex. via des cycles mensuels de vérification et mise à jour).
3rd party - in risk management terminology, 3rd party refers to developers on Meta’s platform (1st party is Meta itself; 2nd party is people that use Meta’s products)
4th party - in risk management terminology, 4th party refers to the firms that developers rely on to provide them services that enable their business (1st party is Meta, 2nd party is Meta’s users, and 3rd party is developers on Meta’s platform)
Access token - a credential, like a password, that allows software to call an API to take some action (e.g., read data from a user’s profile).
Amazon Web Services (AWS) - Amazon’s suite of cloud computing services
App scoped ID (ASID) - a unique identifier that Meta generates when a person chooses to use an app. ASIDs help improve privacy for users by making it more difficult for data sets to correlate users across apps, since a single user using two apps will have different ASIDs in each app.
App secret - a shared secret that Meta makes available to developers via the app dashboard. Possession of the app secret authorizes software to take some actions via the Graph API, so developers need to take care that unauthorized parties are not able to get access to the app secret.
App compromise - if a malicious actor is able to gain unauthorized access to an organization’s internal network via a misconfiguration or vulnerability in their app (e.g., a software vulnerability in a webapp) it’s called app compromise. A defense against app compromise is to pen test the app. See also network compromise.
Application container - a container packages up software code and related dependencies so that the app will run on different types of servers (e.g., servers running different operating systems like Linux or Windows Server). A developer will create a container image that packages their app. An application container engine or runtime hosts (runs) the container image.
Application encryption - a method of protecting data where the application software itself does the encryption and decryption operations. In contrast, Transport Layer Security (TLS) seamlessly encrypts data in transit when an application establishes a secure connection to a remote server (e.g., using HTTPS) and cloud providers offer services to transparently encrypt data at rest.
Application Programming Interface (API) - allows two computers to talk to each other over a network, for example a mobile app fetching today’s weather for a certain location from a centralized weather forecasting system
Appsecret proof - an additional layer of security for API calls to Meta whereby a developer generates a parameter (the appsecret proof) that demonstrates that they possess the app secret. The appsecret proof is the product of a hashing function (also called a one-way function) based on the app secret and access token. Configuring an app to require appsecret proofs during Graph API invocations reduces the potential harm from a breach of user access tokens, since those access tokens cannot be used without the additional appsecret proof parameter.
Backend as a Service (BaaS) - a style of cloud computing that provides a suite of server-side capabilities for an app developer so that the developer can focus on building the frontend (i.e., the part of an app that users interact with). BaaS solutions are similar to PaaS and, in addition, add services like user authentication and mobile push notifications. For example, these are some popular BaaS products: AWS Amplify, Azure Mobile Apps, Firebase, and MongoDB Switch.
Cipher text - a synonym for encrypted data, cipher text is the name given to data that has been made unreadable via some encryption algorithm. The opposite of cipher text is plain text.
Client side - people typically interact with internet-accessible services by opening a website in a browser or by running a mobile app on a phone or tablet. The browser or mobile apps are referred to as local clients or client side. Clients make requests from remote computers (servers) via the internet.
Cloud computing - refers to a style of managing server computers, networks, and storage so that an organization doesn’t need to worry about the physical environment (i.e., a data center full of server racks and network cables). Instead, the organization can provision these assets on demand and pay for the services that they consume.
Cloud configuration - the set of cloud computing options that an organization has set in relation to their use of a cloud provider running some software. Examples of cloud configuration include what sorts of network connections are allowed or blocked, where log files are written and how long they are kept, and the set of users who are authorized to make changes to the cloud configuration.
Compensating controls - a security control that differs from some baseline set of requirements but is intended to deliver comparable protection against a risk.
Database - software that allows arbitrary data to be stored, read, updated, and deleted. Databases can run on clients and on servers. Organizations that integrate with the Meta platform will commonly store data they fetch from the Graph API in a database that runs server side.
Decryption - process by which encrypted data is transformed back into its original format. In other words, decryption changes cipher text into plain text.
Encryption - process by which data is transformed into a format that is unusable to anyone that cannot decrypt it. In other words, encryption changes plain text into cipher text.
Encryption at rest - data that has been protected with encryption when written to persistent storage (e.g., a disk drive). Encryption at rest provides an additional layer of protection against unauthorized access since an actor that’s able to read the raw files on the storage device will see cipher text and will not be able to decrypt it unless they are also able to gain access to the decryption key.
Encryption in transit - data that has been protected with encryption when transmitted across a network. Encryption in transmit provides protection against eavesdropping along the network path since an actor that’s able to read the network packets will see cipher text and will not be able to decrypt it unless they are also able to gain access to the decryption key.
End of Life (EOL) software - when an organization chooses to stop support (e.g., create patches to resolve security vulnerabilities) for a software product that software is considered EOL. Since this software is no longer maintained, it’s very risky to run any EOL software.
Google Cloud Platform (GCP) - Google’s suite of cloud computing services
Graph API - the primary way for apps to read and write to the Meta social graph. All Meta SDKs and products interact with the Graph API in some way.
Hashing function - a cryptographic function that takes any data as input and outputs a short code that cannot be reversed into the original input. In cryptography, hashing functions are used to protect data like passwords – instead of storing a user’s password in plaintext that could be stolen, passwords are first transformed with a hash function and then stored. Later, to confirm that a user has input the correct password, the system will use the same hash function to transform the input and compare the resulting hash against the stored value. Also called a one-way function since the output hash cannot be reversed into the original input.
Hosted environment - refers to a set of remote servers, networks, and storage devices that an organization is running in their own data center or within a data center co-located (or colo) with other customers. This arrangement is relatively uncommon in the modern era since cloud computing has become more popular.
Identity Provider (IdP) - a cloud service used to centralize management of digital identities and authenticate users. Organizations that use an IdP typically configure cloud apps to rely on the IdP for user authentication. The organization can then manage users by creating, granting access to selected apps, and disabling user accounts centrally within the IdP instead of having to do this repeatedly in each cloud app.
Identity and Access Management (IAM) - refers to the category of tools and processes that are used to manage accounts and grant access to systems.
Infrastructure as a Service (IaaS) - a cloud computing approach that lets customers configure computing, storage, and networking services without having responsibility for the physical assets themselves (e.g., managing a data center full of servers, network devices, and storage arrays). Compared to Paas, IaaS gives an organization more control over the configuration of their cloud assets but at the cost of more complexity to manage those assets. For example, these are some popular IaaS products: AWS EC2, Microsoft Azure IaaS, and Google Compute Engine.
Library - pre-existing software building blocks, typically from an external company or developer, that’s used to handle certain tasks within another developer’s app or system. Libraries simplify development of an app since a developer doesn’t have to reinvent the wheel when a library already exists for a given function. However, libraries can contain security vulnerabilities – or can themselves include additional libraries that do – so developers who use libraries as part of their app need to know what libraries are in use and keep them up to date over time.
Mobile client or mobile app - an app that a person installs onto a phone or table from a mobile app store (e.g., iOS App Store or Google Play Store). It’s common for mobile clients to communicate over the internet with an organization’s REST API and may also communicate with other parties (e.g., to the Graph API via the Facebook SDK for Android).
Multi-Factor Authentication (MFA) - an authentication approach that requires more than one factor to gain access to an app or system. MFA, in contrast to single factor authentication that relies on just a password to authenticate a user, will typically require a password plus one or more of these: a code sent via email or SMS, a code from an authenticator app, a biometric scan, or a security key. MFA protects against account takeovers by making it more difficult for unauthorized actors to force their way into an account, e.g., by repeatedly attempting to login to an account by using a known email address and common passwords until successful.
Native software - apps that are downloaded and installed onto laptops or mobile devices are referred to as native software (e.g., the Facebook app for iOS). In contrast, an app that runs within a browser is referred to as a webapp (e.g., opening Facebook using the Chrome browser).
Network compromise - if a malicious actor is able to gain unauthorized access to an organization’s internal network via a misconfiguration or vulnerability in the network itself it’s called a network compromise. A defense against network compromise is to run a network scan to identify misconfigurations and vulnerabilities in the internet-facing network. See also application compromise.
Network scan - a risk management process that uses software to: (1) identify active servers on a network that will respond to remote communications, and then (2) see if any of those servers are running old versions of software that is known to be vulnerable to one or more security exploits. An organization may use network scanning periodically to make sure that there are no unexpected open ports on their network perimeter, for example.
Node Package Manager (NPM) - a tool used by JavaScript developers to speed up development by allowing pre-built packages to be included in a developer’s app or system. NPM includes features to audit the set of packages that are in use by an app and to identify packages that have known security vulnerabilities.
Object storage buckets - a type of persistent storage in the cloud that makes it simple for organizations to store files into persistent storage, including files that are very large, without having to worry about scaling physical assets like storage arrays or how to back these files up to ensure they aren’t lost in the case of a disaster like a fire or flood.
Operating System - the software running on a computer or mobile device that allows applications to run and use that computer’s processor, memory, storage, and network resources. For example, Microsoft’s Windows, Apple’s macOS or iOS, and Linux.
Organization member - someone with a role and responsibilities within an organization, for example an employee, a contractor, a contingent worker, an intern, or a volunteer.
Organizational device - a computer or mobile device used by an organization member in the context of doing work for the organization.
Platform Term 6.a.i - Refers to Meta’s Platform Terms section (6) heading (a) paragraph (i), which describes platform developers’ obligations related to data security.
Package - synonym for library
Patch - software updates that resolve security vulnerabilities, fix bugs, or add new functionality. All sorts of software gets patched, including Operating Systems, containers, libraries, and SDKs.
Penetration test - a simulated attack against an app or system where the tester attempts to find vulnerabilities in the code or configuration that could be exploited by an unauthorized actor. Pen testers will use similar tools to cyber criminals to conduct reconnaissance, scan for potential weaknesses, and test vulnerabilities that could be used to gain unauthorized access. At the conclusion of a pen test, the tester will create a report that describes the findings along with the severity of each and the organization that maintains the software is responsible for crafting fixes to resolve the vulnerabilities.
Plain text - a synonym for unencrypted data, plain text is the name given to data that has not been protected by encryption.
Platform as a Service (PaaS) - a cloud computing approach whereby a customer deploys an application into a platform managed by the cloud provider. Compared to IaaS, PaaS is simpler for customers to manage since not only the physical assets (i.e., the servers, storage devices, and network devices) are managed by the cloud host but also the operating system and application container where the customer’s app runs. For example, these are some popular PaaS products: AWS Elastic Beanstalk, Google App Engine, Force.com.
Port - when a client makes a connection to a server over the internet the destination address has two parts: (1) an Internet Protocol (IP) address for the server and (2) a port number on that server that a particular application will respond to. Common protocols use reserved ports (e.g., HTTPS uses 443) but a developer can use custom ports for network communications if desired.
REST API - a widely adopted style of building web-accessible services where the client and server communicate using the HTTP protocol. A developer on the Meta platform might host a REST API on a subdomain like api.example.com that their mobile app sends and receives Platform Data to/from.
Secure Shell (SSH) - a communication scheme that allows administrators to remotely login to servers and run programs on those servers. Referred to as secure since the communications between the client and server are protected against eavesdropping unlike earlier protocols like Telnet. Also called Secure Socket Shell.
Secure Sockets Layer (SSL) - An obsolete and insecure version of encryption in transit. The modern secure version is called Transport Layer Security (TLS).
Server - a computer that provides services remotely over a network. Browsers and mobile apps connect to servers over the internet.
Serverless computing - a style of cloud computing where the cloud host manages the physical infrastructure, the server operating system, and the container. A developer is only responsible for custom code and associated libraries along with the cloud configuration.
Server side - data or computation on the other side of a network connection (i.e., on a server) is referred to as server side. In contrast, data or computation on a local device like a laptop or mobile device is referred to as client side.
Single Sign On (SSO) - an arrangement where apps rely on a centralized user directory (i.e., an IdP) to authenticate users. In addition to centralizing user account and app access administration for the organization, users benefit by having a single set of credentials instead of requiring users to maintain different credentials (e.g., username and password) for each different app.
Software Development Kit (SDK) - a building block of code that a developer can use to simplify the development process for a given need. For example, Meta creates and maintains SDKs that simplify working with the Graph API for iOS and Android developers. Similar to a library, developers that use SDKs in their apps need to keep them up to date over time.
Software as a Service (SaaS) - allows customers to use cloud-based apps via the internet. Unlike PaaS or IaaS, a customer of a SaaS app does not deploy custom code nor have responsibility for configuring, upgrading, or patching the SaaS app as all of these are the responsibility of the SaaS software vendor. For example, these are some popular SaaS products: Dopbox, MailChip, Salesforce, Slack.
Static analysis - see Static Application Security Testing
Static Application Security Testing (SAST) - an approach for finding vulnerabilities in software by running a specialized tool against the source code. A SAST tool will identify potential vulnerabilities, such as those listed in the OWASP Top 10 project, and then the developer is responsible for reviewing the findings, distinguishing true positives from false positives, and fixing vulnerabilities in the software. SAST can be useful because it can allow developers to find vulnerabilities before they are deployed into production, but unlike a penetration test a SAST tool will not be able to find vulnerabilities related to the production configuration of the app.
Transparent data encryption - a type of encryption at rest that typically applies to database storage (i.e., the database contents themselves and its log files). In this arrangement, the database software manages the encryption keys and transparently handles the encryption operations (upon writes) and decryption operations (upon reads).
Transport Layer Security (TLS) - an encryption in transit scheme that uses encryption to protect data transmitted over networks from eavesdroppers along the network path. TLS is the modern secure version of the obsolete earlier technology called SSL.
Two-Factor Authentication (2Fac) - a synonym for Multi-Factor Authentication.
Vault - a secret management system for sensitive data like encryption keys, access tokens, and other credentials. A vault allows tight control over who is able to access the secrets it contains and offers additional services like keeping audit logs.
Virtual Machine (VM) - very similar to an Application Container – a VM runs in a host called a hypervisor whereas an Application Container runs in a container engine. The main difference is that a VM image contains an Operating System whereas an Application Container will not. Both VMs and Application Containers contain application(s) and dependencies like libraries.
Virtual Private Cloud (VPC) - term used by AWS to refer to a set of cloud resources that resembles a traditional network in a data center in the pre-cloud era.
Vulnerability - a flaw in a system or app that could be exploited, e.g., to read data that the actor otherwise would not be entitled to read
Vulnerability Disclosure Program (VDP) - an approach whereby organizations solicit security vulnerability reports from researchers (sometimes called ethical hackers) so that the vulnerabilities can be discovered and fixed before malicious actors exploit them. An effective VDP requires a set of researchers who are actively looking for vulnerabilities, analysts within the organization to review and triage incoming disclosures, and engineers who are knowledgeable about cybersecurity that are able to create and deploy fixes for vulnerabilities.
Vulnerability scan - an approach that uses software to look for vulnerabilities in servers, networks, and apps. Compared to a penetration test, a vulnerability scan is cheaper to run and hence can be run repeatedly (e.g., monthly or quarterly) but it’s typical that a pen test will find vulnerabilities that a vulnerability scan misses because skilled penetration testers bring analytical skills and instincts that are hard to replicate with strictly automated approaches. See also network scan.
Webapp - Webapps are programs that run inside browsers and are comprised of resources like HTML documents, JavaScript code, videos and other media, and CSS for styling. In contrast to a mobile app that a person installs onto a mobile phone from an app store, people simply fetch a webapp from a remote server using their browser (e.g., www.facebook.com) without the need for an installation step.