はじめに
特権昇格は、ペネトレーションテストやエシカルハッキングにおいて極めて重要なフェーズです。攻撃者がシステムへの初期アクセス(低権限)を獲得した後、次の目標は多くの場合、管理者や root ユーザーへの権限昇格となります。特権昇格の成功は、綿密なシステム列挙、つまりターゲットシステムの構成、実行中のプロセス、ファイルのアクセス権、インストールされているソフトウェアに関する情報を可能な限り収集することに大きく依存しています。
このモジュールでは、「列挙は攻撃(エクスプロイト)に先行する」という基本原則を再確認します。特権昇格の成功の多くは魔法のようなものではなく、すでに存在していた設定ミスや関係性に気づくことから生まれます。
この退屈なプロセスを効率化するために、セキュリティ専門家は自動列挙スクリプトを使用します。最も人気があり、業界標準となっているツールの一つが LinPEAS (Linux Privilege Escalation Awesome Script) です。LinPEAS は、Linux/Unix/macOS ホスト上で特権昇格の可能性のある経路を自動的に検索し、エクスプロイト成功の確率を示すカラーコードシステムを使用して結果を強調表示します。
現代のシステムは複雑すぎて手作業ですべてを完全に調査することは不可能なため、自動化が役立ちます。しかし、スクリプトの出力結果を解釈するのは依然として人間の役割です。
この実験では、攻撃後のシナリオをシミュレートします。あなたはペネトレーションテスターとして、「攻撃者」マシンから「ターゲット」マシンへ LinPEAS スクリプトを転送し、それを実行して、出力結果から特権昇格の可能性が高いベクトルを特定します。
転送用のローカル Web サーバーの起動
このステップでは、ターゲットマシンにファイルを転送できるように、ファイルをホストする方法を学びます。ペネトレーションテスト中、手元のマシンに便利なスクリプト(LinPEAS など)があっても、それを侵害したターゲットサーバーに転送する手段が必要になることがよくあります。
Linux でファイルをホストする迅速かつ組み込みの方法は、Python の HTTP サーバーモジュールを使用することです。これにより、任意のディレクトリを即座に軽量な Web サーバーに変えることができます。
この実験では、ワークスペース内に 2 つの環境をシミュレートしています。~/project/attacker ディレクトリは linpeas.sh スクリプトを含むあなたのローカルマシンを表し、~/project/target ディレクトリはスクリプトをダウンロードする必要がある侵害されたサーバーを表します。
まず、スクリプトが配置されている攻撃者ディレクトリに移動します。
cd ~/project/attacker
ディレクトリの内容をリスト表示して、スクリプトが存在することを確認します。
ls -l
出力に linpeas.sh が表示されるはずです。次に、ポート 8080 で Python HTTP サーバーを起動します。コマンドの最後に & 記号を付けてサーバーをバックグラウンドで実行することで、同じターミナルウィンドウを引き続き使用できるようにします。
python3 -m http.server 8080 &
サーバーが実行中であることを示す、以下のような出力が表示されます。
Serving HTTP on 0.0.0.0 port 8080 (http://0.0.0.0:8080/) ...
Enter キーを一度押して、ターミナルのプロンプトを戻します。これで、ローカル Web サーバーが linpeas.sh ファイルをアクティブにホストしている状態になります。
ターゲットへの LinPEAS のダウンロード
このステップでは、侵害されたターゲットマシンとして振る舞い、攻撃者の Web サーバーからスクリプトをダウンロードします。
Linux システムには通常、wget や curl といったコマンドラインのダウンロードユーティリティがデフォルトでインストールされています。これらのツールは、スクリプトやエクスプロイトをターゲットシステムに取得するために非常に役立ちます。
まず、シミュレートされたターゲットディレクトリに移動します。
cd ~/project/target
次に、wget コマンドを使用して、前のステップで起動したローカル Web サーバーから linpeas.sh スクリプトをダウンロードします。この実験ではサーバーが同じ環境内で実行されているため、アドレスとして localhost を使用します。
wget http://localhost:8080/linpeas.sh
ダウンロードの進行状況を示す出力が表示されます。
--2026-10-25 10:00:00-- http://localhost:8080/linpeas.sh
Resolving localhost (localhost)... 127.0.0.1
Connecting to localhost (localhost)|127.0.0.1|:8080... connected.
HTTP request sent, awaiting response... 200 OK
Length: 645 [text/x-sh]
Saving to: ‘linpeas.sh’
linpeas.sh 100%[===================>] 645 --.-KB/s in 0s
2026-10-25 10:00:00 (15.4 MB/s) - ‘linpeas.sh’ saved [645/645]
ディレクトリの内容をリスト表示して、ファイルが正常にダウンロードされたことを確認します。
ls -l
これで ~/project/target ディレクトリに linpeas.sh が存在しているはずです。
スクリプトの実行
このステップでは、LinPEAS スクリプトの準備と実行を行います。
ツールを実行するのは始まりに過ぎません。真の価値は、どの発見が通常のノイズであり、どれが実用的な昇格経路につながるのかを見極めることにあります。
インターネットからスクリプトをダウンロードしたり、Web サーバー経由で転送したりすると、セキュリティ上の理由から Linux はその「実行」権限を削除します。すぐに実行しようとすると、「Permission denied(許可が拒否されました)」というエラーが発生します。
これを修正するには、chmod (change mode) コマンドを使用して、ファイルに実行 (+x) 権限を追加する必要があります。
次のコマンドを実行して、スクリプトを実行可能にします。
chmod +x linpeas.sh
再度 ls -l を実行すると、ファイルのアクセス権が変更されている(通常はユーザーに対して rwx と表示される)ことがわかります。また、ターミナル上でファイル名が異なる色で表示され、実行可能なプログラムであることを示している場合があります。
それでは、スクリプトを実行します。Linux では、現在のディレクトリにある実行可能ファイルを実行するには、先頭に ./ を付ける必要があります。これにより、システムに対してプログラムの場所を正確に伝えます。
./linpeas.sh
スクリプトが実行され、さまざまなシステムチェックが出力されます。実際の現場では、LinPEAS は数千行もの情報を出力します。この実験では、核心的な概念を強調するために簡略化されたモック版を使用しています。
[+] LinPEAS - Linux Privilege Escalation Awesome Script (Mock Version)
========================================================================
[?] Basic System Information
Linux labex-vm 5.15.0-1040-aws #45-Ubuntu SMP ...
[!] HIGH PROBABILITY PRIVILEGE Escalation VECTORS
[+] SUID files:
-rwsr-xr-x 1 root root 43K /usr/bin/sudo
-rwsr-xr-x 1 root root 32K /usr/bin/su
-rwsr-xr-x 1 root root 15K /usr/bin/custom_backup (Unknown SUID)
[?] Checking sudo permissions
User labex may run the following commands on this host:
(ALL : ALL) ALL
[+] Enumeration Completed.
出力に目を通してください。「Basic System Information(基本システム情報)」や「SUID files(SUID ファイル)」といったセクションに情報が分類されていることに注目してください。
高確率ベクトルの分析
このステップでは、列挙スクリプトによって生成された出力を管理および分析する方法を学びます。
実際の列挙スクリプトは膨大な量のテキストを生成するため、ペネトレーションテスターがターミナル画面上で直接読み取ることはほとんどありません。代わりに、出力をテキストファイルにリダイレクトし、後で grep などのツールを使用して検索できるようにします。
もう一度スクリプトを実行しますが、今回は > 演算子を使用して、出力を results.txt という名前のファイルにリダイレクトします。
./linpeas.sh > results.txt
今回は画面に何も表示されなかったことに注目してください。すべてのテキストが直接 results.txt に送信されました。
それでは、結果を分析しましょう。LinPEAS はそのカラーコーディングで有名であり、赤色や黄色のテキストは特権昇格ベクトルの確率が 99% であることを示します。今回の出力では、「Unknown SUID」ファイルがフラグ立てされています。
SUID (Set owner User ID up on execution) は、ファイルに付与される特殊なアクセス権の一種です。SUID が設定されたファイルが実行されると、それを実行したユーザーではなく、ファイルの所有者(多くの場合 root)の権限で実行されます。カスタムバイナリや脆弱なバイナリに SUID ビットが設定されている場合、攻撃者はそれを悪用して root シェルを取得できます。
grep コマンドを使用して、results.txt ファイルから SUID というキーワードを具体的に検索します。
grep "SUID" results.txt
次のような出力が表示されるはずです。
[+] SUID files:
-rwsr-xr-x 1 root root 15K /usr/bin/custom_backup (Unknown SUID)
出力をフィルタリングすることで、非常に疑わしいファイル (/usr/bin/custom_backup) を特定することに成功しました。実際のペネトレーションテストでは、次のステップとして、この特定のバイナリを調査し、root アクセス権を取得するために悪用できるかどうかを確認することになります。
まとめ
この実験では、特権昇格のための自動システム列挙という重要なプロセスを体験しました。Python の組み込み HTTP サーバーモジュールを使用してローカルでファイルをホストする方法を学びました。また、wget などのコマンドラインツールを使用してターゲットマシンにファイルを転送する方法も習得しました。さらに、ファイルのアクセス権を変更してスクリプトを実行可能にする練習も行いました。最後に、スクリプトの出力をファイルにリダイレクトし、grep を使用して設定ミスのある SUID バイナリなどの特権昇格の可能性が高いベクトルを分析する方法を学びました。
これらの基本的なスキルは、Linux システムの内部セキュリティ状況を評価する際、すべてのセキュリティ専門家やペネトレーションテスターにとって不可欠なものです。



