Cloudflare Zero Trust の DLP
Data Loss Prevention · Cloudflare Zero Trust docs
Data Loss PreventionはEnterpriseプランでのみ利用可能です。Cloudflare Data Loss Prevention (DLP) と Secure Web Gateway を使用すると、社会保障番号やクレジットカード番号などの機密データの存在をHTTPトラフィックで検査することができます。DLPは、アップロードまたはダウンロードされたMicrosoft Officeドキュメント(Office 2007以降)、PDF、チャットメッセージ、フォーム、その他のWebコンテンツなど、HTTPボディ全体をスキャンします。可視性は、サイトやアプリケーションによって異なります。DLPは、電子メールなどの非HTTPトラフィックや、Cloudflare Gatewayを迂回するトラフィック(例えば、Do Not Inspectルールに一致するトラフィック)をスキャンすることはありません。
DLPフィルタリングを行うには、まず検出したいデータパターンを持つDLPプロファイルを構成し、次にGateway HTTPポリシーを構築して、機密データが組織から外に出るのを許可またはブロックします。Gateway は HTTP トラフィックを解析し、DLP プロファイルで指定されたキーワードまたは正規表現に一致する文字列をスキャンします。
適用可能な接続方式
DLP は HTTP ポリシーに付随する機能のため、HTTP ポリシーが適用可能な以下のいずれかの接続方式の場合で適用が可能です。
DLP カスタムプロファイル作成
日本語で以下のように「こんにちは」をそのまま正規表現の Value として定義できます。
「Detection entry name」は英字表記にしておくと、ダッシュボードログでも表示できます。
HTTP ポリシー設定
テスト用に以下の HTTP ポリシーを作成します。
DLP テスト
こちらにあるように https://dlptest.com/https-post/ からテストできます。
Test Message
以下のテキストメッセージを POST すると、Access restricted のページが表示されることが確認できます。
以下がダッシュボードで確認可能なログです。
以下がブロック時のログ出力のレコードです。
{
"AccountID": "xxx",
"Action": "block",
"BlockedFileHash": "",
"BlockedFileName": "",
"BlockedFileReason": "unknown",
"BlockedFileSize": 0,
"BlockedFileType": "",
"Datetime": 1669735991664000000,
"DestinationIP": "35.209.241.59",
"DestinationPort": 443,
"DeviceID": "df469de4-6ff5-11ed-9b86-2617b8795c9a",
"DownloadedFileNames": [],
"Email": "non_identity@xxx.cloudflareaccess.com",
"HTTPHost": "dlptest.com",
"HTTPMethod": "POST",
"HTTPVersion": "HTTP/2",
"IsIsolated": false,
"PolicyID": "7a8e0617-0153-420b-b87c-f9a58f5474ad",
"Referer": "https://dlptest.com/https-post/",
"RequestID": "15659e616d00001d938ce4a400000001",
"SourceIP": "100.96.0.33",
"SourcePort": 59693,
"URL": "https://dlptest.com/https-post/",
"UploadedFileNames": [],
"UserAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36",
"UserID": "b7761faf-27e6-4d08-a35a-802db584b739"
}
File Upload
Google Docs から「こんにちは」だけのファイルを作成 > PDF として dlptest.pdf
をダウンロード保存します。
dlptest.pdf
をアップロードすると、以下のようにポリシー適用が確認できます。
以下がダッシュボードで確認可能なログです。
以下がダッシュボードで確認可能なログです。
ファイルアップロードのブロックでは BlockedFileName
、BlockedFileType
に情報が入ってきます。
{
"AccountID": "xxx",
"Action": "block",
"BlockedFileHash": "",
"BlockedFileName": "dlptest.pdf",
"BlockedFileReason": "unknown",
"BlockedFileSize": 0,
"BlockedFileType": "PDF",
"Datetime": 1669737211797000000,
"DestinationIP": "35.209.241.59",
"DestinationPort": 443,
"DeviceID": "df469de4-6ff5-11ed-9b86-2617b8795c9a",
"DownloadedFileNames": [],
"Email": "non_identity@xxx.cloudflareaccess.com",
"HTTPHost": "dlptest.com",
"HTTPMethod": "POST",
"HTTPVersion": "HTTP/2",
"IsIsolated": false,
"PolicyID": "7a8e0617-0153-420b-b87c-f9a58f5474ad",
"Referer": "https://dlptest.com/https-post/",
"RequestID": "1565b0ff8000001d938da69400000001",
"SourceIP": "100.96.0.33",
"SourcePort": 59693,
"URL": "https://dlptest.com/wp-admin/admin-ajax.php",
"UploadedFileNames": [],
"UserAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36",
"UserID": "b7761faf-27e6-4d08-a35a-802db584b739"
}
Payload Logging
以下のガイドに従って、公開鍵・秘密鍵のペアを作成し、公開鍵を登録します。
Data Loss Prevention では、特定の DLP ポリシーをトリガーしたデータをログに記録できます。このデータは、ペイロードとして知られる HTTP リクエストの部分に保存されます。ペイロードのロギングは、DLP ルールの動作を診断する場合に特に役立ちます。
その後、各 HTTP (DLP) ポリシーで Payload Logging を有効化します。
以下の内容でテストします。
Gateway activity log から「Payload log match > Decrypt payload log」をたどり、リクエストの DLP 一致部分がログに記録されたため、秘密鍵を入力してログを復号化します。
ルールのトリガーとなった値には機密データが含まれている可能性があるため、顧客提供の公開鍵で暗号化され、後で自分だけが検査できるようになります。保存されるデータには、マッチの非表示バージョンに加え、マッチの両側に20文字の追加コンテキストが含まれます。
以下のように確認できました。
{
"AccountID": "b5341236aea624bd7e2a0770ee3fb5e5",
"Action": "block",
"BlockedFileHash": "",
"BlockedFileName": "dlptest.pdf",
"BlockedFileReason": "unknown",
"BlockedFileSize": 0,
"BlockedFileType": "PDF",
"Datetime": "2024-05-20T15:49:54Z",
"DestinationIP": "35.209.95.242",
"DestinationPort": 443,
"DeviceID": "85a88112-16ba-11ef-b134-dadffe834e39",
"DeviceName": "xxxxxxxxxx",
"DownloadMatchedDlpProfileEntries": [],
"DownloadMatchedDlpProfiles": [],
"DownloadedFileNames": [],
"Email": "non_identity@xxx.cloudflareaccess.com",
"FileInfo": {
"files": [
{
"direction": "upload",
"file_name": "dlptest.pdf",
"file_type": "PDF",
"file_hash": "038851b7cc273c4351a984b54ec10365f8cf4ce25647b010ccfc832a2443bbf4",
"file_size": 7858,
"content_type": "application/pdf",
"action": "block"
},
{
"direction": "upload",
"file_name": "<unknown file name>",
"file_hash": "6ac36bf23aae4f2ae59dabb142a0bffaf977c1945a681d656ae75e8f286a3492",
"file_size": 19,
"action": "none"
},
{
"file_name": "<unknown file name>",
"file_hash": "6f4b6612125fb3a0daecd2799dfd6c9c299424fd920f9b308110a2c1fbd8f443",
"file_size": 2,
"action": "none",
"direction": "upload"
},
{
"file_hash": "4fc82b26aecb47d2868c4efbe3581732a3e7cbcc6c2efb32062c08170a05eeb8",
"file_size": 2,
"action": "none",
"direction": "upload",
"file_name": "<unknown file name>"
},
{
"file_size": 10,
"action": "none",
"direction": "upload",
"file_name": "<unknown file name>",
"file_hash": "617c4e0c5ab1803cb058ee6049277f61ca90ae3e244fbcbbc4607bfe25f0ae97"
}
]
},
"HTTPHost": "dlptest.com",
"HTTPMethod": "POST",
"HTTPStatusCode": 302,
"HTTPVersion": "HTTP/2",
"IsIsolated": false,
"PolicyID": "7a8e0617-0153-420b-b87c-f9a58f5474ad",
"PolicyName": "Block with Japanese DLP",
"Referer": "https://dlptest.com/https-post/",
"RequestID": "20384b07b800001d778b41d400000001",
"SessionID": "20384aee1000001d778b3e2400000001",
"SourceIP": "x.x.x.x",
"SourceInternalIP": "",
"SourcePort": 52706,
"URL": "https://dlptest.com/wp-admin/admin-ajax.php",
"UntrustedCertificateAction": "none",
"UploadMatchedDlpProfileEntries": [
"d743a889-b636-4e1c-a863-ec8521104f8e"
],
"UploadMatchedDlpProfiles": [
"b89956af-0cc6-4aef-8aa0-41dcb4e910dd"
],
"UploadedFileNames": [
"<unknown file name>"
],
"UserAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36",
"UserID": "b7761faf-27e6-4d08-a35a-802db584b739"
}
感想
正規表現としては日本語がそのまま使えて検知できたので、日本でも柔軟な使い方ができそうです。
また、検査としてはボディの中身を見ますが、ログではボディの中身が全て閲覧できるのではなく、あくまで検知アクションの結果とファイル名のレベルで確認できる内容になっています。
「DLP profiles」や「DLP profile entries」もログ出力レコードのフィールドとして確認できるとより便利になってくるかと思いますが、そのうち対応されることでしょう。--> DownloadMatchedDlpProfileEntries
, DownloadMatchedDlpProfiles
, UploadMatchedDlpProfileEntries
, UploadMatchedDlpProfiles
が追加されました。
以下のラーニングパスも整備されているため、参考にしてください。