ハッカーに「仕事を終えられた」後にログを確認するのでは遅すぎる
以前、SSHのブルートフォース攻撃を受けているステージングサーバーの対応で徹夜したことがあります。ポートを変更し、SSHキーを使用していたにもかかわらず、攻撃者は古いWebアプリケーションのリモートコード実行(RCE)の脆弱性を突いて侵入してきました。私が気づいたときにはすべてが終わっており、システムログには無機質な事後報告が並んでいるだけでした。この教訓は明白です。ログを監視するだけでは不十分なのです。実行中のLinuxカーネル(Kernel)内で何が起きているかを、リアルタイムで詳細に観察できるツールが必要です。
Cilium Tetragonは、まさに this 問題に対する特効薬です。eBPF(Extended Berkeley Packet Filter)テクノロジーに基づいたTetragonを使用すると、プロセス、ファイルシステム、ネットワークのすべての挙動をほぼゼロの遅延で追跡できます。ログがファイルに書き込まれるのを受動的に待つのではなく、Tetragonはカーネルに直接介入して、不正な侵入行為をアラートしたり、即座に阻止したりします。
Dockerを使って5分でTetragonをデプロイする
複雑な設定なしでTetragonの威力をすぐに体験するために、Docker経由で直接実行できます。この方法は、正式なKubernetesクラスターに導入する前に機能をテストするのに最適です。
1. Tetragonコンテナの起動
ターミナルを開き、以下のコマンドを実行します(eBPFプログラムをカーネルにロードするためにroot権限が必要です):
docker run --name tetragon --rm \
--privileged -v /sys/kernel/debug:/sys/kernel/debug \
-d quay.io/cilium/tetragon:v1.1.0
2. システムイベントをリアルタイムで監視する
新しいターミナルウィンドウを開きます。内蔵の tetra ツールを使用して、実行中のプロセスを監視します:
docker exec -it tetragon tetra observe --follow
ここで、別のタブで sudo cat /etc/shadow コマンドを実行してみてください。Tetragonが即座に詳細情報を表示するのがわかります。どのコマンドが実行されたか、どのユーザーが行ったか、 aerial そのプロセスのIDが表示されます。すべてが透明かつ瞬時に行われます。
なぜeBPFがセキュリティのゲームチェンジャーなのか?
eBPFは抽象的で難解だと思われがちです。Linuxカーネルを厳重に守られた建物だと想像してみてください。以前は、誰が出入りしているかを知るためには、正面ゲートに立って尋ねる必要がありました(システムコール)。eBPFを使えば、廊下から各部屋に至るまで、あらゆる場所にセンサーカメラを設置したような状態になります。
TetragonはeBPFを使用して、カーネル内の重要な関数に「フック(hook)」をかけます。アプリケーションが機密ファイルを開いたり、外部に接続したりするアクションを実行すると、Tetragonはそのイベントを逃さずキャッチします。
Tetragonの圧倒的な優位性:
- 優れたパフォーマンス: カーネル内で直接動作するため、オーバーヘッドが最小限に抑えられます。実際の運用では、通常の条件下でTetragonのCPU消費量はわずか1〜3%未満であることが多いです。
- インテリジェントなデータフィルタリング: リスクの高い挙動のみに関心を絞るよう構成できるため、ログデータの氾濫(ログ疲れ)を防ぐことができます。
- 即時遮断(Enforcement): 単に監視するだけでなく、Tetragonはセキュリティポリシーに違反したプロセスに対して
SIGKILLシグナルを送信し、害を及ぼす前に即座に停止させることができます。
TracingPolicyによる能動的なセキュリティ実行
Tetragonの真の力は TracingPolicy にあります。これは、シンプルなYAMLファイルでセキュリティルールを定義する場所です。例えば、システムパスワードを含むファイルへの不正アクセスを監視し、阻止するポリシーを作成してみましょう。
例:機密ファイルへのアクセスを遮断する
以下の内容で block-shadow-access.yaml ファイルを作成します:
apiVersion: cilium.io/v1alpha1
kind: TracingPolicy
metadata:
name: "protect-etc-shadow"
spec:
kprobes:
- call: "sys_openat"
syscall: true
args:
- index: 1
type: "string"
selectors:
- matchArgs:
- index: 1
operator: "Equal"
values:
- "/etc/shadow"
matchActions:
- action: Sigkill
このポリシーを適用すると、意図的に cat /etc/shadow コマンドを実行しようとした者は誰でも、システムによって自動的に接続が切断され、プロセスが即座に終了されます。これは、単にアラートを待つのではなく、能動的に保護する方法です。
実践的なヒント:注意すべき点
本番環境でTetragonをデプロイするには、システムの安定性に影響を与えないよう慎重さが必要です。
1. ログ流量の制御
すべてのシステムコールをログに記録しようとしないでください。稼働中のサーバーは1秒間に数十万件のイベントを生成する可能性があり、数分でI/Oシステムがボトルネックになったり、ディスクがいっぱいになったりします。/etc/passwd、~/.ssh/authorized_keys、あるいは未知のIPへのネットワーク接続といった「ホットスポット」に集中しましょう。
2. 可視化ダッシュボードの構築
TetragonはJSON形式でログを出力するため、Loki や Elasticsearch への転送が非常にスムーズです。Grafanaと組み合わせることで、異常なアクティビティの全体像を把握できます。グラフのスパイク(急増)を検出することは、手動でログを読むよりもはるかに早く攻撃を追跡するのに役立ちます。
3. 「Kill」する前に「Audit」モードで試す
アクションを Sigkill に設定する前に、まずは Post アクションを使用して警告ログを記録してください。ポリシーを厳しくしすぎたために自動バックアップスクリプトが強制終了され、サービスが中断してしまったケースを経験したことがあります。誤検知(False Positives)を排除するために、ステージング環境で少なくとも24〜48時間はテスト運用を行ってください。
4. サプライチェーン攻撃(Supply Chain Attack)の検知
TetragonをCI/CDパイプラインやテスト環境に統合できます。新しく追加したオープンソースライブラリが突然ロシアや中国の未知のIPに接続し始めた場合、Tetragonが即座にアラートを発します。これは、コードの奥深くに埋め込まれたマルウェアを検出する非常に効果的な方法です。
おわりに
Cilium Tetragonは、Linuxランタイムセキュリティにおける大きな進歩です。このツールを通じてeBPFを使いこなすことは、システムをより安全にするだけでなく、エンジニアとしてのスキルを一段上のレベルへと引き上げてくれます。トラブルが発生してから解決策を探すのではなく、今日からあなたのサーバーに強固な盾を築きましょう。
