SQLite の脆弱性を悪用する新しい手法が導入されました。

チェックポイントの研究者 覆われていない DEF CON カンファレンスでは、SQLite の脆弱なバージョンを使用してアプリケーションを攻撃するための新しい手法の詳細が発表されました。 Check Point 方式では、データベース ファイルを、直接悪用できないさまざまな内部 SQLite サブシステムの脆弱性を悪用するシナリオを統合する機会として考慮します。 研究者らは、SQLite データベース内の一連の SELECT クエリの形式でエクスプロイトをエンコードすることで脆弱性を悪用する手法も準備しました。これにより、ASLR をバイパスできるようになります。

攻撃を成功させるには、攻撃対象のアプリケーションのデータベース ファイルを変更できる必要があります。これにより、攻撃方法は、転送データおよび入力データの形式として SQLite データベースを使用するアプリケーションに限定されます。 この方法は、既存のローカル アクセスを拡張するためにも使用できます。たとえば、使用されているアプリケーションに隠されたバックドアを統合したり、セキュリティ研究者がマルウェアを分析するときにセキュリティ メカニズムをバイパスしたりすることもできます。 ファイル置換後の操作は、アプリケーションが変更されたデータベース内のテーブルに対して最初の SELECT クエリを実行した時点で実行されます。

例として、提案された方法を使用して「AddressBook.sqlitedb」データベースを含むファイルを変更して、アドレス帳を開くときに iOS でコードを実行する機能を実証しました。 この攻撃では、3 月の SQLite 2019 アップデートで修正された fts8602_tokenizer 関数の脆弱性 (CVE-2.28-XNUMX、ポインター逆参照機能) と、別の脆弱性が利用されました。 脆弱性 ウィンドウ関数の実装において。 さらに、悪意のあるコードの実行中に傍受されたパスワードを蓄積する、PHP で記述された攻撃者のバックエンド サーバーの制御をリモートで奪取する方法の使用が実証されました (傍受されたパスワードは SQLite データベースの形式で送信されました)。

この攻撃手法は、「クエリ ハイジャッキング」と「クエリ指向プログラミング」という XNUMX つの手法の使用に基づいており、SQLite エンジンのメモリ破損につながる任意の問題を悪用できます。 「クエリ ハイジャック」の本質は、データベースの構造を決定する sqlite_master サービス テーブルの「sql」フィールドの内容を置き換えることです。 指定されたフィールドには、データベース内のオブジェクトの構造を記述するために使用される DDL (データ定義言語) ブロックが含まれています。 説明は標準 SQL 構文を使用して指定されます。 「CREATE TABLE」構造が使用されます。
これはデータベースの初期化プロセス中 (最初の起動時) に実行されます。
sqlite3LocateTable 関数は、メモリ内にテーブル関連の内部構造を作成します。

「CREATE TABLE」を「CREATE VIEW」に置き換えることで、独自のビューを定義することでデータベースへのアクセスを制御できるようになるという考え方です。 「CREATE VIEW」を使用すると、「SELECT」操作がテーブルにバインドされ、「CREATE TABLE」の代わりに呼び出され、SQLite インタープリターのさまざまな部分にアクセスできるようになります。 次に、最も単純な攻撃方法は、「load_extension」関数を呼び出すことです。この関数を使用すると、拡張子付きの任意のライブラリをロードできますが、この関数はデフォルトで無効になっています。

「SELECT」操作の実行が可能な場合に攻撃を実行するために、メモリ破損につながる SQLite の問題を悪用できる「クエリ指向プログラミング」技術が提案されています。 この手法はリターン指向プログラミングを彷彿とさせます (ROP、リターン指向プログラミング)、呼び出しのチェーン(「ガジェット」)を構築するためにマシンコードの既存のスニペットを使用せず、SELECT 内のサブクエリのセットに挿入します。

SQLite の脆弱性を悪用する新しい手法が導入されました。

SQLite の脆弱性を悪用する新しい手法が導入されました。

出所: オープンネット.ru

コメントを追加します