InfraAcademy

InfraAcademy Blog

ブルートフォース攻撃に該当するものはどれか | 基本情報技術者試験過去問解説

| #基本情報技術者試験 #過去問解説
Linuxをブラウザで試してみる

Linux・ネットワーク・AWSを、環境構築なしで実践学習できます

こんにちは、フルスタックエンジニアのryuです。

今回の記事では、基本情報技術者試験の過去問を使いながら、ブルートフォース攻撃とは何かを解説します。

ブルートフォース攻撃は「総当たり攻撃」とも呼ばれます。

名前だけを見ると難しそうですが、考え方はシンプルです。

考えられる候補を一つずつ試し、正解を見つける。

これがブルートフォース攻撃の基本です。

パスワード攻撃の説明で見かけることが多い言葉ですが、今回の過去問では、Webサイトへのログインではなく共通鍵暗号の鍵を総当たりで探すケースが問われています。

基本情報技術者試験では、「ブルートフォース攻撃=パスワードを片っ端から試す」とだけ覚えるのではなく、候補を網羅的に試す攻撃だと理解しておくことが大切です。

この記事では、過去問を解きながら、ブルートフォース攻撃の仕組み、鍵長との関係、ログインへの総当たりとの違い、対策、科目Bのセキュリティ問題での考え方まで順番に解説します。

ブルートフォース攻撃に該当するものはどれか

今回はこちらの問題です。

共通鍵暗号の鍵を見つけ出そうとする、ブルートフォース攻撃に該当するものはどれか。

ア:一組みの平文と暗号文が与えられたとき、全ての鍵候補を一つずつ試して鍵を見つけ出す。 イ:平文と暗号文と鍵の関係を表す代数式を手掛かりにして鍵を見つけ出す。 ウ:平文の一部分の情報と、暗号文の一部分の情報との間の統計的相関を手掛かりにして鍵を見つけ出す。 エ:平文を一定量変化させたときの暗号文の変化から鍵を見つけ出す。 出典:平成29年春期 問38

答えは、です。

アでは、

鍵候補1 → 試す
鍵候補2 → 試す
鍵候補3 → 試す
...
全ての鍵候補を試す

という方法で正しい鍵を探しています。

特定の弱点や規則性を利用するのではなく、考えられる鍵を一つずつ総当たりで確認するため、ブルートフォース攻撃に該当します。

ブルートフォース攻撃とは?

ブルートフォース攻撃とは、考えられる候補を網羅的に試して、正しい値を見つけ出そうとする方法です。

Brute Forceには「力ずく」という意味があります。

暗号の仕組みをうまく分析して近道を探すのではなく、

候補A
↓
違う

候補B
↓
違う

候補C
↓
違う

...

正解するまで試す

という考え方です。

身近な例なら、4桁の暗証番号を思い浮かべると分かりやすいです。

数字4桁であれば、

0000
0001
0002
0003
...
9999

と、全ての組合せを試すことができます。

このように「候補を全部試せば、いつか正解にたどり着く」という方法がブルートフォースです。

ブルートフォース攻撃とは?

今回の問題は「パスワード」ではなく「暗号鍵」の総当たり

ブルートフォース攻撃という言葉を見ると、

「ログイン画面でパスワードを大量に試す攻撃」

を思い浮かべる方も多いと思います。

それもブルートフォース攻撃の一つです。

ただし、今回の過去問で問われているのは共通鍵暗号の鍵を探す総当たり攻撃です。

共通鍵暗号では、暗号化と復号に同じ鍵を利用します。

イメージすると、

平文
↓
鍵を使って暗号化
↓
暗号文

となります。

攻撃者が平文と暗号文の組を知っていたとします。

正しい鍵が分からない場合、候補となる鍵を一つずつ使って、

鍵候補1で暗号化
↓
暗号文が一致する?

鍵候補2で暗号化
↓
暗号文が一致する?

鍵候補3で暗号化
↓
暗号文が一致する?

と確認できます。

最終的に一致する鍵が見つかれば、その鍵が正しい可能性があります。

今回の選択肢アは、この方法を説明しています。

鍵が長いほど総当たりは難しくなる

ブルートフォース攻撃を理解するうえで大切なのが、候補の数です。

