近年、企業を狙ったサイバー攻撃は、多様化かつ高度化しています。その攻撃手法の1つが、レインボー攻撃です。
本記事では、レインボー攻撃(レインボーテーブル攻撃)の仕組みと対策について解説します。自社のセキュリティ性を高めたいと考えている担当者は、ぜひ参考にしてください。
Cloud Mail SECURITYSUITEのサービス資料を受け取る
レインボー攻撃(レインボーテーブル攻撃)とは
レインボー攻撃(レインボーテーブル攻撃)とは、ハッシュ化されたデータの解読を目的とした、サーバに格納されたデータベースを標的とする攻撃手法です。対象となるハッシュ値に対応する平文を、短時間で特定します。
レインボー攻撃が行われると、パスワードの解読が容易になり、流出したパスワードが悪用される恐れがあります。
詳しくは後述しますが、パスワードを守るためには、ストレッチングやソルト処理、ペッパー処理などの対策が有効です。
レインボーテーブルとは
レインボーテーブルとは、膨大な量のハッシュ値と平文を収めたデータベースのことです。ハッシュ値と平文の対応表として活用されます。レインボーテーブル内のハッシュ値を検索すれば、それに対応する平文を探せるという仕組みです。
このレインボーテーブルを悪用すれば、ハッシュ値を解析するだけでパスワードの解読可能です。攻撃者に短時間でパスワードを割り出されてしまいます。
ハッシュ化とは
ハッシュ化とは、平文からハッシュ値を生成する処理のことです。
平文とは、暗号化といった対策が施されていないパスワードやメッセージなどの文字列を指します。一方、ハッシュ値は、アルゴリズムを用いて生成された、元々の平文の数値や文字列とは全く異なる文字列です。
ハッシュ化された文字列は「一方向性」という特徴を持っています。そのため、元のデータからハッシュ値を作ることはスムーズであっても、ハッシュ値から元のデータを逆算することは理論上困難です。ただし、総当たりやレインボーテーブルなどの手法で一致する平文を見つけることは可能です。
なお、ハッシュ化と似たような技術に暗号化があります。双方の違いは、データを元に戻せるかどうかです。暗号化が行われた文字列は、対応する鍵があれば復元できます。
ハッシュ値とは
ハッシュ値とは、ハッシュ関数によって生成される文字列のことで、平文がわずかに変わるだけでも全く異なる値になります。そして、前述のとおり、元データから元に戻すことはできません。
ただし、ハッシュ関数が同じであれば、同一の平文は必ず同じハッシュ値になります。
【平文とハッシュ値の例】
MD5というハッシュ関数を用いた場合、「password」という平文をハッシュ化すると、ハッシュ値は「5f4dcc3b5aa765d61d8327deb882cf99」となります。
PPAP対策やメールセキュリティ強化サービス
資料ダウンロードレインボーテーブルに必要な関数
ここでは、レインボーテーブルに必要な関数について解説します。
ハッシュ関数
ハッシュ関数とは、平文をハッシュ化するために用いられる関数です。レインボーテーブルにおいては、平文を一方的に変換するために用いられます。
ハッシュ関数にはMD5やSHA-1、SHA-2などの種類があります。いずれのハッシュ関数においても、入力が少しでも異なれば大きく異なる結果を生成する点が特徴です。
例えば、MD5を使って「persol」という単語をハッシュ関数で変換すると「c4c0ac673fd8010a257753cc2c7922cc」となりますが、pを大文字にするといった軽微な変化を加えるだけで、全く異なる値が生成されます。
還元関数
還元関数とは、ハッシュ値から次の平文候補を生成する関数で、元々の平文と一致する可能性がある値を算出します。しかし、元の平文を完全に復元することはできません。
還元処理を繰り返すことで、ハッシュ関数と組み合わせた「チェイン」が作成され、レインボーテーブル内で効率的に候補を導き出せます。
PPAP対策やメールセキュリティ強化サービス
資料ダウンロードレインボー攻撃の仕組み
ここでは、レインボー攻撃の仕組みについて解説します。
チェインの作成
レインボー攻撃では、まずチェインを作成します。候補となる平文を選び、ハッシュ関数でハッシュ値を算出します。そのハッシュ値に対して還元関数を適用して別の平文候補を生成し、再びハッシュ化を行う作業を繰り返せばチェインの完成です。
チェインを作成する際には、ハッシュ関数は同じものを用い、還元関数は異なるものを用います。また、チェインの途中の要素は保存せず、「開始の平文」と「終了の平文」だけを保存します。
レインボーテーブルの構築
多数の平文からいくつものチェインを作り出すことで、レインボーテーブルが構築されます。前述のとおり、レインボーテーブルには「開始の平文」と「終了の平文」だけを保存しています。
チェイン作成の途中で生成されるデータは削除してしまうため、ストレージを大幅に節約可能です。また、ハッシュ関数と還元関数を用いれば逆引きして再構築できます。
平文の特定
レインボー攻撃時は、対象のハッシュ値をレインボーテーブルを用いて解読します。
まず対象のハッシュ値を還元関数で平文に戻し、終了の平文と一致するかどうかをチェックします。もし一致すれば、対象ハッシュ値にハッシュ元の平文が含まれている可能性が高いと判断可能です。そのチェインの開始の平文を取り出してチェインを復元し、元の平文を特定します。
末尾の一致まで繰り返し
対象ハッシュ値が終了の平文に一致しない場合は、「還元関数による平文生成→ハッシュ関数によるハッシュ値作成→還元関数による平文生成」の手順を順に進め、各段階で得られる平文が終了の平文と一致するかを確認します。
この繰り返しによって一致する平文を見つけ出し、チェインを復元することでパスワードを特定します。
PPAP対策やメールセキュリティ強化サービス
資料ダウンロードレインボー攻撃への対策
ここでは、レインボー攻撃への対策方法について解説します。
ストレッチングによる時間稼ぎ
ストレッチングとは、同じハッシュ計算を何度も繰り返してハッシュ化処理に要する計算時間を増やす手法です。数千から数万回にわたって計算を繰り返すことで、特定までの時間稼ぎができます。
レインボー攻撃は攻撃自体は高速であるものの、ストレッチング等の対策によって計算時間が増えるため、攻撃が困難になる点が弱点です。そのため、数万回のハッシュ化を行えば、1つのパスワードを解読するだけで数十年かかることになります。しかし、ストレッチングを過度に繰り返すとサーバへの負荷が高まるため、安全性とシステム負荷のバランスを見極めて実行する必要があります。
ソルト・ペッパー処理での無効化
ソルト処理は、パスワードごとに異なるランダムな値を付加する仕組みです。ペッパー処理は、全パスワード共通の秘密値として使われることが多く、データベース外で管理される仕組みです。これにより、同じパスワードでも異なるハッシュ値を生成可能となり、レインボー攻撃が通用しづらくなります。
なお、ソルト処理とペッパー処理の違いは、ランダムな値の保存場所です。ソルト処理はデータベース内にデータを保持しているのに対し、ペッパー処理はデータベース外でランダムな値を付加します。そのため、仮にデータベースが流出した場合でも、ペッパー処理を採用していればパスワードの特定を妨害でき、セキュリティ性を高められます。
パスワードの複雑化による解読防止
パスワードそのものを複雑にし、解読防止を図る取り組みも、レインボー攻撃の対策として有効です。短い文字列よりも、長い文字列の方がリスクを軽減できます。
また、小文字だけではなく、大文字や数字、特殊記号を含めることも効果的です。
その他、パスワードの設定にあたっては以下の内容を意識してください。
- ・一般的な単語や個人情報をパスワードに用いない
- ・定期的にパスワードを変更する
など
PPAP対策やメールセキュリティ強化サービス
資料ダウンロードまとめ
レインボー攻撃への対策が不十分であれば、重要なパスワードが流出し、信用低下につながる恐れがあります。リスク低減の取り組みとしては、ストレッチングを実施する、ソルト・ペッパー処理を行うなどが有効です。
もしレインボー攻撃への対策と併せてメールのセキュリティ性を高めたいと考えているなら、Cloud Mail SECURITYSUITEの活用をご検討ください。ランサムウェア・PPAP対策を徹底しており、メールを安全に使えるシステムです。メールシステムを強化したいと考えている人は、ぜひお問い合わせください。


