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 需要兩種不同類型的文件:
政策或程序證據有時稱為管理控制,是說明特定資料安全保護的書面文件。此類證據的形式可能會有所不同 – 也許是一套內部政策的摘錄、部分或全部的內部 Wiki 頁面,或是您用來說明作法的新建文件(如果您沒有任何預先建立的文件)。在任何情況下,您上傳的政策或程序證據都必須明確說明特定保護的作法與 Meta 的條件有何關聯。請僅提供與 Meta 安全審查相關且必要的政策或內容,或使用與問題相關的問答題方塊,以便將審查人員帶往至相關部分。
實作證據說明您如何直接透過螢幕截圖或螢幕錄影實際實施政策或程序。由於不同的開發人員有不同的配置,我們無法為每種情況都提供範例。話雖如此,實作證據應盡可能呈現出與我們提供的範例相同的詳細程度。
我們瞭解,要準備可完整展示已實作特定資料安全保護的實作證據,負擔可能過於沉重。考量到這一點,您應該按照此處的指引提交證據,提交前請記得修訂證據中的敏感資料:
請勿以可讀取(未修訂)的形式提交包含任何下列數值的證據。如果您使用圖像編輯器進行螢幕截圖,請在數值上方疊壓黑色方塊。如果您使用 PDF 編輯器,請確保用來修訂文字的工具可確實移除數值,而不只是單純加入圖層並保留文字(例如 Apple「預覽程式」應用程式中的修訂工具)。
問題:您是否為所有儲存在雲端、伺服器或資料中心環境的平台資料都執行待用資料加密?
待用資料加密能讓資料在沒有單獨解密金鑰的情況下無法辨識,從而保護平台資料。這能提供另一層的保護,避免未授權的讀取存取。
如果您將平台資料儲存在伺服器端:
如果開發人員並未將平台資料儲存在伺服器端,則不適用此規定。
若您使用 IaaS 代管(例如 AWS EC2、Microsoft Azure IaaS 和 Google Compute Engine)、自我行管或混合式手法來儲存平台資料,則此問題適用。
然而,有其他幾項後端代管模型為特殊案例:
如果您只透過以下任一方式(而非使用 IaaS、自我代管或混合式代管)儲存平台資料,則此問題不適用。您應改於資料保護評估的服務供應商部分說明此關係。
若您只透過 Meta API(例如使用 player.setDataAsync()
)在即時遊戲 SDK 中儲存平台資料,則此問題不適用。
如果系統要求您提交此保護措施的證據,請按照準備證據中的指示操作,準備政策/程序和實作證據。
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 資料加密說明文件,瞭解組織如何使用 Microsoft 的服務。
請參閱 Google 的 Google Cloud Platform 待用資料加密說明文件。
如果您並未在伺服器端環境中實行待用資料加密,您或許能採用其他可接受的替代方式來保護平台資料。在此情況下,您應說明下列事項:
問題:專門針對儲存遭組織和個人裝置的資料:你是否針對儲存在這些裝置上的所有平台資料實施待用資料加密,或設置政策和規則以降低資料遺失的風險?
如果開發人員允許員工筆記型電腦或卸除式媒體(例如 USB 隨身碟)上的資料,則如果裝置遺失或遭竊,該資料就面臨未授權存取的高風險。開發人員應採取步驟來限制此類風險。
為了降低未授權存取平台資料的風險,開發人員必須擁有與組織裝置(例如筆記型電腦)和卸除式媒體上平台資料相關的技術控制項(首選)或管理控制項(非首選但可接受)。
無論您是否在伺服器端處理平台資料,此規定皆適用。
如果系統要求您提交此保護措施的證據,請按照準備證據中的指示操作,準備政策/程序和實作證據。
為了降低儲存在筆記型電腦和手機上之平台資料遭到資料遺失的風險,您得使用下列其中一項或兩項:a)技術控制項(例如磁碟加密),或 b)規則/政策。
技術控制項可能包括:
規則/政策可能包括:
一家組織根據其資料分類標準,將 Meta 的平台資料分類為「私人資料」。該組織已建立資料處理守則,並要求所有人員瞭解並遵守這些政策。
問題:您是否為開放平台資料傳輸時會通過、連結或跨越所有公用網路都啟用 TLS 1.2 或更新版本的安全協定?此外,您是否確認開放平台資料從未以未加密的形式透過公用網路傳輸(例如透過 HTTP 或 FTP),而且確認從未使用 SSL v2 和 SSL v3 安全協定 ?
橫跨網路傳輸的平台資料可由任何能夠觀察網路流量的用戶存取,因此必須加密保護,以防止未授權的各方讀取資料。
無論您是否在伺服器端處理平台資料:
下方表格整理了適用於不同傳輸類型的傳輸期間加密政策。
傳輸類型 | 傳輸期間加密政策 |
---|---|
來往於用戶裝置(手機、電腦、平板電腦等等)以及伺服器或雲端基礎架構之間。 |
|
來往於伺服器或雲端基礎架構以及任何遠端伺服器、雲端基礎架構或第四方服務之間。 | 必須執行 TLS 1.2 或以上版本 |
來往於完全在私人資料中心、伺服器或雲端基礎架構內的元件 | 對於完全在私人雲端網路中進行的平台資料傳輸,建議使用 TLS,但非必要 |
來往於 Meta 以及任何裝置、伺服器或雲端基礎架構之間 | 不在資料保護評估的範圍內 - Meta 控管這些傳輸的 TLS 政策 |
如果系統要求您提交此保護措施的證據,請按照準備證據中的指示操作,準備政策/程序和實作證據。若要生成可展示其中一項網路接聽程式之配置的實作證據,可直接使用 Qualys SSL 伺服器測試工具。
此為 Qualys SSL 伺服器測試工具的匯出範例。請注意配置部分的紅色註解,該註解摘要說明支援的 SSL/TLS 版本。注意:此範例僅保護前兩頁,但您應提供完整的測試匯出。
您得使用 TLS 以外不同類型的加密來保護傳輸中的平台資料;若該方式能提供同等保護,則可能為系統所接受。在這種情況下,您應提交所使用之加密的詳情,以供 Meta 審查下列項目:
問題:您是否至少每 12 個月測試一次應用程式和系統的漏洞及安全問題?(例如,您是否手動執行滲透測試?)
開發人員必須對漏洞和安全問題進行測試,以便主動發現這些問題,最好是在安全事件發生之前就予以預防。
適用於所有開發人員:
針對在伺服器端處理平台資料之開發人員的其他規定:
如果組織正考慮將 SAST 加入開發流程,可參考 NIST 整理出的一份開放資源和商業工具清單,此清單會是幫助您選擇工具的絕佳起點。
如果系統要求您提交此保護措施的證據,請按照準備證據中的指示操作,準備政策/程序和實作證據。
如果組織在雲端或伺服器環境中處理平台資料:
您用於處理平台資料之可存取網路的雲端或伺服器軟體(例如網頁版和行動版客戶使用的 REST API)必須在此測試的範圍內,才可被接受。
如果組織並未在雲端或伺服器環境中處理平台資料:
滲透測試 - 某個組織委託測試公司針對自家在伺服器端執行的軟體進行滲透測試,該軟體與 Meta API 整合,並用於處理平台資料。測試公司完成測試並產出如下所示的摘要信函。請注意紅色註釋部分,其醒目標示出測試進行日期所表示的意思(必須在過去 12 個月內),以及一份摘要,列出在測試(或重新測試,如適用)或結論中所發現的極度/高度嚴重的未解決漏洞。在提交之前,請修訂報告中的敏感資訊(特別是任何詳細的漏洞重現步驟)。
靜態分析 - 如果使用不同方法(例如 SAST 工具),請將結果匯出成包含 SAST 進行日期和發現結果(包括各項發現結果的類型及其嚴重程度)清單的文件。
雲端設定檢查
開發人員使用 NCC Scout Suite 檢查他們的雲端設定是否有漏洞和安全問題,而 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 平台資料的每個帳號,您是否有對遠端存取這些帳號要求多重驗證?
不肖分子用於獲得機密資料存取權限的一種常見技術是先獲得存取開發人員用於打造或操作其應用程式/系統之工具的權限。有複雜的工具可駭入僅由密碼保護的帳號;而多重驗證能提供另一層的保護,防範此類風險。
由於攸關組織的平台資料處理,因此遠端存取此類工具的權限必須以多重驗證(亦即不僅僅依靠單一密碼)保護:
具體來說,以下情況需要 MFA 或可接受的替代保護措施:
關於 MFA 的實作:
如果系統要求您提交此保護措施的證據,請按照準備證據中的指示操作,準備政策/程序和實作證據。
一家組織使用 AzureAD 作為其單一登入解決方案。此政策要求多重驗證。
該政策隨後會對應到其所適用的雲端應用程式。藉由使用此方式,證據應顯示整個所選項目部分,以清楚展示哪些雲端應用程式需要 MFA。
此規則要求所有登入均須使用 MFA。
此為 AWS IAM 政策範例,該政策允許 MFA 配置,但若無 MFA 則禁止其他動作。
一家組織已配置 GitHub 驗證,以針對組織中的所有成員要求 MFA。
問題:您是否設有維護帳號的系統(指派、撤銷及審查存取權限)?
設置完善的帳號管理檢疫,是防止未授權使用帳號取得平台資料之權限的重要環節。開發人員尤其必須確保於不再需要存取資源或系統的權限時予以撤銷。
無論您是否在伺服器端處理平台資料,此規定皆適用。
請按照準備證據中的指示操作,準備政策/程序和實作證據。
政策/程序 - 開發人員已建立存取權限生命週期管理標準,其中包括授予、審查和撤銷存取權限的程序。
開發人員使用 Workday 作為人力資源(HR)資料(包括目前的聘僱狀態)的授權來源。開發人員使用 Google Cloud Identity 作為身分識別服務供應商(IdP),以管理用戶帳號和授予存取權限給資訊系統及工具。
開發人員提交證據,以證明離職員工的存取權限已撤銷。開發人員應提交一份報告表示最近(亦即在過去 12 個月內)曾進行核對報告,且該核對報告應顯示,根據現職員工的 Workday 報告,非現職員工的用戶並沒有存在於 Google Cloud Identity 的活躍用戶帳號。
開發人員使用 Google Cloud Identity 作為身分識別服務供應商(IdP),以管理用戶帳號和授予存取權限給資訊系統及工具。
開發人員提交證據,以證明不再使用(例如,過去 6 個月內不曾登入)的存取權限已撤銷。開發人員應提交以最後登入時間排序的用戶目錄,以表明沒有最後登入時間晚於此時間的活躍用戶帳號。
開發人員使用單一登入(SSO)工具,以管理身分和授予存取權限給資訊系統及工具。開發人員已設定 GitHub 以要求 SSO 驗證。
問題:您是否設有一套系統以確保系統程式碼和環境保持在最新狀態,包括伺服器、虛擬機器、發佈服務、資料庫、套件和防毒軟體等?
系統會定期更新或修補軟體元件,以解決安全性漏洞,而最終這些元件會在不受支援時達到其使用壽命。打包或依賴這些元件的開發人員必須隨時掌握最新消息,以避免執行有已知漏洞的軟體。
對於下列軟體元件,依適用情況而定,您必須擁有定義明確並可重複的方式來找出能解決安全性漏洞的可用修補、根據風險排定優先順序,並將施加修補作為一項持續進行的業務活動:
Meta 並未要求針對這些活動使用任何特定工具。組織通常會使用不同方式來將不同類型的軟體保持在最新狀態(例如,與應用程式一起封裝的資料庫以及員工筆記型電腦的作業系統更新)。
此要求適用於任何代管方法(BaaS、PaaS、IaaS、自我代管或混合式),不過您負責保持在最新狀態的元件組合會有所不同。
下方圖表說明各種架構類型可能需要修補的位置。
如果系統要求您提交此保護措施的證據,請按照準備證據中的指示操作,準備政策/程序和實作證據。
首先找出環境中範圍內的軟體類型,例如資料庫、SDK、套件、虛擬機器圖像、應用程式容器,以及員工/協作者使用的作業系統、瀏覽器、作業系統和其他應用程式。
您可能擁有用於下列活動的一項或多項工具:
用於 NodeJS 應用程式的 Snyk - 開發人員使用 Synk 命令列介面(CLI)來找出具有已知安全漏洞的套裝第三方相依性,並根據這些漏洞的嚴重程度排定優先順序。
開發人員正使用 NPM 稽核來尋找 Node 應用程式中使用之相依性的漏洞。以下範例圖像顯示出多個需要修補的高嚴重性漏洞。
開發人員使用 Trivy 來找出機器圖像中的漏洞。以下範例圖像顯示出包含在此圖像中且需要修補的資料庫高嚴重性漏洞。
開發人員使用 Windows Server Update Services(WSUS)來管理其大量伺服器和電腦/筆記型電腦。以下範例圖像顯示出 WSUS 工具的管理員檢視畫面,該工具允許審查、批准和部署 Windows 更新。
如果沒有可靠的紀錄檔案,開發人員就可能很難或甚至不可能偵測到未授權存取平台資料的行為。
如果您在伺服器端處理平台資料,則在該環境中:
若系統要求您上傳證據,就應證明:
瞭解平台資料的預期處理方式,接著監控實際處理,是組織確保平台資料僅用於預期目的的重要方式。
如果您在伺服器端處理平台資料,則在該伺服器環境中,您應該:
如果系統要求您提交此保護措施的證據,請按照準備證據中的指示操作,準備政策/程序和實作證據。
您應提供以下證據:
要依靠人工來審查和找出現代網路連線系統中的非預期行為十分不切實際。其實有工具能夠內嵌記錄檔案和其他訊號,以提出需要用戶進一步的調查的警告。
如果您在伺服器端處理平台資料,則在該伺服器環境中,您應該:
開發人員通常會為此目的採用安全資訊與事件管理(SIEM)工具,例如:
您應提供能證明下列事項的證據:系統正將相關訊號來源送至所選工具中、已配置觸發器或警報、系統已將警報送至負責追蹤的人員,以及最後一項:擁有定期調整警報的程序(例如透過每月審查和更新週期)。
第三方 - 在風險管理專用術語中,第三方是指 Meta 開放平台上的開發人員(第一方是 Meta 本身;第二方是使用 Meta 產品的用戶)
第四方 - 在風險管理專用術語中,第四方是指提供服務予開發人員以營運業務的公司(第一方是 Meta,第二方是 Meta 用戶,第三方是 Meta 開放平台上的開發人員)存取權杖 - 如密碼等認證,可讓軟體呼叫 API 以採取部分動作(例如讀取來自用戶個人檔案的資料)。
Amazon Web Services(AWS)- Amazon 的雲端運算服務套件
應用程式範圍編號(ASID)- Meta 在用戶選擇使用應用程式時產生的唯一識別碼。ASID 有助於保障用戶隱私,因為使用兩款應用程式的單一用戶在各應用程式中擁有不同 ASID,使得資料集較難以建立與不同應用程式用戶間的關聯性。
應用程式密鑰 - Meta 透過應用程式主控板提供給開發人員的共用密鑰。持有應用程式密鑰即可授權予軟體,透過圖形 API 採取部分動作,因此開發人員必須留意,未獲授權方無法存取應用程式密鑰。
應用程式入侵 - 如果有心人士能夠透過組織的應用程式設定錯誤或漏洞(例如,網頁應用程式的軟體漏洞),在未經授權的情況下存取組織的內部網路,便稱為「應用程式入侵」。防範應用程式入侵的其中一種方法就是,為應用程式進行滲透測試。另請參閱網路入侵。
應用程式容器 - 一種容器,用以封裝軟體程式碼和相關相依性,以便應用程式在不同類型的伺服器(例如,執行 Linux 或 Windows Server 等不同作業系統的伺服器)上執行。開發人員將建立封裝其應用程式的容器映像。應用程式容器引擎或執行階段會代管(執行)容器映像。
應用程式加密 - 一種保護資料的方式,應用程式軟體本身會進行加密和解密作業。相比之下,當應用程式建立與遠端伺服器的安全連線(例如,使用 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 通訊,也可能與其他方通訊(例如,透過 Facebook Android SDK 與圖形 API 通訊)。
多重要素驗證(MFA)- 一種驗證方法,要求提供一種以上的要素,才能存取應用程式或系統。單一要素驗證只依賴密碼來驗證用戶,而 MFA 通常會要求密碼以及下列一或多項要素:透過電子郵件或簡訊傳送的代碼、來自驗證應用程式的代碼、生物識別掃描,或安全金鑰。未獲授權的有心人士會使用不明電子郵件地址和常見密碼,不斷嘗試登入帳號,直到成功為止。而設置 MFA 會增加他們登入的難度,藉此保護帳號不被盜用。
原生軟體 - 下載並安裝到筆記型電腦或行動裝置的應用程式稱為「原生軟體」(例如 iOS 版 Facebook 應用程式)。相反地,在瀏覽器上執行的應用程式則稱為「網頁應用程式」(例如,使用 Chrome 瀏覽器開啟 Facebook)。
網路入侵 - 如果有心人士能夠透過組織內部網路的設定錯誤或漏洞,在未經授權的情況下存取組織的內部網路,便稱為「網路入侵」。防範網路入侵的方法就是執行網路掃描,在連結網際網路的網路中找出設定錯誤處和安全漏洞。另請參閱應用程式入侵。
網路掃描 - 使用軟體進行下列事項的風險管理程序:(1)識別網路中會回覆遠端通訊的動態伺服器,然後(2)看看這些伺服器中的任一者是否正在執行確知容易受到一或多個安全性入侵影響的舊版本軟體。舉例來說,組織可以定期使用網路掃描,以確保自己的網路周邊沒有預期之外的開啟通訊埠。
節點封裝管理員(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 開放平台的開發人員可能會在 api.example.com 等子網域代管 REST API。開發人員的行動應用程式會從子網域傳送和接收開放平台資料。
安全殼層(SSH)- 一種通訊配置,可讓管理員遠端登入伺服器,並在這些伺服器上執行計畫。由於用戶端和伺服器端間的通訊受到保護,可避免受到竊聽攻擊,因此被認為是安全的,不像 Telnet 等先前的通訊協定。也稱為安全資料傳輸層。
安全資料傳輸層(SSL)- 一種過時且不安全的傳輸中資料加密版本。現代採用的安全版本稱為「傳輸層安全性(TLS)」。
伺服器 - 透過網路遠端提供服務的電腦。透過網際網路連結伺服器的瀏覽器和行動應用程式。
無伺服器運算 - 一種雲端運算方式,雲端主機負責管理實體基礎架構、伺服器作業系統和容器。開發人員只負責自訂程式碼和相關程式庫,以及雲端設定。
伺服器端 - 在網路連線另一端(也就是在伺服器上)的資料或運算被稱為「伺服器端」。相反地,在筆記型電腦或行動裝置等本機裝置上的資料或運算被稱為「用戶端」。
單一登入(SSO)- 一種配置方式,應用程式依賴集中的用戶目錄(亦即 IdP)以驗證用戶。除了為組織集中管理用戶帳號和應用程式存取權管理,單一認證組也對用戶有好處,無須再要求用戶為各個應用程式維護不同認證(例如用戶名稱和密碼)。
軟體開發套件(SDK)- 一種程式碼建置組塊,開發人員可用於簡化針對特定需求的開發流程。舉例來說,Meta 為 iOS 和 Android 開發人員建立藉由圖形 API 簡化工作流程的 SDK,並加以維護。與程式庫類似,在自家應用程式使用 SDK 的開發人員必須時時確保 SDK 是最新狀態。
軟體即服務(SaaS)- 可讓顧客透過網際網路使用雲端型應用程式。與 PaaS 或 IaaS 不同,SaaS 應用程式的顧客不用部署自訂程式碼,也無須負責設定、升級或修補 SaaS 應用程式,因為這全部都由 SaaS 軟體廠商負責處理。舉例來說,一些熱門的 SaaS 產品包括:Dopbox、MailChip、Salesforce、Slack。
靜態分析 - 查看靜態應用程式安全測試
靜態應用程式安全測試(SAST)- 針對原始程式碼執行特殊工具,以找出軟體中漏洞的一種方法。SAST 工具會找出潛在漏洞,例如列於 OWASP 前 10 名專案內的漏洞,接著開發人員負責檢查發現結果,從誤判為真的結果中找出實際為真的結果,並且修正軟體中的漏洞。SAST 很有幫助,因為開發人員將軟體部署到生產階段前,可以透過 SAST 找出漏洞。不過,與滲透測試不同,SAST 工具無法找出與應用程式生產設定相關的漏洞。
透明資料加密 - 一種待用資料加密方式,通常使用在資料庫儲存體上(亦即資料庫內容本身及其紀錄檔)。在此配置中,資料庫軟體管理加密金鑰,並透明地處理加密作業(在寫入時)和解密作業(在讀取時)。
傳輸層安全性(TLS)- 一種傳輸中資料加密配置,使用加密來保護透過網路傳送的資料,以免在網路路徑上受到竊聽者攻擊。SSL 是過時的舊技術,而 TLS 是現代採用的安全版本。
雙重驗證(2Fac)- 多重要素驗證的同義詞。保存庫 - 一種密鑰管理系統,用於管理加密金鑰、存取權杖和其他認證等敏感資料。保存庫可嚴謹地控制哪些人能夠存取保存庫中的密鑰,並提供如稽核紀錄等額外服務。
虛擬機器(VM)- 與應用程式容器非常相似。VM 在稱為「Hypervisor」的主機上執行,應用程式容器則在容器引擎中執行。主要的差異在於,VM 映像包含作業系統,應用程式容器則否。VM 及應用程式容器都包含應用程式和相依性(如程式庫)。
虛擬私有雲端(VPC)- 這是 AWS 用來指稱一組雲端資源的詞語,這組雲端資源類似於雲端技術出現前之資料中心內的傳統網路。
漏洞 - 系統或應用程式中可能遭到惡意探索(例如,讀取有心人士本來無權讀取的資料)的瑕疵
漏洞揭露計畫(VDP)- 組織用於向研究人員(有時稱為道德駭客)請求安全漏洞報告的一種方法,組織可以透過這份報告找出並修正漏洞,以免有心人士惡意探索漏洞。有效的 VDP 需要一組研究人員、組織內的分析師和工程師參與,研究人員負責主動尋找漏洞,分析師負責檢視和分級收到的揭露內容,工程師熟悉網路安全相關知識,因此能夠針對漏洞建立並部署修正程式。
漏洞掃描 - 一種使用軟體搜尋伺服器、網路和應用程式中漏洞的方法。與滲透測試相比,漏洞掃描執行成本較低,因此可以重複執行(例如每月或每季),不過滲透測試往往能找到漏洞掃描遺漏的漏洞,因為技術純熟的滲透測試人員擁有分析技能和直覺,純自動化的掃描方法很難比得上。另請參閱網路入侵掃描。
網頁應用程式 - 網頁應用程式是在瀏覽器內執行的程式,並且包含各種資源,例如 HTML 文件、JavaScript 程式碼、影片和其他媒體,以及 CSS 樣式。行動應用程式與網頁應用程式不同,若要使用前者,用戶必須從應用程式商店將行動應用程式安裝到手機上;若要使用後者,用戶只要使用瀏覽器就能從遠端伺服器擷取網頁應用程式(例如 www.facebook.com),無須安裝。