例えば、鍵が4ビットなら、考えられる値は、

0000
0001
0010
...
1111

で、全部で16通りです。

8ビットなら、

2^8 = 256通り

です。

一般に、nビットの鍵なら候補数は、

2^n

になります。

例えば、

16ビット → 65,536通り
32ビット → 約43億通り

と、鍵長が増えるほど候補数は急激に増えていきます。

ブルートフォース攻撃そのものは、

候補を全部試せばよい

という単純な方法です。

しかし、候補数が非常に多ければ、現実的な時間や計算資源では試しきれなくなります。

暗号では、この「総当たりで現実的に解読できないだけの十分な鍵空間を持つこと」が重要になります。

「全て試す」がブルートフォースを見分けるポイント

基本情報技術者試験でブルートフォース攻撃を見分けるときは、

全ての候補を試しているか

を見るのがおすすめです。

今回の選択肢アでは、

全ての鍵候補を一つずつ試して鍵を見つけ出す

と書かれています。

この時点で、ブルートフォースだと判断できます。

一方、ほかの選択肢では、

  • 数学的な関係
  • 統計的な相関
  • 入力の変化と出力の変化

などを手掛かりにしています。

これらは、暗号の性質を分析して鍵を探そうとする方法です。

候補を片っ端から全部試しているわけではありません。

「総当たりなのか、それとも暗号の性質を利用しているのか」という違いを見ると、選択肢を整理しやすくなります。

選択肢イは何が違う?

イはこちらです。

平文と暗号文と鍵の関係を表す代数式を手掛かりにして鍵を見つけ出す。

この方法では、鍵を一つずつ試しているわけではありません。

平文・暗号文・鍵の間にある数学的な関係を利用し、鍵を推測しようとしています。

つまり、

全候補を試す

のではなく、

暗号の数学的な性質を分析する

というアプローチです。

そのため、ブルートフォース攻撃ではありません。

試験では、細かな暗号解読法の名前を全て覚えていなくても、

「総当たりではない」

と判断できれば、今回の問題は解けます。

選択肢ウは何が違う?

ウはこちらです。

平文の一部分の情報と、暗号文の一部分の情報との間の統計的相関を手掛かりにして鍵を見つけ出す。

こちらも、全ての鍵候補を順番に試しているわけではありません。

平文と暗号文の間に見られる統計的な特徴を手掛かりにしています。

ブルートフォースなら、

鍵候補A
鍵候補B
鍵候補C
...

と候補そのものを順番に確認します。

ウでは統計的な性質を利用しているため、考え方が異なります。

選択肢エは差分を利用する解読

エはこちらです。

平文を一定量変化させたときの暗号文の変化から鍵を見つけ出す。

これは、入力となる平文を変化させたときに、暗号文がどのように変わるのかを分析する考え方です。

このように平文と暗号文の「差」に注目する方法は、差分解読法と呼ばれます。

これも、

全ての鍵を順番に試す

方法ではありません。

したがって、ブルートフォース攻撃ではありません。

4つの選択肢を整理しよう

今回の問題は、次のように考えると分かりやすいです。

選択肢 鍵を見つける考え方 ブルートフォースか
全ての鍵候補を一つずつ試す
数学的な関係を手掛かりにする ×
統計的な相関を手掛かりにする ×
平文と暗号文の変化を手掛かりにする ×

つまり、

「全部試す」=ブルートフォース

と考えるのが今回のポイントです。

ログインに対するブルートフォース攻撃とは?

ここまで、暗号鍵に対するブルートフォース攻撃を説明しました。

一方、Webサービスなどの認証でも総当たり攻撃は行われます。

例えば、ある利用者IDに対して、

000000
000001
000002
...

のようにパスワード候補を次々と試す方法です。

考え方は暗号鍵への攻撃と同じです。

候補を一つ試す
↓
失敗

次の候補を試す
↓
失敗

さらに次を試す
↓
成功するまで繰り返す

ただし、実際のWebサービスではネットワーク通信や認証処理が必要になるため、暗号鍵を手元で解析するケースとは条件が異なります。

