Linux監査が役立ちます。少なくとも、データグラムネットワーク接続を行うユーザーとプロセスを特定します。UDPパケットはデータグラムです。
まず、auditdプラットフォームにフレームワークをインストールし、auditctl -lルールが定義されていないと言っていても、それが何かを返すようにします。
次に、システムコールを監視するルールを追加し、socket()後で簡単に見つけられるようにタグを付けます(-k)。64ビットアーキテクチャを使用していると想定する必要がありますがb32、b64そうでない場合は、代わりに使用できます。
auditctl -a exit,always -F arch=b64 -F a0=2 -F a1\&=2 -S socket -k SOCKET
これを構築するには、マニュアルページとヘッダーファイルを選択する必要がありますが、キャプチャされるのは基本的にこのシステムコールですsocket(PF_INET, SOCK_DGRAM|X, Y)。3番目のパラメーターは指定されていませんが、多くの場合ゼロです。 PF_INETは2でSOCK_DGRAMあり、2です。TCP接続は、SOCK_STREAMどちらを設定するかを使用しますa1=1。(SOCK_DGRAM2番目のパラメーターではOR SOCK_NONBLOCKまたはORでORされるSOCK_CLOEXECため、&=比較されます。)-k SOCKETは、後で監査証跡を検索するときに使用するキーワードです。それは何でも構いませんが、私はそれをシンプルに保つのが好きです。
しばらくして、監査証跡を確認してください。必要に応じて、ネット上でホストをpingすることでいくつかのパケットを強制できます。これにより、DNSルックアップが発生し、UDPが使用され、監査アラートがトリップされます。
ausearch -i -ts today -k SOCKET
そして、以下のセクションのような出力が表示されます。重要な部分を強調するために省略しています
type=SYSCALL ... arch=x86_64 syscall=socket success=yes exit=1 a0=2 a1=2 ... pid=14510 ... auid=zlagtime uid=zlagtime ... euid=zlagtime ... comm=ping exe=/usr/bin/ping key=SOCKET
上記の出力では、pingコマンドによってソケットが開かれたことがわかります。strace -p 14510プロセスがまだ実行されている場合は、実行できます。ppid(親プロセスID)も、それがスポーン問題児多いというスクリプトである場合に表示されます。
さて、UDPトラフィックが多い場合、これでは十分ではなく、OProfileまたはSystemTapに頼る必要があります。どちらも現在、私の専門知識を超えています。
これは一般的な場合に物事を絞り込むのに役立つはずです。
完了したら、作成に使用したのと同じ行を使用して監査ルールを削除-aし-dます。
auditctl -d exit,always -F arch=b64 -F a0=2 -F a1\&=2 -S socket -k SOCKET