エンジニアのためのセキュリティ攻略:シェア&ラーニングシリーズ - パディングオラクル

「パディングオラクル」は、オルタナティブ・ロックバンドの名前としては少々奇妙に聞こえるかもしれませんが、実際には暗号鍵を知らなくても情報を復号できてしまう脆弱性のことを指します。
攻撃者にとっての難易度という点では、これは最高レベルに近いものです。魔法のようにボタン一つで復号できるわけではありません。ハッカーは、パディングに関するエラーメッセージをサーバーから引き出し、暗号化されたデータの終わりとパディングの始まりを特定するという、非常に根気のいる作業を繰り返します。そうして暗号化されたデータの各ビットを解読し、十分な時間と入力データがあれば、最終的に暗号を破ることが可能になります。
幸いなことに、パディングオラクル攻撃によるデータの解読を防ぐための対策は比較的簡単です。本エピソードでは、以下の内容を学びます。
- 仕組み
- なぜこの脆弱性がこれほど危険なのか
- 被害を防ぐための防御策
パディングオラクルはどのように機能するのか?
暗号ブロック連鎖(CBC)は、データベース内のセルなどの一連のビット情報を、チェーン全体に適用される暗号鍵で暗号化するブロック暗号の一種です。CBCを使用する場合、ある暗号ブロックの暗号化は、それ以前のすべてのブロックに依存します。理論上、これは非常に強力な暗号化手法であり、ブロックの順序を入れ替えるだけでもデータが破損するため、高い安全性を誇ります。
CBC暗号(および他のあらゆるブロック暗号)の問題点は、正確なサイズのブロックでしか暗号化できないという点です。通常、これは8バイトまたは16バイト単位で行われます。では、CBCで16バイトの暗号単位に2バイトのデータを収める必要がある場合はどうなるでしょうか?その際、「パディング」と呼ばれる無意味な文字を埋め込んで、単位を適切なサイズに調整します。
パディング方式の多くは広く知られており、PKCS#7はその代表的なものです。そのため、攻撃者はどのようなパディングが使用されているかを推測できます。例えば、CBCでブロック内に5文字のパディングが必要な場合、PKCS#7では「0x05」というバイト値を5回繰り返して埋めます。
攻撃者はCBCとパディング方式の知識を悪用し、ホストサーバー(オラクルと呼ばれます)に対してクエリを送信します。適切なツールがあれば、サーバーからパディングが正しくないというエラーを引き出すことができます。これを利用して、サーバーが「パディングが正しい」と応答するまで、暗号の各バイトに対して0から255までの値を順次試していきます。これが成功すると、次の単位へと進み、同様のプロセスを繰り返してパディングの開始位置を特定していきます。
この手法だけではメッセージやセル全体を復号することはできませんが、チェーン内のすべてのリンクにおいて、どこで平文が終わり、どこからパディングが始まるのかをマッピングすることが可能になります。さらに、XOR演算を用いることで、元の平文の最後のバイト値を特定できる可能性もあります。
なぜパディングオラクルはこれほど危険なのか?
ハッカーがこれほどの手間をかけて暗号を解読しようとするのは、それに見合うだけの価値があるからです。価値のないものを暗号化する人はいません。ホスト組織にとっての危険性は、侵害されるデータの内容に依存します。パスワード、ユーザーアカウント、財務情報、クレジットカード番号、患者の記録、機密通信など、非常に価値が高く、狙われやすい情報が流出する恐れがあります。
パディングオラクル攻撃は、さらなる攻撃への入り口にもなり得ます。例えば、この手法でパスワードを盗むことができれば、権限昇格を行い、ネットワークのより深い部分へ侵入することは容易な二次的タスクとなります。
誰もが暗号化を、盗聴や侵害に対する究極の防御策だと考えています。しかし、暗号技術とそれを破ろうとする者たちのいたちごっこは、何世紀にもわたって続いてきました。パディングオラクルは、攻撃者に優位性を与える手法の一つに過ぎません。
パディングオラクル攻撃を阻止する
幸いなことに、パディングオラクルを防ぐ方法はいくつか存在します。最も有効な対策の一つは、GCM(Galois/Counter Mode)やOCB(Offset Codebook Mode)といった、より強力な暗号化モードを使用することです。これらは128ビットのブロックサイズを使用する点でCBCとは異なり、各データブロックにカウンターを割り当てて暗号文を生成します。つまり、パディングオラクル攻撃の影響を受けない仕組みになっています。
適切なエラーハンドリングを実装することも、攻撃者の成功率を大幅に下げることにつながります。パディングオラクル攻撃は情報の漏洩に依存しているため、暗号化や復号に失敗した際は、パディングに関する具体的なエラーではなく、汎用的なエラーメッセージを返すようにしてください。
メッセージ認証コード(MAC)を実装することも可能です。MAC値は、秘密鍵を使用してメッセージ内容の改ざんを検知できるようにすることで、データの整合性と真正性を保護します。
最後に、パディングオラクル攻撃はすべて繰り返しクエリを必要とします。1つのセルでパディング方式を特定するために200回以上のリクエストが必要になる場合があり、それがチェーン内で保護されている情報の単位数分だけ繰り返されます。同一ソースからのリクエスト数を制限することで、攻撃者が試行を開始する前にアクセスを拒否し、パディングオラクル攻撃を阻止できます。
パディングオラクルに関する詳細学習
攻撃者が機密情報を復号できてしまう手法は、まさに悪夢と言えるでしょう。しかし、本記事を通じて、そのような事態を未然に防ぐための有効な対策をいくつか学んでいただけたはずです。
詳細については、OWASPによるパディングオラクルの定義とチェックリストをご覧ください。また、学んだ防御知識を試すには、サイバーセキュリティチームを育成するSecure Code Warriorプラットフォームの無料デモをご活用ください。この脆弱性やその他の脅威への対策について詳しくは、Secure Code Warriorブログをご覧ください。
パディングオラクル攻撃を阻止する準備はできましたか?Secure Code Warriorプラットフォームでぜひ挑戦してみてください:
AI主導の開発をリリース前にガバナンスする
AIを活用したリスク測定、コミット時のセキュアコーディングポリシーの強制、そしてSDLC全体を通じたセキュアなデリバリーの加速を実現します。
他のブログ記事を見る
セキュアコーディング、AIガバナンス、ソフトウェアリスク管理に関する専門的なコンテンツをご覧ください。
%252520%252520(3).avif)
Supercharged Security Awareness: How Tournaments are Inspiring Developers at Erste Group
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse varius enim in eros elementum tristique. Duis cursus, mi quis viverra ornare, eros dolor interdum nulla, ut commodo diam libero vitae erat. Aenean faucibus nibh et justo cursus id rutrum lorem imperdiet. Nunc ut sem vitae risus tristique posuere.

Security as culture: How Blue Prism cultivates world-class secure developers
Learn how Blue Prism, the global leader in intelligent automation for the enterprise, used Secure Code Warrior's agile learning platform to create a security-first culture with their developers, achieve their business goals, and ship secure code at speed
AIを活用した開発をリリース前にセキュアに
開発者のリスクを可視化し、ポリシーを適用することで、ソフトウェア開発ライフサイクル全体における脆弱性を未然に防ぎます。



.avif)