ログイン画面への攻撃では、

  • ログイン試行の制限
  • 一時的なロックアウト
  • レート制限
  • 多要素認証
  • 不審な認証試行の監視

などによって対策できます。

パスワードリスト攻撃との違い

前回の記事で解説したパスワードリスト攻撃との違いも確認しておきましょう。

ブルートフォース攻撃では、基本的にパスワードを推測します。

例えば、

ID:user@example.com

000000
000001
000002
...

のように候補を試します。

一方、パスワードリスト攻撃では、別サービスなどから流出した、

ID + パスワード

の組合せを利用します。

攻撃 特徴
ブルートフォース攻撃 考えられる候補を総当たりする
辞書攻撃 よく使われる単語などを候補にする
パスワードリスト攻撃 流出したID・パスワードの組合せを別サービスで試す
リバースブルートフォース攻撃 パスワードを固定し、多数のIDへ試す

どれも認証を突破しようとする攻撃ですが、方法が違います。

基本情報技術者試験では、

「攻撃者が何を持っていて、何を変えながら試しているのか」

を見ると判断しやすくなります。

あわせて読みたい:パスワードリスト攻撃の手口に該当するものはどれか

ブルートフォース攻撃への対策

ブルートフォース攻撃への対策は、「何を総当たりされているのか」によって考え方が変わります。

暗号鍵への総当たりなら十分な鍵長を使う

今回の過去問は、暗号鍵へのブルートフォース攻撃です。

暗号方式を利用する場合は、現在推奨されている十分な強度を持つ暗号アルゴリズムや鍵長を選ぶことが重要です。

鍵候補が少なければ総当たりが現実的になります。

一方、十分に大きな鍵空間があれば、全候補を試すために必要な計算量も大きくなります。

試験では、

鍵長が長くなるほど総当たりに必要な候補数が増える

という関係を理解しておきましょう。

ログインパスワードは長く、サービスごとに異なるものを使う

Webサービスの認証では、推測されにくいパスワードを利用することが大切です。

また、パスワードリスト攻撃の対策も考えると、同じパスワードを複数サービスで使い回さないことも重要です。

一つのサービスから認証情報が漏えいしても、ほかのサービスで同じパスワードを使っていなければ被害の拡大を抑えられます。

多要素認証を使う

多要素認証も重要な不正ログイン対策です。

パスワードだけなら、

ID + パスワード
↓
ログイン

ですが、多要素認証なら、

ID + パスワード
      +
別の認証要素
↓
ログイン

となります。

仮にパスワードを突破されたとしても、別の認証要素が必要であれば、不正ログインのリスクを下げられます。

ログイン試行を無制限に許可しない

Webサービス側では、ログイン試行を無制限に許可しないことも重要です。

例えば、

  • 一定時間に試せる回数を制限する
  • 連続して失敗した場合に一時的な制限を行う
  • 異常なアクセス元を検知する

などの対策があります。

攻撃者が1秒間に大量の候補を試せる状態と、試行回数を制御している状態では、攻撃の難しさが大きく変わります。

認証ログを監視する

ブルートフォース攻撃が行われると、大量のログイン失敗が記録されることがあります。

例えば、

10:00:01 login failed
10:00:02 login failed
10:00:02 login failed
10:00:03 login failed
10:00:03 login failed
...

のような状態です。

普段とは明らかに異なる認証失敗が急増していれば、不正なログイン試行を疑うきっかけになります。

セキュリティでは、「攻撃を完全に防ぐ」だけではなく、異常を早く検知することも重要です。

科目Bでは「攻撃名」だけでなく状況から考える

今回の問題は、旧試験制度の知識問題です。

現在の基本情報技術者試験では、科目Bでも情報セキュリティが出題されます。

科目Bでは、

「ブルートフォース攻撃とはどれですか?」

と単純に聞くだけではなく、あるシステムで起きている状況を読んで、

「何が起きているのか」 「どこに問題があるのか」 「どの対策が必要なのか」

を考える問題があります。

例えば、

同じ利用者IDに対して
数秒間に大量のログイン失敗
↓
パスワードだけが次々変更されている

というログがあれば、ブルートフォース攻撃を疑えます。

一方、

多数のIDに対して
同じパスワードでログイン試行

なら、リバースブルートフォース攻撃の可能性があります。

