1. ホーム
  2. 記事一覧
  3. 【図解あり!】辞書攻撃の危険性と安全なパスワードの作成、管理方法を解説!

2023.02.26

【図解あり!】辞書攻撃の危険性と安全なパスワードの作成、管理方法を解説!

こちらの記事では、辞書攻撃(Dictionary attack)について解説します。辞書攻撃は、主にWebサービスやシステムのログイン機能で扱われる、パスワードを特定するために行われるサイバー攻撃の一種です。

辞書攻撃とは何か

辞書攻撃とは、パスワードに用いられやすい文字列や数値列をあらかじめ「辞書」として用意しておき、その辞書を使用してパスワードを特定する手法のことで、Dictionary attackなどとも表現されます。用意した辞書の内容を順番に試していくことで、パスワードの特定を目的に攻撃が行われます。

ここで言う辞書とは、普通の英和辞典などではなく、パスワードの候補として利用されがちな単語を辞書として作成し、データ化しておいたもののことを言います。辞書攻撃は、パスワードが単純で予測可能な場合に非常に効果的な攻撃手法であり、サイバーセキュリティに対する脅威の一つです。

攻撃は自動化ツールを使用して行われる

辞書攻撃は、多くの場合、自動化ツールを使用して行われます。ツールの代表的なものとしては、Hydraが挙げられます。このツールを使用し、攻撃者は作成した辞書を元に、順番に一つずつパスワードの特定を試みます。このようなツールがあれば、ある程度専門的な知識がない状態でも攻撃することが可能なため、比較的難易度が低いと言えるでしょう。

インフラ学習サイトのEnvaderでは、Liuxの基礎やデータベースの基礎を学ぶだけではなく、ブルートフォース攻撃を行うためのツールの一つとしてご紹介したHydraを用いて、ブルートフォース攻撃や辞書攻撃などを仮想的に体験することができる環境をご提供しています。

https://envader.plus/course/3/scenario/1040

パスワードを狙った攻撃には複数の種類がある

辞書攻撃の他にも、ブルートフォース攻撃リバースブルートフォース攻撃パスワードスプレー攻撃など、パスワードを狙った攻撃は複数存在します。中でもブルートフォース攻撃は総当たり攻撃とも呼ばれ、広く知られた攻撃手法です。

ブルートフォース攻撃については以下の記事で解説しています。

https://envader.plus/article/67

辞書攻撃とブルートフォース攻撃の違いとは

辞書攻撃とブルートフォース攻撃は、どちらもログイン機能に対する攻撃手法ですが、攻撃の方法には若干の違いがあります。その違いと特徴は以下のとおりです。

辞書攻撃の特徴

辞書攻撃は、利用者が使いそうなパスワードを辞書化しておくため、ブルートフォース攻撃に比べてパスワードの特定にかかる時間を削減することができると言われています。特に、passwordやzxcvbn(キーボードの配列)など単純なパスワードを使用している場合、比較的容易にパスワードが特定されてしまう可能性があります。

ブルートフォース攻撃の特徴

一方、ブルートフォース攻撃は総当たり攻撃とも呼ばれ、辞書攻撃に比べて、力技なイメージがあります。いつかはパスワードを特定できる可能性があるものの、長く複雑なパスワードに対しては特定に時間がかかってしまいます

全ての文字の組み合わせを試行しパスワードを特定しようとするため、パスワードの長さや複雑さが高い場合、攻撃に必要な時間が膨大になり特定が困難になります。

以上の点を踏まえると、辞書攻撃は事前に準備をしておき計画的に攻撃を進めるタイプ、ブルートフォース攻撃は無造作に攻撃を進めるタイプと言えます。

辞書攻撃への対策方法

辞書攻撃への対策方法は、私たちユーザーが行うべきものと、システム側で行うものの2つに分けられます。以下に、ユーザー側とシステム側で考えられる対策方法をご紹介します。

ユーザー側の対策

  • パスフレーズを使用し、複雑でも覚えやすいパスワードを作成する。(passwordなど、単純なパスワードを使用しない。)

    NISC(内閣サイバーセキュリティセンター)が作成したインターネットの安全・安心ハンドブックでは、安全なパスワードの作成には複雑さと長さが大切とされています。

    具体的には、英大文字小文字+数字+記号で10桁以上が複雑で長いパスワードとされています。ただ、自身でこのパスワードを作成する場合、考えることや覚えることが非常に難しいでしょう。この場合に効果を発揮するのがパスフレーズの利用です。

    パスフレーズとは文字列を使ったパスワードのことで、NISCのインターネットの安全・安心ハンドブックでは以下のような例があります。

    このように、自分の私生活で行なっていることなどを言語化することで、自分だけが知り得る情報を覚えやすくパスフレーズ化することができます。

    注意点として、有名な歌詞、映画や本のフレーズは推測されやすいため使用しない方が良いでしょう。

  • 1Passwordなどのパスワード管理アプリを使用する

    パスワード管理アプリを利用することで、ユーザー側のパスワード管理を簡単かつ安全に行うことができます。

    1PasswordKeeperなど多くのパスワード管理アプリがあり、無料で使えるものや月額、年額料金が発生するものがあります。登録できるパスワードの上限や対応するデバイス、OSに違いがあるため、利用する際には注意が必要です。

  • パスワードの使い回しはしない

    同じパスワードを、複数のWebサイトやアプリケーションで使い回していた場合、そのパスワードが特定されてしまえば被害は拡大してしまいます。特にGoogleやAmazonなどのパスワードが特定されてしまえば、その被害は非常に大きなものになる可能性があります。

