暗号化には、情報の機密性などさまざまな利点があります。ただし、アプリケーションのセキュリティを確保するために暗号化に過度に依存するのは得策ではありません。今日は、ケーススタディを使用して、暗号化されたペイロードを通じて SQL インジェクションの脆弱性を識別して悪用する方法を理解します。 SQL インジェクションについては、知っている人や使用したことがある人は多いでしょう。知らない人や聞いたことがない人でも問題ありません。次に SQL インジェクションについて紹介します。 SQL インジェクションは、Web フォーム送信、入力ドメイン名、またはページ要求のクエリ文字列に SQL コマンドを挿入し、最終的にサーバーを騙して悪意のある SQL コマンドを実行させるプロセスです。 具体的には、既存のアプリケーションの機能を利用して、悪意のある SQL コマンドをバックエンド データベース エンジンに挿入し、実行します。設計者の意図どおりに SQL 文を実行するのではなく、Web フォームに悪意のある SQL 文を入力することで、セキュリティ上の脆弱性がある Web サイト上のデータベースを取得できます。 では、SQL インジェクションはいつ発生するのでしょうか? ブラウザに URL www.sample.com を入力するとします。これは単なるページ要求であり、データベースへの動的な要求を行う必要がないため、SQL インジェクションは発生しません。www.sample.com?testid=23 を入力すると、URL に変数 testid が渡され、値 23 が提供されます。これはデータベースへの動的なクエリの要求であるため (?testid=23 はデータベース クエリ変数を表します)、URL に悪意のある SQL ステートメントを埋め込むことができます。 明確にするために述べておくと、この記事では暗号化についてではなく、SQL インジェクションを識別して悪用するために使用される暗号化されたペイロードを生成するアプリケーションの欠陥についてのみ説明します。 私たちが最近取り組んだ電子商取引アプリケーションでは、Web サイトへのリクエスト パラメータ値のほとんどが暗号化されていることがわかりました。リクエスト パラメータが暗号化されている場合、暗号化を解除できない限りアプリケーションをファジングすることは困難です。そのためには、キーと暗号化アルゴリズムを知る必要があります。 次の図は、私たちが見つけたサンプル Web サイトの詳細情報ページです。このページでは、id (orderid) パラメータを暗号化された形式で送信しています。 注: パラメータ値 (BDKfx3xNKsc=) は単純に base64 でエンコードされるのではなく、暗号化されます。 ID パラメータの暗号化された値は、base64 エンコード形式で表されます。 また、アプリケーションからログアウトし、同じユーザーとしてログインしてまったく同じページに移動すると、暗号化パラメータ (nPBri1km2ic=) の値が以下に示すように異なることにも気付きました。 上の図からわかるように、ログインが成功するたびにランダム キーが暗号化に使用され、またはセッション ID (Cookie の一部) が何らかの方法でキーの一部として使用されます。安全に見えますが、SQL インジェクションを試してみましょう。 まず、入力検証をテストするために、複数の場所に一重引用符 (') を挿入しようとしましたが、要求パラメータは暗号化された形式 (つまり、有効な暗号文) である必要があったため拒否されました。 ただし、ここではショッピング カートの共有機能を使用できます。これにより、ユーザーはショッピング カートのアイテムを他のユーザーと共有できます。ユーザーが共有用にショッピング カートを保存すると、ランダムなクエリ トークンを含むリンクが生成されます。このリンク(URL)にアクセスすることで、ユーザーはお互いのショッピングカートにアクセスできます。カートを保存する前に、ユーザーはカートに名前を付けるように求められます。 これはプレーンテキスト入力を受け入れる珍しい入力フィールドの 1 つなので、SQLi、XSS 用にエンコードします。さらに詳しく調べてみると、shared-cart 用に生成された URL 内のトークンは、実際にはショッピング カートに選択したカート名のパスワードであることがわかりました。 ただし、共有カート機能はいかなる攻撃に対しても脆弱ではありませんが、特定の入力 (プレーンテキスト) に対して暗号化されたペイロード (暗号テキスト) を生成するために使用できることに注意してください。ショッピング カート機能へのリンクを共有して暗号化された攻撃ペイロードを生成し、SQL インジェクションや認証バイパスなどの脆弱性がないかアプリケーションをチェックできるようになりました。 SQL インジェクションをテストするために、一重引用符 (') で囲まれた暗号化された値が生成されます。 暗号化されたペイロードは、暗号テキスト値のみを入力として受け入れるさまざまなアプリケーション パラメータを難読化するために使用されます。正しい場所にたどり着くまでにしばらく時間がかかりましたが、最終的に、orderitem ページの ID パラメータが SQL エラー メッセージを返し、脆弱性が確認されました。 このエラー メッセージは、アプリケーションが動的クエリを生成し、SQL インジェクション攻撃に対して脆弱である可能性があることを示しています。次に、データベースから情報を抽出します。UNION ベースの SQL クエリを使用して、データベースからデータを抽出します。union 演算子は、2 つ以上の SELECT ステートメントの結果を結合するために使用されます。 最初のタスクは、SQL クエリの一部として返す列の数を決定することでした。試行錯誤を繰り返し、クエリでいくつかの列 (30) を返しました。次に、データベースから情報を抽出します。以下に示すように、データベースのバージョン情報を抽出するための暗号化されたペイロードを作成します。 上記のペイロードの出力によって生成された暗号文は、ページ上の脆弱な ID パラメータとして入力されます。 その後、この脆弱性を利用してデータベース システムを構築し、最終的にシェルを取得しました。 要約する 上記の分析から、暗号化パラメータを使用してアプリケーションのセキュリティを実現することは、想像するほど安全ではないことがわかります。たとえば、強力な暗号化アルゴリズムで暗号化されたデータの場合、悪意のある攻撃者は暗号化されたペイロードを使用して攻撃することができます。 現在、暗号化は依然としてデータの改ざんや偽造から保護する強力なメカニズムであると考えられていますが、暗号化の実装が不十分で、暗号化の使用に対する明確なプライバシー保護が欠如しているため、依然として非常に危険なセキュリティ上の脆弱性を引き起こす可能性があります。 |
<<: 人工知能は人間の知能ではない。まずは人工的なもの、そして知的なもの
>>: WOT2018 アルゴリズム モデル フォーラム: データが氾濫する中、アルゴリズムを使用してボトルネックを打破する方法
シンプルな Java 暗号化アルゴリズムは次のとおりです。厳密に言えば、BASE は暗号化アルゴリズ...
[[335691]]ビッグデータダイジェスト制作出典: Wired編纂者:Roubao、Xia Ya...
特定の問題を解決するための最適な技術としての人工知能 (AI) に対する熱意は否定できず、注目に値し...
業界の専門家によると、人工知能を使用していない多くの企業がこの新興技術を急いで導入し始めている一方で...
標準ルーティングテーブル1.次駅経路選定の基本的な考え方ルーティング テーブルは、宛先までの完全なパ...
現在、新世代の人工知能技術が世界中で急成長を遂げており、ビッグデータ、ブロックチェーン、5Gなどの新...
MacでSiriを呼び出したことがありますか?とにかく一度も合格していない。 AIの世界では「ベテラ...
「無人運転車が次々とゆっくりと停止し、住民が乗車すると、自動的にショッピングモール、オフィス、学校な...
Mike Ferguson は、MIT 脳認知科学部 (MIT BCS) の研究ソフトウェア エンジ...
[51CTO記者の李玲玲が北京からレポート] 真夏が到来し、人工知能も北京の天気のように、より暑い...