また、

流出したIDとパスワードの組合せを
別サービスでも試している

なら、パスワードリスト攻撃です。

このように、

用語 → 意味

だけで覚えるのではなく、

状況 → 攻撃手法 → 対策

までつなげて考えることが、科目Bのセキュリティ対策では大切です。

Giji Academyで科目Bのセキュリティを実践的に学ぶ

セキュリティ問題は、単語帳のように用語を覚えるだけでは、長い問題文になったときに迷いやすいと思います。

ブルートフォース攻撃も、

ブルートフォース
=
総当たり

だけで終わらせるのではなく、

何を総当たりしている?
↓
暗号鍵?
ログインパスワード?
↓
攻撃が成立しやすい理由は?
↓
どんな対策が必要?

まで考えられるようになると理解が深まります。

Giji Academyでは、基本情報技術者試験の科目Bに関連するセキュリティ問題を、ネットワークやサーバーの基礎から段階的に学習できます。

擬似言語だけではなく、

  • ネットワーク
  • サーバー
  • 認証
  • 暗号
  • 攻撃手法
  • セキュリティ対策

などを、実際の状況と結びつけながら学べるようにしています。

「科目Aのセキュリティ用語は覚えられるけど、科目Bの文章問題になると分からなくなる」という方は、攻撃の流れや対策までセットで考える練習をしてみてください。

Giji Academyで科目Bの学習を始める

登録不要で無料体験できます。

過去問解説まとめ

今回の記事では、次の問題について解説しました。

共通鍵暗号の鍵を見つけ出そうとする、ブルートフォース攻撃に該当するものはどれか。

ア:一組みの平文と暗号文が与えられたとき、全ての鍵候補を一つずつ試して鍵を見つけ出す。 イ:平文と暗号文と鍵の関係を表す代数式を手掛かりにして鍵を見つけ出す。 ウ:平文の一部分の情報と、暗号文の一部分の情報との間の統計的相関を手掛かりにして鍵を見つけ出す。 エ:平文を一定量変化させたときの暗号文の変化から鍵を見つけ出す。 出典:平成29年春期 問38

答えは、です。

今回のポイントをまとめると、

  • ブルートフォース攻撃は候補を総当たりする方法
  • 今回の問題では共通鍵暗号の全ての鍵候補を試している
  • nビットの鍵なら候補数は2^n
  • 鍵長が大きくなるほど総当たりに必要な計算量も増える
  • ログイン認証への総当たりもブルートフォース攻撃の一種
  • パスワードリスト攻撃や辞書攻撃とは候補の作り方が違う
  • 認証では多要素認証、試行回数の制御、ログ監視なども重要

です。

基本情報技術者試験では、「ブルートフォース=総当たり」と覚えるだけではなく、

何を総当たりしているのか

まで問題文から読み取るようにしましょう。

Giji Academyでは、擬似言語に加えて、科目Bに関連するセキュリティ問題も実践的に学習できます。

Giji Academy|科目Bの擬似言語・セキュリティを学ぶ

基本情報技術者試験の過去問解説はこちらから確認できます。

基本情報技術者試験 過去問解説まとめ

より詳しくブルートフォース攻撃について知りたい方はこちらの記事もご覧ください。

ブルートフォース攻撃とは?仕組みと対策を解説

元記事で紹介していた過去問題集は旧試験制度向けです。画像・リンクはそのまま残しますが、現在受験する場合は、科目A・科目Bに対応した最新教材を利用することをおすすめします。

あわせて読みたい

Next Action

記事で読んだ内容を、講座で実装してみましょう

InfraAcademyでは、ブラウザ上でLinuxやネットワークの実践環境を使いながら学習できます。無料で始められる講座から、学習の流れを試せます。

この記事を書いた人

ryu

InfraAcademy運営 / エンジニア

エンジニア歴10年。Linux、ネットワーク、クラウドを中心に、実務で役立つインフラ技術を初心者にもわかりやすく解説しています。

X: @ryu63614894

Related

関連記事

ブログ一覧へ

Roadmap

まずはこの4講座から

ログインすれば無料で始められる講座です。気になったテーマから手を動かして学べます。

講座一覧を見る