質問

2 ページだけの単純なサイトがあると想像してください。login.aspx と Secret.aspx。サイトのセキュリティは、ASP.net フォーム認証と、login.aspx の ASP.net ログイン サーバー コントロールのみを使用して保護されます。詳細は以下のとおりです。

  • サイトは SqlMembershipProvider を使用するように構成されています
  • サイトはすべての匿名ユーザーを拒否します
  • Cookieが無効になっています

セキュリティに関して考慮すべき点は明らかにたくさんありますが、私は .net Framework に付属する、すぐに使えるコードなしのエクスペリエンスにもっと興味があります。

この質問のために、攻撃ポイントがlogin.aspxのユーザー名/パスワードのテキストボックスのみである場合、ハッカーはsecret.aspxページへのアクセスを許可するコードを挿入できますか?

Microsoft が提供するゼロコードのすぐに使用できるエクスペリエンスはどの程度安全ですか?

役に立ちましたか?

解決

まだ考慮されていない変数がいくつかあります。

  • メンバーシップ プロバイダーによって使用されるデータ ストア (この場合は SQL Server データベース) のセキュリティ。
  • 同じ IIS でホストされている他のサイトのセキュリティ
  • サイトのホストに関与するマシン、またはサイトがホストされているのと同じネットワーク上の一般的なネットワーク セキュリティ
  • サイトをホストするマシンの物理的セキュリティ
  • 認証トラフィックを暗号化するために適切な手段を使用していますか?(HTTPS/SSL)

これらの問題のすべてが MS 固有のものではありませんが、対処しないと、質問している問題を簡単に上回る可能性があるため、言及する価値があります。ただし、ご質問の趣旨からすると、問題はないと思います。

その場合、フォーム認証は本来の動作をしていると確信しています。現在アクティブなエクスプロイトは存在しないと思います。

他のヒント

私の知る限り、パスワードはプレーンテキスト (ただしエンコード) として送信されます。したがって、最も重要なことは、ログイン画面で HTTPS プロトコルを使用することです。

他の設定は私にとって安全なようです。

.NET 基本フォーム認証で使用されている HTTP 基本認証を使用すると、secret.aspx ページを表示するために、ブラウザーはユーザー名とパスワードの Base64 エンコードされた連結を送信する必要があります。

SSL を使用しない限り、サーバーとブラウザの間のネットワークをスキャンするアクセス権を持つ人は誰でも、この情報を読み取ることができます。ユーザー名とパスワードをデコードできます。今後、ユーザー名とパスワードを再実行して、secret.aspx ページにアクセスすることができます。

ただし、SSL を使用しない限り、secret.aspx を使用して他の人のセッション全体をスキャンすることもできるため、事実上、ページのコンテンツにもアクセスできることになります。

さて、舞台裏を覗いてみてください。

パスワード保護

データベースにパスワードを盗まれたり侵害したりしないように、ユーザー名、パスワード、およびその他の認証情報をデータベースに保存するアプリケーションは、プレーンテキストにパスワードを保存してはなりません。そのため、SQLMemberShipproviderは、パスワードとパスワードの回答について、3つのストレージ形式(「エンコーディング」)をサポートしています。PasswordFormat Configuration属性から初期化されたプロバイダーのPasswordFormatプロパティは、使用される形式を決定します。

  • MembershippassWordFormat.Clear。これは、パスワードとパスワードの回答をプレーンテキストに保存します。
  • Membershippasswordformat.hashed(デフォルト)。パスワードとパスワードの回答から生成された塩漬けのハッシュを保存します。塩は、.NETフレームワークのRNGCRYPTOSERVICEPROVIDERクラスによって生成されるランダムな128ビット値です。各パスワード/パスワードの回答ペアは、この一意の値で塩漬けされ、塩はASPNET_MEMBERSHIPテーブルのPasswordSaltフィールドに保存されます。パスワードをハッシュする結果、塩はパスワードフィールドに保存されます。同様に、パスワードの回答をハッシュした結果、塩はPasswordanswerフィールドに保存されます。
  • Membershippasswordformat.Encrypted。暗号化されたパスワードとパスワードの回答を保存します。SQLMemberShipproviderは、構成セクションのDecryptionKey属性で指定された対称暗号化/復号化キーと、構成セクションの復号化属性で指定された暗号化アルゴリズムを使用して、パスワードとパスワードの回答を暗号化します。SQLMemberShipproviderは、パスワードとパスワードの回答を暗号化するように求められている場合、およびDecryptionKeyが自己在職に設定されている場合、例外をスローします。これにより、暗号化されたパスワードとパスワードの回答を含むメンバーシップデータベースが、別のサーバーまたは別のアプリケーションに移動した場合、無効になることを防ぎます。

したがって、(そのままの状態で) セキュリティの強度は、使用しているパスワード保護形式戦略によって異なります。

  • クリア テキストを使用すると、システムへのハッキングが明らかに容易になります。
  • 一方、暗号化を使用すると、セキュリティはマシン (または少なくとも machine.config) への物理的なアクセスに依存します。
  • ハッシュ化されたパスワード (デフォルト) を使用すると、以下に応じてセキュリティが保証されます。a) RNGCryptoServiceProvider クラスのハッシュ戦略の既知の逆転、および b) ランダムに生成されたソルトを侵害するためのデータベースへのアクセス。

デフォルトのハッシュベース システムにある種のレインボー テーブル ハックを使用できるかどうかはわかりません。

詳細については、次のリンクをご覧ください。http://msdn.microsoft.com/en-us/library/aa478949.aspx

メンバーシップ プロバイダーを通じて正しく設定されている場合、適切なレベルのセキュリティが得られます。それ以外では、そのページへのアクセスは正規攻撃を通じてアクセスできる可能性がありますが、それは一般的なセキュリティと関係があります。の活用についてプレゼンテーションを行いました。 セキュリティ エンタープライズ アプリケーション ブロック. 。サイトにセキュリティを実装する際には、これらの内容を読んで検討し、一般的なセキュリティの脅威に注意することをお勧めします。オープンな共有ネットワーク上にいて、完全なセキュリティは軍によって 24 時間 365 日警備されている安全な場所にロックされているプラ​​グを抜いたサーバーであることを考えると、100% ハッキング不可能なサイトは存在しません (オレンジ ブックに基づく国防総省の「A」レベルのセキュリティ程度) )。ただし、メンバーシップ プロバイダーのすぐに使用できる機能 (正しく構成されている場合) は、十分なセキュリティを提供します。

編集:そうですね、私も他のコメントに同意します。パケット スニファーやネットワーク モニターからユーザー名とパスワードを保護したいのであれば、少なくともログイン画面では HTTPS を使用するのは当然です。

Asp.Net は、Cookie なしのセッションをサポートしています。 このブログ投稿は示しています. 。セッション Cookie の代わりに、URL 内の識別子を使用してユーザーを追跡します。

これがどの程度安全であるかはわかりませんが、ID 文字列をブルート フォースで攻撃することの難しさとしては安全だと思います。

ほぼそのままで動作するように見えますが、ユーザーをリダイレクトし、セッション状態を維持したい場合は、セッション ID を含める必要があります。このブログ投稿には、その方法と、Web 上の他の多くの記事が示されています。

URL 上の Cookie は安全性が十分ではなく、非常に多くのさまざまな問題 (特にリファラーがある場合の漏洩) や HTTPS の使用法が存在します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top