一部のアプリケーション (不明) は、HTTPS プロトコルを使用して、既知のホスト/ポート/URL (これは WAF ハニーポットで、ホスト/URL/ポートは既知です) に、散発的で不定期な短いアウトバウンド HTTP(S) 要求を行います。要求は 3 ~ 5 日に 1 回発生する可能性があります。文字通り、3 ~ 5 日に 1 つの短い要求です。目標は、これらの要求を行うアプリケーション (バイナリへのパス、PID など) を定義することです。サーバーには、、、、などnginx
を含む多数のソフトウェアがインストールされていますphp
。mariadb
redis
docker
簡単にするために、ここではハニーポットの IP は 7.7.7.7 になります。
これまで試したこと:
- tcpダンプ
$ sudo tcpdump -i any dst host 7.7.7.7 and "tcp[tcpflags] & (tcp-syn) != 0" and "tcp[tcpflags] & (tcp-ack) == 0" &> /tmp/out_7.7.7.7_$(date "+%Y.%m.%d-%H.%M.%S").log &
tcpdump
アウトバウンド HTTP リクエストを行うプロセス ID または実行可能ファイルを検出できないようです。
- 監査ctl/監査d
sudo auditctl -a exit,always -F arch=b64 -S connect -k connectLog
auditctl/auditd
パスと pid を出力できるようですが、フィルタリング機能がありません。監査ルールを 3 ~ 5 日間実行すると、ディスクが監査ログでいっぱいになります。または、監査ログがローテーションされている場合、すでにローテーションされて消去されたログ ファイル内の必要なログ データを見逃す可能性があります。auditctl
ターゲット IP による書き込み (解析ログではなく) のフィルタリング機能があれば、おそらく最適な候補になります。何か見落としているかもしれませんが、フィルタリング機能はありますか?
私が考え出したもう一つの選択肢は、次のような bash スクリプトを作成することです。
- 監査を開始した
connect
- 監視プロセスは次のように開始されました。
( tail -f -n0 /var/log/audit/audit.log & ) | grep -q "7.7.7.7"
- モニターがこれを検出したら、監査を停止します
auditctl -d...
問題は、このイベントが 3 ~ 5 日後にすべてのディスクがいっぱいになったときに発生する可能性があることです。
- ネットスタット
$ sudo netstat -tupnc | grep 7.7.7.7
netstat
オプション (continuos)を使用すると、1 秒ごとに読み取りを繰り返すようです-c
。リクエストが非常に短いため、このリクエストを見逃す可能性があります。
- ss
ss
送信接続を開始したプロセスが表示されないようです。
- lsof
lsof -i TCP:80,443 -r 1
アウトバウンド接続は非常に短く、高速であるため、1秒ごとにlsofを実行してもログに記録されない可能性があります。
wireshark Wireshark には優れたフィルタリング機能 (IP による) がありますが、接続元のプロセス名や pid は表示されないようです。
現在、私は次の解決策に行き詰まっています:
syslog-ng
レシーバーとして、またauditd
ログ イベント センダーとして、TCP/ネットワーク経由でログを受信するときにフィルタリング機能を持つ を結合します。syslog-ng
ポート 2222 から開始し、ネットワークからデータを受信して、何らかの文字列でフィルタリングすることに成功しました ( でテスト済みcurl
)。しかし、ネットワークへのログの送信を管理できませんauditd
。
私がやったこと:
7.1) インストール済みaudisp-remote-plugin
:
$ sudo apt install audispd-plugins
7.2) 有効audisp-remote plugin
:
ファイル内/etc/audit/plugins.d/au-remote.conf
: 設定active = yes
7.3) 設定されたaudisp-remote
プラグイン:
ファイル内/etc/audit/auditsp-remote.conf
:
remote_server = 127.0.0.1
port = 2222
7.4) ローカル log_file への書き込みを無効にしました
ファイル内/etc/audit/auditd.conf
:
write_logs = no
そしてauditdを再起動しました:
$ sudo systemctl restart auditd
7.5) 接続 (システムコール) をキャッチするための監査ルールを追加しましたconnect
:
$ sudo auditctl -a exit,always -F arch=b64 -F saddr_fam=2 -S connect -k sckt
7.6)auditd
ログ内の以前のデータを消去するためにログをローテーションする
$ service auditd rotate
7.7) テストHTTP呼び出しを実行しました:
$ curl -v https://7.7.7.7/api/v1/t
7.8)syslog-ng
ログを確認しましたが、期待した記録がありませんでした。
これを行うための最も適切で、最も簡単で、最もシンプルなアプローチをご存知の方がいらっしゃいましたら、ご協力いただければ幸いです。
答え1
おそらく、ファイル ソースを使用して監査ログを syslog-ng に取り込み、監査ログの保持期間を比較的短く設定できるでしょう。
これにより、syslog-ng 側でフィルタリングを適用し、興味深いレコードを別のログ ファイルに出力できます。