Exgdbとは
SecHack365というハッカソンイベントで、gdb拡張・gdbプラグイン開発を行うことになりました。
動的解析の効率化や、Exploitの効率化を目的としています。
リポジトリはこちらになります。
こんな機能も欲しいなどの要望等がありましたら、この記事のコメントか、 Twitter のリプ/DMか、SecHack365同期の方はTypetalk/Backlogで待ってます。
コードのリファクタリング
現状コードが汚すぎるので、綺麗にします。
コマンド名をわかりやすくする
コマンドの名前が今は適当なので、わかりやすい名前に変えます。
基本、短いコマンドで済ましたい人は自分でaliasをかけてくださいというスタイルでいく予定です。
以下の追加予定機能/要望に出てくるコマンド名は、現状のコマンド名です。
aliasを簡単にかけられるようにする
現状は、aliasだけを書く設定ファイルでも用意しようかなと考えています。
cc
やjj
などの自動ステップコマンドで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にも対応