セキュリティ管理のメモ帳

セキュリティに関する備忘録

「パスワードクラック手法」と「有効な管理策」について(前半)

はじめに

 FIDO2を代表とするパスワードレス認証の普及など、最近はパスワード以外の要素による認証が多く提供されているため、今更という感じがしますが、今でもパスワードのみで認証が行われている環境は存在しますし、最新のガイドラインでも認証技術の章でパスワードに関する記述の割合が多いため、ここでパスワードクラック*1と関連する管理策についてまとめておきます。

 本稿は文字数が多くなってしまったため、以下のように2部構成とします。

  •  前半)パスワードクラック手法について
  •  後半)パスワードクラックに有効な管理策について

 注)なお、本稿は筆者が文献の参照と経験に基づき独自に解釈した内容のため、認識が間違っている可能性があります。(誤りに気付いた方は、コメントいただけると幸いです)

「オンライン攻撃」と「オフライン攻撃」

 パスワードクラックは、攻撃対象であるパスワードファイルが、攻撃時にどこに存在するのかにより「オンライン攻撃」と「オフライン攻撃」に分けられます。

・オンライン攻撃

 稼働しているサーバーやサービスにネットワーク経由で直接アクセスし、アカウントとパスワードを入力し認証の成否を試す手法です。
 攻撃対象が防御側組織の管理下にあり、レート制限によるロックアウト*2を適用でき、それが有効な管理策として機能するため、後述する総当たり攻撃のように短時間で多くの試行回数を前提としている攻撃が成立する可能性は極めて低いと思われます。
 他方、類推攻撃、パスワードリスト攻撃のようにある程度パスワードの目星がついており少ない試行回数で攻撃する場合は、次に紹介するオフライン攻撃と違いパスワードファイルの事前入手が不要なため、あまり手間をかけることなく攻撃の成否を確認することができます。

・オフライン攻撃

 攻撃者が攻撃対象のハッシュ値(パスワードファイル)*3や暗号化されたファイルまたは媒体を事前に入手し、攻撃者側の環境でそのパスワードを解析する手法です。
 ※)パスワードファイルを窃取する手法とその管理策についてはブログ "「資格情報」に関連する攻撃手法と管理策について" で紹介しています。
 攻撃対象となるファイルが攻撃者側の手元に存在し自らの環境下で試行が可能なため、回数・時間に関し制約が無くあらゆるパスワードクラック手法を試すことができます。
 オフライン攻撃は、理論的には時間制限なく試行を繰り返すことが可能ですが、攻撃者もパスワードクラックにより得られるであろう成果とそれに費やす解析用PCなどのリソースの占有時間を比較し、ビジネスとして成立することを重視します。それに対し防御側は、パスワードが解析されるまでの時間を少しでも多くかけさせる(採算性を低下させる)ことがセキュリティ管理策の主目的となるため、各組織で一定の強度を確保するためのパスワードポリシーが設定されています。

攻撃ツールの利用

 オフライン攻撃はツールを利用することにより、効率的(GPUに対応した高速処理)、効果的(パスワードに利用されやすい規則性に基づく文字列候補を優先し、確度を向上させる)な試行が可能になります。

図 ツールを利用したオフライン攻撃の実施例

 ツール自体は違法なものではないため、GitHubなどの以下サイトから入手することができます。
 https://hashcat.net/hashcat/
 https://github.com/hashcat/hashcat

 ツール全般にいえることですが、それをどのように使用するのかによって、善いものにも悪いものにもなります。

  • 善:利用者が自分のパスワードを忘れた時にリカバリツールとして利用する
  • 善:ペネトレーションテスターが対象組織内で保管しているパスワード群に脆弱なものが含まれていないかどうかを検査により確認する
  • 悪:攻撃者が攻撃対象のパスワードをクラックするために悪用する

パスワードクラック手法

 以下に、パスワードクラックに用いられる主な攻撃手法を紹介しますが、各攻撃手法は明確に分類されるものではなく各手法の概念を理解することを目的としています。

