【永続化編】cron・systemd・scheduled task・WMIで居座る手口と検知|CTF思考フレームワーク #39

攻撃者って、侵入したあとどうやって居座るの?再起動したら消えないの?🔌

消えないんです。攻撃者は侵入直後に「永続化」を仕込みます。cron、systemd service、Windows scheduled task、WMI イベント、レジストリ Run キー――再起動・ログオフしても自動的に復活する仕組みを5分以内に設置します。
永続化(Persistence)は、攻撃者が侵入を維持し続ける手法。Linux なら cron・systemd unit・SSH authorized_keys、Windows なら scheduled task・WMI subscription・レジストリ Run。これらは正規の管理機能でもあり、検知が難しい『目立たないバックドア』として機能します。
広告・PRを含みます。この記事にはアフィリエイトリンクが含まれます。掲載内容は編集方針に基づいて作成していますが、価格・在庫・キャンペーン内容はリンク先で最新情報を確認してください。

正規の機能を悪用するから、ウイルス対策ソフトでも検知しにくいの…?
この記事は、CTF思考フレームワーク第39回。永続化の代表的手口(cron・systemd・scheduled task・WMI・レジストリ)と、企業の検知策(Sysmon・auditd・Tripwire・EDRベースライン化)を整理します。
📖 この記事はシリーズの一部です
「CTF思考フレームワーク」 #39 / 全86記事 → シリーズ一覧を見る →
🪤 「侵入は始まり、永続化が本番」。再起動で消えるシェルは攻撃者にとって価値が薄く、cron・systemd・scheduled task・WMIで居座って初めて長期的な情報収集が可能になります。
永続化(Persistence)は MITRE ATT&CK で最も検知が難しいテクニック群のひとつ。攻撃者の発想と、防御側が見るべき「変化点」を整理します。
攻撃者が「居座る」テクニック群。検知の主戦場です🪤

永続化は「再起動・パッチ後も生き残る仕組み」を仕込む技術だよ🪤
先に意味を押さえておくと読みやすい用語です。
- CTF: セキュリティの練習問題を解く競技。必ず許可された環境だけで試します。
- 権限昇格: 一般ユーザーから管理者権限など、より強い権限を得ることです。
- 横展開: 侵入後に別の端末やサーバーへ移動して被害範囲を広げる動きです。
- コンテナ: アプリを隔離された軽い実行環境で動かす仕組みです。
👀 観察フェーズ:まず何を見る?

まず起動・スケジュール・ログオンに紐づく仕組みを総ざらい!cron・systemd・schtasks・WMI subscription…🔍
永続化の基本観察は「自動起動するもの全部」を棚卸しすること。ログオン時・起動時・スケジュール起動・イベントトリガ起動を網羅します。

