0Pricing
Security+ Academy · レッスン

パスワードポリシーと多要素認証

強力なパスワードの要件、MFAの認証要素(知識・所持・生体情報)、および要素を重ねることでアカウント侵害のリスクが大幅に低下する理由を理解します。

「パスワードポリシーと多要素認証」はCoddyKit上の無料Security+ Academyレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはSecurity+ Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Security+ Academyコースには全4レッスンが含まれています。

パスワード:最も弱いリンク

パスワードは、最も頻繁に侵害されている認証メカニズムであるにもかかわらず、依然として最も一般的に使われています。攻撃者は、フィッシング、クレデンシャルスタッフィング(漏洩した認証情報の使い回し)、総当たり攻撃、キーロガーなどによってパスワードを盗みます。攻撃者に気付かれないままパスワードを取得される可能性がある場合、「強力な」パスワードでも防御効果は限定的です。パスワードポリシーは、複雑さや変更頻度に関する最低要件を定めてリスクを低減しますが、最も効果の大きいセキュリティ改善策は、2つ目の要素を追加することです。パスワードを知っているだけでは、アクセスできなくなるためです。

パスワードの複雑さに関する要件

効果的なパスワードの複雑さに関するポリシーでは、パスワードを解読しにくくするための最低基準を定めます。従来の要件には、最小長(12~16文字以上。複雑さよりも長さが重要です)、使用する文字種(大文字、小文字、数字、記号)の指定、一般的なパスワード(パスワード辞書に載っているもの)の禁止、パスワード内でのユーザー名や組織名の使用禁止などがあります。2017年に更新されたNIST SP 800-63Bのガイドラインでは、恣意的な複雑さのルールよりも長さを優先し、頻繁な変更を要求するのではなく、漏洩した認証情報のデータベースと照合することが推奨されています。

# Check if a password appears in known breach databases
# NIST recommends this approach vs forced periodic rotation

# Example: Using Have I Been Pwned (HIBP) API
# Hash the password first (k-anonymity model - sends only first 5 chars of SHA-1)
echo -n 'mysecretpassword' | sha1sum
# Returns: e5e9fa1ba31ecd1ae84f75caaa474f3a663f05f4  -

# Send first 5 chars to HIBP API:
# GET https://api.pwnedpasswords.com/range/E5E9F
# Response includes suffix of any matching hashes
# If found: this password is compromised - reject it

NIST SP 800-63Bによる現代的なパスワード指針

NIST SP 800-63B(デジタル・アイデンティティ・ガイドライン)では、パスワードに関するベストプラクティスが大幅に改訂されました。主な更新点は次のとおりです。侵害の証拠がない限り、定期的な変更を要求しない。強制的な変更は、ユーザーに予測可能な変更(Password1! → Password2!)をさせる原因になります。作成時に漏洩データベースと照合し、入力中のパスワードをユーザーが確認できるようにする。最大64文字の長いパスフレーズを許可する。予測可能なパターンを生む恣意的な複雑さのルールを廃止する。複雑さだけに頼るのではなく、総当たり攻撃を防ぐためにアカウントのロックアウトまたはスロットリングを実装する。

3種類の認証要素

認証では、3種類の要素のうち1つ以上を使用します。知っているもの(知識要素):パスワード、PIN、秘密の質問、パスフレーズ。所持しているもの(所持要素):物理トークン、認証アプリを搭載したスマートフォン、スマートカード、ハードウェアキー(YubiKey)。本人そのもの(生体要素):指紋、網膜スキャン、顔認証、声紋、行動バイオメトリクス。4つ目のカテゴリとして、いる場所(位置情報)が加えられることもあります。2つ以上のカテゴリから要素を使うことを多要素認証(MFA)と呼びます。同じカテゴリの要素を2つ使う場合(パスワードを2つ使うなど)は、MFAではありません。

MFAが非常に効果的な理由

