DLP エンジンには、DLP ルールで使用できる 3000 以上の事前定義されたデータ識別子が含まれています。 DLP エンジンは、キーワード検索または正規表現検索を使用するカスタム データ識別子もサポートしています。 このページでは、DLP を使う正規表現のカスタム データ識別子を記述する方法について説明します。
正規表現を作成する際は、常に以下の指標を考慮してください。
- Coverage 正規表現によって一致するデータをダーツボードで表した場合、考えられるすべての一致がダーツボードの表面積に含まれる確率はどのくらいですか?ダーツボードにダーツを投げて、ボードを外しても、実際の試合でダーツが当たる可能性がある場合、ダーツボードのカバー範囲は完全ではない。
- Accuracy 正確性とは、適切なものが一致しているかどうかを示す指標です。ダーツがダーツボードに当たったとき、適切なマッチに当たる確率はどれくらいですか?さらに重要なのは、ダーツがダーツボードに当たったとしても、実際には悪いマッチに当たってしまう頻度はどれくらいかということです。正規表現「too wide」は、不要なデータを含みすぎているのでしょうか?
- False Positives – 文字列
95054を考えてみましょう。サンタクララのNetskope郵便番号はNetskopeですが、郵便番号を指すとは限りませんreally。例えば、アメリカン・エキスプレスのクレジットカード番号の下5桁、LEGOアクセサリーの部品番号、プライス・ジョージ郡の計画部門のケース番号などかもしれません。 - Performance パフォーマンスとは、正規表現がさまざまな現実世界の状況でどれだけうまく機能するかを主観的に測定するものであり、見た目ほど単純ではありません。ダーツボードに非常に高い頻度でダーツを投げても、ボードに当たらないとしたら、ハイパフォーマンスであることに何の意味があるでしょうか?逆に、ダーツを投げる速度が遅すぎて、ダーツが繊維やコルクに刺さらない場合(エンジンのタイムアウトに相当する状態)、重要なデータをすべて見逃してしまうでしょう。
構文
このセクションでは、DLPエンジンがサポートする正規表現の構文について説明します。DLPエンジンのパーサーは、UNIXの正規表現構文とは異なる方法で正規表現構文を解釈するため、特定の式や 使用法はDLPエンジンに合わせて調整する必要があります。
DLPエンジンは、最大256文字までしか照合できないという制限があります。
以下の一般的な正規表現機能がサポートされています。
- キャラクタークラス — 例
[a-z] - よくある速記クラス — 例
\d、\w、\s、その他。これらはnot recommended であり、[0-9]方が\dよりもはるかに明確です。 - 否定的な文字クラス — 例
[^0-9]または\D。これらはパフォーマンス上の理由からnot recommendedです。 - グループと代替案 — 例
(A|B) - 量指定子 —
+と*。また、範囲指定子{n,m}もサポートしています。ただし、範囲は小さく、先行するクラスは正で狭い範囲である必要があります。これらのガイドラインに従わない場合、コンパイル時に問題が発生する可能性があります。
考慮事項
DLPエンティティエンジンは、定義済みエンティティとカスタムエンティティの周囲に暗黙的な単語境界を設けており、' cat 'のような辞書パターンや正規表現パターンが' catalog 'や' authenticate 'に一致するのを防ぎ、また' [0-9]{16} 'のような数値パターン(16桁の乱数のみに一致することが想定されている)が' DF435201748403266864D2B24 'のような部分文字列に一致するのを防ぎます。
従来、単語境界は単語文字( 0-9A-Za-z_ )と非単語文字(その他すべて)を区別していましたが、Netskope DLP で実装されている暗黙の単語境界は、英語以外の多くの単語文字も考慮に入れています。そうしないと、エンジンは「 řidičský průkaz 」、「 Валерий 」、「 Điện Biên Phủ 」などの単語やフレーズ全体を一致させることができません。
「暗黙の単語境界」の概念は、辞書や正規表現パターンが、 \b (単語境界クラス)などのアンカーを明示的に指定することなく、単語の境界を区切る方法に関係しています。 これにより、正規表現エンジンは単語の境界を自動的に認識して尊重し、単語の最初から最後まで全体を一致させることが可能になり、誤検出を大幅に削減できます。
タブ(およびその他のいくつかの形式の空白文字)は、検査前にスペースに正規化されます。
正規表現を使う強制
Netskope Loss Prevention エンティティは、主に機密データの識別に利用されます。 前述のとおり、この目的を達成するために、正規表現などの強力な機能がいくつか含まれています。データは多様な形で変化する可能性があるため、組織はしばしば広範な識別を試みます。 式の先頭または末尾、あるいは単独で「.*」、「.{0,}」または「.+」を使用します。 これらを定義の最初または最後に使用すると、カバー範囲が過度に広くなり、組織が意図していなかった予想外の高い検出量につながることが多く、結果としてサポートされません。
i.e.
- .*cat
- cat.*
- .+cat
- 猫。+
- .*cat.+
- .*
- .+
- .{0,}