図 各手法の関連性イメージ
 パスワードクラック手法は総当たり攻撃から、効率化や検知され難さを目的に進化しています。

1.総当たり攻撃(brute force attack)

 固定したアカウントに対し、考えられる全ての組合せを試すことによりパスワードを特定する手法で、通常は、オフライン攻撃時(時間・回数の制約を受けず攻撃が可能な環境)に使用されます。
 防御のためには、パスワードポリシーにより長い文字列を利用することが有効な管理策として機能します。

2.辞書攻撃(dictionary attack)

 辞書*4にある文字列や文字列を複数組み合わせたものを優先して試行することにより、総当たり攻撃よりも効率的にパスワードを特定しようとする手法です。
 辞書は有償または無償で配布されています。以下に入手先の例を挙げます。
 https://www.scrapmaker.com/data/wordlists/dictionaries/rockyou.txt
 https://github.com/mikejakobsen/dictionary-attack
 ここで紹介した辞書も前述の攻撃用ツール同様、防御側組織により利用されることがあります。例えば、利用者がパスワード登録する際に、辞書を参照し載っている文字列の使用を拒否することで脆弱なパスワードが登録されることを防ぐことができます。

3.マスク攻撃(mask attack)

 パスワードクラックツールで、特定の形式(一般的に使用されることの多いパスワードの規則性を満たす形式)の文字列を優先して使用することにより、少ない試行回数で効率的にパスワードを特定しようとする手法 です。
 一般的に、パスワード登録時に複雑さ要件(大文字、小文字、記号、数字を1文字以上含める)や定期的な変更を強制されると、利用者はその強制を満たしつつ規則性を持つ文字列をパスワードとして選ぶ傾向があると言われているため、その規則性を利用することにより効率的にパスワードクラックをしようとする考え方です。

 例)複雑さ要件と規則性の関係

  • 大文字を含めることを強制された場合、1文字目に使用されることが多い  Password
  • 数字や記号を含めることを強制された場合、最終文字に使用されることが多い  Passowrd1!
  • ○○文字以上の長さを強制された場合、人名と年号の組合せが多い  Suzuki@1998

4.レインボーテーブル攻撃(rainbow table)

 レインボーテーブルは、ある値とその値に対応するハッシュ値を集めたテーブルのことで、そのテーブルを事前に用意することによりハッシュ値からのパスワードの特定が効率化できるとの発想から使用されている手法です。実際には、平文とハッシュ値を1対1で対応させた単純なものではなく、処理を効率化するためハッシュ関数(平文⇒ハッシュ値)と還元関数(ハッシュ値⇒平文)を複数回繰り返した結果を集めたテーブルを利用します。
 パスワードからハッシュ値を計算する処理を省くことができ、その分、クラックに費やされる時間を短縮できるため使われていた手法ですが、近年は、主に以下を理由としてあまり使われなくなっているようです。

  • 後述するソルト、ストレッチングの普及により、レインボーテーブルが適用できる機会が減った
  • GPUに対応したツールの普及により、制約が少なく強力な処理が可能になっている

5.類推攻撃(password guessing attack)

 事前に攻撃対象に関する情報を収集し、そこから推測される文字列を優先して使用することにより、少ない試行回数で効率的にパスワードを特定しようとする手法 です。
 人は設定したパスワードを記憶しておくため、自分に関連する情報を含める傾向があります。また、勤務先、出身校、ペットの名前、生まれ年、誕生日、所有している車種、好きな有名人、メールアドレスなどの情報は、SNSなどを悪用し攻撃者が入手してしまう恐れがあります。
 上記内容から、どちらかというとソーシャルエンジニアリングの要素が強いとも言えます。
 なお、アカウントと関連性のある文字列は、パスワードクラック時に優先して試行される恐れが高い*5 ため、防御側の管理策として、利用者に注意を促したり、パスワード自動生成機能の利用により意味のない文字列を選択するなどの対応が必要となります。

