パスワードクラックの手口(2)

f:id:boost-up:20171205232527j:plain

前回は総当たり攻撃と、その派生形として辞書攻撃について紹介しました。

この2つはいずれも、正面玄関からの攻撃ですが、Webサイトのクラック方法としては裏口や窓から入る方法も考えられます。 侵入方法に関する話はパスワードクラック以外の論点が多々ありますので別の機会に譲ることとし、今回は裏口や窓から侵入され、パスワードリストが流出した場合、どのような攻撃を受ける可能性があるかについて説明します。

情報の入手が攻撃者の目的であれば、システムの本丸にアクセスしている以上、その目的は達成している可能性が高いと思われますが、攻撃者が他人へのなりすましやアプリケーションとして整合が取れた形でデータの改ざんを行うことを目的とする場合には、最終的に正面玄関を突破するための攻撃を再び仕掛けてくる可能性があります。

攻撃者は、裏口などからの侵入によって入手したアカウントリストを使い、正規のユーザに成りすましてログインを試みるわけですが、パスワードリストにパスワードが平文で記載されている場合は、既にそこに答えがあるわけですので、難なく最終目的を達成できることは言うまでもないでしょう。

一方、パスワードが暗号化されている場合、攻撃者は暗号の解読を試みる可能性があります。 MD5,SHA-1,SHA-2などの標準的な一方向暗号化アルゴリズムで暗号化(ハッシュ化)されている場合、正攻法での解読は簡単ではありませんので、その時点で攻撃を諦める攻撃者もいるでしょうが、この場合のパスワードは安全かと言うと、それ程甘くはありません。 暗号化に標準的なアルゴリズムを採用している場合、アルゴリズム自体が公開されていることから、攻撃者はAというパスワードを暗号化すると何になるのかを簡単に知ることが出来ます。

採用しているアルゴリズムについて仮説を立てたら、次は適当なパスワード候補を暗号化してみて、それがパスワードリストにないかを探します。 パスワードに使われる可能性が高い典型的な文字列を暗号化してみて、パスワードリストのいずれかにヒットすれば、そのアカウントのパスワードは突き止められたことになります。 攻撃者は総当たり攻撃や辞書攻撃で任意の文字列の暗号化を繰り返すことで、単純なパスワードを使っているアカウントを見つけ出すことが可能です。

上記の攻撃方法においては、「文字列の暗号化」というコストがかかる処理が必要になることから、総当たり攻撃に比べると相当程度非効率なのですが、世の中には「文字列をあるアルゴリズムで暗号化して得られるハッシュ値の組み合わせ」を保持するデータベースが存在します。

このデータベースを辞書とすると、一々暗号化処理をしないでも純粋な総当たり攻撃を行うことが可能です。 このデータベースは「レインボーテーブル」と呼ばれ、これを利用した攻撃は「レインボークラック」と呼ばれます。