WEB

パスワードを守ろう!サイトに対する「総当たり攻撃」の現状と対策まとめ

パスワードを守ろう!サイトに対する「総当たり攻撃」の現状と対策まとめ

どうもコンニチワ、セキュリティコンサルタント、モリイさんです。

各種サイトの運営者の方々は、日夜セキュリティ対策に頭を悩ませていると思います。
そこで、今日は最近巷でもニュースになっている「総当たり攻撃」、およびその派生型の攻撃手法と、それに対する私なりの対策をまとめてみました。

サイト運営者だけでなく、利用者の方々でも、安全にサイトを利用するため、最低限のルールは知っておいたほうが良いのではと思います。

それでは、はじめます。

主な攻撃の種類

1. 総当たり攻撃(ブルートフォースアタック)

総当たり攻撃とは、暗号や暗証番号などで理論的にありうるパターンをすべてを入力し、解読する暗号解読法です。

すなわち、人間による操作では不可能な、膨大な回数の計算をコンピュータにまかせ、時間の許す限りパスワードの検証等を行う行為を指します。

この方法は、時間的制約が無ければ確実にパスワードをクラックできます。

イメージとしては、自転車のチェーンロックやトランクの番号合わせ式錠を、全ての番号の組み合わせ(4桁なら0000から9999まで)について片っ端から試す方法と同じで、全部の組み合わせを試せば理論的にはいつか正解にたどり着く、というわけです。

例えば、解読に要するとされる期間を例示しますと、

8文字の大小英数字および記号を含むパスワード
高性能パーソナルコンピューターで23年間、コンピュータ・クラスターで2.25年間、スーパーコンピューターで83.5日
8文字の大小英数字を含むパスワード
高性能パーソナルコンピューターで253日間、コンピュータ・クラスターで25.25日間、スーパーコンピューターで60.5時間
6文字の大小いずれかの英字だけのパスワード
Pentium 100MHzのPCで5分間~8.5時間

なお、パスワードの保管に脆弱性がある場合は、数分で突破される場合があるので注意してください。

※なお、参照した解読検証は2009年に行われたものであり、2014年現在においてはパソコンの性能が向上していることや、攻撃者の攻撃技量も向上していることで、上記期間よりもさらに短い時間で解読される恐れがきわめて高い状況です

技術的には程度が低く、スクリプトキディ(プログラム・スクリプトを悪用するハッカー)でも実行可能であるため、この方法を使う攻撃者は多く、完全に防ぐことは難しいでしょう。

2. パスワードリスト攻撃

パスワードリスト攻撃とは、いろいろな場所で入手した他サイトのIDとパスワードの一覧(リスト)を使い、攻撃対象サイトへログインを試行する攻撃方法のことです。「リスト型攻撃」「リスト型アカウントハッキング」などとも呼ばれます。

これは、「ユーザがIDとパスワードを使いまわしているのではないか」との推測のもとに実行されます。

単純な総当たり攻撃とは異なり、既に利用されているIDとパスワードを用いて攻撃を行うので、攻撃者は効率を上げることができます。総当たり攻撃と異なり、攻撃に要する時間はさまざまです。

特徴として、

  • リストの精度によって攻撃の時間が変動
  • 個人のパーソナリティが割れたり、特定のサイトから個人情報が漏れたりした際に、他サイトでも同一のログインID/パスワードを利用する傾向にある人は高い確率で解析可能

であることが挙げられます。

例えば、親しい友人を想像してみてください。その友人が多様するフレーズ、日記の内容、ブログの話題などが公開されていれば、攻撃者はそれを見ます。その友人が犬好きであると仮定して、IDに犬種にまつわる文字列を使用している場合、同様にパスワードも犬種にまつわる文字列である確率が高いと仮定されるでしょう。

このとき、攻撃者がリストから犬種にまつわる組み合わせに絞り込んで攻撃に使用することで、セキュリティが突破されるという可能性もあります。メモを盗み見たり、本人の口からパスワードを聴き出したりなどのハッキング手法をソーシャルハッキングといいますが、それと相通じる点があるとわかるでしょう。

3. リバースブルートフォース攻撃

リバースブルートフォース攻撃とは、総当たり攻撃の変形です。通常の総当たり攻撃(ブルートフォースアタック)は、IDを固定し、パスワードをいろいろ試す、という攻撃方法であるのに対し、リバースブルートフォースアタックは、パスワードを固定し、IDをいろいろ試す、という攻撃です。

特徴として、ユーザが任意のIDやパスワードでログインできるサイトは、比較的容易に突破可能です。これは、「ニックネームをIDの文字列に利用している傾向がある」「複数のブログ等でプロフィールに一致する内容が存在する」などの理由で、IDが想像しやすいからです。

