機密データ検出
¶
API Discoveryは、APIが取り扱い・伝送する機密データを検出してハイライト表示し、暗号化、トークン化などのセキュリティ制御を適用して保護し、データ侵害や安全でないチャネルや未承認システムへの機密データ送信を防げるようにします。本記事では、この機能の使用方法と設定方法を説明します。
Wallarmの機密データ検出は、包括的なデフォルト構成ですぐに利用できます。さらに高いカスタマイズ性を備えており、既存の検出プロセスを微調整したり、検出対象を独自のデータタイプで拡張したりできます。
デフォルトでの検出¶
デフォルトでは、API Discoveryは次の種類の機密データを検出します。
-
IPアドレスやMACアドレスなどの技術データ
-
シークレットキーやパスワードなどのログイン認証情報
-
クレジットカード番号などの金融データ
-
医療免許番号などの医療関連データ
-
氏名、パスポート番号、SSNなどの個人を特定できる情報(PII)
Wallarm Consoleで、API Discovery → Configure API Discovery → Sensitive dataに移動すると、各タイプに提供されるデフォルトの機密データパターンの一覧を確認できます。
機密データ検出のカスタマイズ¶
自社の要件やGDPR、HIPAA、PCI DSSなどの業界固有の規制に機密データ検出を完全に適合させるため、API Discoveryは検出プロセスを細かく調整できる機能を提供します(NGINX Node 5.0.3またはNative Node 0.7.0以上が必要です)。
カスタマイズにより、自社固有のデータ保護義務を満たせます。さらに、データフローに独自または特殊な機密データ要素が含まれる場合、それらを正確に識別するためのカスタム正規表現を定義できる点が有用です。
機密データ検出は、一連の機密データパターンで構成されます。各パターンは、対象となる機密データとその検索設定を定義します。API Discoveryにはデフォルトパターンのセットが付属しています。デフォルトパターンの変更や独自パターンの追加は、Wallarm Console → API Discovery → Configure API Discovery → Sensitive dataで行えます。
デフォルト(出荷時)のパターンは変更・無効化でき、必要に応じて初期設定にすばやく復元できます。作成した独自パターンは、いつでも作成、変更、無効化、削除できます。
信頼度スコア
パターンとコンテキスト語を用いて機密データ検出を構成できます。各パターンとコンテキスト語に対し0.1
から1.0
の信頼度スコアを設定し、その表現へのマッチや機密データの近傍に該当する文字列・語が存在することが機密データの存在を示す確からしさを指定します。適切なスコアを設定することで、より多くの実在する対象を検出し、偽陽性を減らせます。
スコアのしきい値0.3
に到達または超過すると機密データが検出されます。コンテキスト語のスコアは合算し、パターンについては最大値を採用します。理解を深めるため、以下の例をご覧ください。
実トラフィックデータで試したうえで、信頼度スコアを調整してください。
パターンベースの検出
期待される機密データの値にマッチさせるために、PCRE形式の正規表現を使用します。正規表現を用いると検出はより高精度になります。異なるスコアを持つ複数のパターンを設定でき、いずれかがマッチすれば機密データが検出されます。
パターンは、固定長のトークンやID、URIに適しています。
コンテキスト語
Wallarmは、パターンにマッチした疑わしい機密データの周辺にある語を参照します。コンテキスト語が見つかった場合、最終的な信頼度スコアがブーストされます。コンテキストは、URLパス、クエリパラメータ名、JSONキー、そのほか隣接するパラメータから得られます。
例えば、上の図では次のように機密データが検出されます。
-
JWT
またはAWS access key ID
のパターンにマッチした場合は即座に検出されます。 -
AWS key (weak)
にマッチした場合、それ単体では「検出あり」とはなりません(スコア0.1
はしきい値0.3
を下回ります)。 -
ただしコンテキスト語
access
(0.1
)とapi
(0.1
)があると合計が0.3
となり、機密データが検出されます。 -
auth
を必須に指定すると状況は変わります。auth
がない場合、存在するaccess
とapi
のスコアは無視され、パターンのスコアをブーストできません。
コンテキスト語のみの検出
パターンを指定せずにコンテキスト語のみを指定した場合、Wallarmは語の存在に基づいて機密データの有無を判断します。信頼度スコアの合計が大きいほど、そのパラメータが指定した機密データを含むと判断されやすくなります。
コンテキストのみの検索では、語を必須として宣言する必要がある場合があります。必須語が値のコンテキストに存在しない場合、そのパラメータは機密データを含まないと見なされます。
例: personal_name
コンテキスト語:
-
name
-
first
-
middle
middle_name,
にはマッチさせる必要がありますが、name
やmiddle
にはマッチさせたくありません。そのため、name
のスコアを0.1
に設定し、name
単体ではマッチしないようにします。一方で「middle_name」は強い組み合わせであるため、middle
には0.5
という大きなスコアを与える必要があります。
name,
なしで「middle」を検出しないよう、エンティティに対してname
を必須に指定します。name
が見つからない場合は、機密データは検出されません。