その代わりに、強力なアンカーを活用してください。強力なアンカーは、検索空間を根本的に制限し、不要なバックトラックを排除し、誤検出を防ぐのに役立つため、優れた正規表現にとって非常に重要です。
例えば、次のようなパターンに従う部品番号を識別しようとすると
- 190-15-X-6789.partsX
- 181-26-A-6789.partsY
- 472-37-A-6789.partsY
- 165-49-K-6789.partsY
| サポート対象外 | 良いアンカー | 強力なアンカー |
|---|---|---|
| .*部分+ | \b[0-9]{3}-[0-9]{2}-[AZ]-[0-9]{4}\.parts[AZ]\b | \b[0-9]{3}-[0-9]{2}-[XAK]-[0-9]{4}\.parts[XY]\b |
| この正規表現は、単語 part を含むすべてのシーケンスを検出します。意図の不一致によりアラートが発生する可能性: 非常に高い。 | この正規表現は、部品番号の構造に焦点を当て、幅広い部品とそのバリエーションを識別します。 | この正規表現は、利用可能なパターンに厳密に焦点を当て、バリエーションをカバーする柔軟性は低くなります。 (ケースでは、意味の精度をさらに高めるために、近く(NEAR)にあるべきルール内の辞書エンティティと組み合わせることができます。) |
対応オペレーター
| Operator | 柄合わせ |
|---|---|
| \ | 次のメタ文字を引用(エスケープ)して、 リテラルとして扱えるようにします。 メタ文字とは、パターン処理において特別な意味を持つ文字のことで、例えば以下のような演算子などがこれに該当します。 |
| . | 改行文字を除く任意の文字に一致します。文字、数字、句読点、日本語、絵文字などが含まれます。文字数は14万文字です。 |
| ( | サブパターンの開始 |
| ) | サブパターンの終了 |
| | | 交互。これは論理ORです。例えば、(cat|dog)はcatまたはdogに一致します。 |
| [xy] | 文字xまたはy |
| [x-z] | xとzの間の文字範囲 |
| [^z] | z以外の任意の文字。パフォーマンス上の理由から推奨しません。 |
サポートされている数量詞
| Operator | 柄合わせ |
|---|---|
| * | 0回以上一致 |
| + | 1回以上マッチ |
| ? | 0回または1回一致 |
| {n} | n回正確に一致する |
| {n,} | n回以上一致する |
| {n,m} | n回以上、m回以下一致する |
よくある質問とベストプラクティス
可能な限り事前定義されたエンティティを使用します。
定義済みのエンティティは、一般的に、 カスタムエンティティよりも優れたパフォーマンスを発揮します。 Netskopeサポートが定義済みエンティティに既存の問題があることを確認しない限り、常にベストプラクティスは 定義済みエンティティ。
真陽性の中には、機能的な偽陽性であるものもある。
例えば、 Passcodeを探している場合、Zoom ミーティングの招待状にはPasscode: 123456のような文字列が含まれていることがわかります。これはPasscodeを探している場合には真の陽性ですが、この文字列の影響が非常に小さいため、機能的には偽陽性です。
Netskopeのフレーバーでは、どの一般的な正規表現機能がサポートされていませんか?
サポートされていない機能の中で最も要望の多かったものは以下のとおりです。
- 肯定/否定の周囲視的主張 — 例
(?!または(?<= - バックリファレンス、またはインデックス付きまたは名前付きキャプチャグループ — 例
\1 - non-capturing groups — e.g.
(?: - non-greedy (or lazy) quantifiers — e.g.
.+?,\d*?, or(?U) - possessive quantifiers — e.g.
.++,\w++, or(?-U) - モード切り替え修飾子 — 例
(?i)または(?x) - 原子群 — 例
(?>
テスト入力欄には、必ず期待される一致箇所の前後に何かを入力してください。
スペースを忘れずに含めてください。
可能な限り、エンティティを統合してください。
次のフレーズを考えてみてください。
passwordpasswdpwdpword
各フレーズごとに4つの個別のEntitiesを作成するのではなく、それらすべてに一致するパターンを作成します。例:
p(ass)?w(or)?d
あるいは、次のようなことも:
(password|passwd|pwd|pword)
フォーム検証の正規表現は コンテンツ検査の正規表現として使用すべきではありません。
例えば、ユーザーが1900年から2099年の間の有効な年を入力したことを検証する場合、フォーム検証用の正規表現は次のようになります。
^(19|20)[0-9]{2}$
キャレット( ^ )は、パターンマッチが行または入力の先頭で開始する必要があることを意味します。 逆に、ドル記号( $ )は末尾に合わせることを意味します。テキスト、スプレッドシート、または一般的な文書の中からデータを探す場合、どちらの方法も通常は意味をなさない。上記の正規表現では、次のようなテキスト内の年号に一致させることはできません: January 31, 2022.
原則として、 avoid anchor assertions 。
正規表現の例
-
文書内で、大文字と小文字のケースが図のように正確に一致する
Acme、Budget Forecast、またはConfidentialの出現箇所を検索します。(Acme|Budget\ Forecast|Confidential)
| パイプ記号は「または」を意味し、開き括弧と閉じ括弧は選択肢のグループを定義します。この例では括弧は必須ではありませんが、ベストプラクティスとして追加しておくと、後でより複雑な正規表現を作成する際に問題が発生するのを防ぐことができます。
\ – このバックスラッシュ記号は、次の文字(この場合はスペース「 “」)をエスケープします。 画面や紙の上で折り返される(あるいは折り返される可能性のある)長くて複雑な正規表現を作成する場合、折り返された端にその空白が存在するのか、存在すべきなのか、あるいは存在すべきではないのかを100%確信することはできません。その曖昧さを解消するために、その空間から抜け出そう。
-
Acme、Acme Inc、Acme Inc.、Acme Incorporatedのような類似のフレーズに一致します。Acme(\ Inc(\.|orporated)?)?
? – 0回または1回一致します。この例では、
Acmeを探し、その後にスペースとIncからなるオプションのグループ ( ?でマーク) が続きます。 後にオプションでドットまたは単語の残りの部分orporated(別の?でマーク) のグループが続きます。