多要素認証(MFA)は、利用できるセキュリティ対策の中でも、特に効果の大きいものの1つです。Microsoftの調査によると、MFAによってアカウント侵害攻撃の99.9%を阻止できます。その理由は、フィッシングや認証情報の窃取によって攻撃者が入手できるのは通常「知っているもの」(パスワード)だけであり、2つ目の要素(スマートフォンに届くワンタイムコードやハードウェアキー)まで入手することは難しいためです。ユーザーのパスワードが漏洩データベースで公開されていても、MFAが有効になっていればアカウントは保護されます。MFAを導入した組織が、認証情報を利用したアカウント乗っ取りを含む侵害報告に登場することはほとんどありません。

SMS OTPとその弱点

SMSワンタイムパスワード(OTP)は、最も広く導入されているMFA方式です。テキストメッセージで6桁のコードを送信します。MFAを使わないよりは安全ですが、明らかな弱点があります。SIMスワッピング攻撃では、攻撃者が被害者になりすまして携帯電話会社に連絡し、電話番号を自分のSIMに移して、以後のOTPコードを傍受します。SS7プロトコルの脆弱性では、電話網のシグナリングプロトコルに既知の欠陥があり、SMSを傍受できます。リアルタイムフィッシングでは、高度なフィッシングプロキシがOTPをリアルタイムで中継し、OTPによる保護を回避します。NIST SP 800-63Bでは、SMS OTPの扱いを「制限付き認証器」に限定しています。認証アプリやハードウェアトークンが推奨されます。

TOTP:時間ベースのワンタイムパスワード

TOTP(Time-Based One-Time Passwords)はRFC 6238で標準化されており、共有秘密情報と現在時刻から6桁のコードを生成します。Google Authenticator、Authy、Microsoft AuthenticatorなどのアプリがTOTPを実装しています。コードは30秒ごとに変わり、1回の認証試行でのみ有効です。SMS OTPとは異なり、TOTPは電話網を通らないため、SIMスワッピング攻撃やSS7攻撃の影響を受けません。共有秘密情報はセットアップ時にQRコードなどで一度だけ交換され、認証アプリに保存されます。そのため、コードを生成するには登録済みデバイスへの物理的なアクセスが必要です。

# TOTP algorithm (RFC 6238) conceptual implementation
import hmac, hashlib, time, struct, base64

def totp(secret_b32, digits=6, interval=30):
    # Decode the base32 secret
    secret = base64.b32decode(secret_b32, True)
    # Time counter: number of 30-second intervals since epoch
    counter = int(time.time()) // interval
    # HMAC-SHA1 of counter with secret
    msg = struct.pack('>Q', counter)
    digest = hmac.new(secret, msg, hashlib.sha1).digest()
    # Dynamic truncation to get 6 digits
    offset = digest[-1] & 0xf
    code = struct.unpack('>I', digest[offset:offset+4])[0] & 0x7fffffff
    return str(code % (10**digits)).zfill(digits)

FIDO2とWebAuthn:フィッシングに強いMFA

FIDO2(Fast Identity Online 2)と、そのWeb実装であるWebAuthnは、現在利用できる中で最もフィッシングに強い認証標準です。FIDO2ではデバイスレベルで公開鍵暗号方式を使用します。認証器(YubiKeyのようなハードウェアキーや、Windows Helloのようなデバイスの生体認証)が、デバイスの外部に出ることのない秘密鍵を保存します。認証は特定のオリジン(Webサイト)に暗号学的に結び付けられるため、フィッシングの影響を受けません。ユーザーが偽サイトに誘導されても、オリジンが一致しないため認証チャレンジは失敗します。FIDO2は、高セキュリティ認証のゴールドスタンダードです。

ハードウェアトークン:HOTPとスマートカード

物理ハードウェアトークンは、スマートフォンに依存しない「所持しているもの」を提供します。HOTP(HMAC-based OTP)はRFC 4226で標準化されており、カウンターと共有秘密情報からコードを生成します。ボタンを押すたびにカウンターが増加します。TOTPとは異なり、HOTPのコードは時間によって期限切れになりませんが、順番どおりに使用する必要があります。スマートカード(米国政府職員が使用するPIVカードなど)は、改ざん耐性のあるハードウェアに秘密鍵を保存し、PINでロックを解除します。これにより、「所持しているもの」(カード)と「知っているもの」(PIN)を組み合わせます。スマートカード認証は、高セキュリティ環境における特権アクセスの標準です。

