パスワードを保護するコードを実装する前に、攻撃者がソフトウェアの防御に侵入しようとする可能性のある方法を特定の環境で分析することをお勧めします。
まず、ネットワークまたはシステム アーキテクチャを分析します。 いくつかの例を次に示します。
- 保護する必要があるパスワードの数。 ローカル コンピューターにログオンするにはパスワードが必要ですか? ネットワークへのログオンに使用されるパスワードは同じですか? パスワードはネットワーク上の複数のサーバーに伝達されますか? いくつのパスワードを使用する必要がありますか?
- 使用されるネットワークの種類 (存在する場合)。 ネットワークは企業ディレクトリ システム (LDAP など) を使用して実装され、そのパスワード アーキテクチャが使用されていますか? 暗号化されていないパスワードを格納しているオブジェクトはありますか?
- 開いているネットワークと閉じたネットワーク。 ネットワークは自己完結型ですか、それとも外部に対して開かれていますか? その場合、ファイアウォールによって保護されますか?
- リモート アクセス。 ユーザーはリモートの場所からネットワークにアクセスする必要がありますか?
システムまたはネットワーク アーキテクチャを分析したら、攻撃者が攻撃を試みる方法の分析を開始できます。 いくつかの可能性を次に示します。
- コンピューターのレジストリから暗号化されていないパスワードを読み取る。
- ソフトウェアでハードコーディングされた暗号化されていないパスワードを読み取る。
- コンピューターのスワップアウトされたコード ページから暗号化されていないパスワードを読み取ります。
- プログラムのイベント ログからパスワードを読み取る。
- プレーンテキスト パスワードを含むオブジェクトを含む拡張 Microsoft Active Directory ディレクトリ サービス スキーマからパスワードを読み取ります。
- パスワードを必要とするプログラムでデバッガーを実行します。
- パスワードを推測します。 いくつかの手法のいずれかを使用できます。 たとえば、攻撃者はユーザーに関する個人情報を知り、その情報からパスワードを推測しようとする可能性があります (たとえば、配偶者やパートナー、子供の名前)。 または、ブルート フォース方式を試して、文字、数字、句読点のすべての組み合わせを試します (短いパスワードが使用されている場合にのみ可能)。
考えられる攻撃手法をシステムまたはネットワーク アーキテクチャと比較すると、セキュリティ リスクが明らかになる可能性があります。 その時点で、各リスクに対してリスク要因を確立でき、リスク要因を使用して修正をトリアージできます。