OSSIM 鮮明なWMIプラグイン。 レシピ

読者の皆さん、こんにちは。



エージェントを使用せずにOSSIMでWindowsイベントログを収集する実験を共有します。 WMIプラグインを使用します。



これらのプラグインは、WMIインターフェイスと、それに応じてwmiクライアントを使用してイベントログを収集します。 これらのプラグインを使用することは推奨されません。むしろ、ベンダー(Alienvault)がターゲットシステムのイベントログを収集することは推奨されません。 彼らは、この方法はOSSECエージェントを使用してイベントログを収集するよりもはるかに多くのシステムリソースを使用すると主張しています。 これは事実ですが、さらに、WMIを使用すると、イベントが単純に消えたり、20〜30分間遅延したりする可能性がありますが、これはもちろん受け入れられません。



さらに、標準のWMIプラグインは、Windowsログから有用な情報を実質的に受け取らないように作成されています。 Windowsイベント識別子(数値と人間の言語への翻訳、たとえば4624-アカウントは正常にログオンしました)、ログ名(セキュリティ、システム、アプリケーション...)、タイムスタンプ、およびメッセージフィールドの巨大なメッセージ(すべての有用な情報-IPアドレス、ユーザー名、UAC設定など)。 したがって、いくつかの有用な情報を取得するには、メッセージフィールドを追加の解析、つまり 通常のWMIプラグインを追加で構成する必要があります。 この設定がないと、標準のWMIプラグインはほとんど役に立ちません。



それでも、状況によってOSSECエージェントではなくWMIプラグインを使用する必要がある場合、途中で発生するレーキの数を減らしてサイズを小さくする方法を説明します。



  1. WMIを介して収集されたイベントログからの追加データの受信を構成する方法。
  2. WMIプラグインを診断およびトラブルシューティングする方法。


1. WMIを介して収集されたイベントログから追加データを取得する



ユーザー名を取得する例を使用して、このタスクを検討します。 他のデータを受信するためのチューニングアルゴリズムも同様です。



追加データを取得するには、「カスタム関数」関数を使用します。これにより、WMI経由で受信した任意のフィールドに自己記述関数を適用できます。 この関数は、Windowsログのメッセージフィールドを解析し、受信した値(ユーザー名)をOSSIMに表示されるイベントのユーザー名フィールドに入れます。



まず、標準のwmi-security-loggerプラグインを見てください。 /etc/ossim/agent/plugins/wmi-security-logger.cfgにある構成ファイルからわかるように、2つのWQL(WMIのSQL)クエリを実行し、最初のクエリ(start_cmdセクションのcmdフィールド)が番号を取得しますログが読み取られるイベントから開始し、2番目(cmdセクションのcmdフィールド)はすでにログを読み取ります。 次に、ログを読み取る2番目のクエリの例を示します。



Select ComputerName,EventCode,Logfile,Message,RecordNumber,SourceName,TimeWritten,User from Win32_NTLogEvent Where Logfile = 'Security' and RecordNumber > OSS_COUNTER
      
      





プラグインは、Windowsログからこれらのフィールドを読み取ります。



ComputerName、EventCode、Logfile、Message、RecordNumber、SourceName、TimeWritten、User

Windows 2008R2の「ユーザー」フィールドについての希望を構築する価値はなく、新しい「null」がそれになります。



したがって、最も有益なフィールドは「メッセージ」です。 関数を使用して、ユーザー名を取得します。



Windowsログの例を見ると、ユーザー名を含む2つの構造があることがわかります。



1)ログオンアカウント:<ユーザー名>

OSSIMが見ている生のイベントの例:



 nsrv_WinSRV-DC.domain.test|4776|Security|The computer attempted to validate the credentials for an account.\r\n\r\nAuthentication Package:\tMICROSOFT_AUTHENTICATION_PACKAGE_V1_0\r\nLogon Account:\tAdministrator\r\nSource Workstation:\tALIENVAULT\r\nError Code:\t0x0|17507786|Microsoft-Windows-Security-Auditing|20170410111356.914996-000|(null)
      
      





2)アカウント名:<ユーザー名>

OSSIMが見ている生のイベントの例:



 nsrv_WinSRV-DC.domain.test|4672|Security|Special privileges assigned to new logon.\r\n\r\nSubject:\r\n\tSecurity ID:\t\tS-1-5-21-2827692199-2880599349-568663292-500\r\n\tAccount Name:\t\tAdministrator\r\n\tAccount Domain:\t\tDOMAIN\r\n\tLogon ID:\t\t0x2B9EB90D\r\n\r\nPrivileges:\t\tSeSecurityPrivilege\r\n\t\t\tSeBackupPrivilege\r\n\t\t\tSeRestorePrivilege\r\n\t\t\tSeTakeOwnershipPrivilege\r\n\t\t\tSeDebugPrivilege\r\n\t\t\tSeSystemEnvironmentPrivilege\r\n\t\t\tSeLoadDriverPrivilege\r\n\t\t\tSeImpersonatePrivilege\r\n\t\t\tSeEnableDelegationPrivilege|17507787|Microsoft-Windows-Security-Auditing|20170410111356.914996-000|(null)
      
      





したがって、これらの構成の両方からユーザー名を取得できる関数が必要です。 プラグインで使用される関数は、Python 2.7で記述し、別のファイルに保存する必要があります。このファイルへのパスは、プラグイン構成の特別な変数に書き込まれます。



「生の」ログでは、\ r、\ t、\ nはすべて特殊文字、つまり 復帰、改行、タブ文字。



関数が保存されているファイルには、特別なパパ-/ etc / ossim / agent / plugins / custom_functionsがあります。 WMIログから追加情報を取得する機能を備えたファイルは、「wmi_funcs.cfg」と呼ばれます。



