パスワード関連の攻撃法/防御法 

本日2023年5月4日は「世界パスワードデイ」(5月1週目の木曜日)とのことなので。
パスワード関連の攻撃方法と防御方法をまとめたいと思います。

筆者の知識ベースは情報処理安全確保支援士とComptia Security+なので用語のブレ等はそれに準じています。

ちなみにIPAの10大セキュリティ脅威を見るとソーシャルエンジニアリング系が上位にあがっています。
https://www.ipa.go.jp/security/10threats/10threats2023.html
ホエーリングなども年々報告件数が挙がって来ており
経営層などを狙った「ITリテラシが低めなことが多く攻撃が成立しやすいのに漏洩時のダメージが大きい」という攻撃者にとっておいしい状況になるので、経営層含んだ組織的な意識が必要となります。

## 総当たり系
### ブルートフォースアタック
ご存じ総当たり攻撃。とあるアカウントに対して色々なパスワードを何回も何回も試行して侵入を試みる手法です。
### 辞書攻撃
総当たり攻撃ですが、一般単語などよく使われるパスワードのリストを使って試みる手法です。
### パスワードスプレー/リバースブルートフォースアタック
パスワード入力を何回も試みるのではなく、よく使われるパスワードを使って色々なアカウントにログインを試みる手法です。
3回パスワード試行でアカウントロックなどの対策を行っているサイトでも、アカウント自体を変えているので攻撃が可能になってしまいます。
### クレデンシャルスタッフィング / パスワードリスト攻撃
大手のサイトや銀行などの堅牢なサイトはパスワード漏洩対策がなされていますが、個人サイトや小規模サイト等はそうではない可能性があります。ユーザはサイト間でパスワードを使いまわしていることが多いので対策の弱いサイトでパスワードを盗んで、大手サイトや銀行サイトでログインを試みる手法です。
### 衝突攻撃・誕生日攻撃・レインボーテーブル
パスワードはデータベースでそのままの文字列ではなくハッシュ値に変換されて保存されている場合があります。
ハッシュから元の文字列への複合は不可能なのですが、別の文字列が同一ハッシュになることはあり得ます(衝突)。
誕生日攻撃は誕生日理論という、「クラスの中に同じ誕生日の人意外といるよねー」という[誕生日のパラドックス](https://ja.wikipedia.org/wiki/%E8%AA%95%E7%94%9F%E6%97%A5%E3%81%AE%E3%83%91%E3%83%A9%E3%83%89%E3%83%83%E3%82%AF%E3%82%B9)から来ているハッシュへの総当たりの俗称です。
レインボーテーブルはどの文字列だったらどのハッシュになるかのリストです。これはsalt等ムダ文字列等の冗長化を行うことで防ぐことが出来ます。
### 防御法(総当たり系まとめて)
* ユーザー側
単純なパスワードを使わない。よくある単語を使わない。サイト間で使いまわさない。
OpenIDConnect(「googleでログインする」とかのアレです。)が用意されている場合はそちらを利用する。パスワードマネージャーを利用する。二段階認証を利用する。
* サイト側
数回試行でアカウントをロックアウトする。パスワードポリシーを設ける。同一IPからの異常な回数の試行などふるまい型の検知を入れる。ログイン時に敢えて数秒の遅延処理を入れる。
二段階認証機能を提供する。OpenIDConnectを利用する。

また、覚えられるパスワードにすべきvs複雑なパスワードにすべき等も議論にあがるところですが、
米国立標準技術研究所（NIST）のSP 800-63Bの見解としては以下のようになってます。
(https://pages.nist.gov/800-63-3/sp800-63b.html  5.1.1.2 Memorized Secret Verifiers)
* 最低8文字を義務付け
* 英数だけじゃなくて空白文字とか日本語(Unicode)もいけるようにしろ
* ブラックリストにのるパスワードは弾くようにしろ
ブラックリストとは
    * 以前の漏洩で明らかになったパスワード
    * 辞書に載っている語
    * 同じ文字の繰り返し、連続文字
    * サービス名
* といいつつ
    * でもユーザーに同じ文字使えとか作成ルールを明示するな。
    * 定期的なパスワード変更は強制するな。
    * コピペで入れられるようにしろ。(パスワードマネージャー推奨しろ)
明示することによって単純化するのを避けている条文だと思われます。パスワードのスコアレートを出すのが良いとされています。(よくあるパスワード入力中に「危険」とか「安全」とか出るやつ)
結局複雑化しなくてはならないのにサイト毎にパスワードも変えなくてはならない、という時点で人間業では無理です。NIST的にもパスワードマネージャーの使用を推奨しています。
* で結局は
    * パスワードで全部守るのは無理あるからなんか別の認証と組み合わせろ

奇しくもまさにこの記事を投稿した日にGoogleがパスキーのリリースをアナウンスしました。
やはり「安全なパスワード」かつ「利便性を重視」の両立は困難なのでこのようなパスワードを利用しない仕組みを積極的に利用していくべきだと思います。

## ソーシャルエンジニアリング
ソーシャルエンジニアリングとはシステム上ではなく人間側の隙をつく手法です。
対策に根性論が入ってしまう・・・
### 攻撃方法
#### ショルダーサーフィン
あなたの同僚がパスワード打っているところを背中越しにこっそりのぞき込む手法です。
* 防御法
    * こそこそする。付箋にパスワード書かない
#### ゴミ箱あさり
現実のごみ箱でもPCのごみ箱でも有用な情報を盗む手法です。
* 防御法
    * きちんとする。ゴミ箱は空に
#### フィッシングサイト・フィッシングメール・スミッシング・ピッシング・スピアフィッシング・ホエーリング
ホンモノっぽい偽サイトを用意してログインさせてアカウントを盗んだり、ホンモノっぽい偽メールをだして情報を盗む手法です。
スミッシングはSNSのDM等、ピッシングは電話などを利用。
スピアフィッシングは特定の個人を狙った個別カスタマイズ版フィッシング。
ホエーリングは経営陣や幹部を対象に行われるスピアフィッシングです。魚釣りに対してクジラ(大物)釣り
* 気を付ける。URLを確認する癖をつける。メールのFromは偽装可能なのであんまり当てにしない、重要情報だったら当人に別個確認する。
#### 偽装
単純に詐欺行為全般のことです。セキュリティの専門家ですとか管理会社のものですとか名乗って、調べるためにはアカウントとパスワードが必要なんですーといって盗む方法です。
コンセンサス（ちゃんとしている風を装う）。緊急性（今対処しないとヤバイ！）。バイティング（めっちゃいいソフトですよ(ウィルス)）。などなど
## マルウェア系
### キーロガー・トロイの木馬
両者ともパソコン内に常駐して常駐し、情報を盗むプログラムです。これは深く語るとめちゃくちゃジャンルがあるのでこの辺で。
* 怪しいソフトは入れない。ウィルス対策ソフトとか入れる。
## 傍受系
### スニファリング(パケットスニファリング・Wifiスニファリング・ブルースナッフィング)
暗号化されていない通信を傍受します。
傍受には特別な機器など全く必要なく、オフィスのハブがスイッチングハブでなければいつでもあなたの隣のパソコンを簡単に傍受できます。
* 防御法
httpのサイトは使わない。メールはsmtpを使わない。暗号化されていないアクセスポイントは使わない。変なBluetoothペアリング設定はしない。
もはやhttpsでないサイトの方が少ないので一見「そんなん関係ねぇ」なのですが。SSLストリッピングという暗号化のダウングレード攻撃もあるので油断はできません。POODLEという有名なSSL3.0へのダウングレード攻撃が猛威を振るった時期もありました。
### 中間者攻撃(Man-in-the-Middle,Man-in-the-Browser)
通信途中に割り込んで、サーバー側には偽の情報、クライアント側にも偽の情報を渡しつつ情報を盗む攻撃です。中間者の時点で複合化や暗号化されなおされ、証明書も発行しなおすので攻撃が成立してしまったら見破るのは困難です。
* 防御法
中間者として割り込むために脆弱性のあるサイトが利用されたり、怪しいプロキシサーバーや怪しいVPNに接続させたりあとに出てくる怪しい接続をさせる等の手法が合わせて使われるので、怪しい〇〇を使うのを避ける。
サーバー側対策としては脆弱性情報に気を使ったり、各種証明書の管理をする等。
### 偽装アクセスポイント・エビルツイン
これはどちらかというとソーシャルエンジニアリングなのだろうか。
正規のWifiアクセスポイントに扮して、偽のアクセスポイントに接続させ情報を盗む方法です。
### DNSポイゾニング
DNSキャッシュに偽の情報を挿入し、ユーザーを悪意あるサイトに誘導して情報を傍受する
* 防御法
DNSSECとかDNS情報に署名を追加する。ポートのランダム化等。


他にも上げればキリがないですがこの辺で・・・
あれを抜かすとは何事だ、等ありましたらコメント欄にお願いします。