6.逆総当たり攻撃(reverse brute force attack)

 総当たり攻撃とは逆に、固定したパスワードに対しアカウントを総当たりで入力しログインを試みる手法です。オンラインによる総当たり攻撃を防ぐためのレート制限(同一アカウントに対し設定した回数以上の認証試行失敗が発生した場合、そのアカウントをロックアウトする設定)を回避するために考えられました。
 オンラインによる逆総当たり攻撃を防ぐためには、レート制限に「同一IPアドレスからの一定回数以上の認証試行失敗が続いた場合」などの条件を追加する必要があります。

7.パスワードリスト攻撃(password list-based attack)

 攻撃者が別のサービスから入手したID・パスワードのリストでログインを試みる手口です。同じアカウントとパスワードを複数サイトで使い回している利用者の場合、一回の試行で不正ログインが成立してしまいます。同様の手法をロボットにより自動化したものをクレデンシャルスタッフィング攻撃(Credential Stuffing)と呼ぶことがあります。
 防御側としては、利用者に対しパスワードの使いまわしを禁止するよう注意を促す必要があります。特に、個人利用しているサイトと業務利用しているサイトのように管理が異なるドメインで同じパスワードを利用することの無いようにリスクの内容を含めしっかりと利用者が理解していることが大事です。

 また、不正に入手されダークWebで取引されているアカウント(メールアドレス)とパスワードのリストを公開しているサイトがあり、常に流出した情報が追加されています。(2022/08/14現在 119億件のアカウントが登録されています)
have i been pwned?
 このサイトで、自身が利用しているアカウントに関連するパスワードの流出有無を確認し、もし流出している場合(下図のように、”Oh no - pwned !” と表示されます)、速やかに対象のサイトまたはサービス(Breaches you were pwned in の下に流出対象のサイト情報が表示されます)に登録しているパスワードの変更はもちろん、同じアカウントとパスワードを他のサイトでも使いまわしている場合は、同様に、その全てのサイトでパスワードを変更する必要があります。

図 have i been pwned? によるパスワード流出有無の確認

8.パスワードスプレー攻撃(Password Spraying)

 IDやパスワードを固定せずに 少ない回数でゆっくり(low-and-slowと呼ばれます)連続的に攻撃することでレート制限の検知を回避しつつオンラインでの攻撃を可能にします。
 単純な設定で攻撃を検知することは難しく、UEBA(User and Entity Behavior Analytics ユーザとエンティティの行動分析)などの新しい技術の利用が必要になりますが、過検知の発生も考えられ、チューニングが難しいと思われます。

以下、後半部分(パスワードクラックに有効な管理策について)に続きます。

参考資料

 本稿は、以下のサイト、文献を参考にしています。より詳細な情報を得たい、正確性を重視したい方は以下を参照して下さい。

  • ISO/IEC 27002:2022 Information security, cybersecurity and privacy protection — Information security controls

  • NIST SP800-53 Rev.5 Security and Privacy Controls for Information Systems and Organizations IA-5

  • NIST SP 800-63B Rev.3 Digital Identity Guidelines — Authentication and Lifecycle Management

脚注

*1:自身のものではないアカウントに設定されているパスワードを特定する攻撃。特定したパスワードを使用することにより、当該アカウントの所有者になりすまし不正にログインすることなどが可能になる

*2:例えば、同一アカウントへの一定回数以上の認証試行失敗が続いた場合、一定時間または解除するまでそのアカウントを用いた認証を拒否する設定

*3:攻撃者がパスワードファイルにアクセスする可能性を考慮し、多層防御の観点から、通常はパスワードをハッシュ値に変換したものを保管します。もし、パスワードを平文で保管していた場合は、攻撃者にパスワードファイルを窃取されると直接パスワードそのものが攻撃者の手に渡ってしまうため、インシデントがより重いものになります。

*4:例えば、様々なサイトから漏洩したパスワードなど、パスワードとして利用される頻度の高い単語を集めたリスト

*5:アカウント名とパスワードに同じものが使用されているユーザアカウントは「ジョー(Joe) アカウント」と呼ばれており、攻撃者が最優先に試すとされているため、パスワードポリシーで登録を拒否することが一般的です。