「SQLite」のゼロデイ脆弱性、GoogleのAIエージェントが見つける AIは脆弱性調査の課題をどう解決したのか?テストケース、クラッシュレポートを自動生成

Googleの脆弱性調査専門チームは、Google DeepMindと共に研究開発を進めているAIエージェント「Big Sleep」がSQLiteにおけるスタックバッファーアンダーフローの脆弱性を見つけた事例を公式ブログで解説した。

» 2024年11月28日 08時00分 公開
[@IT]

この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。

 Googleの脆弱(ぜいじゃく)性調査専門チーム「Project Zero」は2024年11月1日(米国時間)、Google DeepMindと共に研究開発を進めているAIエージェント「Big Sleep」が、オープンソースのデータベースエンジン「SQLite」におけるスタックバッファーアンダーフローのゼロデイ脆弱性を発見したと公式ブログで明らかにした。

 Project Zeroチームによると、Big SleepはSQLiteの開発ブランチ上のソースコードにおけるゼロデイ脆弱性を2024年10月初旬に発見した。Project ZeroチームはSQLiteの開発者に問題を報告し、脆弱性は修正された。公式リリース前にこのゼロデイ脆弱性が修正されたため、SQLiteのユーザーに影響はないとしている。

 Project Zeroチームは「ソフトウェアがリリースされる前に脆弱性を発見できれば、攻撃者が対抗する余地はなく、防御面で可能性を大きく広げることになる。広範に利用されているソフトウェアにおける悪用可能なメモリ安全性の問題をAIエージェントが発見した初の公開事例だろう」と述べている。

ファジングでは限界がある? 脆弱性調査の課題

 ソフトウェア開発において脆弱性を未然に防ぐ手法として、ファジングが広く採用されている。Project Zeroチームは、ファジングが脆弱性対策として大きな効果を発揮する一方で、ファジングで見つけるのが難しい(または不可能な)脆弱性を防御者が発見できる新たなアプローチが必要だと指摘する。

 「修正済みの脆弱性と類似する亜種のゼロデイ脆弱性が野放しで悪用され続けている現状がある。この傾向が続く中で、ファジングでは亜種のゼロデイ脆弱性の捕捉が難しく、攻撃者にとっては、手作業で亜種の脆弱性を探索することが効果のあるアプローチとなっている状況だ」(Project Zeroチーム)

 そこで、新たなアプローチとして、大規模言語モデル(LLM)を活用した研究を開始し、修正済みの脆弱性と類似する亜種のゼロデイ脆弱性を発見することが可能かどうかをSQLiteの直近のコミットデータを基にテストしたという。

Big Sleepはどのような脆弱性を見つけたのか

 Big Sleepが見つけた脆弱性は、sqlite3_index_constraintという構造体にあるiColumnにまつわるものだ。iColumnは列番号を示すフィールドだが、特定の条件下ではセンチネル値(sentinel value)として「-1」が使用されていた。このパターンの場合、このフィールドを利用するコード全てがエッジケースを正しく処理する必要がある。

7476:   struct sqlite3_index_constraint {
7477:      int iColumn;              /* Column constrained.  -1 for ROWID */
7478:      unsigned char op;         /* Constraint operator */
7479:      unsigned char usable;     /* True if this constraint is usable */
7480:      int iTermOffset;          /* Used internally - xBestIndex should ignore */
7481:   } *aConstraint;            /* Table of WHERE clause constraints */

 しかし、seriesBestIndex関数はiColumnのエッジケースを正しく処理できず、スタックバッファーアンダーフローの問題を引き起こした。

619 static int seriesBestIndex(
620   sqlite3_vtab *pVTab,
621   sqlite3_index_info *pIdxInfo
622 ){
...
630   int aIdx[7];           /* Constraints on start, stop, step, LIMIT, OFFSET,
631                          ** and value.  aIdx[5] covers value=, value>=, and
632                          ** value>,  aIdx[6] covers value<= and value< */
633   const struct sqlite3_index_constraint *pConstraint;
...
642   for(i=0; i<pIdxInfo->nConstraint; i++, pConstraint++){
643     int iCol;    /* 0 for start, 1 for stop, 2 for step */
644     int iMask;   /* bitmask for those column */
645     int op = pConstraint->op;
...
705     iCol = pConstraint->iColumn - SERIES_COLUMN_START;
706     assert( iCol>=0 && iCol<=2 );
707     iMask = 1 << iCol;
...
713     if( pConstraint->usable==0 ){
714       unusableMask |=  iMask;
715       continue;
716     }else if( op==SQLITE_INDEX_CONSTRAINT_EQ ){
717       idxNum |= iMask;
718       aIdx[iCol] = i;
719     }
720   }

 Project Zeroチームによると、Big Sleepは脆弱性を見つける人間のように具体的な仮説を立てながら、バグを再現するテストケースやクラッシュレポートの生成を繰り返し、特定のエッジケースをトリガーさせる明確なテストケースを構築していったという。

 「このゼロデイ脆弱性を従来のファジングで簡単に見つけることができるのかどうかを検証するため、SQLiteのドキュメントに記載された手順に従いファジングを実行したが、150CPU時間(1台のCPUで150時間の計算量)を費やしても見つけられなかった。現時点では、ターゲットに特化したファジングツールが特定の脆弱性の発見に有効な一方で、AI(人工知能)は、クラッシュを引き起こすテストケースの発見だけでなく、高品質な原因分析や優先順位付け、脆弱性修正の迅速化に寄与できる可能性がある」とProject Zeroチームは述べている。

Copyright © ITmedia, Inc. All Rights Reserved.

スポンサーからのお知らせPR

注目のテーマ

Microsoft & Windows最前線2025
AI for エンジニアリング
ローコード/ノーコード セントラル by @IT - ITエンジニアがビジネスの中心で活躍する組織へ
Cloud Native Central by @IT - スケーラブルな能力を組織に
システム開発ノウハウ 【発注ナビ】PR
あなたにおすすめの記事PR

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。