Netskopeログを分析して、自社テナントのSaaSから認可外Webサービスへのファイル持ち出しを検出する

こんにちは、ひろかずです。

Netskopeでファイルのアップロードやダウンロードを監視・制御しているけど、自社クラウドストレージからのファイルの持ち出しをカジュアルに見つけたいという声が聞こえてきたので一筆書きます。

TL;DL的な何か

  • Azure Sentinelのコネクタ(プレビュー)を使って、Netskopeのログを収集する
  • 一定期間内に行われたファイルダウンロードとアップロードのアクティビティを、Netskopeログに記録されているファイル名を用いて突合し、検出・可視化する
  • 今回紹介するのは、特定のユースケースをカバーするものであり、全てのケースのファイル持ち出しをカバーするものではないので、自分の組織に適用するときは、データの所在と流通経路を洗い出してからやってください

ざっくり構成

前提条件

  • 自身で管理可能なNetskope環境(NGSWG Proライセンス以上)を保有していること
  • Netskope API Introsoectionライセンスを必要な数量保有していること
  • Netskope API Enabled Protectionインスタンスを自身で管理しているクラウドストレージに対して監査可能なように構成していること
  • Netskopeテナントにて、自身で利用しているSaaSのテナント情報を登録していること
  • 自身で管理可能なAzure環境とサブスクリプションを保有していること
  • 自身で管理可能なAzure Sentinel環境を保有していること
  • Netskope AgentをPCに導入済みで、有効化されていること

工程

  1. Azure SentinelにてNetskopeコネクタを設定する
  2. 可視化テンプレートの作成
  3. 動作確認
  4. 留意事項

1. Azure SentinelにてNetskopeコネクタを設定する

  • Azure Sentinel管理画面の[Data Connector]を選択し、検索窓に[Netskope]と入力
  • 表示されたコネクタを選択し、[Open connector Page]を選択

  • 必要な権限を保有しているかを確認

  • 画面のリンクはそのままでは機能しないので、[ REST API v2 Overview ]の手順に従って、APIトークンを発行
  • 画面上からLog Analytics WorkspaceのWorkspace IDとPrimary Keyを控える

  • 今回は、ARMテンプレートを使って構成するので、[Deploy to Azure]ボタンを選択
    • ウィザード上で表示される必要情報を入力
    • 詳細な流れは省略します

  • データが流れてくるまで時間がかかるみたいなので、寝て待つ
  • データが流れてきたかどうかは、Azure Sentinelで以下クエリーを実行して確認する
Netskope_CL
| summarize count() by userkey_s
| top 10 by count_

2. 可視化テンプレートの作成

2-1. 可視化テンプレートの新規作成

  • Azure Sentinel管理画面の[Workbooks]を選択し、[Add workbook]を選択

  • [Add Parameter]を選択し、パラメータ名等を設定
  • Parameter typeを[Time range picker]とし、Required?を有効にすること

  • 選択可能な時間範囲のチェックを設定
  • [Allow custom time range selection]以外は任意
  • 設定したら[save]を選択

  • 設定した内容を確認して、[Done Editing]を選択

2-3. 分析クエリーの設定

  • 画面下部の[+ Add] > [Add query]を選択

  • クエリー欄に以下クエリーを設定して、[Done Editing]を選択
Netskope_CL
| where type_s == "nspolicy"
| where activity_s == "Upload"
| where access_method_s == "Client" 
| where instance_id_s == ""
| where object_s != ".DS_Store"
| where app_s != "CloudSign"
| project date_time_UL = unixtime_seconds_todatetime(timestamp_d), app_s, object_s, userkey_s
| join kind= inner (
    Netskope_CL
    | where type_s == "nspolicy"
    | where activity_s == "Download"
    | where access_method_s == "API Connector"
    | project date_time_DL = unixtime_seconds_todatetime(timestamp_d), app_s, object_s, userkey_s
) on object_s, userkey_s
| where date_time_UL > date_time_DL

3. 動作確認

  • 作成したパラメータに値を設定すると、データがあれば結果が表示されます
    • 表示されない場合は、API監査設定をしているSaaSからファイルをダウンロードして、管理外SaaSにアップロードしてみてください
    • この例では、Slack Enterprise Gridからダウンロードしたimage.pngをLucid Chartにアップロードしていることが検出されています

4. 留意事項

  • Azure SentinelのNetskopeコネクタは、プレビューのせいかログ取得状況が不安定な時があります
  • Netskopeテナント側の問題(一時的な不具合)の可能性もあります
  • プレビューのコネクタは、Azureサポートの範囲内ですが、対応はベストエフォートになります(APIレートリミットへの抵触の場合、対応してもらうのは難しいかも)
  • 最終的に、Azure SentinelのNetskopeコネクタ(プレビュー)を利用するか、自身で作り込むかはビジネスインパクトを鑑みて決定してください

ともあれ、カジュアルにデータの持ち出しを可視化することはできました。
今日はここまでです。
お疲れ様でした。

コメントを残す

メールアドレスが公開されることはありません。