パスワードマネージャー:人に起因する問題の解決

パスワードマネージャーは、パスワードを使い回してしまう人間の傾向に対処し、サイトごとに一意でランダムなパスワードを生成して保存します。マスターパスワードで、すべての認証情報を含む暗号化された保管庫のロックを解除します。エンタープライズ向けパスワードマネージャー(1Password Teams、Bitwarden Business、CyberArk)には、ポリシーの一元適用、監査ログ、安全な共有、緊急アクセスなどの機能が追加されています。セキュリティチームは、パスワードマネージャーの導入を積極的に推奨または義務付けるべきです。セキュリティ(一意のパスワードをどこでも使用できる)と使いやすさ(何十個ものパスワードを覚える必要がない)の両方を改善できるセキュリティ対策は、ほとんどありません。MFAと組み合わせることで、パスワードマネージャーは認証情報を利用したアカウント侵害を大幅に減らします。

アカウントロックアウトとスロットリング

アカウントロックアウトは、ログインに一定回数失敗するとアカウントを無効にし、総当たり攻撃を防ぎます。一般的なポリシーでは、3~10回のログイン失敗でアカウントをロックし、ロック期間は一定時間(30分)から管理者による解除が必要な設定までさまざまです。スロットリングは、より緩やかな代替策です。アカウントをロックするのではなく、ログイン試行の間隔を段階的に長くします。これにより、ロックアウトによるユーザー体験への影響を避けながら、総当たり攻撃に数分ではなく数年かかるようにできます。Webアプリケーションでは、自動化された認証情報攻撃を防ぐため、APIレベルのレート制限とアカウントレベルのスロットリングの両方を実装する必要があります。

# Configure account lockout policy via Windows Group Policy
# Computer Configuration > Windows Settings > Security Settings
# > Account Policies > Account Lockout Policy
#
# Account lockout threshold:     5 invalid logon attempts
# Account lockout duration:      30 minutes
# Reset account lockout after:   30 minutes

# Linux PAM-based lockout (/etc/pam.d/common-auth)
# auth required pam_tally2.so deny=5 unlock_time=1800
# auth required pam_faillock.so preauth deny=5 unlock_time=1800

クイックチェック

このレッスンで扱ったCompTIA Security+(SY0-701)の概念について、理解度を確認しましょう。

レッスンのまとめ

このレッスンでは、次のことを学びました。NIST SP 800-63Bは、複雑な変更ポリシーよりも、長いパスフレーズと漏洩チェックを推奨しています。MFAの3つの要素は、知っているもの、所持しているもの、本人そのものです。TOTPアプリはSMS OTPより安全です。FIDO2/WebAuthnはフィッシングに強い認証方式です。アカウントロックアウトは総当たり攻撃を防ぎます。次は、生体認証とトークンベース認証について学びます。

よくある質問

「パスワードポリシーと多要素認証」レッスンは無料ですか?

はい。「パスワードポリシーと多要素認証」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Security+ Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Security+ Academyコースには全4レッスンが含まれています。

「パスワードポリシーと多要素認証」で何を学びますか?

強力なパスワードの要件、MFAの認証要素(知識・所持・生体情報)、および要素を重ねることでアカウント侵害のリスクが大幅に低下する理由を理解します。 ブラウザで直接実行するハンズオンコードでSecurity+ Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Security+ Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのSecurity+ Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/4です。

「パスワードポリシーと多要素認証」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このSecurity+ Academyレッスンでコードを書いて実行できますか?

はい。すべてのSecurity+ Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. パスワードポリシーと多要素認証
  2. 生体認証とトークンベース認証
  3. 認可モデル:RBAC、MAC、DAC
  4. フェデレーションID:SAML、OAuth、OpenID Connect
← Security+ Academyに戻る