たくさん チェック・ポイントの研究者が最近明らかにした 詳細を含むDEF会議で 発見された新しい技術の、これは使用されますp脆弱なバージョンのSQLiteを使用するアプリケーションを攻撃するため。
方法 チェック・ポイントは、データベースファイルを脆弱性の悪用シナリオを統合する機会と見なしています 額を悪用するためにアクセスできないさまざまな内部SQLiteサブシステム。 研究者はまた、SQLiteデータベースのSELECTクエリの文字列の形式でエクスプロイトコーディングを使用して脆弱性を悪用する手法を開発しました。これにより、ASLRを回避できます。
脆弱性について
チェック・ポイントの研究者は、 攻撃を成功させるには、攻撃者が攻撃されたアプリケーションのデータベースファイルを変更できる必要があります、これは、トランジットおよび入力データの形式としてSQLiteデータベースを使用するアプリケーションを攻撃する方法を制限します。
でも 彼らはまた、この方法がすでに得られたローカルアクセスを拡大するためにも使用できることを開示している。 たとえば、使用するアプリケーションに隠されたバックドアを統合したり、マルウェアを分析する際にセキュリティ研究者を回避したりします。
ファイルの偽装後の操作は、アプリケーションが変更されたデータベースのテーブルに対して最初のSELECT要求を実行するときに実行されます。
例として、名簿を開くときにiOSでコードを実行する機能が実証されました。 データベースを含むファイル«AddressBook.sqlitedb»提案された方法を使用して変更されたもの。
攻撃については、 fts3_tokenizer関数に脆弱性が使用されました (CVE-2019-8602、ポインターを逆参照する機能)、2.28月のSQLite XNUMXアップデートで修正され、ウィンドウ関数の実装に別の脆弱性があります。
さらに、 PHPで記述された攻撃者からのバックエンドサーバーのリモートコントロール差し押さえの方法の使用を示します、悪意のあるコード操作中に傍受されたパスワードを蓄積します(傍受されたパスワードはSQLiteデータベースの形式で転送されました)。
攻撃方法は、クエリハイジャックとクエリ指向プログラミングのXNUMXつの手法の使用に基づいており、SQLiteエンジンのメモリ破損につながる任意の問題を悪用することができます。
「クエリハイジャック」の本質は、データベースの構造を定義するsqlite_masterサービステーブルの「sql」フィールドの内容を置き換えることです。 指定されたフィールドには、データベース内のオブジェクトの構造を記述するために使用されるDDL(データ定義言語)ブロックが含まれています。
説明は、通常のSQL構文を使用して設定されます。 データベースの初期化中(sqlite3LocateTable関数の最初の実行中)に実行される「CREATETABLE」コンストラクトは、メモリ内のテーブルに関連付けられた内部構造を作成するために使用されます。
「CREATETABLE」と「CREATEVIEW」を置き換えた結果、、ビューの定義を通じてデータベースへのアクセスを制御することが可能です。
一方、「CREATE VIEW」コマンドを使用すると、「SELECT」操作がテーブルにアタッチされます。この操作は「CREATE TABLE」の代わりに呼び出され、攻撃者がSQLiteインタープリターのさまざまな部分にアクセスできるようにします。
これに加えて、攻撃する最も簡単な方法は、「load_extension」関数を呼び出すことです。これにより、攻撃者は拡張機能を使用して任意のライブラリをロードできますが、この関数はデフォルトで無効になっています。
SELECT操作を実行できる条件下で攻撃を実行するために、メモリ破損につながるSQLiteの問題を悪用できるクエリ指向プログラミング手法が提案されました。
この手法はReturnOriented Programming(ROP)を彷彿とさせますが、存在しないマシンコードスニペットを使用しますが、SELECT内の一連のサブクエリに挿入されて、一連の呼び出し(「ガジェット」)を構築します。