【人間はひとりでアドベントカレンダーを作れるのか】day1

11-30日11時、某misskeyインスタンスがアドカレで賑わう中、軽い気持ちで行った発言により、50分で記事を書くチャレンジが発生した。

投稿プラットフォームとか細かいこと考える時間すらないため、とりあえず完全に内輪ブログとして久々にはてなブログを利用しこれを行ってみる次第である。

図1

 

 

そもそもアドベントカレンダーって何書くのか、クリスマスに因んだ話をする必要があるのか、技術系の話題は何が求められる祭りなのか、そこからである。

参加表明といっても一人でやってるし関係ないですが貼ります https://adventar.org/calendars/8596

 

はい。

 

# 記事ですが、さっき友人から電話きたのでもうThu 30 Nov 2023 11:33:50です。

 

突然ですが、gdbの話をしようと思います。

皆さんgdbは好きですか?私は好きです。

なので今作ってるpwndbgのフォークを紹介しようと思います。

 

pwndbgとは、かっけー画面とともにheapの状態やメモリの状態を便利な装飾つきで確認できるリッチかつ高機能なセキュリティ研究者向けのgdb拡張です。

gdb-pedaが少し前の世代において有名でpwndbgもそこからの派生という立場が近く、gefが親戚にいる感じですね。multi archは部分的だけど主要な項目には対応してます。

 

あまり知らない方へbinary exploitへの最低限の説明をしておくと、まず脆弱性は欠陥と攻撃手法でカテゴリに分けられ、それによってリスクアセスメントをしたりとか文書化したりとか色々あるわけです。

例えば「バッファオーバーフロー」と言われて思い浮かべられるよく知られたstack based buffer overflowはよくあるローカル変数のbuf[256]とかにmemcpyで1024とかズドーンしてしまうやつですね。

ここで攻撃手法はbuffer overflowとかの脆弱性カテゴリに対して一意ではないです。これは防御の目線が入ると腑に落ちるんですが、現代の防御機構はコンパイラレベルでも発達しており、脆弱になりうるバグがあってもそれを回避する話は軽い実装で一般化できる範囲において塞がれてると考えたほうがよいから、とも言えるような(根拠はない)。

 

stack based overflowだけでもfork型のリトライし放題の条件だったり、組み込みとか関数ポインタ上書きとかローカル変数の制御構造乗っ取りとかケースバイケースで有効なこともあります。細かい部分を調べてもらえばってことなんですが、このケースバイケースってやつが曲者でしんどめの脳トレを要請されます。

だから全てをデバッガで詳細に見て、使えるオブジェクトがあるか、アドレスはasciiにうまいこと入らないかとか、addしたりxorしたり命令の飛ばし先や入力でどうにかできないかと検討する道具は重要になります。

 

pwndbgはこれを簡単にするソリューションの一つですが、heapとbinsが本体と言っても過言ではないです。こいつに全部の機能をもっと詰めたいといつも思っていました。

なので、作っている途中経過をgithubで上げてます。シェアします。

(printのバッファリング調整しないとな)

 

pwndbg for me

https://github.com/tachibana51/pwndbg_douro

 

 

 

説明する時間がないです。あと2分です。

全部あります。ビジュアライズは色をfreedとmallocedで揃えたり地味に改善してます。

mlベースのコンディションチェックをローカルで実装中です。待たれよ。

telescopeで詳細を出すんでチャンクについて知りたいことは大抵出るし、free可能かエミュレートします。偉い。でも雑なのでリファクタリングしたい。時間が……

ではまた明日(続くのか?)(これってアドカレ?)