LoginSignup
6
0

More than 5 years have passed since last update.

開発中のgdb拡張「Exgdb」について/開発予定の機能・届いている要望一覧

Last updated at Posted at 2018-05-21

Exgdbとは

SecHack365というハッカソンイベントで、gdb拡張・gdbプラグイン開発を行うことになりました。
動的解析の効率化や、Exploitの効率化を目的としています。
リポジトリはこちらになります。
こんな機能も欲しいなどの要望等がありましたら、この記事のコメントか、 Twitter のリプ/DMか、SecHack365同期の方はTypetalk/Backlogで待ってます。

コードのリファクタリング

現状コードが汚すぎるので、綺麗にします。

コマンド名をわかりやすくする

コマンドの名前が今は適当なので、わかりやすい名前に変えます。
基本、短いコマンドで済ましたい人は自分でaliasをかけてくださいというスタイルでいく予定です。
以下の追加予定機能/要望に出てくるコマンド名は、現状のコマンド名です。

aliasを簡単にかけられるようにする

現状は、aliasだけを書く設定ファイルでも用意しようかなと考えています。

ccjjなどの自動ステップコマンドでSIGINT受信

これまだ、止めたい時に止められないんですよね。
シグナル待機スレッドを作るかシグナルハンドラを登録するかでSIGINT(Ctrl+C)は受信できるようにしたいです。
pythonのsigtrapとかはどうなんだろう。
Ctrl+C用のパイプを使う??

grepコマンドがうまく動作しないことがある

たまにgrep漏れがあるんですよね。

情報をより多く取得できるようにする

どのような情報が欲しいか、要望をください!
現状は、以下の要望が届いています!

・ヒープのUnlinkについての情報

Pwngdbではこの機能があったので、それを良い感じに再現したいです。

・ヒープのアリーナ情報

要望がありました。

・GOTテーブル

脆弱性の自動発見/攻撃方法の自動解析

どのような脆弱性を自動で発見/攻撃方法の自動解析をして欲しいか、要望をください!
現状は、以下のような要望が届いています!

・自明なBOF

要望のところに書いていますが、これは僕がとりあえず「まずは自明なBOFからかなあ」と思って作ってみたいなぁと思っている要素です。

・Unlink Attack

ある程度のヒープの情報が集まったら、何を用意してどこをどうすればUnlink Attackできるか解析できたら便利ですね。

関数や変数、構造体等のラベリング

IDAやradareのように、自分で関数や変数、構造体などをリネームできる機能を追加したいと思っています。
ASLRで毎回アドレスが変わるからオフセットなどで推測。

パッチ機能

gdbから簡単にパッチを当てられたら便利じゃないですか?

与える入力値の保存

現在では、Pythonを書くことで毎回与える入力値を固定させるのがデファクトスタンダードですが、それだとgdbとPythonを行き来するオーバーヘッドが大きくなってしまいます。
なので、gdb側で毎回与える入力値を保存しておくことで、同じ手順を踏んで解析することを容易にします。

OSやコンテナ、エミュレータ、ハイパーバイザ等の動的解析の更なる効率化(カーネルエクスプロイトの効率化など)

ここらへんは自分はまだよくわかってないので、色々と要望やアドバイスなどをお待ちしております...

エディタとの連携

エディタとgdbを連携させます。
gdbでの解析結果を参考にエクスプロイトコードを書き、そのコードを回した結果をgdbで解析し、その結果を参考にエクスプロイトコードを書き換え...というように、gdbとPythonを行き来することが多くオーバーヘッドが大きいので、共通プラットフォーム上で一つのフローでエクスプロイトコードを開発できるようにします。

エディタ感覚でデータ書き換え

エディタ感覚でレジスタ値やスタックの中身などを書き換えることができるようにします。
言い換えると、バイナリエディタを内蔵しているような感じにします。

マルウェア解析用の機能

マルウェア解析を効率化する機能を追加したいです。

機械学習

機械学習無しでは、既知の脆弱性は見つけられても、未知の脆弱性は見つけられません。
現状私は機械学習何もわからないので、実装は難しいかもです...

grepの更なるグルーピング

gdbに適した便利オプションを追加する(stackgrepみたいな)

システムコールへ飛ぶ

intの直前のraxへの代入値を解析してブレークポイントを仕掛けてcontinueなど)

/proc以下を良い感じに見る

vmmap的なもの

ROP(ガジェット)の探索

rp++のラッパーみたいになるのかな?
、という要望を頂きました。

AA

AAみたいにわかりやすく可視化・gdbのadd symbol なんたらコマンドでシンボルを追加できる

その他動的解析やpwnを効率化する機能を募集しています!

この記事のコメントか、 Twitter のリプ/DMまで!
どんな要望でも構いませんので、気軽に、宜しくお願いいたします!

r2apiを使う

gdbからr2apiに投げて解析した結果をgdbが受け取る
r2pipeとかでggると出てくる

その他gdbに関するメモ

gdbに関することはできるだけ知っておきたいので、gdbに関することはメモっておきます。

-S -gdb tcp::4444をqemuに付けるとgdbでgdb target remoteできる

聞いただけなのでどうとも言えませんが、gdbserverを起動してアタッチするとユーザランドしか解析できなかったらしいのでこっちのが良さそうです。

・gdbのadd symbol なんたらコマンドでシンボルを追加できる

らしい

その他gdb以外についてのメモ

シンボリック実行

シンボリック実行とやらが使えるらしい?
聞いたことあるだけで全然何か知らないので、調べてみます。

最適化問題

どうやら、pwnは最適化問題に落とし込めるらしい??
よくわからないので、調べてみます。

今後の進め方

・nrun.cを読む
・armシミュレータを読んでaarch64と比較
・gdbをaarch64向けにビルドしてaarch64の実行ファイルを動かす
・gdbをgdbで解析
・プラグインをどのように実現しているかという部分も読みたい.
・gdb本体のプラグイン実現部分を改造して,さらに進んだプラグインを実装したりすることも考えたい

その他要望

@exit(.finiを追加する関数?)、.iniセクション(mainに行く前に実行される初期化機構)、.fini(.iniの逆)などを見たい
・glibc-malloc以外のmallocにも対応
・iiをAT&Tにも対応

6
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
0