主な対策方法

サイト管理者がやるべきこと

サイト管理者がやるべきことは以下の5つです。

a. パスワードの強度チェッカー機能を提供する

IDやパスワードがユーザ任意で設定できるのであれば、ユーザへのID/パスワードの強度チェッカー機能を提供します。例えば、パスワードの桁数制限、大文字と小文字を含める、数字が入る、記号が入る、連続する文字や数字はダメ、などにより、強度を判定、危険であればその旨を注意します。

b. ログインの試行回数を制限する

こちらは、例えば、一定時間の間に同一IPや同一セッションからの訪問に対して制限をかけるなどすることです。ルールの例としては、

  • n回までリトライを許可する
  • 違反した場合、n分間またはn秒間ロックする
  • さらに違反した場合、n回ロックされるとn時間またはn分間ロックする
  • n分間またはn時間でリトライ数をリセットする

などのルールを組み合わせて使います。さらに、ログインの試行回数が一定試行回数に達した場合、多段階認証という、追加の認証を実施する(画像認証、本人を特定するために必要となる秘密の回答など)ことも効果的です。

c. 一定の速度以上でのID/PASSWORD試行を禁止する

例えば、1秒間に1回までの試行までしか許さない、などの制限を加えることで、ツールによる試行を排除します。

d. 一定期間経過によるIDまたはパスワードの変更を促す

既に銀行のサイトなどでは行われている対策です。ユーザの自発性に任せず、サイト運営者が自らパスワードの変更を促しましょう。また、実施の際は、難解なID/パスワードを用いるよう忠告することが必要です。

e. アクセス元を制限する

海外からのアクセスなど、攻撃の可能性があるものを、あらかじめ排除してしまうという方法もあります。既知のブラックリストIPを流用して、そのIPからの接続をそもそも制限することは、有効な事前対策方法のひとつでもあります。

が、昨今は国をまたいでのグローバルサイトも増え、国外の見知らぬIPからの接続だからと言って接続制限を行うと、一般の利用者がログインできないなどの二次的損害も発生しますので、制限は明らかな異常接続のあったIPに限る、というのも手です。

個人、サイト利用者がやるべきこと

個人、サイト利用者がやるべきことは以下の2つです。

a. ID/パスワードの文字列を長く設定する

ログインIDやパスワードを任意で設定できるのであれば、ID/パスワードの文字列を長く設定し、大小英数字および記号を含む文字列を規則性なく組み合わせることが望ましいです。

サイトにより一部記号などの入力やID/PASSWORDに利用することを制限しているところもありますが、できれば自分でパスワードを作るのではなく、KeePassなどのパスワード管理ソフトで、コンピュータによるランダム生成を利用するのが望ましいです。

b. パスワードは利用サイト毎に分ける

同一のパスワードを使いまわしていると、パスワードを破られる確率が格段に上がります。また、情報漏洩などがあった際に、全てのサイトのパスワードが知られてしまう、ということになりますので、パスワードの使い回しは厳禁です。

まとめ

多段階認証の採用や、ログインの施行回数制限などは、サイトのリリース当初においては極めて少ない施策だと思われます。しかし、セキュリティ面を考えれば、必須と言ってもいいでしょう。昨今では、比較的容易に自サイトにも組み込める認証技術も増えてきているため、独自で構築する手間を省くならば、そのような外部ツールを利用するのもひとつの手です。

本来であれば、サイト利用者1人1人がサイト毎にID/パスワードを使い分け、さらにできるだけ長い文字列をランダムに組み合わせて管理することを心がけることで、自分のデータの安全を守ることが望ましいので、「セキュリティに対するユーザ教育」も、同時に重要なのではないかと思っています。

例えば最近ではLINEが、「パスワードを変えた人にはスタンプをプレゼントする」などの施策を行っており、セキュリティを気にするユーザに対するインセンティブを付与する、ということを行っていますが、かなり効果的な施策だと思いました。

この記事を参考に、安全なサイト運営をしていただければ幸いです。それでは、また。

この記事を書いた人

モリイ
モリイ 外部ライター 東京
食とサーバの安全・安心を目指して奮闘中。WordPressセキュリティサービスKYUBIを運営しています。CMSとWEBサーバのセキュリティ関連記事を中心に書きます。

形態模写と利きコーラが得意技 。 好きな駅は東京駅、好きな車両は西武30000系 。10年間で40キロ太ったため現在ダイエット中。10か月で98キロ→58キロに挑戦をしようと思います、明日から・・・