その内容は次のとおりです。



 Start Function win_account import re def win_account(self, input=''): try: try: res = re.search( 'Logon Account:[^\w]t(\S+)[^\w]r[^\w]', input ).group(1) return res except: res = re.findall( 'Account Name:[^\w]t[^\w]t(\S+)[^\w]r[^\w]', input ) if len(res) > 1: return res[1] else: return res[0] except: return None End Function
      
      





関数の本体は、タグ「Start Function」および「End Function」で囲む必要があります。 また、私の場合のように追加のPythonモジュールをインポートする必要がある場合は、関数本体自体の前にインポートも記述する必要があります。



「生」ログ「\ r」、「\ n」、「\ t」から特殊文字を指定するには、[^ \ w] r、[^ \ w] nおよび[ ^ \ w] tそれぞれ。 つまり 正規表現(つまり、この関数でデータを取得する正規表現を使用)の「raw」メッセージのシンボル「\」は、「[^ \ w]」として表されます。 この解決策は試行錯誤によって発見されました。 「。*」、「\ S +」、スラッシュのエスケープなど、他の構成は生ログの「\」に対応できませんでした。



関数からわかるように、1つのメッセージに複数の「アカウント名」の構造がある場合(これは、たとえば、あるユーザーKMを別のKMに変更するイベントで発生する)、ユーザー名として2番目の値を取ります。 最初の名前は、ターゲットKMを変更したユーザーの名前にすぎないためです。



次に、プラグイン構成ファイル「/etc/ossim/agent/plugins/wmi-security-logger.cfg」の[config]セクションの最後に、関数ファイルを参照するパラメーターを追加します。

custom_functions_file = / etc / ossim / agent / plugins / custom_functions / wmi_funcs.cfg



[cmd]セクションでは、カスタム関数を使用してユーザーの超音波に関するデータを取得するパラメーターを追加します。 一般的に、次のようになります。



 <   OSSIM>={:< >($< ,   WQL>)}
      
      





そして、私の特定のケースでは、次のようになります。



 username={:win_account($3)}
      
      





その結果、プラグイン構成ファイルは次のようになります。



 [DEFAULT] plugin_id=1518 [config] type=detector enable=yes source=wmi credentials_file=/etc/ossim/agent/wmi_credentials.csv sleep=10 process= start=no stop=no custom_functions_file=/etc/ossim/agent/plugins/custom_functions/wmi_funcs.cfg [start_cmd] cmd=wmic -U OSS_WMI_USER%OSS_WMI_PASS //OSS_WMI_HOST "Select LogFile,RecordNumber from Win32_NTLogEvent Where Logfile = 'Security'" | head -n 3 | tail -n 1 | cut -f 2 -d \| regexp= [cmd] cmd = wmic -U OSS_WMI_USER%OSS_WMI_PASS //OSS_WMI_HOST "Select ComputerName,EventCode,Logfile,Message,RecordNumber,SourceName,TimeWritten,User from Win32_NTLogEvent Where Logfile = 'Security' and RecordNumber > OSS_COUNTER" | cat start_regexp=^([^\|]+)\|(\d+)\|([^\|]+)\| regexp="^(?P<system_name>[^\|]+)\|(?P<plugin_sid>\d+)\|(?P<logfile>[^\|]+)\|(?P<message>[^\|]+)\|(?P<recordnumber>[^\|]+)\|(?P<sourcename>[^\|]+)\|(?P<timewritten>[^\|]+)\|(?P<username>.*)$" src_ip={resolv($0)} plugin_sid={$1} userdata2={$2} userdata3={$3} userdata4={$4} userdata5={$5} userdata6={$6} username={:win_account($3)}
      
      





2. WMIプラグインの診断とトラブルシューティング



プラグインを診断するには、次の手順を実行する必要があります。



1)OSSIMサーバーコンソールからwmicクライアントを実行して、WMIをテストします。

wmicを開始する引数は、同じプラグイン構成ファイルから取得できます。



たとえば、次のように:



 wmic -U domain\Administrator%Passw0rd //server.example.com "Select LogFile,RecordNumber from Win32_NTLogEvent Where Logfile = 'Security'"
      
      





このコマンドが正常に実行された結果は、Windowsログからの数値イベント識別子のリストになります。



エラーが表示される場合、このKMが正しく構成されており、ターゲットシステムのイベントログを受信するために必要なすべての権限を持っていることを確認する必要があります。 OSSIMサーバーとターゲットシステムの間にファイアウォールがある場合、OSSIM→Windowsトラフィックを逆方向に通過させることも確認する必要があります。



2)OSSIMプラグインを再起動します。

最初にプラグインを停止します:



 /etc/init.d/ossim-agent stop
      
      





次に、まだハングしているすべてのwmiクライアントプロセスを強制終了します。



 ps –ef |grep wmi
      
      





そして順番に:



 kill -9 “ ”
      
      





その後、エージェントを実行します。



 /etc/init.d/ossim-agent start
      
      





3)ターゲットシステムのログを消去します。

多数のユーザーがいるドメインコントローラーなどの負荷の高いサーバーでは、イベントログが非常に大きくなり、数百メガバイトを占有する場合があります。 私の実践では、このような大量のWMIイベントログで、プラグインが大幅な時間遅延でイベントの受信を開始するという事実に出会いました。 ここでの唯一の推奨事項は、ターゲットシステムでログサイズの制限を設定することです。 30 MB以下であることが推奨されます。



研究所では、多くの場合、WMIプラグインは、大きなセキュリティログが完全に空になって初めて機能し始めました。



All Articles