これは過去数日間の煩わしさを証明しており、根本的な原因はまだ解明されていません。
ラボでは、OSSECサーバーアプライアンスとWindows 7 x64 EnterpriseSP1クライアントの2つの仮想マシンをセットアップしました。
どちらも非常にうまく機能しているようです彼らが独自のことをするとき。 Windowsクライアントに広範な構成ファイルがある場合、エージェントはそれを読み取り、必要な処理を実行します。
この問題は、構成を一元化しようとすると発生します「マネージャー」またはOSSECサーバーアプライアンスに。
[root@ossec etc]# md5sum /var/ossec/etc/shared/agent.conf
9cc4c937f4eae011ecbccf4468973133 /var/ossec/etc/shared/agent.conf
[root@ossec etc]# /var/ossec/bin/agent_control -i 004
OSSEC HIDS agent_control. Agent information:
Agent ID: 004
Agent Name: ABC
IP address: 192.168.0.93
Status: Active
Operating system: Microsoft Windows 7 Enterprise Edition Professional ..
Client version: OSSEC HIDS v2.9.0 / cd66e10fca4cc1dc4c459a1f05f9b2d1
Last keep alive: Sat Oct 7 22:52:09 2017
Syscheck last started at: Sat Oct 7 21:35:12 2017
Rootcheck last started at: Sat Oct 7 22:27:19 2017
[root@ossec etc]#
当然のことながら、構成は同じバージョンではありません。
アプライアンスとWindowsエージェントの両方を再起動する(そして数分待つ)という簡単な修正は、そうではないことがわかりました。
ドキュメントを読んで、エージェントが一元化された構成をマージしようとすることを理解しました。
<agent_config name="ABC">
<localfile>
<location>/var/log/my.log2</location>
<log_format>syslog2</log_format>
</localfile>
</agent_config>
<agent_config os="Linux">
<localfile>
<location>/var/log/my.log2</location>
<log_format>syslog</log_format>
</localfile>
</agent_config>
<agent_config os="Windows">
<!-- This is a test config -->
<!-- One entry for each file/Event log to monitor. -->
<localfile>
<location>Application</location>
<log_format>eventlog</log_format>
</localfile>
<!-- Additional contents are in here. -->
<active-response>
<disabled>no</disabled>
</active-response>
</agent_config>
1つでローカルに持っています。エージェントの構成(ossec.conf)は次のとおりです。
<ossec_config>
<active-response>
<disabled>no</disabled>
</active-response>
<client>
<server-ip>192.168.0.21</server-ip>
<notify_time>120</notify_time>
<time-reconnect>240</time-reconnect>
</client>
</ossec_config>
およびエージェントの共有フォルダーにあるagent.confファイル:
<agent_config>
<localfile>
<location>/var/log/my.log</location>
<log_format>syslog</log_format>
</localfile>
</agent_config>
ログから、マージは行われておらず、ローカルコピーが実行されていることがわかります。
2017/10/08 00:06:52 ossec-agentd: INFO: Trying to connect to server 192.168.0.21, port 1514.
2017/10/08 00:06:52 INFO: Connected to 192.168.0.21 at address 192.168.0.21:1514, port 1514
2017/10/08 00:06:52 ossec-agent: Starting syscheckd thread.
2017/10/08 00:06:52 ossec-syscheckd(1702): INFO: No directory provided for syscheck to monitor.
2017/10/08 00:06:52 ossec-syscheckd: WARN: Syscheck disabled.
2017/10/08 00:06:52 ossec-rootcheck: INFO: Started (pid: 2512).
2017/10/08 00:06:52 ossec-syscheckd: INFO: Started (pid: 2512).
2017/10/08 00:06:53 ossec-agentd(4102): INFO: Connected to server 192.168.0.21, port 1514.
2017/10/08 00:06:53 ossec-agent: INFO: System is Vista or newer (Microsoft Windows 7 Enterprise Edition Professional Service Pack 1 (Build 7601) - OSSEC HIDS v2.9.0).
2017/10/08 00:06:53 ossec-logcollector(1103): ERROR: Could not open file '/var/log/my.log' due to [(9)-(Bad file descriptor)].
2017/10/08 00:06:53 ossec-logcollector(1950): INFO: Analyzing file: '/var/log/my.log'.
結局、エージェント/マネージャーが次のことができない場合ではないようです:
アプライアンス/マネージャーでオプションを設定できませんでしたか、それとも他の場所で問題が発生しましたか?
したがって、security.stackexchange.com
で成功しなかった後、質問はここに移行されました。これにさらに数日を費やして、私は「解決策」を見つけました。
要約すると、次のようになります。別のHIDSソリューションを見つける
私は物事の広範なリストを試した後、この結論に達しました:
適切なインストールを実行するために、少なくとも(ある程度)機能したので、次の手順に従いました。
firewall-cmd --permanent --zone=public --add-port=1514/udp
firewall-cmd --reload
yum install mysql-devel postgresql-devel gcc wget vim
wget https://github.com/ossec/ossec-hids/archive/2.9.2.tar.gz
tar -zxvf 2.9.2.tar.gz
cd ossec-hids-2.9.2
./install.sh
server
タイプを選択します。/var/ossec/bin/manage_agents
vim /var/ossec/etc/shared/agent.conf
を介して一元化された構成ファイルを構成します/var/ossec/bin/ossec-control start
何時間も費やした後の素晴らしいことは、私の仕事がすべて無駄になったということでした。 Windowsクライアントをデバッグレベル2に設定する方法を見つけ、次のメッセージを見つけました。
2017/10/20 02:13:40 ossec-agentd: Failed md5 for: shared/merged.mg -- deleting.
構成の重要なマージが失敗したという「通常の」ログレベルでスローされる警告がないことが判明しました(真剣に!?)
サーバーとクライアントを再起動した後、サーバーがクライアントの構成のmd5ハッシュを取得できなかったという事実にさらに感銘を受けました(#2から#14を試みてください)。
OVAを使用した1回の実行(試行#1)で、サーバーは構成のクライアントのmd5を取得できましたが、サーバーのmd5と一致しませんでした。これは私の元の質問で見ることができます。エージェントのconfディレクトリ(主にagent.conf)にいくつかのファイルを追加したため、エージェントからのmd5が送信されたと思います。
まったく迷惑なことに、私はインターネットに目を向けると、OSSECの Googleグループディスカッション を見つけました。メッセージのチェーン全体を読んだ後、それは非常に明白になりましたOSSECに重大な欠陥があります:
IMHOの前に述べたように、この問題はWindowsおよびUNIXエージェントに影響しますが、デフォルトのバッファーが短いため、Windowsでより一般的です。プライベートVirtualBoxネットワーク上のWindowsエージェントでこの問題が発生しました。共有ファイルが到着しませんでした。デバッグを有効にすると、次のメッセージが表示されました。
ossec-agent: Failed md5 for: merged.mg -- deleting.
そこで、このテストを行いました。ファイルが破損していても削除されないようにソースコードを変更し、受信したファイルを元のファイルと比較しました。ファイルの一部のチャンクが実際に失われ、行末の問題ではありませんでした。
共有ファイルチャンクは、UDPプロトコル、およびその他のエージェントイベントまたは制御メッセージが原因で失われる可能性があります。実際、TCPを使用することは、この問題の良い解決策のようです。バージョン1.1から1年前にWazuhでTCP通信を実装し、いくつかの利点に到達しました。
No event losing. Communication is reliable for events, control messages and Active response requests. Agents detect that a manager is down immediately, so they are able to "lock" the transmission in order to prevent events from being dropped.
TCP接続のエージェントは、Linux、Windows、OpenBSD、macOS、AIXなどを使用する多くのシステムで正しく機能しています。
これは私が読むと思っていたものではありません。私が最も心配しているのは、OSSECインフラストラクチャが単にパケット損失によってダウンする可能性があるという事実です。通常のログレベルでは、構成のマージに失敗しても表示されないことはさらに心配です。
私はWindowsエージェントのみをテストしましたが、Linuxエージェントが機能することは間違いありません。おそらく将来的にOSSECはTCP接続に移行しますが、今のところ、OSSECには重要な機能が欠けています。
tldr;(少なくとも私の意見では)結局のところ、不十分なソフトウェアテスト/品質保証です。 Googleグループのディスカッション UDP接続が問題を引き起こし、データ送信の検証が制限されていることがわかりました。転送中のマネージャーの構成が破損しているため、クライアントはそれをマージすることを拒否します。これは、Windowsクライアントでのみ発生するようです。