5.Linuxの侵入と権限昇格
5.1. Linuxシステムの列挙
列挙はシステムにアクセスした後に実行する必要がある最初の作業となる。
脆弱性を悪用してシステムにアクセスし、その結果 root レベルのアクセスが行われたか、低い特権アカウントを使用してコマンドを送信する方法を見つける可能性がある。 列挙は侵害前と同様に侵害後のフェーズでも重要となる。
5.1.1. マシンに関する情報の列挙
Linuxマシンに関する情報の列挙に役立つコマンド/ファイルなどを記載する。
hostnameコマンド
ターゲットマシンのホスト名を表示するコマンド。 企業ネットワーク内でのマシンの場合、ホスト名にターゲットシステムの役割に関する情報が含まれている場合がある。
uname -aコマンド
システム情報を出力して、システムで使用されているカーネルに関する追加の詳細を表示するコマンド。 特権昇格につながる可能性のあるカーネルの潜在的な脆弱性を検索するときに役立つ。
/etc/hostsファイル
ネットワーク上のホスト名とIPアドレスの対応関係を定義するファイル。 このファイルにはローカルネットワーク内のコンピューター名やドメイン名とそれに対応するIPアドレスがリストされている。
/proc/versionファイル
ターゲットシステムのプロセスに関する情報が記載されているファイル。 カーネルのバージョンに関する情報や、コンパイラ (GCC など) がインストールされているかどうかなどの追加データが得られる場合がある。
/proc/self/environファイル
環境変数一覧が格納されたファイル。
/etc/issueファイル
システムを識別することができるファイル。
一時ファイルの確認
psコマンド
Linux システム上で実行中のプロセスを確認できるコマンド。
envコマンド
環境変数を表示するコマンド。 PATH 変数には、ターゲットシステム上でコードを実行したり、特権昇格に利用したりするために使用できるコンパイラまたはスクリプト言語が含まれる場合がある。
sudo -lコマンド
ユーザーがsudo
を使用して実行できるすべてのコマンドをリストできるコマンド。
idコマンド
ユーザーの特権レベルとグループ メンバーシップの概要を表示するコマンド。
/etc/passwdファイル
システム上のユーザを発見できる。
historyコマンド
コマンド履歴を確認できるコマンド。
ifconfigコマンド
システムのネットワークインターフェイスに関する情報が取得できるコマンド。 別のネットワークへのアクセスヒントになりえる。
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向け自動列挙ツール
ツールを使用すると、列挙プロセスの時間を節約できる。 ただし、これらのツールは、一部の権限昇格ベクトルを見逃す可能性がある。
- LinPeas : https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/tree/master/linPEAS
- LinEnum: https://github.com/rebootuser/LinEnum
- LES ( Linux Exploit Suggester): https://github.com/mzet-/linux-exploit-suggester
- Linuxスマート列挙: https://github.com/diego-treitos/linux-smart-enumeration
- Linuxプライベート チェッカー: https://github.com/linted/linuxprivchecker
5.2. Linuxシステムのシェル奪取
5.2.1. 各ケースにおけるシェルの奪取
shellコマンド
通常の実行権限が奪える場合がある。 なお、対話文字は表示されない。
対話的シェルの奪取
以下手順で対話的シェルを奪取できる。
以下でも可能。
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