Claude が書いた記事
ランサムは暗号化の前に何をするか ── 素 Ubuntu のふるまい検知を kill chain で組む
「Falco と Wazuh、ふるまい検知できるのはどっち?」から始めた学習ログ。現代のランサムは暗号化の前に潜伏してデータを抜く。その段取り (kill chain) を並べると、どの挙動をどの無料ツールで見張るかが決まる。
俺の最初の疑問
自宅の Linux サーバーに Falco と Wazuh agent を入れようとしていた。最初の疑問はシンプルで、「ふるまい検知ができるのはどっち?」だった。
きっかけは、日本企業や病院がランサムウェアに大量にやられている現状を知ったこと。自分のサーバーでも「root でログインされた」「普段は絶対に触らんファイルにアクセスがあった」みたいなおかしな挙動を検知したいと思った。
調べ始めてすぐ、問いの立て方を一段ずらすことになった。「どっちのツールか」より先に「そもそもランサムはどんな順番で攻めてくるのか」を知らないと、ツールは選べない。やられ方の型が先、対策の実行が後。その順で潰した記録。
まず一言でいうと
ツールの話の前に、現代のランサムの正体を 1 行で。
今のランサムは「侵入したら即暗号化」やない。人間のオペレーターが何日も潜伏し、暗号化の前にデータを抜いてから、最後に暗号化する。
つまり暗号化は攻撃の最後の 1 手で、その前に長い「いろいろやられる」フェーズがある。そしてそれはほぼ型が決まっている。業界ではこの段取りを kill chain、あるいは MITRE ATT&CK のフェーズで整理する (これが事実上の共通言語)。
何と比べるとわかるか
「昔のランサム」と並べると、なぜ潜伏フェーズを見張る必要があるかがわかる。
| 旧来のばらまき型 | 現代の human-operated | |
|---|---|---|
| 侵入後 | すぐ暗号化 | 数日〜数週間 潜伏する |
| データ | 暗号化するだけ | 暗号化の前に外へ抜く (二重恐喝) |
| 操作 | 自動・無差別 | 人手で標的に合わせて操作 |
| 気づける窓 | ほぼ無い (一瞬) | 潜伏中ずっとある ← ここを見張る |
旧来型なら検知しても手遅れだが、現代型は潜伏している間ずっと気づくチャンスがある。だから「暗号化を検知する」のではなく、その手前の段取りの挙動を検知するのが本筋になる。
何が問題なのか
ここで最初の疑問 ──「ふるまい検知できるのは Falco か Wazuh か」── に戻る。答えは 「片方やない。挙動の種類でツールが割れる」。
理由は一点、挙動がログに残るかどうか。
- Wazuh … ログ・FIM・設定診断の HIDS。
/var/log/auth.logを解析して「root の成功ログイン」を拾うのは得意。ログに痕跡が残る挙動の担当。 - Falco … syscall (システムコール) を eBPF でリアルタイムに覗く。「ファイルを開いた」「shell が立った」を、ログに残らなくてもその瞬間に拾える。ログに残らない生の挙動の担当。
俺が最初に挙げた 2 つの例も、きれいに割れる。
| 検知したい挙動 | 担当 | なぜ |
|---|---|---|
| root でログインされた | Wazuh | 認証は auth.log に残る。ログ解析が本職 |
| 普段触らんファイルにアクセス | Falco | 「読んだだけ」はログに残らない。syscall を見る Falco でしか取れない |
「ふるまい検知 = Falco 一択」でも「Wazuh だけで十分」でもない。kill chain のどのフェーズを見張るかで、担当が決まる。
図で見る
侵入から暗号化までの 10 段。各段の「ログに残るか」で、見張る道具 (Wazuh / Falco / ネットワーク型) が決まる。
この図の肝は 「ログに残る?」で色が分かれていること。点で「root ログイン」「ファイルアクセス」と 2 個見ていたのを、#1〜#10 の線に並べ替えると、どこに目を置けば早く気づくかが一望できる。
混乱しやすいポイント
俺が実際に取り違えていた点。
① 「ふるまい検知=Falco」と短絡しない
Falco はリアルタイム挙動の本職だが、ログに残るふるまい (ログイン・永続化・横展開) は Wazuh の方が素直。auditd を Wazuh に連携させれば「どのコマンドが実行されたか」もルールで拾える。「ふるまいの痕跡をログで見る Wazuh」と「ふるまいそのものを syscall で見る Falco」 の対比が正確。
② FIM は「書き換え」は見るが「読み取り」は見ない
Wazuh の FIM はファイル改ざんの検知。だから #6 の「/etc/shadow を読まれた」は基本すり抜ける。読み取りを捕まえたいなら Falco の syscall (open / openat) か、Wazuh FIM を auditd 連携の whodata モードで動かす。「FIM を入れたから読み取りも安心」は誤解。
③ 防御 = 検知だけやない (むしろ予防が先)
Falco も Wazuh も 「入られた後に気づく」検知側の道具。でもランサムは早い段で止めるのが一番安い。素 Ubuntu なら、検知を盛る前にまず予防層を固めるのが筋。
| 層 | 役割 | 無料 OSS の定番 | kill chain の対応 |
|---|---|---|---|
| 予防 (止める) | SSH 総当たりを遮断 | fail2ban | #1 初期侵入 |
| 予防 (止める) | 入口・外向きを絞る | ufw / nftables | #1 / #9 |
| 予防 (止める) | プロセスを箱に閉じる | AppArmor (Ubuntu 標準の LSM) | #4 / #6 |
| 予防 (止める) | 穴を塞ぐ | unattended-upgrades | #1 |
| 検知 (気づく) | リアルタイム挙動 | Falco / Tetragon / Tracee | #2 / #6 / #10 |
| 検知 (気づく) | ログ・FIM・集約 | Wazuh / OSSEC / AIDE | #1 / #3 / #5 |
| 検知 (気づく) | 外向き通信 | Suricata / Zeek | #9 抜き取り |
| 調査 (追跡) | 入られた後の状態を聞く | osquery / Velociraptor | 全般 |
④ Falco の代わりに「止める」道具もある
Falco は基本 「アラートを上げるだけ」。挙動を その場でブロック したいなら Tetragon (Cilium 系・eBPF) が enforcement までやる。「想定外プロセスが /etc/shadow を開いたら kill」のような自動遮断が要るならこっち。検知だけなら Falco、止めたいなら Tetragon が分岐点。
⑤ 「無料」は機能が削られてるわけやない ── ただしタダではない
ここまでの道具は全部、自己ホストで 全機能が使える本物の OSS。商用 EDR の体験版みたいに「無料版は検知ルールが削られてる」罠はない。
| ツール | ライセンス | 自己ホストで全機能 | 補足 |
|---|---|---|---|
| Falco | Apache 2.0 (CNCF 卒業) | ◯ | 完全無料 |
| Wazuh | GPLv2 | ◯ | ソフトは全無料。Wazuh Cloud (任意・有料) は運用代行 |
| Tetragon | Apache 2.0 | ◯ | enforcement (止める) も無料版に入ってる |
| Tracee | Apache 2.0 | ◯ | 完全無料 |
| fail2ban | GPLv2 | ◯ | 完全無料 |
| ufw / nftables | GPL | ◯ | Ubuntu に同梱 |
| AppArmor | GPL | ◯ | Ubuntu 標準で既に動いてる |
| unattended-upgrades | GPL | ◯ | 同梱 |
| Suricata / Zeek | GPLv2 / BSD | ◯ | 完全無料 |
| OSSEC / AIDE / Samhain | GPL | ◯ | 完全無料 |
| osquery | Apache 2.0 | ◯ | 無料。管理 UI の Fleet に有料枠あり (osquery 本体は無料) |
| Lynis | GPLv3 | ◯ | CLI は全無料。Lynis Enterprise (任意・有料) あり |
| Velociraptor | オープンソース・無料 | ◯ | Rapid7 が商用版も提供。OSS 版は無料 (正確なライセンス版は公式で確認推奨) |
たとえ話
kill chain は空き巣の動線に近い。
- 塀・鍵・センサーライト (fail2ban・ufw・AppArmor) = そもそも入らせない予防。
- 家の中の動きを見る人感センサー (Falco) = 侵入後、リアルタイムに動きを捕まえる。
- 玄関の防犯カメラ録画 (Wazuh のログ・FIM) = 誰がいつ入って何を触ったかを記録・集約する台帳。
- 塀の外への持ち出しを見る通りのカメラ (Suricata) = 盗品を運び出す瞬間を捉える。
どれか 1 つやなく、動線のどこを誰が見るかを割り当てるのが防御。そして空き巣と同じで、一番安いのは塀と鍵 (予防) で、家に入られてから気づくのは次善。
実話で当ててみる ── HTTP PUT → proxy → マイニング
抽象的な #1〜#10 を、現に起きたことに結びつけておく。俺は前に Ubuntu サーバーを 1 台乗っ取られたことがある。やられ方はこうだった ── HTTP PUT で何かを設置されてコマンドを実行され、その後どこかの proxy server へ通信させられ、最後に仮想通貨のマイニングを install された。当時は監視を何も入れていなかったので、全部素通りした。これを上の kill chain と道具に当てるとこうなる。
| 起きたこと | kill chain の段 | 本命の道具 | どう捕まえるか |
|---|---|---|---|
| HTTP PUT で何か設置 | #1 初期侵入 + #2 足場 (webshell) | Wazuh / Suricata | access.log の異常な PUT・webshell の署名 |
| コマンドを実行させられた | #2 / #7 | Falco | web サーバー (www-data) が sh・curl を起動 = Falco の看板ルール |
| proxy server へ通信 | #9 外向き (C2) | Suricata | 想定外の外向き接続・既知 proxy / C2 宛の署名 |
| マイナーを install | #2 / #10 | Wazuh FIM / ClamAV | 新規バイナリが /tmp 等に出現 → drop して即実行 |
| マイニング稼働 (CPU 張り付き) | #10 | Suricata / osquery | マイニングプール宛の Stratum 通信・既知プール IP |
MITRE ATT&CK で並べると T1190 (公開アプリ悪用) → T1505.003 (Web Shell) → T1090 (Proxy) → T1496 (Resource Hijacking) ── 既知の手口がそのまま並んでいる。
このチェーンが検知向きなのは、攻撃が派手な挙動を何度も出すからだ。web サーバーが子プロセスに sh / curl を産むのは正常運用ではまず起きない (Falco の看板)。外部 proxy やマイニングプールへの通信には署名がある (Suricata)。新規バイナリの出現は FIM が拾う (Wazuh)。どれか 1 つ外しても別が鳴る ── これが kill chain を多層で見張る意味だ。当時は何も入れていなかったから素通りしたが、この構成なら遅くとも「www-data が shell を起動」か「採掘プールへの通信」のどちらかで火を噴く。
出てきた言葉の変換表
| 言葉 | つまり何の話? |
|---|---|
| kill chain | 侵入から目的達成までの攻撃の段取り。各段を見張れば早く気づける |
| MITRE ATT&CK | 攻撃手口を体系化した共通言語。kill chain の各段に技法 ID が振られている |
| human-operated ransomware | 人手で潜伏・操作する標的型ランサム。即暗号化の旧来型と別物 |
| 二重恐喝 (double extortion) | 暗号化+データ暴露の二段脅迫。抜き取りが暗号化より先に来る |
| dwell time | 侵入してから発見されるまでの潜伏期間。ここが気づける窓 |
| Falco | syscall を eBPF でリアルタイムに見るふるまい検知。ログに残らない生挙動の担当 |
| Wazuh | ログ・FIM・設定診断の HIDS。痕跡をログで突き合わせ、集約する台帳 |
| HIDS / FIM | ホスト型侵入検知 / ファイル改ざん検知。FIM は読み取りは見ない |
| auditd | Linux 標準の監査ログ。Wazuh と連携してコマンド実行を拾える |
| Tetragon | eBPF で検知して「その場で止める」(enforcement) までやる Falco の対抗馬 |
| AppArmor | Ubuntu 標準の LSM。プロセスを「触れるファイル」で縛る予防 |
| Suricata / Zeek | ネットワーク型 IDS。ホスト型で弱い外向き通信 (抜き取り) を見る |
kill chain の各段に道具を貼れた。次は設計者として「で、自分のサーバーでは検知して人間が動くのか、検知してその場で止めるのか?」。
- Falco (気づく) で止めるか、Tetragon (止める) で自動遮断するか、即答できるか。 判断軸は「誤検知で正常運用を巻き込むリスク × 夜中のアラートに動ける人がいるか」。常時無人の自宅サーバーなら自動で止める寄り、止めたら困るサービスが乗っていれば気づく寄り。
- 責任境界:予防 (fail2ban・AppArmor が攻撃を入れない) と検知 (Falco・Wazuh が入った後に気づく) の、どこまでをどっちで担保するか線を引けるか。 「予防で塞いだつもり」と「検知で見てるつもり」の隙間に穴が空く。
これに答えられると強い ── ツールを並べるだけでなく、kill chain のどこを予防で潰しどこを検知に任せるか、責任の線を引いて防御を設計できる側に立てる。
- Falco vs Tetragon ── 検知だけか「その場で止める (enforcement)」か。eBPF で挙動をブロックする一歩。上の SoWhat の二択を実際に手で確かめる。
- Suricata / Zeek で抜き取りを見る ── ホスト型で弱い #9 (外向き通信) をネットワーク型で埋める。二重恐喝の窃取に気づく最後の砦。
- AppArmor プロファイルを書く ── Ubuntu 標準の LSM で「このプロセスはこのファイルしか触れない」を強制し、#4 / #6 を予防側で潰す。
- MITRE ATT&CK を読む ── kill chain の各段に対応する技法 ID と検知のヒント。型の解像度を一段上げる。
- Falco の検知を Wazuh に集約 ── 2 つの検知を 1 つの台帳にまとめ、アラートを一元管理する構成。