【Uzumaki勉強会】自動バグ発見AIを開発してIntmax2のZKPライブラリのバグを見つけた話
Uzumaki勉強会 · 23:25
This study session explains the development of an AI tool that found a bug in the intmax2-zkp library. It covers the tool’s design, development process and analysis of the discovered bug.
Speakers
Topics
From Uzumaki勉強会, hosted by Nyx Foundation.
Transcript
じゃあ、自動バグ発見 AIを開発してINAX2のDKP ライブラリーのバグを見つけた話をします。 はい。目じはこんな感じでまず自動バグ発見 AIを作ったよという話をします。 これゾミアセキュリティエージェントと 名付けた自動バグ発見AIを作ったんです けど、え、知識データを配置して プロンプトでお前攻撃シナリオ生成 しろっていう風に指示をするだけで バグバウンティのフローを反事化しました 。 で、えっと、やったこととしてはまず最初にソースコードソリディティのコードを読ませて脆弱な箇所を特定させて うん。次に攻撃シナリオを提案してもらい
で、その攻撃を再現するテストコードを実装させて、で、テストがパスしたらこれは本当に攻撃が存在するっていうことが分かるのでバグのレポートを作成するっていうこの流れを自動化しましたので でバグレポートは各バウンティのプログラムごとにフォーマットがあるのでそのフォーマットに去したレポートをそれぞれつかばカンティナだったらカンティナのレポートコードフォー だってコードフォーリのレポートっていうのを 作るようにしてるっていう。うん。うん。なるほど。え、これ全部基本的な自動かっていうこと? そうですね。あの、特に AとB でクライン使ってて、ここは自動化していて うん。で、その合間に
O3 にこの攻撃シナリオは本当にスコープ内かっていうのを 打当性評価をさせてフィードバック でダメだったらもう1 回生成してっていうループを してなるほど。オッケーだったら次はこの CとD をクロードコードに全部自動化してレポートに作れる。お でも作ったレポートとペストも O3 にこれ本当に合ってるっていうのをチェックさせて これは妥当ですっていう判断をするとすごい。 おお。 で、与えた知識ベースにアプリケーションコンテスト.
MD っていう、これはこのサービス、例えば INAXがどういうサービスでロールZK ロールアップでどういう特徴があってどういう技術スタックでみたいなのを 1つのマークダウンにまとめたもの うん。と過去の脆弱性ポート、ま、これ INAX に限らず過去見つかったバグの種類とかどういうバグかみたいなのを知識として与えることで、 あの、その似たようなパターンのバグを見つけやすくする。 うん。で、CV っていう、ま、過去の脆弱性の報告書とかも同じように与えて、これらの知識をもにこの攻撃シナリオの提案を行うっていうのをやってます。で、次がデモか。 実際の
動画が出たくない。あ、出てきた。実際 作るのが動画がありまして、ま、これも 動いてるんですけど、なんかラインがこう やってファイルを探索してるんですね。 うん。ま、こんな感じで 1つ1つソリディティのコードを読んで、 これは怪しい怪しくないみたいなのを自分で記録していってルとで 5 分ぐらいで実際にこんな感じで攻撃シナリオをわーっと書いて おお このアタックサーフェスみたいなのをバーっと全部書き出すと うん で書き出して終わったらま自分でもチェックして終わりみたいなのが攻撃の両提案ま ね、
自動家の流れ、ま、実際ここにドキュメントとかのこのファイルの中にさっきのラグのファイルとかが入ってるっていう感じですね。 これクライとか分ける必要ある? そう。えっと、最初クロードだけでやろうとしたんだけど うん。 どうしてもクロードは攻撃シナリアの提案が弱すぎて クロードが提案してきた攻撃シナリオってなんかオラクルが弱いみたいな全然スコープ外の攻撃だったり なんかすごい出ち上げてくる攻撃存在しない攻撃を [音楽] それなんか権限 ロールオーナー権限ないと実行できない攻撃とかも攻撃だよみたいな風に言ってきて全然当てになんなかったんでそういう攻撃の提案レベルだ と3の方が優秀だなと思ってクライムの
O3を使うようにしました。 なるほど。 で、ま、コーディングの方はクロードでクロードコードでもうこの辺だ。 [音楽] ま、この辺でもうここのソリエティとかも 自動で生成してで、自分でテストも実行し てなんかコンパイル取ってるけどテスト パスしないとかだったらこれは攻撃脆弱性 ないなみたいな判断されて無視するみたい なずらっと こんな感じで1つの攻撃ずつ繰り返 うんますね。 面白いな。
で、これが実際に作成されたレポートですね。 うん。 で、ちゃんとなんかなんかこバグレ報告ってここが怪しいみたいなことを言うんじゃなくてちゃんとその怪しい部分を使って攻撃が成立するかっていう BOCまでないと認められないので うん。 ちゃんとそういうプルオブコンセプトとかも書いてくれます。 いう感じです。 式の渡し方ラグとか使わってる。 うん。基本的にこういうエージェントはもうこのファイル参照してみたいなことを 雑に投げたら読んでくれる
ので。なるほど。 はい。マークダウンにうん。ま、渡し方とかは工夫しているけどすぐ忘れちゃうから。 うんえん。そうだ。 ちゃんと攻撃シナリオの提案前に 1回うん。うん。読んで で提案した後にもう1回読むみたいな。 ああ、なるほど。 結構プロンプトで工夫するって感じですね。 で、これで実際に発見したバグなんですけど、これ INAッ2 そもそもバグバウンティのプログラムで開催されて、もう多分いつからだろう? 2ヶ月ぐらい。1ヶ月前からかな?うん。 開催されてますと。 実際にこれ見に行ってみると、ま、こんな感じで、あの、いくら支払えますよみたいな うん。書
かれてたり、あの、バグのタイプごとに報酬がいくらですよっていうのが定義されてて、クリティカルだったらマックス 1万ドル、ハだったらフラット2000 ドルみたいな定義されてますと。うん。 今回俺が報告したのは、えっと、こっちかロクチェン DLTのミディアム になります。うん。 で、一応なんか下にもずラっとずらっと説明が分かれてて、ま、過去のオーディットの履歴とかもあって、ここですに報告されてるのは向こうですよみたいな。 だからちゃんとここのレポートとかも自分で読まなきゃいけなかったりとスコープっていうなんかインパクトのスコープとかも定義されていてプリティカルは例えばもうダイレクトにファンドをロスさせるモとかで アウトスコープとかこれはスコープ外ですよみたいな
まオラクルとか外部依存の攻撃とか基本スコープ外です はい。 で、バグ発見までの流れとしてまず最初に inmatozkpっていうレポジトリー をローカルにクローンしてあらかじめ用意 しておいたクライルールズとクロードの フォルダーを配置してで次にO3に プロジェクトのようやくさっきの アプリケーションコンテキストをO3に デプリサーチで作成させてでクラインで 攻撃シナリオ作成してO3で評価してで次 クロードで攻撃シナリオ再現して言っ で、レポ作成してて、これもレポジトリーをちょっと見てくと、ま、こんな感じでこれもうオーディットしたレポジトなんだけど、
ここにまずドロードとドライン ineうん。で、まず ineもうドックにこんな感じでカンティナで過去に報告されたレポートみたいな うん。うん。 のマークダウンで、ま、アグの種類ごとに保存してたりで、これ O3に作らせたINA2 のアプリクのコンテキストでプロジェクトオーバービューとか うん。バグバウンティの一応スコープとか うん。アーキテクチャーとか うん。 ね、ちゃんとあとフローとかでもう結構 2と3のフローが重要だと思う。 うん。めちゃ大事にこがしっかりないと。
そうなんだよ。ビス。 そうなんだよ。 で、そうだね。 で、実際のレポートも、ま、色々レポート 出してるんだけど、全然当てになんない ものとかもあって、で、今回報告した通っ たレポートはこんな感じで、 ま、すごい単純なんだけど、このコネクト 制約の関数があって、これはアカウントが ちゃんとアカウントと状態が紐づいてこと をチェックする制約ううん。 なんだけど、この、えっと、プレブアカウントリールートっていう制約は
2回ここでチェックされてるんだよね。 これはコピで多分ミスってる。 本当だったらプレブじゃなくてネクストの方を制約しなきゃいけないのにスキップされてて代わりにプレブが 制約されちゃってる。はい。 っていう、ま、結構単純なバグを見つけまして、 まあ で、これを攻撃するためにどうしたかって言うと、じゃあ別のアカウントを作って、そのアカウントに元のアカウントの状態をオーバーライドするっていうことを試みたら、その照明が 通っちゃって、このプルーフリファイ おお が通っちゃって、ま、本当にこれは脆弱
だなっていう。なるほど の見つかったと感じですね。 うん。このさっき説明したですね。 うん。うん。 で、経緯としては6月の25 日にそのバグを報告して、もうその日のうちにこの報告は有効だねっていうコメントがこんな感じで帰ってきて うん。 で、3 日後に報酬が支払ってっていうミリアムで報告してミニアム 1000ドルのはずなのに2000 ドルなぜか支払いハイの金額が 支払い 脆弱や わかんない。彼らにとってはこれがハだったのかもしれない。 あ、ああ、そのい。 うん。ちょっと分からないですね。で、ここまで何かありますか?質問。
オ、あ、あ、でいいです。 あ、いいですか?うん。 全然素的な考えなんですけど、これもうプロジェクトにこれどんどん使えちゃうって感じですか?もうそれこそファろんなプロジェクト多分上がってるし、ま、ゴードファリそういうのも全部 うん。 たまたなプロジェクト上がってると思うんですけど、もうじゃ、じゃんじゃん、 じゃんじゃん使える。 じゃんじゃん使えてもうじゃんじゃん うん。バグがあれば どんどん報告できるってことですよね。 そう。実際もう2週間で10個使ってみて はいはいでよもう 5個ぐらい報告して 3個はちゃんと認められそうっていう すごいな。うん。で、今日も1 個インフォメーションでもあんまいいバグじゃないけど認められていう感じですね。で、これも GK
だけ元々コントラクト用に作ってたけどコンテキストを GK に変えるだけで種類のアプリケーションにも用できるんで。 あ、これあれか。そっか。 あ、なるほどなるほど。そうそう そうそうそう。 だから今の状況は例えばなんかよくわかんないプロジェクトとかにでこれこれを試すとま、ちょっとあんまり良くないっていうか あ、まあ全然元々はデファイとかコントラクト用に作ってたんだけど、 GK やるかって思ってそのさっきのラグの知識データだけ GK 用にパッと差し替えたらちゃんと動いてくれたんで なるほどなるほど。 割と汎用性は高いです。あ あ、なるほど。それだけ。 はい。 そっち。あ、えっと、なんかとかって結構答えてくれないとだ。 うん。ま、あんまノーハがないとあるで、
それもしっかりさいのかっていうのがちょっと疑問でそうね。そこで、ま、気をつけたのは GKの過去の あ、ある。そう。過去のレポートは ちゃんと与えてあげて、で、あと本当は やりたかったのはなんか完全性の、ま、 特徴というかちゃんと数式的な特徴を与え てなんかロジカルシンキングができるよう に手助けをしたかったんだけど、まだそこ まではできてなくて、だからこんな感じで 累計バグレポートレポート やんでめちゃく クリティカルかつこう先端の技術とかっては難しいかな?
[音楽] ま、基本的にはやれることは 残念さ、サウンドネスバグをどうつくか しかないと思っててうん。 だから、あの、制約を作る関数にじゃ、ランダムをちょっと変えたらどうなるかとか、そういう微妙にコードを変えてやってみるみたいなのをそう当たりするしかほぼないんじゃないかなって思ってて。 [音楽] そう。だからどっちかというとファジングとか形式検テンションの方が うん。 こっちは有効な気がしていて、そう、 それを自動生成するように改善したいなと思います。 ああ、なるほどね。 絶対サンドネスなバグはあるんだよね。でもマックスは一応いろんな攻撃を試したんだけど、このレポートにあげている通り。そ、マークルツをめちゃくちゃいいじくり倒す攻撃とか何パターンも試したり
[音楽] うん。リーフを変えるとかリーフの値を 0 にするとか色々試したけど、ま、その辺はちゃんとカバーされてて安全でしたっていう。 うん。 このその今の何パターンもやる時にどんぐらいマ正の知識が使われたかみたいなあほとんど使ってないな ここではなるほど ただ単純にこいつが提案してきたのを それおかしくねみたいなフィードバックを はいはい するけど今回はあんましてなかったんですよ O3に判断させると
うんO3ってすごい賢くてうん 回答する前にちゃんとWeb で検索して返してくれるから うんう O3の妥当性判断はすごい的確 なるほど。そうです。 はい。じゃ、最後発見と分析で、ま、基本的にクラインとかクロードとか使う時は知識を与えすぎるよりもよくして厳選してあげる方が賢くなるっていうのは結構 分かってうん。 ま、これどっかの記事に書いてあったことだけど、ホワイトボードみたいなもので、ホワイトボードに情報がバーってなんかちっちゃく全部書きられていてもそれを整理する能力はあんまないから、ちゃんと整理された 1
個のホワイトボードを与えた方が賢くなるっていうのはあるらしいですね。 うん。ただO3 に関しては知識はどんどん与えていい。 で、それは多分システムプロンプトでめちゃくちゃ制御されてるから乱雑に与えてもちゃんと整理してくれるんでうん。 O3は例外ですね。 で、今回のAI のコンセプトとしては攻撃者を模法する攻撃者になりきる AIを作るっていうやりたくて どっちかいうと感をする人の思考ってよりも うん。なんか攻撃者悪い人の思考を模法さ せたかったんだけど、ちょっとそれは プロンプトとコンテキストだけだとまだ
ロジックの完全模法までなかったなって いう。 で、ラグとかプロンプとかはクラインだっ たらクラインのなんかルールとかが ドキュメントに載ってるんで、もうそれを 絶対に従う。ファイル名とかも CloudだったらCL.MDとかC クイだったらCLineclinルs みたいなファイル名とかも安全してもう徹底して従った方がいいですね。 うん。 エージェントを最初ラングチェーンで独自で実装したんだけど ああ、 なんかすごい時間取られちゃってなんか例えば API の使用利用制限とかでなんかすごいエンジニアリングのバグとかがめっちゃあったり うん して本来の性能が出ないなと思ったんでどっちかというともクラインに指示すればワクローも
その都度組んでくれるんで うん 依存のものを活用した方がいいなっていう どうせ進化したくし そうどうせ進化してくしまそこ で、プラクティスを固まったらラングチェーンとかにしてけば うん、いいかなっていう感じはしました。 で、あとこれはちょっとあれなんですけど、攻撃シナリオがバグバウンティーのスコープ外なのは結構あるんだけど、その中にただ的外れなものじゃなくて、これ収益機会になるんじゃないかなみたいなシナリオがいくつかあって、 例えばオラクルの不備とかって 完全にバウンティではスコープ外だけど、それを利用してなんか価格差を見つけるみたいなのって全然デファイだと考えられるから、 それを元にボットを組んでみるとか
うん。そっちの方向も 考えたいなっていう ですね。 今後は、ま、さっき言った、今ファインチューニング僕のパソコンにしてて攻撃者思考を完全模法させるように録画学習で育てるっていう組んでるのと、 ま、ファジングとか形式検証の行動の自動生成をやりたいのと、ま、さっきのバグだけじゃなくてアルファも提案させるっていう うん。うん。のを今後の いいっすね。してます。 え、攻撃者思考の方法が今だとむずいの理由はな。 ま、普通に汎用的な思考しか持てないんで。 ああ、
攻撃者はこういう順番で考えるんだよみたいなのを ああ、そういうこと。 あの、そう、理解できない。ま、これはあらゆる特化型 AI に言えることで結局よくちょっとファインチーンして うん。 ま、なんかアスペってすごい思考が偏ってるじゃん。 というかうん。 なんかすごい実はアスペってめっちゃ科学習された AIなんだけどうん。確かに汎用 AIになっちゃってる。 そう、そう、そう。汎用的だと 常識人っぽい思考になっちゃう。 そうそうそうそう。うん。 すごいふわっとした回答になっちゃうっていう。 なるほどね。倫理的な問題とかないのかな?それは大丈夫。 うん。それもありるよね。 まあ、そう。
これは、ま、聞き方次第だけど、 O3 に攻撃したいんで教えてくださいって言うと回答できませんって返るから 監査したいんで教えてくださいっていう。 うん。だからそれが結局感する側の そうだよね。 思考になっちゃうっていうのはあり確か。 うん。そう。 逆にその開発者側に還された知識とかはね。 ああ。あ、こういうのあるんだとか。 え、それは例えば 攻撃方向もそうだし。 うん。 あ、なるほど。え、どういうんだろう?開発者ってど、どの自分たち? あ、そう、これ、これを作る開発者に、あ、こういうやり方があるんだみたいな。こう、こう、こう。 え、どうだろう?どうだろう?ちょっとパッとわかんねえな。
うん。どうなんだろう。 今回のイントマックスのある意味その こうコピーペだけど、 それでも攻撃できちゃうんだみたいな。 それはま、本当かみたいな検証する側のなれちもいるとは思ってて。 そうだね。うん。 そう、そう。結局ハルシネーションがまあまあでかくて うん。だからあの打当性評価のための別の AIが絶対必要であ、うんえ。 そこはそこもファインチューでなんとか減らしたいですね。 ま、減らさない、減らしすぎるとさっきみたいにアルファを見つけるみたいなところも弱まっちゃうから あえて残しとくみたいな。
うん。 原検証の自動生成ってちょいむずいイメージなんですけど、どうなんですか? どうなんすかね。でも結構色々出てきてるよな。論 うん。出てきてる。 ちょっとみたいけどね。 うん。かなりポトケックな気はする。 うん。 やっぱハルシネーションとかでかすぎて形式検証でガっちりやっていこうっていうの今後もさらにでかくなってくるじゃないか。 ありそう。うん。 あの電子回路設計系のエージェントとかも見てたんだけど やっぱ結局 なんか回路を設計するま、ま、ほぼほぼ強化学習してんだよね。ま、あのイゴ Aらめっちゃイゴプレイさせるみたいな感じで
はいはいはい。 あの、今日出てた、えっと、リの自動生成も うん。 リを欠かせるみたいな、証明を欠かせるみたいなのを うん。 何回も何回も何パターンもやらせて教化学習 うん。させる。 結構そういう特化型タスクに対してのだからこういうんだと例えば CTFとかせるとかうん。 そういうのが割と効果的な気がする。 そうね。確かに。 うん。 です。以上です。