攻撃者目線では「どこに置けば人目に付かず生き残れるか」が勝負なんだね😨
- Linux:
/etc/cron.*,/etc/systemd/system/*,~/.bashrc,/etc/profile.d/ - Windows: スケジュールタスク全件、Run/RunOnceレジストリ、Startupフォルダ
- WMI Event Subscription(
__EventFilter/__EventConsumer) - サービス(Linuxはsystemd unit、Windowsはservices.msc)
- BITS Job、Image File Execution Options(IFEO)、AppInit_DLLs
- ブラウザ拡張・RDP shadow・SSH authorized_keys・~/.ssh/config

永続化の典型は4ジャンル。
🤔 仮説フェーズ:攻撃者は何を考える?
⏰ 仮説①:スケジューラ系
cron(/etc/cron.d/)、systemd timer、schtasks /createで定期実行。最も古典的かつ強力。
🔄 仮説②:起動・ログオンフック
Linuxの~/.bashrc / .profile / xdg autostart、WindowsのHKCU\Run / Startupでログオン時に実行。
🪞 仮説③:WMI Event Subscription
WMIの__EventFilter+__EventConsumerで特定イベント発生時に発火。EDRも見落としがち。
📦 仮説④:DLLハイジャック / サービス改ざん
正規サービスがロードするDLLを差し替えたり、ImagePathを書き換えてSYSTEM権限で実行。
🕶️ 攻撃者は「いかに正規の起動機構に紛れ込ませるか」を考えます。よく使われるサービス名を模倣(WindowsUpdate系の名前)、既存スケジュールタスクの引数だけ書き換える、IFEOで sethc.exe を cmd.exe に差し替えてログオン画面で SHIFT 5回連打→SYSTEM起動、というクラシックな手口も健在です。

「居場所と再起動耐性」が永続化の2大要素だね💡
🔬 検証フェーズ:どうやって確かめる?

検知側はautoruns.exe・systemctl list-timers・crontab -lを差分で監視するのが効きます🧪
ベースラインとの差分を取るのが王道。osquery / Velociraptorで全端末のautoruns系アーティファクトを集約し、初出のサービス・タスクを浮かび上がらせます。

WMIサブスクリプションの監査は地味だけど高度な攻撃を捕まえる鍵なんだね💡
# Linux: 自動起動の差分監視
systemctl list-unit-files --type=service > /tmp/baseline.txt
diff /tmp/baseline.txt /tmp/now.txt
# Windows: Sysinternals Autoruns(GUIまたはautorunsc.exe)
autorunsc.exe -accepteula -a * -c > autoruns.csv
# WMI Subscription監査
Get-WmiObject -Namespace rootsubscription -Class __EventFilter
Get-WmiObject -Namespace rootsubscription -Class __EventConsumer

永続化テクの代表はこの3つ。
⚔️ 攻撃フェーズ:実際の手口
/etc/cron.d/に1ファイル置くだけでroot権限で定期実行。CIサーバなどに刺さると致命的。
WindowsのHKCU\Software\Microsoft\Windows\CurrentVersion\Runとschtasks。defaultユーザでも書けるのが恐ろしい。
WMI Event Subscriptionはファイルレスかつ起動方法が多様で、特定スキーマ監査がない環境では発見困難。
攻撃者の典型は「目立たないユーザーコンテキスト」「正規プロセスからの実行」「短いトリガで頻繁に再生」の3条件を満たす永続化。
# Linux: systemd timerで5分おきにcallback
[Unit]
Description=Update Helper
[Timer]
OnBootSec=5min
OnUnitActiveSec=5min
Unit=update-helper.service
[Install]
WantedBy=timers.target
# Windows: WMI Event Subscriptionで永続化
# (__EventFilter + ActiveScriptEventConsumer)
クラウド時代はLambda / Cloud Functions / k8s CronJobへの永続化も増えてます。「コードベース全体」を棚卸し対象に🌩️

永続化検知の3レイヤー!🛡️
🛡️ 防御フェーズ:どう守る?
Sysinternals AutorunsやSysmonで起動エントリの追加を即時検知。Linuxはosquery等で。
Event ID 4698(タスク作成)、Sysmon Event ID 19/20/21(WMI)などをSIEMで横断監視。
一般ユーザがcron.dやRun keyを書ける必要は通常ない。権限境界を見直すだけで永続化点を激減できる。

攻撃者は「忘れた頃に戻ってくる」から、検知体制が永続化対策の本丸だね💪
永続化検知は「ベースライン化」と「変化点アラート」が肝心。新規サービス・新規タスクの作成イベントを必ずアラート化します。
- Sysmon Event ID 1, 11, 12, 13, 19-21を網羅収集
- スケジュールタスク作成(Event ID 4698)を全件監視
- WMI Event Subscriptionの作成監視(Sysmon EID 19-21)
- osquery / Velociraptorで
startup_itemsを定期収集 - GPO監査・AdminSDHolder監査でAD永続化(DCSync権限付与等)を検知
- クラウドはCloudTrail / Activity Logで IAM Role・Lambda Trigger変更を監視
🧪 検証用のLinuxラボを用意
権限昇格やエクスプロイトの練習は、許可を得た自分の検証環境で行うのがルール。💻 ConoHa VPSならUbuntuやCentOSをワンクリックで立てて、スナップショットも取れるので安心して試せます。
※ 上記は他社サービスへのリンクです。購入は各自でご判断ください。
⚠️ よくある落とし穴
- 「自動起動はWindows Defenderが見てる」と任せきりで監査ログを取らない
- cronだけ警戒して、systemd timer・anacron・at jobを見落とす
- サービス名だけで判定し、binPath(実行ファイルパス)の異常を見ない
- WMI Event Subscriptionは管理者しか触らない前提で監視を入れない
- AD AdminSDHolder改変を「正規変更」と扱い、DCSync権限の付与を許す
- クラウドのIAMロール作成イベントを「開発者の作業」として除外
🧰 ツール早見表
| ツール | 用途 | 備考 |
|---|---|---|
| Sysinternals Autoruns | Windows全自動起動の網羅 | インシデント時の必携 |
| osquery | クロスプラットフォーム監査 | 差分検知に強い |
| Velociraptor | IR向けのDFIRエージェント | VQLで柔軟に収集 |
| Sysmon + Sigmaルール | リアルタイム検知 | EID 1/11/12/13/19-21 |
| MITRE ATT&CK Persistence | 攻撃手法の網羅マップ | 対策抜け漏れチェック |
🎓 本気で学びたい人へ
Linuxとサーバ・セキュリティを仕事レベルで学びたい方へ。🎓 ササエルはインフラエンジニア向けスクールで、システム設計から防御設計まで広くカバーしています。
📚 もっと深く学びたい人へ
体系的に学ぶなら『ホワイトハッカー入門』、手を動かして覚えるなら『TryHackMeを使って身体で覚える攻撃手法と脆弱性』が定番。両方持っておくと、知識と実践の両輪で伸びます📚
📚 次に読みたい
✍️ 学んだことを発信する
学んだことをブログにまとめるなら、高速で安価なConoHa WINGが使いやすいです。
⚖️ 大事なお約束
この記事の手法は、必ず自分の環境か、許可されたCTF・脆弱性報奨金プログラム(HackerOne、Bugcrowd等)で試してください。他人のサービスに無断で攻撃を仕掛けるのは不正アクセス禁止法違反、立派な犯罪です。学んだ知識は守る側で活かしましょう🤝



