パスワード管理
適切なパスワード管理は、現代のサイバーセキュリティの根幹をなす柱の一つですが、 弱いパスワードを作成し、複数のサービスで使い回し、安全でない方法で保存するという人間本来の 傾向のために、ほとんどの組織において依然として最も弱い環の一つであり続けています。 調査によれば、データ侵害の80%以上が漏えいした認証情報に関係しており、それは 他のサービスから漏えいしたパスワードを利用するクレデンシャルスタッフィング攻撃、ユーザーから直接 認証情報を窃取するフィッシング、あるいは弱く予測しやすいパスワードに対するブルートフォースのいずれかによるものです。 この問題の複雑さは、ユーザーが内部システム、SaaSアプリケーション、VPN、サーバー、管理 アカウントのために何十もの異なる認証情報を管理しなければならない企業環境において、指数関数的に増大し、 付箋にパスワードを書き留める、保護されていないスプレッドシートに記録する、 あるいはすべてのシステムで同じパスワードを使い回すといった、安全でない慣行を必然的に招きます。本記事では、 企業および個人のパスワード管理に対する包括的なアプローチを提示し、エビデンスに基づく複雑さ とローテーションのポリシー、エンタープライズ向けパスワードマネージャーの導入と選定、 多要素認証(MFA)への移行戦略、レート制限(rate limiting)とCAPTCHAによる自動化攻撃の防止、脅威インテリジェンス(threat intelligence)サービスを通じた漏えい認証情報の監視、 そしてパスワード衛生に関する継続的なユーザー教育を取り上げ、攻撃者によって最も悪用される 攻撃ベクトルの一つに対する堅牢な防御を構築します。
パスワード管理における課題
- 弱いパスワード:123456、password、名前+年は依然として極めて一般的
- 使い回し:複数のサービスで同じパスワードを使うことが侵害の影響を増大させる
- 安全でない保存:付箋、スプレッドシート、メール、マスターパスワードのないブラウザ
- パスワード疲れ:ユーザーは50〜100以上の認証情報を管理する必要がある
- 安全でない共有:Slack、メール、SMSによるパスワードの共有
効果的なパスワードポリシー
NISTガイドライン(更新版)
NIST SP 800-63B の推奨事項:
- [OK] 最低8文字(12文字以上を推奨)
- [OK] 64文字以上まで許可する
- [OK] 空白を含むすべての文字を受け入れる
- [OK] 複雑さの強制要件なし(大文字、記号)
- [OK] 定期的なローテーションの義務化なし(侵害された場合のみ)
- [OK] 漏えいパスワードのリストと照合する
- [OK] 貼り付けを許可する(パスワードマネージャーの利用を容易にする)
- [OK] 視覚的な強度メーターを提供する
- [X] ヒントやセキュリティ質問を使用しない
- [X] 理由なく定期的な変更を強制しない
エントロピー vs 複雑さ
# 複雑だが弱いパスワード(低エントロピー):
P@ssw0rd! # ~28 ビットのエントロピー
# 予測可能、よくあるパターン
# シンプルだが強力なパスフレーズ(高エントロピー):
correct horse battery staple # ~44 ビットのエントロピー
# より長く、予測しにくい
# より良い:パスフレーズ + 記号
correct-horse-battery-staple-2024 # ~52 ビットのエントロピー
# 覚えやすく、破られにくい
パスワードマネージャー
パスワードマネージャーは認証情報管理において最も効果的なソリューションであり、記憶することなく 各サービスごとに一意で強力なパスワードを使用できます。
エンタープライズソリューション
- 1Password Business:直感的なインターフェース、共有 vault、Travel Mode
- LastPass Enterprise:SSO 統合、集中管理されたポリシー
- Bitwarden:オープンソース、self-hosted オプション、コンプライアンス
- Keeper:Zero-knowledge、コンプライアンスレポート、特権アクセス
- Dashlane Business:VPN 同梱、ダークウェブ監視
重要な機能
- Zero-knowledge アーキテクチャ:ベンダーはパスワードにアクセスできない
- エンドツーエンド暗号化:AES-256 以上
- SSO 統合:企業ログイン向けの SAML、OAuth
- 共有 vault:チーム間での安全な共有
- 監査ログ:アクセスと変更の追跡
- 緊急アクセス:disaster recovery のための委任
- コンプライアンス:SOC 2、ISO 27001、GDPR/LGPD
攻撃に対する保護
ブルートフォース防止
# IP ごとのレート制限
- 1分あたり最大5回の試行
- 段階的なロックアウト:1min、5min、15min、1hora
- 3回失敗後に CAPTCHA
# アカウントロックアウト
- 10回の失敗試行後にアカウントをロックする
- パスワードリセットまたは管理者によるロック解除が必要
- メール/SMS でユーザーに通知する
# IP ブラックリスト
- 攻撃パターンを持つ IP をブロックする
- threat intelligence feeds と統合する
- 既知の企業 IP をホワイトリストに登録する
クレデンシャルスタッフィング対策
- MFA 必須:第2要素なしでは漏えいした認証情報を無効化する
- 侵害監視:HaveIBeenPwned API、SpyCloud
- 異常検知:異常な地理的位置からのログイン、新しいデバイス
- ボット検知:reCAPTCHA、行動分析
- セッション管理:ログイン時に古いセッションを無効化する
MFA の実装
# 強度別の MFA 手法(最も安全なものから最も安全でないものへ)
1. Hardware tokens (FIDO2/WebAuthn - YubiKey)
- フィッシング耐性あり
- SMS/メールの傍受なし
2. Authenticator apps (TOTP)
- Google Authenticator, Microsoft Authenticator
- オフライン、SMS より安全
3. Push notifications
- Duo Push, Microsoft Authenticator Push
- 便利だが MFA fatigue の影響を受けやすい
4. SMS (可能なら避ける)
- SIM swapping attacks
- 傍受の可能性あり
- 何もないよりはましだが、理想的ではない
漏えい認証情報の監視
# HaveIBeenPwned API Integration
import requests
def check_password_breach(password):
# SHA-1 hash
sha1 = hashlib.sha1(password.encode()).hexdigest().upper()
prefix = sha1[:5]
suffix = sha1[5:]
# k-Anonymity: プレフィックスのみ送信
url = f"https://api.pwnedpasswords.com/range/"
response = requests.get(url)
# Check if suffix in results
for line in response.text.split('\n'):
hash_suffix, count = line.split(':')
if hash_suffix == suffix:
return True, int(count)
return False, 0
# パスワードが侵害されている場合はリセットを強制する
is_pwned, count = check_password_breach(user_password)
if is_pwned:
force_password_reset(user)
notify_user(f"パスワードが 件の侵害に出現しています")
サービスアカウントと API キー
- シークレット管理:HashiCorp Vault、AWS Secrets Manager
- 自動ローテーション:API キー/パスワードのスクリプトによるローテーション
- 最小権限:必要最小限の権限
- 監査証跡:シークレットへのアクセスログ
- 有効期限:TTL 付きのキー、オフボーディング時の失効
ユーザー教育
- オンボーディング時の必須トレーニング
- 定期的なフィッシングシミュレーション
- パスワードマネージャー導入キャンペーン
- ポリシーに関する明確なコミュニケーション
- 良い慣行に対する報酬(ゲーミフィケーション)
最終的な推奨事項
集中管理されたポリシーを備えた必須の企業向けパスワードマネージャー(1Password、Bitwarden)を 導入してください。ユニバーサル MFA を有効化します——ユーザーには TOTP アプリ、管理者には hardware tokens を使用します。HaveIBeenPwned と照合して認証情報を監視し、プロアクティブにリセットを強制してください。 NIST ポリシーを採用してください:強制ローテーションのない長いパスワード、侵害データベースとの照合。 SMS による MFA を段階的に廃止し、TOTP/FIDO2 へ移行してください。
