ブルートフォース
Brute Force Attack
正解が出るまですべてのパスワードや鍵の組み合わせを片っ端から試す、古典的かつ強力な「総当たり」の不正ログイン攻撃のこと。理論上、時間をかければ必ず突破できてしまう力任せな手法です。
🐾 猫で例えると?
狙ったおもちゃを仕留めるために、計算も工夫もせず、とにかく凄まじい勢いで猫パンチを連打するアメショ。「下手な鉄砲も数撃ちゃ当たる」を極限まで突き詰め、あらゆるパターンを力技で検証していくのがブルートフォースの本質です。
🐾猫あるある:IT現場の日常
- 何度も体当たりして扉の隙間をこじ開ける:パスワードや暗号鍵を割り出すために、理論上考えられるすべての文字列の組み合わせを片っ端から試す総当たり攻撃。
- ドアのレバーを無作為にガチャガチャ動かす:認証エラーによるロックアウト制限がないことを悪用し、特定の制限時間内に膨大なパターンのログイン試行を繰り返す手法。
- 正解のトーンを引き当てるまで鳴き続ける:暗号化されたデータの解析において、偶発的に正しい鍵が合致するまで膨大な計算リソースを投入して機械的にアタックし続ける処理。
💻 IT現場における「ブルートフォース」とは?
ブルートフォース(総当たり攻撃)は、ハッカーがログイン画面や暗号データに対して行う最も原始的なサイバー攻撃です。たとえば4桁の暗証番号であれば「0000」から「9999」まで、1万通りを順番にすべて入力すれば、どこかで必ず正解の番号に突き当たります。
「そんな気の遠くなる作業は現実的ではない」と思われるかもしれませんが、現代のコンピューターの処理速度は凄まじく、1秒間に何万回、何億回ものパターンを自動で試すことができます。そのため、短くて単純なパスワードは、攻撃用のプログラムにかければ数秒から数分で簡単に破られてしまうのが実態です。
⚠️ ブルートフォースの仕組みと注意点
実務においては、WebサイトのログインフォームやSSH接続のポートがこの攻撃の標的になりやすいです。攻撃をそのまま放置すると、サーバーに膨大なログイン試行リクエストが届き、CPUやネットワークに極端な高負荷がかかってシステムダウンを引き起こす原因にもなります。
強固なパスワードポリシーの必須性
パスワードの文字数を増やし、大文字・小文字・数字・記号を混ぜることで、組み合わせの総数は爆発的に増加します。解読に何百年もかかる状態にすることが、ブルートフォースに対する根本的な防御策となります。
// Node.jsでの簡易的なブルートフォース対策(アカウントロックの概念)
const loginAttempts = new Map();
function login(userId, password) {
const attempts = loginAttempts.get(userId) || 0;
// 短時間に何度も間違えている場合は処理をブロックしてリソースを守る
if (attempts >= 5) {
throw new Error("アカウントが一時的にロックされています。連続試行は拒否されます。");
}
if (verifyPassword(userId, password)) {
loginAttempts.delete(userId);
return "ログイン成功";
} else {
loginAttempts.set(userId, attempts + 1);
return "パスワードが違います";
}
} プログラム側で上記のように、同一アカウントからの連続エラーを検知して一時的にアクセスを遮断する(アカウントロック)ロジックを実装するのが、実務での標準的な対応です。
🛠️ ブルートフォースを賢く使うためのポイント
- ログイン試行回数の制限(アカウントロック): 一定回数以上ログインに失敗したアカウントやIPアドレスを自動的にブロックする仕組みを必ず導入しましょう。
- 多要素認証(MFA)の導入: パスワードが万が一総当たりで突破されても、スマホへのワンタイムパスワード送信などがあれば、不正ログインを確実に防げます。
- CAPTCHA(キャプチャ)の設置: 「私はロボットではありません」のチェックや画像認証を挟むことで、プログラムによる超高速な自動入力を物理的にシャットアウトできます。
おやつやご飯への執着がもの深く、もらえるまで怒涛の勢いでアピールを続けるアメショですが、そのなりふり構わない手数はまさにブルートフォースそのもの。人間のシステムでは、こうした「力技の連打」に屈してリソースを使い果たさないよう、回数制限や複雑なパスワードできちんとガードを固めておきたいですね。