Vulnerability ProtectionDeep Securityのセキュリティログ監視モジュールでは、OSとアプリケーションのログを収集して分析し、何千ものログエントリに含まれている重要なセキュリティイベントを識別できます。これらのイベントをセキュリティ情報/イベント管理 (SIEM) システムまたは中央のログサーバに送信して、関連付け、レポート、およびアーカイブに使用できます。また、すべてのイベントはVulnerability ProtectionDeep Security Managerでまとめて安全に収集されます。
Vulnerability ProtectionDeep Securityのセキュリティログ監視モジュールでは、次の処理が可能です。
Vulnerability ProtectionDeep Securityのセキュリティログ監視では、次に示すさまざまな方法で、重要なセキュリティイベントの収集が自動的に行われます。
Vulnerability ProtectionDeep Securityには多数の一般的なOSおよびアプリケーション用のセキュリティログ監視ルールが用意されていますが、独自のカスタムルールを作成することもできます。カスタムルールを作成する場合は、「基本ルール」テンプレートを使用するか、または新しいルールをXMLで記述できます。ここでは、セキュリティログ監視ルールの言語について説明し、カスタムルールの例を示します。既存のセキュリティログ監視ルールのプロパティの説明については、セキュリティログ監視ルールのドキュメントおよび「参照」セクションの「セキュリティログ監視ルールの確認」を参照してください。
セキュリティログ監視ルールは、変更を監視するファイルのリストおよびトリガするルール用の条件のセットで構成されています。セキュリティログ監視エンジンが監視対象のログファイルで変更を検出すると、その変更はデコーダによって解析されます。デコーダは、rawログエントリを解析して次のフィールドを生成します。
ルールは、このデコードされたデータを確認して、ルールで定義された条件に一致する情報を検索します。
一致する項目の重要度レベルが十分に高い場合は、次のいずれかの処理を実行できます。
セキュリティログ監視エンジンは、コンピュータのログエントリにセキュリティログ監視ルールを適用して、それらのエントリでセキュリティログ監視イベントを生成する必要があるかどうかを判断します。
1つのセキュリティログ監視ルールには複数のサブルールを含めることができます。これらのサブルールには、アトミックとコンポジットという2つの種類があります。アトミックルールは1つのイベントを評価し、コンポジットルールは複数のイベントを確認して、頻度、繰り返し、およびイベント間の相関関係を評価できます。
各ルールまたはルールのグループは、<group></group> エレメント内に定義する必要があります。属性名には、このグループに追加するルールを含めてください。次の例では、Syslogとsshdのルールをグループに含めています。
<group name="syslog,sshd,"> </group>
グループには必要な数のルールを含めることができます。ルールは、<rule></rule> エレメントを使用して定義されます。ルールには少なくとも2つの属性 (idおよびlevel) が必要です。idは、署名の一意の識別子です。levelは、アラートの重要度です。次の例では、ルールIDとレベルの異なる、2つのルールが作成されます。
<group name="syslog,sshd,"> <rule id="100120" level="5"> </rule> <rule id="100121" level="6"> </rule> </group>
<group></group> タグを使用すると、親グループ内に追加のサブグループを定義できます。このサブグループは、次の表に示す任意のグループを参照できます。
| グループの種類 | グループ名 | 説明 |
| 攻撃の予兆 | connection_attempt web_scan recon |
接続の試行 Web検索 一般的な検索 |
| 認証制御 | authentication_success authentication_failed invalid_login login_denied authentication_failures adduser account_changed |
成功 失敗 無効 ログイン拒否 複数の失敗 ユーザアカウントの追加 ユーザアカウントの変更または削除 |
| 攻撃/悪用 | automatic_attack exploit_attempt invalid_access spam multiple_spam sql_injection attack virus |
ワーム (対象を指定しない攻撃) 攻撃コードのパターン 無効なアクセス スパム 複数のスパムメッセージ SQLインジェクション 一般的な攻撃 ウイルスの検出 |
| アクセス管理 | access_denied access_allowed unknown_resource firewall_drop multiple_drops client_misconfig client_error |
アクセス拒否 アクセス許可 存在しないリソースへのアクセス ファイアウォールによるドロップ 複数のファイアウォールによるドロップ クライアントの誤った設定 クライアントエラー |
| ネットワーク制御 | new_host ip_spoof |
新しいホストの検出 可能性のあるARPスプーフィング |
| システム監視 | service_start system_error system_shutdown logs_cleared invalid_request promisc policy_changed config_changed low_diskspace time_changed |
サービスの開始 システムエラー 停止 ログのクリア 無効な要求 インタフェースのプロミスキャスモードへの切り替え ポリシーの変更 設定の変更 ディスク容量が少ない 時刻の変更 |
<description></description> タグを含めます。ルールがトリガされると、説明のテキストがイベントに表示されます。
<group name="syslog,sshd,"> <rule id="100120" level="5"> <group>authentication_success</group> <description>SSHD testing authentication success</description> </rule> <rule id="100121" level="6"> <description>SSHD rule testing 2</description> </rule> </group>
<decoded_as></decoded_as> タグでは、指定されたデコーダがログをデコードした場合にのみルールを適用するようにセキュリティログ監視エンジンを設定します。
<rule id="100123" level="5"> <decoded_as>sshd</decoded_as> <description>Logging every decoded sshd message</description> </rule>
特定の文字列をログで検索するには、<match></match> を使用します。Linuxのsshdのパスワードエラーログを次に示します。
Jan 1 12:34:56 linux_server sshd[1231]:Failed password for invalid user jsmith from 192.168.1.123 port 1799 ssh2
「Failed password」という文字列を検索するには、<match></match> タグを使用します。
<rule id="100124" level="5"> <decoded_as>sshd</decoded_as> <match>^Failed password</match> <description>Failed SSHD password attempt</description> </rule>
次の表は、サポートされている正規表現の構文を一覧表示しています。
| 正規表現の構文 | 説明 |
| \w | A~Z、a~z、0~9の英数字1文字 |
| \d | 0~9の数字1文字 |
| \s | 単一のスペース (空白文字) |
| \t | 単一のタブ |
| \p | ()*+,-.:;<=>?[] |
| \W | \w以外 |
| \D | \d以外 |
| \S | \s以外 |
| \. | 任意の文字 |
| + | 上記のいずれかの1つ以上に一致 (たとえば、\w+、\d+) |
| * | 上記のいずれかの0個以上に一致 (たとえば、\w*、\d*) |
| ^ | 文字列の先頭 (^<任意の文字列>) |
| $ | 文字列の末尾 (<任意の文字列>$) |
| | | 複数の文字列間の「OR」 |
ルールの評価では、trueと評価される他のルールを条件とすることができます。<if_sid></if_sid> タグでは、タグで識別されたルールがtrueと評価された場合にのみこのサブルールを評価するようにセキュリティログ監視エンジンを設定します。次の例では、100123、100124、および100125の3つのルールを示します。<if_sid></if_sid> タグを使用して、ルール100124と100125がルール100123の子になるように変更されています。
<group name="syslog,sshd,"> <rule id="100123" level="2"> <decoded_as>sshd</decoded_as> <description>Logging every decoded sshd message</description> </rule> <rule id="100124" level="7"> <if_sid>100123</if_sid> <match>^Failed password</match> <group>authentication_failure</group> <description>Failed SSHD password attempt</description> </rule> <rule id="100125" level="3"> <if_sid>100123</if_sid> <match>^Accepted password</match> <group>authentication_success</group> <description>Successful SSHD password attempt</description> </rule> </group>
<if_sid></if_sid> タグでは、基本的に階層型のルールセットを作成します。つまり、<if_sid></if_sid> タグをルールに含めることにより、そのルールは <if_sid></if_sid> タグで参照されるルールの子になります。ログにルールを適用する前に、セキュリティログ監視エンジンは <if_sid></if_sid> タグを評価して親子ルールの階層を作成します。
次の表は、使用可能なアトミックルールの条件指定のオプションを一覧表示しています。
| タグ | 説明 | 備考 |
| match | パターン | イベント (ログ) に対して照合される任意の文字列。 |
| regex | 正規表現 | イベント (ログ) に対して照合される任意の正規表現。 |
| decoded_as | 文字列 | 事前一致する任意の文字列。 |
| srcip | 送信元のIPアドレス | 送信元のIPアドレスとしてデコードされる任意のIPアドレス。IPアドレスを無効にするには、「!」を使用します。 |
| dstip | 送信先のIPアドレス | 送信先のIPアドレスとしてデコードされる任意のIPアドレス。IPアドレスを無効にするには、「!」を使用します。 |
| srcport | 送信元のポート | 任意の送信元のポート (形式の一致)。 |
| dstport | 送信先のポート | 任意の送信先のポート (形式の一致)。 |
| user | ユーザ名 | ユーザ名としてデコードされる任意のユーザ名。 |
| program_name | プログラム名 | Syslogプロセス名からデコードされる任意のプログラム名。 |
| hostname | システムのホスト名 | Syslogのホスト名としてデコードされる任意のホスト名。 |
| time | 次の形式の時刻の範囲 hh:mm - hh:mmまたは hh:mm am - hh:mm pm |
トリガするルールに対してイベントが発生する必要のある時刻の範囲。 |
| weekday | 曜日 (日曜、月曜、火曜など) | トリガするルールに対してイベントが発生する必要のある曜日。 |
| id | ID | イベントからデコードされる任意のID。 |
| url | URL | イベントからデコードされる任意のURL。 |
このルールを100125ルールに依存させるには、<if_sid>100125</if_sid> タグを使用します。このルールでは、成功したログインルールにすでに一致するsshdメッセージの確認のみが行われます。
<rule id="100127" level="10"> <if_sid>100125</if_sid> <time>6 pm - 8:30 am</time> <description>Login outside business hours.</description> <group>policy_violation</group> </rule>
次の例では、maxsize属性を前の例に追加しています。この属性では、maxsizeよりも文字数が少ないルールの評価のみを行うようにセキュリティログ監視エンジンを設定します。
<rule id="100127" level="10" maxsize="2000"> <if_sid>100125</if_sid> <time>6 pm - 8:30 am</time> <description>Login outside business hours.</description> <group>policy_violation</group> </rule>
次の表は、使用可能なアトミックルールのツリーベースのオプションを一覧表示しています。
| タグ | 説明 | 備考 |
| if_sid | ルールID | 指定された署名IDに一致するルールの子ルールとしてこのルールを追加します。 |
| if_group | グループID | 指定されたグループに一致するルールの子ルールとしてこのルールを追加します。 |
| if_level | ルールレベル | 指定された重要度レベルに一致するルールの子ルールとしてこのルールを追加します。 |
| description | 文字列 | ルールの説明。 |
| info | 文字列 | ルールの追加情報。 |
| cve | CVE番号 | ルールに関連付ける任意のCommon Vulnerabilities and Exposures (CVE) 番号。 |
| options | alert_by_email no_email_alert no_log |
アラートの処理としてメール生成 (alert_by_email)、メール生成なし (no_email_alert)、またはログへの記録なし (no_log) のいずれかを指定する追加のルールオプション。 |
アトミックルールは、1つのログエントリを確認します。複数のエントリを関連付けるには、コンポジットルールを使用する必要があります。コンポジットルールは、現在のログを受信済みのログと照合します。コンポジットルールには、2つの追加オプションが必要です。frequencyオプションでは、ルールによってアラートが生成されるまでのイベント/パターンの発生回数を指定します。timeframeオプションでは、セキュリティログ監視エンジンがどのくらい前までさかのぼってログを検索する必要があるか (秒単位) をエンジンに通知します。すべてのコンポジットルールの構造は次のようになります。
<rule id="100130" level="10" frequency="x" timeframe="y"> </rule>
たとえば、10分以内にパスワードを5回間違えたら重要度の高いアラートを作成するコンポジットルールを作成できます。<if_matched_sid></if_matched_sid> タグを使用すると、アラートを作成する新しいルールに対して、目的の頻度および期間内にトリガする必要のあるルールを指定できます。次の例では、イベントの5つのインスタンスが発生したらトリガするようにfrequency属性が設定されています。また、timeframe属性で、期間が600秒に指定されています。
コンポジットルールが監視するその他のルールを定義する場合は、<if_matched_sid></if_matched_sid> タグが使用されます。
<rule id="100130" level="10" frequency="5" timeframe="600"> <if_matched_sid>100124</if_matched_sid> <description>5 Failed passwords within 10 minutes</description> </rule>
より詳細なコンポジットルールを作成するのに使用できるタグが他にもいくつかあります。このようなルールを使用すると、次の表に示すように、イベントの特定の部分が同じになるように指定できます。これにより、コンポジットルールを調整して誤判定を減らすことができます。
| タグ | 説明 |
| same_source_ip | 送信元のIPアドレスが同じになるように指定します。 |
| same_dest_ip | 送信先のIPアドレスが同じになるように指定します。 |
| same_dst_port | 送信先のポートが同じになるように指定します。 |
| same_location | 場所 (ホスト名またはAgent名) が同じになるように指定します。 |
| same_user | デコードされるユーザ名が同じになるように指定します。 |
| same_id | デコードされるIDが同じになるように指定します。 |
認証が失敗するたびにアラートを生成するようにコンポジットルールで指定するには、特定のルールIDを使用する代わりに、<if_matched_sid></if_matched_sid> タグを <if_matched_ group></if_matched_ group> タグに置き換えます。これにより、authentication_ failureなどのカテゴリを指定して、インフラストラクチャ全体での認証の失敗を検索できます。
<rule id="100130" level="10" frequency="5" timeframe="600"> <if_matched_group>authentication_failure</if_matched_group> <same_source_ip /> <description>5 Failed passwords within 10 minutes</description> </rule>
<if_matched_sid></if_matched_sid> タグと <if_matched_group></if_matched_ group> タグの他にも、<if_matched_regex></if_matched_regex> タグを使用して、受信したログを検索する正規表現を指定することができます。
<rule id="100130" level="10" frequency="5" timeframe="600"> <if_matched_regex>^Failed password</if_matched_regex> <same_source_ip /> <description>5 Failed passwords within 10 minutes</description> </rule>
Vulnerability ProtectionDeep Securityには、数十種類の一般的なアプリケーションに対応した、多数の初期設定のセキュリティログ監視ルールが含まれています。新しいルールは、セキュリティアップデートを使用して定期的に追加できます。セキュリティログ監視ルールでサポートされるアプリケーションが増えても、サポート対象外のアプリケーションやカスタムアプリケーション用のカスタムルールを作成することが必要な場合があります。
ここでは、Microsoft SQLデータベースをデータリポジトリとして使用するMicrosoft Windows Server IIS .NETプラットフォームでホストされる、カスタムCMS (コンテンツ管理システム) の作成について説明します。
最初に、次に示すアプリケーションログの属性を特定します。
ここで示すカスタムCMSの例では、次のようになります。
次に、アプリケーションの機能別にログイベントのカテゴリを特定し、そのカテゴリを監視用のカスケードグループの階層に分類します。監視対象のすべてのグループでイベントを発生させる必要はありません。一致する項目を条件文として使用できます。各グループについて、ルールで照合条件として使用できるログ形式の属性を特定します。これは、すべてのアプリケーションログの、ログイベントのパターンおよび自然分類を調べることによる逆の方法で実行できます。
たとえば、CMSアプリケーションは、セキュリティログ監視ルールの作成対象である次の機能をサポートします。
これは、ルール作成に役立つ基本的な構造です。次に、Vulnerability ProtectionDeep Security Managerで新しいセキュリティログ監視ルールを作成します。
新しいCMSセキュリティログ監視ルールを作成するには
<group name="cms"> <rule id="100000" level="0"> <category>windows</category> <extra_data>^CMS</extra_data> <description>Windows events from source 'CMS' group messages.</description> </rule>
<rule id="100001" level="0"> <if_sid>100000</if_sid> <id>^100|^101|^102|^103|^104|^105|^106|^107|^108|^109|^110</id> <group>authentication</group> <description>CMS Authentication event.</description> </rule> <rule id="100002" level="0"> <if_group>authentication</if_group> <id>100</id> <description>CMS User Login success event.</description> </rule> <rule id="100003" level="4"> <if_group>authentication</if_group> <id>101</id> <group>authentication_failure</group> <description>CMS User Login failure event.</description> </rule> <rule id="100004" level="0"> <if_group>authentication</if_group> <id>105</id> <description>CMS Administrator Login success event.</description> </rule> <rule id="100005" level="4"> <if_group>authentication</if_group> <id>106</id> <group>authentication_failure</group> <description>CMS Administrator Login failure event.</description> </rule>
<rule id="100006" level="10" frequency="5" timeframe="10"> <if_matched_group>authentication_failure</if_matched_group> <description>CMS Repeated Authentication Login failure event.</description> </rule>
ポリシーまたはコンピュータにルールが割り当てられると、セキュリティログ監視エンジンは、指定されたログファイルの監視をすぐに開始します。
完成したカスタムCMSセキュリティログ監視ルール:
<group name="cms">
<rule id="100000" level="0"> <category>windows</category> <extra_data>^CMS</extra_data> <description>Windows events from source 'CMS' group messages.</description> </rule>
<rule id="100001" level="0"> <if_sid>100000</if_sid> <id>^100|^101|^102|^103|^104|^105|^106|^107|^108|^109|^110</id> <group>authentication</group> <description>CMS Authentication event.</description> </rule> <rule id="100002" level="0"> <if_group>authentication</if_group> <id>100</id> <description>CMS User Login success event.</description> </rule> <rule id="100003" level="4"> <if_group>authentication</if_group> <id>101</id> <group>authentication_failure</group> <description>CMS User Login failure event.</description> </rule> <rule id="100004" level="0"> <if_group>authentication</if_group> <id>105</id> <description>CMS Administrator Login success event.</description> </rule> <rule id="100005" level="4"> <if_group>authentication</if_group> <id>106</id> <group>authentication_failure</group> <description>CMS Administrator Login failure event.</description> </rule> <rule id="100006" level="10" frequency="5" timeframe="10"> <if_matched_group>authentication_failure</if_matched_group> <description>CMS Repeated Authentication Login failure event.</description> </rule> <rule id="100007" level="5"> <if_sid>100000</if_sid> <status>^ERROR</status> <description>CMS General error event.</description> <group>cms_error</group> </rule> <rule id="100008" level="10"> <if_group>cms_error</if_group> <id>^200|^201|^202|^203|^204|^205</id> <description>CMS Database error event.</description> </rule> <rule id="100009" level="10"> <if_group>cms_error</if_group> <id>^206|^207|^208|^209|^230|^231|^232|^233|^234|^235|^236|^237|^238| ^239^|240|^241|^242|^243|^244|^245|^246|^247|^248|^249</id> <description>CMS Runtime error event.</description> </rule> <rule id="100010" level="0"> <if_sid>100000</if_sid> <status>^INFORMATION</status> <description>CMS General informational event.</description> <group>cms_information</group> </rule> <rule id="100011" level="5"> <if_group>cms_information</if_group> <id>^450|^451|^452|^453|^454|^455|^456|^457|^458|^459</id> <description>CMS New Content added event.</description> </rule> <rule id="100012" level="5"> <if_group>cms_information</if_group> <id>^460|^461|^462|^463|^464|^465|^466|^467|^468|^469</id> <description>CMS Existing Content modified event.</description> </rule> <rule id="100013" level="5"> <if_group>cms_information</if_group> <id>^470|^471|^472|^473|^474|^475|^476|^477|^478|^479</id> <description>CMS Existing Content deleted event.</description> </rule> <rule id="100014" level="5"> <if_group>cms_information</if_group> <id>^445|^446</id> <description>CMS User created event.</description> </rule> <rule id="100015" level="5"> <if_group>cms_information</if_group> <id>^447|449</id> <description>CMS User deleted event.</description> </rule> </group>
| レベル | 説明 | 備考 |
| レベル0 | 無視され、処理は行われない | 主に誤判定を回避するために使用されます。これらのルールは、他のすべてのルールより先に検索され、セキュリティとは無関係のイベントが含まれます。 |
| レベル1 | 事前定義された使用法はなし | (備考はありません) |
| レベル2 | システムの優先度の低い通知 | セキュリティとは無関係のシステム通知またはステータスメッセージ。 |
| レベル3 | 成功した/承認されたイベント | 成功したログイン試行、ファイアウォールで許可されたイベントなど。 |
| レベル4 | システムの優先度の低いエラー | 不正な設定または未使用のデバイス/アプリケーションに関連するエラー。セキュリティとは無関係であり、通常は初期設定のインストールまたはソフトウェアのテストが原因で発生します。 |
| レベル5 | ユーザによって生成されたエラー | パスワードの誤り、処理の拒否など。通常、これらのメッセージはセキュリティとは関係ありません。 |
| レベル6 | 関連性の低い攻撃 | システムに脅威を及ぼさないワームまたはウイルスを示します (Linuxサーバを攻撃するWindowsワームなど)。また、頻繁にトリガされるIDSイベントおよび一般的なエラーイベントも含まれます。 |
| レベル7 | 事前定義された使用法はなし | (備考はありません) |
| レベル8 | 事前定義された使用法はなし | (備考はありません) |
| レベル9 | 無効なソースからのエラー | 不明なユーザとしてのログインの試行または無効なソースからのログインの試行が含まれます。特にこのメッセージが繰り返される場合は、セキュリティとの関連性がある可能性があります。また、adminまたはrootアカウントに関するエラーも含まれます。 |
| レベル10 | ユーザによって生成された複数のエラー | 複数回の不正なパスワードの指定、複数回のログインの失敗などが含まれます。攻撃を示す場合や、単にユーザが資格情報を忘れた可能性もあります。 |
| レベル11 | 事前定義された使用法はなし | (備考はありません) |
| レベル12 | 重要度の高いイベント | システムやカーネルなどからのエラーまたは警告のメッセージが含まれます。特定のアプリケーションに対する攻撃を示す場合もあります。 |
| レベル13 | 通常と異なるエラー (重要度: 高) | バッファオーバーフローの試行などの一般的な攻撃パターン、通常のSyslogメッセージ長の超過、または通常のURL文字列長の超過。 |
| レベル14 | 重要度の高いセキュリティイベント | 通常は、複数の攻撃ルールと攻撃の兆候の相関関係の結果。 |
| レベル15 | 攻撃の成功 | 誤判定の可能性はほとんどありません。すぐに対処が必要です。 |
| 指定子 | 説明 |
| %a | 曜日の省略名 (例: Thu) |
| %A | 曜日の正式名 (例: Thursday) |
| %b | 月の省略名 (例: Aug) |
| %B | 月の正式名 (例: August) |
| %c | 日時形式 (例: Thu Sep 22 12:23:45 2007) |
| %d | 月初から数えた日 (01~31) (例: 20) |
| %H | 24時間形式の時刻 (00~23) (例: 13) |
| %I | 12時間形式の時刻 (00~12) (例: 02) |
| %j | 年初から数えた日 (001~366) (例: 235) |
| %m | 10進表記の月 (01~12) (例: 02) |
| %M | 分 (00~59) (例: 12) |
| %p | AMまたはPMの指定 (例: AM) |
| %S | 秒 (00~61) (例: 55) |
| %U | 1週目の最初の日を最初の日曜とした場合の週番号 (00~53) (例: 52) |
| %w | 日曜を0とした場合の10進表記の曜日 (0~6) (例: 2) |
| %W | 1週目の最初の日を最初の月曜とした場合の週番号 (00~53) (例: 21) |
| %x | 日付形式 (例: 02/24/79) |
| %X | 時刻形式 (例: 04:12:51) |
| %y | 年の末尾2桁 (00~99) (例: 76) |
| %Y | 年 (例: 2008) |
| %Z | タイムゾーン名または省略形 (例: EST) |
| %% | %記号 (例: %) |
詳細については、次のWebサイトを参照してください。
www.php.net/strftime
www.cplusplus.com/reference/clibrary/ctime/strftime.html