CS.HCC.USER

ハードコードされた資格情報の使用(ユーザー名)

ソフトウェアに認証用の資格情報がハードコードされている場合、悪意のあるユーザーに実行可能ファイルからこの資格情報を取り出す機会を与えてしまうため、こうしたソフトウェアは攻撃に対して極めて脆弱になります。

CS.HCC.USER チェッカーは、ハードコードされたユーザー名が認証関数のパラメーターに使われている場合にそれを検出します。また CS.HCC.USER チェッカーは、ユーザーの資格情報がバックエンドアプリケーションの内部にハードコードされた値と比較されるケースも検出します。ハードコードされた資格情報は、関数の認証に使用される資格情報としてコード化されるばかりでなく、ハードコードされたチェックにも使用されます。脆弱性は、認証関数のユーザー名またはパスワードがハードコードされた文字列と比較される場合にも存在します。このチェッカーはデフォルトで、人気のあるソフトウェアライブラリからこの関数を検討しますが、カスタム認証関数を検出するよう設定することも可能です。

脆弱性とリスク

ハードコードされた資格情報を使用すると、攻撃者が実行可能ファイルから資格情報を取り出して、正当な認証を迂回することが可能になってしまいます。ハードコードされた資格情報は、検出や修正が困難と予想される著しいリスクを招きます。

軽減と防止

アウトバウンド認証の場合:パスワードやキーなどの認証資格情報は、ソースコード外部の強固に保護され、暗号化された構成ファイル内または同じシステム上のローカルユーザーも含め、すべての外部者によるアクセスから保護されたデータベースに保存されます。インバウンド認証の場合:初回ログイン時のデフォルトのユーザー名、パスワード、キー、その他の認証資格情報をハードコードするより、ユーザーが一意の強力なパスワードやキーを入力する必要がある「初回ログイン」モードを実装してください。

脆弱コード例 1

コピー
   namespace HCC_USER
   {
       class Program
       {
           int VerifyAdminUser(String UserName)
           {
               if (UserName.Equals("user@name"))
               {
                   Console.WriteLine("Entering Diagnostic Mode...");
                  return (1);
              }
              Console.WriteLine("Incorrect userName");
              return (0);
          }
      }
  }

この例では、Klocwork は 7 行目で「関数 'UserName.Equals' の呼び出しによるハードコードされたユーザー名の使用」という報告を報告します。

修正コード例 1

コピー
   namespace Data
   {
       public class Database
       {
           public static int VerifyUser(string user)
           {
               //verify user at database
               return 1;
           }
      }
  }
  
  namespace HCC_USER
  {
      class Program
      {
          int VerifyAdminUser(String UserName)
          {
             return Data.Database.VerifyUser(UserName);
          }
      }
  }

修正されたこの例では、Klocwork はもはや欠陥を報告しません。

関連チェッカー

セキュリティトレーニング

Secure Code Warrior が提供しているアプリケーションセキュリティトレーニング教材。