考えられるすべての組合せを総当たりで試してパスワードを破る攻撃。
ブルートフォース攻撃(総当たり攻撃)とは、考えられるすべての組合せを総当たりで試してパスワードを破る攻撃のことです。ブルートフォース(brute force)は「力ずく」という意味で、頭を使わず端から全部試す点が特徴です。
身近な例で考えると、ダイヤル式の南京錠を000、001、002…と全部回して開けるのと同じです。番号が分からなくても、根気よく全パターンを試せばいつか必ず開きます。人間には骨が折れますが、コンピュータは1秒間に膨大な回数を試せます。
上のツールで▶ボタンを押すと、攻撃者が000から順に候補を入力し、正解と一致するまで試行回数を積み上げていく流れを確認できます。
ブルートフォースは、システムが「入力が正解かどうかを判定してくれる」ことを利用します。攻撃者は当たり外れを考えず、ただ全候補を順に入力するだけで、いつかは正解にたどり着きます。
試行回数は次の式で見積もれます。
・試行回数 = 文字種 ^ パスワード長
・数字3桁なら 10^3 = 1,000通り
・英小文字4桁なら 26^4 = 約46万通り
・英数字記号8桁なら膨大で、現実的な時間では破れない
ポイントは、桁数が1つ増えるだけで試行回数が文字種の倍数で膨らむ(指数的に増える)ことです。だから「短いパスワードは危険、長いパスワードは安全」と言われます。上のツールの進捗バーで、全1000通りのうちどこまで進んだかを確認してみてください。
ブルートフォースは「当たるまで何度でも試す」攻撃なので、対策は試行を増やしにくくする・試行を途中で止める方向で考えます。
主な対策は次のとおりです。
・アカウントロック:一定回数(例:5回)連続で失敗したら、一時的にログインを止める。総当たりを途中で打ち切れる
・長く複雑なパスワード:文字種を増やし桁数を長くして、組合せを爆発的に増やす
・多要素認証(MFA):パスワードに加えてスマホの確認コードなど別の要素も求め、パスワードだけでは突破できなくする
・ログイン試行の監視:短時間に大量の失敗があれば検知して警告・遮断する
南京錠でいえば、「何回か間違えたら一定時間ダイヤルが回せなくなる」仕組みを足すイメージです。これだけで、総当たりは現実的に成立しなくなります。なお、辞書攻撃のように「ありがちな単語」を狙う攻撃もあるため、推測されやすい単語を避けることも大切です。
ブルートフォース攻撃と似た攻撃に辞書攻撃があります。2つの違いを整理しましょう。
・ブルートフォース(総当たり):000から始まってすべての組み合わせを順に試す。必ずいつか当たるが、時間がかかる
・辞書攻撃:password・12345・qwertyなど、人がよく使いそうな単語の一覧(辞書)から試す。ヒットすれば少ない試行で突破できる
なぜ2種類必要なのか。「よく使われる単語」だけを狙う辞書攻撃は、弱いパスワードに対して非常に速く動作します。でも、完全にランダムなパスワードには歯が立ちません。そこで、辞書攻撃が失敗したあとにブルートフォースで全パターンを試すという使い分けがされます。
どちらにも共通する対策は「推測されにくい長いパスワード」と「アカウントロック」です。辞書攻撃を防ぐには辞書に載っていない組み合わせを使う、ブルートフォースを防ぐには桁数を長くして試行回数を現実的でない数まで増やすことが有効です。
なぜ桁数を増やすだけで安全になるのか。試行回数の計算式を思い出してください。試行回数 = 文字種 ^ パスワード長です。桁数(パスワード長)が増えると、試行回数は指数的(べき乗で)に増えます。
数字だけのパスワードで比べると、次のようになります。
・3桁:10^3 = 1,000通り(コンピュータで一瞬)
・4桁:10^4 = 10,000通り(1桁増えただけで10倍)
・英数字混在8桁:62^8 ≒ 218兆通り(現実的な時間では破れない)
さらに記号を加えると文字種が増え、組み合わせはさらに爆発的に増えます。たとえば記号を含む94種類の文字を使うと、8桁で約94^8 ≒ 6京(6,000兆)通りになります。「長く、文字種が多い」パスワードほど、ブルートフォースを無力化できる理由がここにあります。