one_gadget RCE
one_gadget RCE とは何ですか?
one_gadget RCECTF や実戦の攻撃で使われる近道で、レジスタやスタックの条件さえ満たせば libc 内の 1 つのアドレスを呼ぶだけでシェルを得られる手法。
one_gadget とは、特定のレジスタ・スタックの前提条件を満たして到達すると最終的に execve("/bin/sh", NULL, NULL) を呼ぶ glibc 内の命令列です。david942j による one_gadget ツールは libc を走査し、rax == 0 や rsp+0x40 == NULL のような制約とともにアドレスを列挙します。攻撃者が GOT 上書き、FILE ストリーム攻撃、unsorted bin などで関数ポインタや戻り先を 1 回だけ奪えれば、完全な ROP チェーンを組まずにシェルを取得できます。条件は補助ガジェットやスタックピボットで丁寧に満たす必要があります。対策は定数ブラインディング、CFI、seccomp サンドボックス、libc のストリップや改変による canonical ガジェットの除去です。
● 例
- 01
libc-2.31 のバイナリで GOT 上書き 1 回から one_gadget で /bin/sh を起動する。
- 02
FILE ストリームエクスプロイトで _IO_2_1_stdout_ の vtable を破壊し、条件を満たす one_gadget へジャンプする。
● よくある質問
one_gadget RCE とは何ですか?
CTF や実戦の攻撃で使われる近道で、レジスタやスタックの条件さえ満たせば libc 内の 1 つのアドレスを呼ぶだけでシェルを得られる手法。 サイバーセキュリティの 攻撃と脅威 カテゴリに属します。
one_gadget RCE とはどういう意味ですか?
CTF や実戦の攻撃で使われる近道で、レジスタやスタックの条件さえ満たせば libc 内の 1 つのアドレスを呼ぶだけでシェルを得られる手法。
one_gadget RCE はどのように機能しますか?
one_gadget とは、特定のレジスタ・スタックの前提条件を満たして到達すると最終的に execve("/bin/sh", NULL, NULL) を呼ぶ glibc 内の命令列です。david942j による one_gadget ツールは libc を走査し、rax == 0 や rsp+0x40 == NULL のような制約とともにアドレスを列挙します。攻撃者が GOT 上書き、FILE ストリーム攻撃、unsorted bin などで関数ポインタや戻り先を 1 回だけ奪えれば、完全な ROP チェーンを組まずにシェルを取得できます。条件は補助ガジェットやスタックピボットで丁寧に満たす必要があります。対策は定数ブラインディング、CFI、seccomp サンドボックス、libc のストリップや改変による canonical ガジェットの除去です。
one_gadget RCE からどのように防御しますか?
one_gadget RCE に対する防御は通常、上記の定義で述べたとおり、技術的統制と運用上の実践を組み合わせます。
one_gadget RCE の別名は何ですか?
一般的な別名: one_gadget。