システム側の対策

  • 一定回数以上のパスワード認証失敗時のアカウントロック

    辞書攻撃は、用意した辞書を使用し順番にパスワードの特定を試みます。そこで、キャッシュカードのように3回間違えたらアカウントをロックしてしまうなど、試行上限を決めてしまうことが有効です。

    こうすることで、短く単純なパスワードでなければ特定される可能性は非常に低くなります。ただ、何回まで試行回数を許容するかという判断は、そのサービスやアプリケーションの使いやすさなどにも関わってくるためよく検討する必要があるでしょう。

  • 多要素認証(MFA)の導入

    多要素認証(Multi-Fuctor Authentication)とは、パスワードだけではなく、他にも何かを使ってアカウントにアクセスする方法のことです。具体的には、認証の3要素である知識情報生体情報所持情報のうち、いずれか2つ以上の要素を使用して行う認証のことを指します。

    多要素認証を用いることで、パスワードだけではなく別の情報も必要になるため、より安全にアカウントを守ることができるようになります。

    認証に関する記事は次のリンクで解説しています。

    https://envader.plus/article/9

まとめ

辞書攻撃は、パスワードに用いられやすい文字列や数値列をあらかじめ「辞書」として用意しておき、その辞書を使用してパスワードを特定する手法のことです。現状、パスワードを必要とするサービスやアプリケーションが多くなり、覚えておくことが非常に困難な状況にあることは確かです。

そのため、複雑なパスワードよりも、より覚えやすい単純なパスワードを設定しがちになりますが、ブルートフォース攻撃や辞書攻撃などによりパスワードを特定されてしまう危険性が高まっているのも事実です。

今後パスワードを設定する際には一度立ち止まり、本当にこのパスワードで良いのか?を考える必要がありそうです。

【番外編】USBも知らなかった私が独学でプログラミングを勉強してGAFAに入社するまでの話

IT未経験者必見 USBも知らなかった私が独学でプログラミングを勉強してGAFAに入社するまでの話

プログラミング塾に半年通えば、一人前になれると思っているあなた。それ、勘違いですよ。「なぜ間違いなの?」「正しい勉強法とは何なの?」ITを学び始める全ての人に知って欲しい。そう思って書きました。是非読んでみてください。

「フリーランスエンジニア」

近年やっと世間に浸透した言葉だ。ひと昔まえ、終身雇用は当たり前で、大企業に就職することは一種のステータスだった。しかし、そんな時代も終わり「優秀な人材は転職する」ことが当たり前の時代となる。フリーランスエンジニアに高価値が付く現在、ネットを見ると「未経験でも年収400万以上」などと書いてある。これに釣られて、多くの人がフリーランスになろうとITの世界に入ってきている。私もその中の1人だ。数年前、USBも知らない状態からITの世界に没入し、そこから約2年間、毎日勉学を行なった。他人の何十倍も努力した。そして、企業研修やIT塾で数多くの受講生の指導経験も得た。そこで私は、伸びるエンジニアとそうでないエンジニアをたくさん見てきた。そして、稼げるエンジニア、稼げないエンジニアを見てきた。

「成功する人とそうでない人の違いは何か?」

私が出した答えは、「量産型エンジニアか否か」である。今のエンジニア市場には、量産型エンジニアが溢れている!!ここでの量産型エンジニアの定義は以下の通りである。

比較的簡単に学習可能なWebフレームワーク(WordPress, Rails)やPython等の知識はあるが、ITの基本概念を理解していないため、単調な作業しかこなすことができないエンジニアのこと。

多くの人がフリーランスエンジニアを目指す時代に中途半端な知識や技術力でこの世界に飛び込むと返って過酷な労働条件で働くことになる。そこで、エンジニアを目指すあなたがどう学習していくべきかを私の経験を交えて書こうと思った。続きはこちらから、、、、

note記事3000いいね超えの殿堂記事 今すぐ読む

エンベーダー編集部

エンベーダーは、ITスクールRareTECHのインフラ学習教材として誕生しました。 「遊びながらインフラエンジニアへ」をコンセプトに、インフラへの学習ハードルを下げるツールとして運営されています。

RareTECH 無料体験授業開催中! オンラインにて実施中! Top10%のエンジニアになる秘訣を伝授します! RareTECH講師への質疑応答可

関連記事