The following data security requirements correspond to the 2022-23 Data Protection Assessment.
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.
创建(或视需要更新)一张数据流程图或一篇介绍,说明应用或系统是如何处理开放平台数据的。
最后,务必在数据流程图或介绍中回答以下问题:
您可能需要提交证据,以佐证您对自己所执行的数据安全保护措施的相关回答。我们建议您阅读本文档中的“证据提交指南”,查看可接受的证据示例并相应地准备证据。我们接受常见的文件类型以及截图和录屏。请确保文件未设置密码保护。您可以上传多个文件,但每个文件不可超过 2 GB。我们接受的文件格式包括 .xls、.xlsx、.csv、.doc、.docx、.pdf、.txt、.jpeg、.jpg、.png、.ppt、.pptx、.mov、.mp4、.zip 和 .zipx。
在提交证据之前,请确保您已消除(移除)其中的敏感数据。
对于需要上传数据安全保护相关证据的应用,Meta 规定必须提供两种不同类型的文档:
政策或程序类证据,有时被称为一种管理控制手段,是用来介绍特定数据安全保护措施的书面文档。这类证据存在多种不同的形式,例如一系列内部政策的摘录、内部维基页面的部分或全部内容,或者您在没有任何现成文档的情况下新建的用来介绍相关措施的文档。在任何情况下,您上传的政策或程序类证据都必须解释清楚某数据安全保护措施与 Meta 的要求之间的联系。您只需提供与 Meta 安全审核相关且必要的政策或解释,或者通过对开放式问题的作答,引导我们的审核员查看相应部分的内容。
执行类证据是指,直接通过截图和录屏证明您实际上是如何执行特定政策或程序的。由于开发人员使用的工具配置各不相同,因此我们提供的示例无法涵盖每种情况。即便如此,执行类证据还是应当尽可能地以我们提供的示例为参照标准来展示相关细节。
我们理解,要准备执行类证据来给某项数据安全保护措施全面举证,这可能会造成过于沉重的负担。考虑到这一点,您应当按照以下指南提交证据,并且在提交证据之前,应小心消除其中的敏感数据:
请勿提交以可读(未消除)形式展示以下任意信息的证据。如果您要使用图像编辑器来生成截图,请用黑框遮挡这些信息。如果您使用的是 PDF 编辑器,请不要在保留文本的基础上只做简单的遮挡处理,而是一定要使用能真正移除文本的工具(例如,Apple Preview 应用中的 Redact [文本消除]工具),以确保您已真正消除这些信息。
问题:您是否对存储在云端、服务器或数据中心环境中的所有开放平台数据进行静止数据加密?
静止数据加密会使得数据在无单独的解密密钥的情况下无法解读,以此保护开放平台数据。这为防止未经授权读取数据提供了一层额外保护。
如果您在服务器端存储开放平台数据:
如果开发者不在服务器端存储开放平台数据,则不适用该要求。
如果您使用 IaaS 托管(例如 AWS EC2、Microsoft Azure IaaS 和 Google Compute Engine)、自托管或混合托管方法存储开放平台数据,那么这个问题不适用。
不过,有些后端托管模式属于特殊情况:
如果您仅通过以下任何产品(而未使用 IaaS、自托管或混合托管)存储开放平台数据,那么这个问题不适用。您需要做的就是,在数据保护评估 (DPA) 的服务提供商部分描述这种关系。
如果您仅通过某个 Meta API(例如在小游戏 SDK 中使用 player.setDataAsync()
)存储开放平台数据,那么这个问题不适用。
如果您需要提交有关已落实该保护措施的证据,请按照“准备证据”部分的说明,准备好政策/程序类和执行类证据。
AWS RDS — 可在 AWS RDS 中配置静止数据加密,开发者必须确保将配置选项设为应用这项保护服务。
对于包含开放平台数据的代表性 RDS 实例,使用 AWS CLI 工具获取其 StorageEncrypted 配置。
# 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 默认进行静止数据加密。您可以为使用这些命令的表格获取静止数据加密配置。
$ aws dynamodb list-tables --output table -------------- | ListTables | +------------+ ||TableNames|| |+----------+| || Users || |+----------+| $ aws dynamodb describe-table \ --table-name Users \ --query "Table.SSEDescription.Status" "ENABLED"
AWS DocumentDB 必须经过配置才能应用静止数据加密。对于包含开放平台数据的代表性集群,使用这些命令获取 StorageEncrypted 配置。
$ 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 存储桶,以便对在存储桶内创建的所有对象应用静止数据加密。使用这些命令来列出存储桶并获取默认存储桶加密配置。
$ 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 | +-------------------+
请查阅与组织的服务使用相关的 Microsoft Azure 静止数据加密文档。
请查阅 Google Cloud Platform 上的 Google 静止数据加密文档。
如果您不在服务器端环境中采用静止数据加密,您可以使用可接受的其他方法来保护开放平台数据。在此情况下,您应描述以下方面:
问题:具体对于存储在组织设备和个人设备上的数据:针对存储在这些设备上的所有开放平台数据,您是否采用了静止数据加密,或者制定了降低数据丢失风险的政策和规则?
如果开发者允许将开放平台数据存储在员工笔记本电脑或可移动存储设备(例如 U 盘)等设备上,那么在设备丢失或被盗的情况下,数据将面临无授权访问的高风险。开发者应采取措施降低这种风险。
为了降低开放平台数据被无授权访问的风险,开发者必须针对组织设备(例如笔记本电脑)和可移动媒体上的开放平台数据采取技术控制措施(首选)或管理控制措施(非首选,但可接受)。
无论是否在服务器端处理开放平台数据,此要求都适用。
如果您需要提交有关已落实该保护措施的证据,请按照“准备证据”部分的说明,准备好政策/程序类和执行类证据。
您可能正在使用以下其中一种或同时使用两种方法:a) 技术控制措施(例如,磁盘加密),或 b) 规则/政策,以降低存储在笔记本电脑和手机等组织设备上的开放平台数据的丢失风险。
技术控制措施可能包括:
规则/政策可能包括:
一个组织根据其数据分类标准将来自 Meta 的开放平台数据归类为“私密数据”。该组织制定了数据处理指南,并要求所有人员理解并遵守这些政策。
问题:您是否为传递、连接或跨公共网络传输开放平台数据的所有网络连接启用了安全协议 TLS 1.2 或更高版本?此外,您是否会确保绝不以未加密的形式在公共网络上传输(例如,通过 HTTP 或 FTP)开放平台数据,并确保绝不使用安全协议 SSL v2 和 SSL v3?
在网络中传输的开放平台数据允许可查看此网络流量的所有人访问。因此必须进行加密保护,防止无授权方读取数据。
无论您是否在服务器端处理开放平台数据:
下表总结了面向不同传输类型的传输加密政策。
传输类型 | 传输加密政策 |
---|---|
往返于终端用户设备(手机、桌面电脑、平板电脑等)与服务器或云基础架构之间。 |
|
往返于服务器或云基础架构与远程服务器、云基础架构或第四方服务之间。 | 必须使用 TLS 1.2 或更高版本 |
往返于私有数据中心、服务器或云基础架构中的不同部分之间 | 对于完全在私有云网络中传输的开放平台数据,TLS 加密为推荐而非强制要求 |
往返于 Meta 与任何设备、服务器或云基础架构之间 | 不在数据保护评估范畴内:Meta 控制这些数据传输的 TLS 策略 |
如果您需要提交有关已落实该保护措施的证据,请按照“准备证据”部分的说明,准备好政策/程序类和执行类证据。在准备执行类证据以证明某个 web 监听器的配置状态时,一种简单直观的方法是使用 Qualys SSL 服务器测试工具。
这是 Qualys SSL 服务器测试工具的输出结果示例。留意“配置”(Configuration) 部分的红色注释,该部分汇总了受支持的 SSL/TLS 版本。注:本示例仅包括前两页结果,但您在保存时应导出所有测试结果。
除了 TLS 外,您还可以使用其他类型的加密技术来保护开放平台数据的传输;前提是这些方案能提供同等的保护效力。在这种情况下,您应向 Meta 提交所用加密技术的详细信息以供审核:
问题:您测试应用和系统以发现漏洞和安全问题的频率是否不低于每 12 个月一次?(例如,您是否开展了手动渗透测试?)
开发者必须开展测试,积极寻找漏洞和安全问题,从而防患于未然
适用于所有开发者:
在服务器端处理开放平台数据的开发者还需满足更多要求:
如果组织正考虑在开发流程中增加静态分析安全测试 (SAST),这里有一份由美国国家标准技术研究所 (NIST) 维护的开源和商业工具列表可供参考,从而帮助您选用合适的工具。
如果您需要提交有关已落实该保护措施的证据,请按照“准备证据”部分的说明,准备好政策/程序类和执行类证据。
如果组织在云或服务器环境中处理开放平台数据,则包括:
您用于处理开放平台数据的互联网可访问云或服务器软件(例如,网站或移动客户端使用的 REST API)必须纳入该测试的范围内才符合要求。
如果组织不在云或服务器环境中处理开放平台数据,则包括:
渗透测试 - 组织委托其他公司对用于集成 Meta API 和处理开放平台数据的服务器端软件开展渗透测试。测试公司完成测试,并发出总结测试结果的信函,示例如下。留意测试(或重测,如适用)报告结尾处的红色注释,此处重点标明了测试日期(必须为过去 12 个月内)并汇总了未解决的重大/高风险漏洞。请先消除敏感信息(特别是任何详细的漏洞重现步骤),然后再提交报告。
静态分析 - 如果使用不同的方法(例如 SAST 工具),将结果导出到一个文档中,在里面注明 SAST 工具运行日期,并列出测试结果(包括每个测试结果的类型及其严重程度/重大程度)。
云配置审核
开发者使用 NCC Scout Suite,应用其云服务提供商(在本例中为 AWS)的默认规则集来审核其云配置,以发现漏洞和安全问题。该工具生成了一个包含详细运行结果的 JSON 文件。在本例中,有多个问题的严重程度被标记为“危险”,开发者需要审核并解决这些问题。
NCC Scout Suite 生成的 JSON 原始文件包含了您云端环境的详细信息,这些资料本不应上传。此时,您应筛选响应结果,并按严重程度显示结果计数。
$ 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" } }
开发者还可使用 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"}]}' []
如果您正在执行有效的漏洞披露计划 (VDP),例如使用 BugCrowd 或 HackerOne 平台,那么您可以将此提交为替代保护措施,而不用开展渗透测试或漏洞扫描。为此,您必须提交证据证明:
在此情况下,证据中应包含:
问题:是否同时采用了以下两种方法来保护 Meta API 访问口令和应用密钥?
应用密钥和访问口令是帐户安全的基础,关乎 Meta API 如何确定哪些操作允许执行。如果无授权方获得这些凭证的访问权,就能冒充开发者调用 Meta API,并执行我们对应用赋权的任何操作,例如从 Meta API 读取关于某位应用用户的数据。
访问口令
应用密钥 — 以下两项之一必须得到满足:
如果您需要提交有关已落实该保护措施的证据,请按照“准备证据”部分的说明,准备好政策/程序类和执行类证据。
如果应用在服务器端处理 Meta 访问口令,请提供关于 Meta API 访问口令和应用密钥保护政策的文档,并举证证明您采取的保护措施(例如,使用数据保管库时,应证明数据值以加密格式存储,且应用配置为须提供应用密钥证明)。
确保您提交的证据中不包括(即已移除)任何密钥或访问口令的纯文本值。
一家组织使用 AWS Secrets Manager 来安全存储敏感数据,包括 Meta 应用密钥。
组织对其 Meta 应用进行了配置,要求 API 调用必须提供应用密钥证明。
问题:您是否至少每 12 个月检测一次安全事件响应系统和流程(例如,响应数据泄露或网络攻击的系统和流程)?
对任何公司而言,数据安全事故都是不可避免的,不过是迟早的问题。因此,各组织机构有必要未雨绸缪,指定具体人员负责事故管控的具体事项、与利益相关方沟通、修复错漏和总结经验教训。
开发者必须:
无论是否在服务器端处理开放平台数据,此要求都适用。
请按照“准备证据”部分的说明,准备政策/程序和实施证据。
开发者已基于此模板创建完善的事故响应计划。这些图像仅展示了目录,但下方有一个指向完整模板的链接。
请参阅完整的 Counteractive 事故响应计划模板(docx 格式)
开发者已通过桌面演习对其事故响应计划进行了测试,并基于此模板记录了结果。
此处仅包含前两页,而您提交时应提供完整文档。
问题:对于能够连接到云或服务器环境和/或访问您用于运行、维护、监控和操作特定系统(该系统被您用于存储 Meta 开放平台数据)的每个帐户,您是否对帐户远程访问设置了多重验证?
不法分子获取机密数据访问权的常用手段之一是先获得开发者用于构建或运行其应用/系统的工具的访问权。有些复杂的工具可用于破解仅用密码来保护的帐户;多重验证能额外提供一层安全保护,防范此类风险。
根据组织对开放平台数据的处理,对下述工具的远程访问必须使用多重验证来保护(即不能仅使用密码进行保护):
具体而言,以下工具需要使用多重验证或可接受的其他保护措施:
关于多重验证的使用:
如果您需要提交有关已落实该保护措施的证据,请按照“准备证据”部分的说明,准备好政策/程序类和执行类证据。
一个组织使用 AzureAD 作为其单点登录解决方案。此策略需要添加多重验证。
该策略随后应映射到其适配的云应用。使用此方法时,证据应显示整个选定项目部分,以明确哪些云应用需要多重验证。
此规则要求针对所有登录设置多重验证。
这是一个 AWS IAM 策略示例,该策略允许使用多重验证配置,但在无多重验证的情况下禁止其他操作。
一个组织已将 GitHub 身份验证配置为对组织中的每个人要求多重验证。
问题:您是否拥有帐户维护系统(访问权限和管理权限的分配、撤销和审核)?
拥有良好的帐户管理习惯是防止帐户被无授权使用,继而杜绝开放平台数据泄露的重要一环。具体来说,开发者必须确保对各种资源或系统的访问权在访问结束后予以撤销。
无论是否在服务器端处理开放平台数据,此要求都适用。
请按照“准备证据”部分的说明,准备好政策/程序类和执行类证据。
政策/程序 - 一名开发者创建了访问权生命周期管理标准,其中涵盖访问权的授予、审核和撤销程序。
开发者使用 Workday 作为人力资源数据(包括员工在职状态)的权威来源。同时,还使用 Google Cloud Identity 作为身份提供商 (IdP),用于管理用户帐户和授予信息系统和工具的访问权。
在举证证明离职人员已被撤销访问权时,开发者提交了一份报告,证明近期(例如,最近 12 个月内)出具的核对报告显示,非在职员工在 Google Cloud Identity 中不存在活跃用户帐户;非在职员工根据 Workday 现有员工报告确定。
开发者使用 Google Cloud Identity 作为身份提供商 (IdP),用于管理用户帐户和授予信息系统和工具的访问权。
在举证证明不再使用的帐户(例如,最近 6 个月内未登录)已被撤销访问权时,开发者提交的证据显示,将用户目录按最近登录日期排序时,活跃用户帐户最近一次登录的日期均未超过上述时限。
开发者使用单点登录 (SSO) 工具进行身份管理,并授予信息系统和工具的访问权。开发者已将 GitHub 配置为需要 SSO 身份验证。
问题:您是否拥有保持系统代码和环境(包括服务器、虚拟机、发布版本、库、软件包和杀毒软件)更新的系统?
软件组件会定期更新或打补丁来修补安全漏洞,而当这些组件最终不再受支持时,它们的生命周期将宣告结束。封装或依赖这些组件的开发者必须保持其及时更新,以避免软件带着已知漏洞运行。
对于以下软件组件,如适用,您必须拥有一种定义明确且可重复的方式,用来确定可用补丁用于修正安全漏洞、优先处理风险等级高的事项以及日常打补丁:
Meta 不要求为这些活动使用任何特定工具。一个组织通常会使用不同的方法来保持不同类型的软件及时更新(例如,随应用封装的库及员工笔记本电脑的操作系统更新)。
尽管您需要保持及时更新的组件集可能会有所不同,此要求适用于任何托管方法(例如 BaaS、PaaS、IaaS、自托管或混合托管)
下图说明了各种架构类型可能需要打补丁的情况。
如果您需要提交有关已落实该保护措施的证据,请按照“准备证据”部分的说明,准备好政策/程序类和执行类证据。
首先是确定环境中的范围内软件类型,例如库、SDK、软件包、虚拟机映像、应用容器和操作系统,以及员工/开发贡献者使用的浏览器、操作系统和其他应用程序。
您可能拥有用于以下活动的一种或多种工具:
适用于 NodeJS 应用的 Snyk — 开发者使用 Synk 命令行界面 (CLI) 来识别具有已知安全漏洞的已封装第三方依赖项,并根据这些漏洞的严重性等级进行优先处理。
一位开发者使用 NPM Audit 来查找 Node 应用程序中所用依赖项的漏洞。以下示例图像显示了需要打补丁的多个高严重性等级漏洞。
一位开发者使用 Trivy 查找虚拟机映像中的漏洞。以下示例图像显示了此映像所含库中需要打补丁的高严重性等级漏洞。
一位开发者使用 Windows Server Update Services (WSUS) 来管理其所有服务器和台式电脑/笔记本电脑。该工具允许查看、批准和部署 Windows 更新。以下示例图像显示了 WSUS 工具的管理视图。
如果没有可靠的日志文件,开发者可能难以甚至无法检测开放平台数据被无授权访问的情况。
如果您在服务器端处理开放平台数据,则在该环境中:
如果要求您上传证据,则证据应能证明:
了解应该如何处理开放平台数据并监控实际处理情况,这是组织确保开放平台数据仅用于预期目的的重要方式
如果您在服务器端处理开放平台数据,则在该服务器环境中,您应该:
如果您需要提交有关已落实该保护措施的证据,请按照“准备证据”部分的说明,准备好政策/程序类和执行类证据。
您应该提供证据证明:
纯依靠人工来审核和识别现代互联网访问系统中的异常行为不太现实。相反,可以使用一些工具来收集日志文件和其他信号,并发出需要人工进一步调查的提醒。
如果您在服务器端处理开放平台数据,则在该服务器环境中,您应该:
通常而言,开发者会使用安全信息和事件管理 (SIEM) 工具来实现此目的,例如:
您应提供证据证明以下几点:相关信号源被传输到其选择的工具中;已配置触发器或警报;提醒已发送给负责跟进的人员;以及最后,存在定期调整提醒的流程(例如,通过月度审核和更新周期)。
第三方 - 在风险管理术语中,第三方是指 Meta 开放平台上的开发者(第一方是 Meta;第二方是使用 Meta 产品的用户)。
第四方 - 在风险管理术语中,第四方是指为开发者的业务运营提供所需服务的公司(第一方是 Meta;第二方是 Meta 的用户;第三方是 Meta 开放平台上的开发者)。访问口令 - 软件用来调用 API 从而执行某些操作(例如,从用户个人主页读取数据)的一种凭证(比如密码)。
Amazon Web Services (AWS) - Amazon 推出的一整套云计算服务。
应用范围编号 (ASID) - 用户选择使用某个应用时 Meta 生成的唯一标识符。由于单个用户同时使用两个应用时,每个应用中生成的 ASID 不同,这使得数据集更难跨应用关联用户,从而更有利于保护用户隐私。
应用密钥 - Meta 通过应用面板提供给开发者的共享密钥。拥有应用密钥即可授权软件通过图谱 API 执行某些操作,因此开发者需要确保未获授权方无法访问该应用密钥。
应用入侵 - 如果不法分子利用组织应用中的配置错误或漏洞(例如网页应用中的软件漏洞)在未经授权的情况下访问组织的内部网络,则称为应用入侵。对应用开展渗透测试有助防止应用入侵。另请参见网络入侵。
应用容器 - 一个将软件代码和相关依赖项打包到一起的容器,可让应用在不同类型的服务器(即在不同的操作系统上运行的服务器,例如 Linux 或 Windows 服务器)上运行。开发者将创建打包其应用的容器镜像。应用容器引擎或运行时用于托管(运行)容器镜像。
应用加密 - 一种由应用软件自行完成加密和解密操作的数据保护方法。与之相对的是,当应用与远程服务器之间建立安全连接(例如使用 HTTPS)后,传输层安全协议 (TLS) 可无缝地加密传输中的数据,云服务提供商可提供以透明的方式加密静止数据的服务。
应用程序接口 (API) - 允许两台计算机通过网络相互对话(例如移动应用从中央天气预报系统获取某个地区当日的天气)的接口。
应用密钥证明 - 开发者生成的一个参数(应用密钥证明),用于证明他们拥有应用密钥,这为 Meta 调用 API 提供额外的安全保护。应用密钥证明是根据应用密钥和访问口令构建的一个散列函数(也称为单向函数)。配置应用时要求在调用图谱 API 期间须提供应用密钥证明,这样有助减少用户访问口令泄漏造成的潜在危害,因为在未提供额外应用密钥证明参数的情况下,这些访问口令是无法使用的。
后端即服务 (BaaS) - 一种云计算服务,为应用开发者提供一套服务器端功能,让开发者可以集中精力构建前端(即与用户交互的应用部分)。BaaS 解决方案与 PaaS 相似,并额外增加了用户身份验证和移动推送通知等服务。常见的 BaaS 产品示例如下:AWS Amplify、Azure Mobile Apps、Firebase 和 MongoDB Switch。
密文 - 加密数据的同义词,通过某种加密算法使得数据无法被读取,以此获得的文本即为密文。与密文相反的是纯文本。
客户端 - 通常,用户通过在浏览器中打开网站或者在手机或平板电脑上运行移动应用来使用互联网访问服务。该浏览器或移动应用即称之为本地客户端或客户端。客户端通过互联网从远程计算机(服务器)发出请求。
云计算 - 一种管理服务器计算机、网络和存储的方式,可免去组织对物理环境(即配备有服务器机架和网络电缆的数据中心)的担忧。或者,组织也可以按需准备这些资产,并为自己使用的服务付费。
云配置 - 组织设置的与其使用云服务提供商来运行某些软件有关的一组云计算选项。云配置的示例包括允许或阻止的网络连接类型、日志文件的写入位置和保存时长,以及经授权更改云配置的用户群。
补偿性控制 - 一种安全控制措施,它不同于某些基准要求,但目的是提供同等的风险保护。
数据库 - 允许存储、读取、更新和删除任意数据的软件。数据库可在客户端和服务器端上运行。集成 Meta 开放平台的组织通常将从图谱 API 获取的数据存储在服务器端上运行的数据库中。
解密 - 将加密数据转换回原始格式的过程。换句话说,解密就是将密文转换为纯文本。
加密 - 将数据转换为任何人都无法解密的格式的过程。换句话说,加密就是将纯文本转换为密文。
静止数据加密 - 将数据写入永久存储器(例如磁盘驱动器)时通过加密来保护数据的方式。静止数据加密为防止不法分子未经授权访问数据提供了一层额外保护,因为即使他们能够读取存储设备上的原始文件,看到的也只是密文,除非他们也获得解密密钥,否则将无法解密这些文本。
传输中加密 - 在网络中传输数据时通过加密来保护数据的方式。传输中加密可防止不法分子沿网络路径窃取数据,因为即使他们能够读取网络数据包,看到的也只是密文,除非他们也获得解密密钥,否则将无法解密这些文本。
生命周期结束 (EOL) 软件 - 当组织选择停止为软件产品提供支持(例如,创建补丁以解决安全漏洞)时,即认为该软件达到 EOL。由于 EOL 软件不再有人维护,因此运行该软件存在很大风险。
Google Cloud Platform (GCP) - Google 推出的一套云计算服务图谱 API,这是应用读取和写入 Meta 社交关系图谱的主要方式。所有 Meta SDK 和产品均以某种方式与谱图 API 互动。
散列函数 - 一种加密函数,它使用输入的任意数据创建一个短代码,而输出的该短代码无法逆转为原始输入。在密码学中,散列函数用于保护密码等数据:它不是以纯文本的形式存储用户的密码,因为这样存在密码被盗的风险,而是会先使用散列函数转换密码然后再存储。随后,为了确认用户输入了正确的密码,系统将使用相同的散列函数来转换输入,并将获得的散列值与存储值进行比较。这也称为单向函数,因为输出的散列值无法逆转为原始输入。
托管环境 - 指组织在其自有的数据中心或与其他客户共同租赁的数据中心运行的一组远程服务器、网络和存储设备。随着云计算变得越来越流行,这种配置在现代也相对少见。
身份提供商 (IdP) - 一种用于集中化管理数字身份和验证用户身份的云服务。使用 IdP 的组织通常会配置云应用来通过 IdP 进行用户身份验证。之后,组织可以通过在 IdP 中集中创建应用、为选定应用授予访问权限和禁用用户帐户来管理用户,而无需在每个云应用中重复进行这些操作。
身份和访问管理 (IAM) - 指用于管理帐户和授予系统访问权限的一类工具和流程。
基础设施即服务 (IaaS) - 一种云计算方法,可供客户配置计算、存储和网络服务,而无需对实物资产本身负责(例如,管理配备有服务器、网络设备和存储阵列的数据中心)。相比 Paas,IaaS 给予组织更多控制权来配置其云资产,但也增加了管理这些资产的复杂性。常见的 IaaS 产品示例如下:AWS EC2、Microsoft Azure IaaS 和 Google Compute Engine。
库 - 现有的软件构建模块,通常来自外部公司或开发者,用于在另一开发者的应用或系统中处理某些任务。库可以简化应用的开发过程,因为如果已经存在某个函数的库,开发者便无需浪费时间做重复的事。但是,库可能包含安全漏洞,或者其本身可能包括存在安全漏洞的其他库。因此,在将库用于自己的应用中时,开发者需要了解使用的是哪些库并持续更新这些库。
手机客户端或移动应用 - 用户从移动应用商店(例如,iOS App Store 或 Google Play 商店)下载并安装到手机或平板电脑的应用。通常,手机客户端通过互联网与组织的 REST API 进行通信,还可以与其他方进行通信(例如,通过 Android 版 Facebook SDK 与图谱 API 通信)。
多重身份验证 (MFA) - 一种身份验证方法,用户需要通过多个因素的验证,之后才能获得访问应用或系统的权限。与仅依赖密码验证用户身份的单因素身份验证相比,MFA 通常需要提供密码和以下一项或多项:通过邮件或短信发送的验证码、身份验证应用发送的验证码、生物特征识别扫描或安全密钥。通过 MFA,不法分子更加难以在未经授权的情况下强行进入帐户(例如使用已知的邮箱和常见密码反复尝试登录帐户,直到成功为止),这样可以防止帐户被盗用。
原生软件 - 下载并安装到笔记本电脑或移动设备上的应用称为原生软件(例如,iOS 版 Facebook 应用)。相反,在浏览器中运行的应用称为网页应用(例如,使用 Chrome 浏览器打开 Facebook)。
网络入侵 - 如果不法分子利用网络本身的配置错误或漏洞,在未经授权的情况下访问组织的内部网络,则称为网络入侵。防止网络入侵的措施之一是运行网络扫描,从而发现面向互联网的网络中存在的配置错误和漏洞。另请参阅应用入侵。
网络扫描 - 一种使用软件进行的风险管理流程,其目的是:(1) 发现网络上存在的、将对远程通信做出响应的动态服务器;(2) 检查其中是否有任何服务器在运行已知容易受到一个或多个安全漏洞攻击的旧版软件。例如,组织可以定期进行网络扫描,确保其网络边界内没有意外打开的端口。
Node 包管理器 (NPM) - 一种供 JavaScript 开发者将预先构建的包纳入开发者的应用或系统中,以此来加速开发的工具。NPM 包括如下功能:审核应用所使用的一组软件包,以及识别包含已知安全漏洞的软件包。
对象存储桶 - 一种位于云端的永久性存储器,它可以简化组织将文件(包括非常大的文件)存储到永久性存储器的过程,而无需为扩展存储阵列等实物资产而担忧,也不用担心如何备份这些文件才能确保在发生火灾或洪水等灾害时文件不会丢失。
操作系统 - 计算机或移动设备上运行的软件,可帮助应用运行和使用该计算机的处理器、内存、存储空间和网络资源。例如,Microsoft 的 Windows 操作系统、Apple 的 macOS 或 iOS 操作系统,以及 Linux 操作系统。
组织成员 - 在组织中担任某种角色和职责的人,例如员工、合同工、临时工、实习生或志愿者。
组织设备 - 组织成员在为组织工作时使用的计算机或移动设备。
开放平台条款 6.a.i - 指 Meta 开放平台条款的第 (6) 条标题 (a) 下的段落 (i),其中描述了开放平台开发者的数据安全相关义务。
包 - 库的同义词
补丁 - 用于解决安全漏洞、修复漏洞或增加新功能的软件更新。所有类型的软件都要安装补丁,包括操作系统、容器、库和 SDK。
渗透测试 - 一种模拟攻击应用或系统的测试,测试员通过该测试尝试找到代码或配置中存在的漏洞,从而防止未经授权的人员利用这些漏洞来攻击应用或系统。渗透测试将使用网络罪犯所用的相似工具来进行侦查、扫描潜在的缺陷并测试可能被用于无授权访问的漏洞。渗透测试结束时,测试员将创建一份报告,描述测试结果并对每项结果划分严重程度,维护软件的组织则负责制定修复方案来解决漏洞。
纯文本 - 未加密数据的同义词,未通过加密来保护的数据称为纯文本。平台即服务 (PaaS) - 一种云计算方法,客户可通过使用该方法,将应用部署到云服务提供商管理的平台中。相比 IaaS,PaaS 能帮助客户简化管理,因为不仅是实物资产(即服务器、存储设备和网络设备),还有运行客户应用的操作系统和应用容器都由云托管管理。常见的 PaaS 产品示例如下:AWS Elastic Beanstalk、Google App Engine、Force.com。
端口 - 当客户端通过互联网与服务器建立连接时,目标地址有两个端口:(1) 服务器的互联网协议 (IP) 地址;以及 (2) 将收到特定应用程序响应的服务器的端口号。公共协议使用保留端口(例如,HTTPS 使用端口 443),但如果需要,开发者可为网络通信使用自定义端口。
REST API - 一种广泛采用的构建网页可访问服务的方式,其中客户端和服务器端之间通过 HTTP 协议进行通信。Meta 开放平台的开发者可以将 REST API 托管在类似 api.example.com 的子域上,让他们的移动应用可以收发开放平台数据。
安全外壳 (SSH) - 一种通信方案,管理员可通过该通信方案远程登录服务器并在这些服务器上运行程序。与 Telnet 等早期的协议不同,安全外壳协议得名于它对客户端和服务器端之间的通信进行了防窃取保护。也称为安全套接外壳。
Secure Sockets Layer (SSL) - 一种被淘汰和不安全的传输中加密协议。现代的安全协议称为传输层安全 (TLS) 协议。
服务器 - 通过网络远程提供服务的计算机。浏览器和移动应用通过互联网连接到服务器。
无服务器计算 - 一种云计算方式,其中物理基础设施、服务器操作系统和容器由云托管管理。开发者只负责自定义代码和相关的库以及云配置。
服务器端 - 位于网络连接另一侧(即服务器上)的数据或计算称为服务器端。与之相对的是,笔记本电脑或移动设备等本地设备上的数据或计算称为客户端。
单点登录 (SSO) - 应用依赖集中化的用户目录(即 IdP)来验证用户身份的一种配置。除了为组织集中化管理用户帐户和应用访问权限外,拥有唯一的一组凭证而不是每个不同的应用都有不同的凭证(例如,帐号和密码),这对用户来说也是有好处的。
软件开发工具包 (SDK) - 代码的一个构件模块,开发者可用它来简化开发流程以满足特定需求。例如,Meta 创建并维护 SDK,以便简化 iOS 和 Android 版图谱 API 开发者的工作。和使用库时一样,开发者将 SDK 用于自己的应用中时也需要持续更新这些 SDK。
软件即服务 (SaaS) - 允许客户通过互联网使用基于云的应用。不同于 PaaS 或 IaaS,SaaS 应用的客户不部署自定义代码,也不负责配置、升级或修复 SaaS 应用,因为所有这些都由 SaaS 软件提供商负责。常见的 SaaS 产品示例如下:Dopbox、MailChip、Salesforce、Slack。
静态分析 - 参见“静态应用程序安全测试”
静态应用程序安全测试 (SAST) - 通过运行一种专门针对源代码的工具来发现软件漏洞的方法。SAST 工具可发现潜在的漏洞,比如 OWASP Top 10(Web 应用程序十大最关键安全风险类别)项目中列出的漏洞,然后由开发者负责检查这些结果,区分漏报与误报,并修复软件中的漏洞。SAST 可使开发者在将软件部署到生产中之前发现其中存在的漏洞,因此能起到帮助作用,但与渗透测试不同的是,SAST 工具无法发现与应用的生产配置有关的漏洞。
透明数据加密 - 一种静止数据加密方式,通常适用于数据库存储(即数据库内容及其日志文件)。在这种配置中,数据库软件可管理加密密钥,并以透明的方式处理加密操作(写入时)和解密操作(读取时)。
传输层安全性 (TLS) - 一种传输中加密方案,它通过加密来保护通过网络传输的数据,以防止不法分子沿网络路径窃取数据。TLS 是被淘汰的早期技术 SSL 的现代安全版本。
双重验证 (2Fac) - 多重身份验证的同义词。Vault - 加密密钥、访问口令和其他凭证等敏感数据的机密管理系统。使用 Vault 可以严格控制访问其中所含机密的人,并提供其他服务,比如保存审计日志。
虚拟机 (VM) - 与应用容器非常类似,VM 在被称为 Hypervisor(虚拟机监控器)的主机上运行,而应用容器在容器引擎中运行。二者的主要区别在于,VM 镜像包含操作系统,而应用容器镜像则不包含操作系统。VM 和应用容器都包含应用和依赖项(比如库)。
虚拟私有云 (VPC) - AWS 使用该术语来指代一组云资源,这些云资源类似于云计算前时代数据中心中的传统网络。
漏洞 - 系统或应用中存在的缺陷,这些缺陷可能被不法分子利用(例如,不法分子未经授权读取数据)
漏洞披露计划 (VDP) - 组织向研究人员(有时称为文明黑客)征求安全漏洞报告的一种方式,这样便可以在不法分子利用漏洞之前发现它们并进行修复。要使 VDP 产生预期效果,需要有一组研究人员积极地寻找漏洞,由组织内部的分析员对收到的披露报告进行审核和分类,并由了解网络安全相关知识的工程师创建并部署漏洞补丁。
漏洞扫描 - 使用软件来查找服务器、网络和应用中存在的漏洞的一种方法。与渗透测试相比,漏洞扫描的运行成本更低,因而可以反复运行(例如,每月或每季度运行);但通常渗透测试可发现漏洞扫描过程中未发现的漏洞,因为熟练的渗透测试人员所具备的分析能力和直觉是无法通过严格自动化的方法复刻的。另请参见网络扫描。
网页应用 - 网页应用是在浏览器内运行的程序,包括各种资源,比如 HTML 文件、JavaScript 代码、视频和其他素材以及用于设置样式的 CSS。不同于用户从应用商店下载移动应用并安装到手机,用户只需使用浏览器从远程服务器获取网页应用(例如 www.facebook.com),而无需进行安装。