本ヘルプセンターは英語版を翻訳したものです。また、一部には翻訳ソフトウエアにより機械的に翻訳した内容が含まれます。翻訳については順次対応しておりますが、最新の情報になっていない場合があります。最新の情報は英語版のページでご確認ください。表示言語は、画面右上の言語名をクリックして切り替えられます。
本ヘルプセンターの一部の記事には外部リンクが含まれています。リンク切れなどお気づきの点がございましたら、トレンドマイクロサポート窓口までご連絡ください。
変更監視ルールの言語
変更監視ルールの言語は、Deep Securityが監視するシステムコンポーネントおよび関連付けられた属性を記述した、宣言型のXMLベースの言語です。この言語を使用して、システム内に多数存在するコンポーネントの中から監視の対象外とするものを指定することもできます。
変更監視ルールを新しく作成する場合、次の2つの方法があります。ファイルに対する許可されない変更を監視するだけの場合は、「基本ルール」テンプレートを使用します。基本ルールテンプレートの使用方法の詳細については、ポリシーで使用する変更監視ルールの定義を参照してください。
コンピュータの他のエンティティ (ディレクトリ、レジストリ値、サービスなど) を監視するルールを作成する場合は、変更監視ルールの言語を使用してルールを作成する必要があります (変更監視ルールの言語を使用して変更監視ルールを新しく作成するには、[ポリシー]→[共通オブジェクト]→[ルール]→[変更監視ルール]→[新規]→[新しい変更監視ルール]→[コンテンツ] の順に選択し、「カスタム (XML)」を選択します)。
エンティティセット
変更監視ルールに含めるシステムコンポーネントは、「エンティティ」と呼ばれます。コンポーネントの各種類は、エンティティのクラスを表します。たとえば、ファイル、レジストリキー、プロセスは、それぞれエンティティのクラスです。変更監視ルールの言語には、エンティティの各クラスに対してエンティティのセット (エンティティセット) を記述するためのタグが用意されています。ルールには次の種類のエンティティセットを使用できます。
- DirectorySet: ディレクトリの変更を検索するルール
- FileSet: ファイルの変更を検索するルール
- GroupSet: グループの変更を検索するルール
- InstalledSoftwareSet:インストールされているソフトウェアの変更を検索するルール
- PortSet: 待機ポートの変更を検索するルール
- ProcessSet: プロセスの変更を検索するルール
- RegistryKeySet: レジストリキーを検索するルール
- RegistryValueSet: レジストリ値を検索するルール
- ServiceSet: サービスの変更を検索するルール
- UserSet: ユーザの変更を検索するルール
- WQLSet: Windows Management Instrumentation WQLクエリ文の結果の変更を検索するルール
1つの変更監視ルールに複数のエンティティセットを含めることができます。たとえば、複数のファイルとレジストリエントリを監視するルール1つで、アプリケーションを保護できます。
階層とワイルドカード
FileSetやRegistryKeySetなどの階層型のデータの種類を表すエンティティセットでは、セクションベースのパターン照合がサポートされます。
-
/
(スラッシュ): 階層の各レベルに該当する箇所でパターンの各セクションを区切ります -
**
(2個のアスタリスク): ゼロ個以上のセクションに相当します
次のワイルドカードがサポートされます。
-
?
(疑問符): 1文字に相当します -
*
(1個のアスタリスク): ゼロ個以上の文字に相当します
次の「エスケープ」文字もサポートされます。
-
\
(バックスラッシュ): 直後の文字をエスケープします
「/
」の文字でパターンをセクションに分割します。分割したセクションが一致するかぎり、パターンの各セクションが階層のそれぞれの下位レベルに適用されます。たとえば、次のようなパターンがあります。
/a?c/123/*.java
これが次のパスに適用された場合
/abc/123/test.java
次のように判定されます。
- 「
a?c
」は「abc」に一致 - 「
123
」は「123」に一致 - 「
*.java
」は「test.java」に一致
このパターンが次のパスに適用された場合
/abc/123456/test.java
次のように判定されます。
- 「
a?c
」は「abc」に一致 - 「
123
」は「123456」に一致しないため、そこから先はパターン照合は実行されない
「**
」の記号パターンは、ゼロ個以上のセクションと照合します。したがって、次のパターンの場合
/abc/**/*.java
「abc/123/test.java」と「abc/123456/test.java」の両方に一致します。また、「abc/test.java」と「abc/123/456/test.java」にも一致します。
構文とコンセプト
このセクションでは、変更監視ルールの例をいくつか示します。以下の例ではFileSetエンティティセットを使用しますが、説明および使用コンポーネントはすべてのエンティティセットに適用できます。変更監視ルールの最小の形は、次のような構文です。
<FileSet base="C:\Program Files\MySQL">
</FileSet>
「base」属性には、FileSetのベースディレクトリを指定します。ルールに関するすべての項目は、このディレクトリを基準とした相対ディレクトリに保存されます。上記のルールを変更しなければ、「base」以下のすべてのもの (サブディレクトリも含む) について変更が監視されます。
*
」と「?
」を「base」属性の文字列に使用できますが、使用できるのはパスの最後のセクションだけです。したがって、次の記述は有効です。base="C:\program files\CompanyName * Web Server"
しかし、次のような記述は無効です。
base="C:\* files\Microsoft Office"
エンティティセット内では、「include」および「exclude」タグを使用してパターン照合を制御できます。これらのタグには、照合するパターンを指定する「key」属性があります。「key」属性の内容はエンティティセットによって異なります。たとえば、ファイルやディレクトリではパスが「key」属性の内容になりますが、ポートの場合は「プロトコル/IP/ポート番号」の組み合わせになります。
C:\test1\D:\test2
は無効なパスの例ですが、これは、ファイル名に2つのボリュームIDを含めることができないためです。
Include
includeタグは基本的に許可リストです。includeタグを使用すると、そのincludeタグ (または他のincludeタグ) に一致するエンティティのみが含まれます。includeタグを追加した次のルールは、「C:\Program Files\MySQL」フォルダとそのサブボリュームフォルダ内にある「*.exe」という名前の付いたファイルについてのみ変更を監視します。
<FileSet base="C:\Program Files\MySQL">
<include key="**/*.exe"/>
</FileSet>
includeタグの構文を組み合わせることができます。次のルールは、「C:\Program Files\MySQL」フォルダとそのサブボリュームフォルダ内にある、「*.exe」と「*.dll」という名前の付いたファイルに対する変更を監視します。
<FileSet base="C:\Program Files\MySQL">
<include key="**/*.exe"/>
<include key="**/*.dll"/>
</FileSet>
1つのincludeブロック内に複数の条件を含めることもできます。この場合、あるエンティティが対象となるためにはすべての条件に一致する必要があります。次の「include」タグは、「sample」で始まり「.exe」で終わる名前のエンティティを含めます。この条件はもっと簡潔に記述することもできますが、後述の「機能」のセクションで説明するように、「key」パターンはエンティティの他の機能と組み合わされるため、この構文の方が汎用性があります。
<include>
<key pattern="**/*.exe"/>
<key pattern="**/sample*"/>
</include>
次の構文は、同じ条件を他の方法で記述したものです。
<include key="**/*.exe">
<key pattern="**/sample*"/>
</include>
Exclude
excludeタグはブロックリストとして機能し、それ以外の場合に返されるファイルをセットから削除します。次の例は、実際にはありえませんが、tempファイル以外のすべてのファイルを監視対象にします。
<FileSet base="C:\Program Files\MySQL">
<include key="**"/>
<exclude key="**/*.tmp"/>
</FileSet>
次のルールは、EXEとDLLのファイルセットから「MySQLInstanceConfig.exe」を除外します。
<FileSet base="C:\Program Files\MySQL">
<include key="**/*.exe"/>
<include key="**/*.dll" />
<exclude key="**/MySQLInstanceConfig.exe"/>
</FileSet>
「include」タグと同様、複数の条件を指定する「exclude」タグを記述することができます。次の例に、複数の条件を指定する「exclude」タグを示します。
<exclude>
<key pattern="**/MySQLInstanceConfig*" />
<key pattern="**/*.exe" />
</exclude>
大文字/小文字の区別
includeまたはexcludeタグのパターン照合での大文字/小文字の区別は、「casesensitive」属性で制御できます。この属性は次の3つの値をとります。
- true
- false
- platform
この属性の初期設定は「platform」です。これは、パターンの大文字/小文字の区別を実行中のプラットフォームの大文字/小文字の区別と照合します。次の例の場合、Windowsシステムでは「Sample.txt」と「sample.txt」が返されますが、UNIXシステムで返されるのは「Sample.txt」のみです。
<FileSet base="C:\Program Files\MySQL">
<include key="**/*Sample*"/>
</FileSet>
次の例では、Windowsの場合もUNIXの場合も「Sample.txt」のみが返されます。
<FileSet base="C:\Program Files\MySQL">
<include key="**/*Sample*" casesensitive="true"/>
</FileSet>
機能
エンティティの種類によっては、「key」以外の機能に基づいてエンティティをファイルセットに含めたり、除外したりすることができます。エンティティの種類によって、機能のセットは異なります。次の例は、すべての実行可能ファイルを含めます。ファイル拡張子を使用した前述の例のようにファイル拡張子には依存せず、ファイルの最初の数百バイトをチェックして、そのOSで実行可能なファイルかどうかを判定します。
<FileSet base="C:\Program Files\MySQL">
<include key="**" executable="true"/>
</FileSet>
機能属性は「include」または「exclude」タグに指定する必要があります。複数の条件を指定するincludeまたはexcludeの一部として機能属性を使用するには、includeまたはexcludeの囲みタグの属性として指定する必要があります。次の例は、ファイル名に「MySQL」の文字列を含むすべての実行可能ファイルを含めます。
<include executable="true">
<key pattern="**/*MySQL*"/>
</include>
上記の例は、次のようにもっと簡潔に記述することができます。
<include key="**/*MySQL*" executable="true"/>
機能属性によっては、単にエンティティのいずれかの属性の値を照合するだけのものもあります。そのようなときには、「 *
」と「 ?
」のワイルドカードで照合できる場合があります。個人のヘルプページエンティティセットこの方法でincludeルールまたはexcludeルールでどの属性を使用できるか、およびワイルドカード照合または単純な文字列照合をサポートするかどうかを指定します。
**
」などのエンティティのキー照合に使用できる構造体やコンポーネントを階層に分ける「/
」の使用は適用されません。Windowsのパス名を照合するには、「\
」の使用が必要です。これは、チェックの対象となる属性の値にこの文字が含まれているためです。これに対し、UNIXシステムではパスの値に「/
」が使われるため、UNIXパスの照合には「/
」を使用する必要があります。
次のルールは、「state」属性を使用した機能照合の例です。
<ServiceSet>
<include state="running"/>
</ServiceSet>
次の例は、バイナリのパスの末尾が「\notepad.exe」となっているプロセスを照合します。
<ProcessSet>
<include path="*\notepad.exe"/>
</ProcessSet>
次の例は、コマンドラインが「/sbin/」から始まるプロセスを照合します。
<ProcessSet>
<include commandLine="/sbin/*"/>
</ProcessSet>
**
」のワイルドカード表現は、「base」以下のすべてのサブディレクトリ内のすべてのファイルを検索します。このような表現のベースラインを構築するには、多くの時間とリソースが必要です。
ANDとOR
複数の条件を指定するincludeおよびexcludeタグと複数のincludeおよびexcludeタグを使用して、論理ANDと論理ORを記述することができます。
複数の条件を指定するincludeまたはexcludeを使用してANDを記述するにはいくつかの方法があります。最も簡単な方法は、複数の条件を1種類の囲みタグで囲む方法です。次の例は、複数の条件を指定する簡単なAND構文です。
<include>
<key pattern="**/*MySQL*" />
<key pattern="**/*.exe"/>
</include>
また、囲みタグの属性に条件を記述すると、その条件は、複数の条件を指定する要件の一部として囲まれた条件でグループ化されます。次の例は、上記の複数の条件を指定する「include」タグをこのように書き直したものです。
<include key="**/*.exe">
<key pattern="**/*MySQL*" />
</include>
最後の例は、複数の条件をincludeまたはexcludeタグの属性に記述したものですが、これもANDとして扱われます。
<include executable="true" key="**/*MySQL*" />
ORは、複数のincludeまたはexcludeタグに条件を含めるだけで記述できます。次のコードは、ファイル名に「.exe」または「.dll」を含むファイルを返します。
<include key="**/*.dll" />
<include key="**/*.exe" />
評価の順序
ルール内での出現順序にかかわらず、まず、すべての「include」が処理されます。オブジェクト名がいずれかの「include」タグに合致すると、「exclude」タグと照合チェックされます。オブジェクト名がいずれかの「exclude」タグと合致すると、監視対象オブジェクトのセットから除外されます。
エンティティ属性
各エンティティには、監視対象となる属性のセットがあります。エンティティセットに属性が指定されていない (属性のラッパータグがない) 場合は、そのエンティティのSTANDARDセットの属性が使用されます(個人については、 略記属性 のセクションを参照してください。エンティティセット.)
ただし、エンティティセットによっては、エンティティの特定の属性のみが変更監視の対象となります。たとえば、ログファイルの内容の変更は、通常、変更されることが前提として許可されています。しかし、アクセス許可や所有権の変更はレポートの対象にする必要があります。
エンティティセットの「attributes」タグには、こうしたことを記述できます。「attributes」タグには、監視対象とする属性を列挙したタグのセットを指定します。許可される「attribute」タグのセットの内容は、指定するエンティティセットによって異なります。
次の例は、「C:\Program Files\MySQL」ディレクトリ内でファイル名に「SQL」の文字列を含む実行ファイルについて、「last modified」、「permissions」、および「owner」の各属性に関する変更を監視します。
<FileSet base="C:\Program Files\MySQL" >
<include key="**/*SQL*" executable="true"/>
<attributes>
<lastModified/>
<permissions/>
<owner/>
</attributes>
</FileSet>
次の例は、「C:\Program Files\MySQL」内のログファイルの「permissions」と「owner」の属性を監視します。
<FileSet base="C:\Program Files\MySQL" >
<attributes>
<permissions/>
<owner/>
</attributes>
<include key="**/*.log" />
</FileSet>
次の例は、属性のSTANDARDセットを監視します(後述の「簡略記法属性」を参照)。
<FileSet base="C:\Program Files\MySQL" >
<include key="**/*.log" />
</FileSet>
次の例では、監視対象となる属性がありません。エンティティの存在に関する変更のみが監視対象となります。
<FileSet base="C:\Program Files\MySQL" >
<attributes/>
<include key="**/*.log" />
</FileSet>
簡略記法属性
簡略記法属性を使用すると、上位レベルの属性を1つ指定するだけで属性のグループを指定できます。通常の属性と同じく、許可される値のセットは、指定するエンティティセットによって異なります。
簡略記法属性が役に立つのは、属性のセットが自然にグループ化されている場合、属性のセットをすべて列挙することが煩雑な場合、および上位レベルの属性で表された属性のセットが時間とともにまたはシステム構成によって変わる可能性がある場合などです。各ケースの例を以下に示します。
属性 | 説明 |
STANDARD | エンティティセットを監視する属性のセット。これは、エンティティセットの「想定されるすべての属性」とは異なります。たとえば、想定されるすべてのハッシュアルゴリズムが含まれることはなく、必要とみなされる属性だけが含まれます。各エンティティセットの「標準」属性のリストについては、個々のセクションを参照してください。エンティティセット. |
CONTENTS | ファイルの内容のハッシュまたはハッシュのセットを表す簡略記法属性です。SHA-1に初期設定されています。 |
onChange
変更をリアルタイムで監視するように、エンティティセットを設定できます。エンティティセットのonChange属性をtrue (初期設定値) に設定すると、エンティティセットによって返されるエンティティは、変更がリアルタイムで監視されます。変更が検出されると、すぐにそのエンティティがベースラインと比較されます。エンティティセットのonChange属性がfalseに設定されている場合は、ベースラインが作成されたとき、または予約タスクから、あるいは必要に応じてDeep Security Managerから要求された場合にのみ実行されます。
次の例では、MySQLバイナリをリアルタイムで監視します。
<FileSet base="C:\Program Files\MySQL" onChange="true">
<include key="**/*.exe"/>
<include key="**/*.dll" />
</FileSet>
環境変数
環境変数は、エンティティセットで使用されるベース値に含めることができます。環境変数は「${}」で囲みます。変数名の先頭に「env.」の文字列が付けられます。
次の例は、FileSetのベースディレクトリを、PROGRAMFILES環境変数に格納されたパスに設定します。
<FileSet base="${env.PROGRAMFILES}"/>
参照先の環境変数が見つからない場合、その環境変数を参照しているエンティティセットは検索も監視もされませんが、それ以外の構成は使用されます。変数が存在しないことを示すアラートがトリガされます。Agentイベント「変更監視ルールのコンパイルの問題」を使用して、Agentが不正な環境変数を報告します。変更監視ルールのIDと環境変数名が、イベントのパラメータとして返されます。
レジストリ値
レジストリ値は、エンティティセットで使用されるベース値に含めることができます。レジストリ値は「${}」で囲みます。レジストリ値のパスの先頭には「reg.」が付けられます。次の例は、FileSetのベースディレクトリを、「HKLM\Software\Trend Micro\Deep Security Agent\InstallationFolder」レジストリ値に格納されたパスに設定します。
<FileSet base="${reg.HKLM\Software\Trend Micro\Deep Security Agent\InstallationFolder}"/>
参照先のレジストリ値は、Agentが新しいルールまたは変更されたルールを受信したときに読み込まれます。また、Agentは起動時にすべてのルールをチェックし、参照先のレジストリ値が変更されていた場合は、影響を受けるルールのベースラインを再構築します。
参照先のレジストリ値が見つからない場合、その環境変数を参照しているエンティティセットは検索も監視もされませんが、それ以外の構成は使用されます。変数が存在しないことを通知するアラートが発令されます。Agentは、イベント8012を使用して環境変数の不正な変更を報告します。変更監視ルールのIDとレジストリ値のパスが、パラメータとしてイベントに提供されます。
「..」の使用
親ディレクトリへの参照を示す「..」符号は、Agentの現在のすべてのバージョンでサポートされるようになりました。Agentは、FileSetとDirectorySet要素のベースディレクトリ名の正規化を行いますが、このとき、「..」参照を解決し、Windowsの短い名前を長い名前に変換します。たとえば、最近のバージョンのWindowsの場合、次のFileSetのベースディレクトリは「C:\Users」です。古いバージョンのWindowsの場合、このベースディレクトリは「C:\Documents and Settings」です。
<FileSet base="${env.USERPROFILE}\..">
<include key="*/Start Menu/Programs/Startup/*"/>
</FileSet>
ベストプラクティス
ルールは、重要なオブジェクトと属性のみを含めるように記述してください。こうすることで、オブジェクトの他の属性が変更されても、イベントは報告されなくなります。たとえば、変更監視ポリシーで「/bin
」ディレクトリ内のファイルのアクセス権と所有権を制限することもできます。変更監視ルールは所有者、グループ、およびアクセス権を監視しますが、lastModifiedやハッシュ値などの属性は監視しません。
変更監視ルールを使用して、不正プログラムや不審なアクティビティの検出、サービスの監視、NTFSデータストリームの使用状況の監視、および通常の場所以外のディレクトリ (「/tmp
」や「${env.windir}\temp
」など) に置かれた実行可能ファイルの監視などを実施します。
ルールに含めるオブジェクトを指定する場合は、必ず、できるだけ詳細に指定してください。ルールに含めるオブジェクトが少ないほど、短期間でベースラインを作成でき、変更の検索にかかる時間も短くなります。変更される可能性のあるオブジェクトは除外し、監視する属性は必要なものだけに絞ります。
禁止事項
- 「
/
」、「C:\」、または「HKLM\Software
」などのディレクトリ階層の最上位で、「**/...
」を使用すること - 必要がないのに、データのハッシュの種類を複数使用すること
- 参照先として、
HKEY_CURRENT_USER
、${env.USERPROFILE}
、または${env.HOME}
などのユーザ固有の場所を指定すること
これらのいずれかが変更監視ルールに記述されていると、Deep Security Agentでは指定されたパターンに照合させるために多数の項目を検索してしまうため、パフォーマンスが低下します。