1

ユーザーのパスワード(.net Webアプリケーション内)をSHA2と次のソルトでハッシュします。

  • アプリケーションソルト-データベースの外部に保存されます(この場合、Webアプリケーションweb.configは暗号化された文字列として)-これは、ログイン、新しいユーザーの作成、パスワードの変更などに関連するストアドプロシージャに渡されます。
  • ユーザーごとのソルト(現在ユーザーテーブルに格納されているSQLの一意の識別子)は、デフォルトを使用して挿入時に自動的に生成されます(CONVERT([char](36),newid(),(0)))
  • データベースソルト-データベース内の設定テーブルに格納されているソルト。
  • パスワード-そしてもちろんユーザーのパスワード。

これはレインボーや辞書攻撃などに役立ちますが、誰かがセキュリティに穴を見つけてデータベースに対して更新ステートメントを実行した場合、具体的には、ユーザーがサイトに登録するのを妨げるものを考えていました。彼らが知っているパスワードは、管理者アカウントのソルトとハッシュをソルトとハッシュに置き換えます-したがって、彼らに私たちのサイト/アプリケーションへの完全な管理者アクセスを与えますか?

これは私たちが現実的に心配すべきリスクですか?もしそうなら、それは専門用語/標準的な予防技術を持っていますか?

何らかの方法でユーザーID(この場合は整数)をハッシュに含めることを考えていました-これに関するベストプラクティスが何であるかを知りたいだけですか、それとも私たちは物事を考えすぎていますか?

PS: SHA2はパスワードに使用するのに理想的なハッシュではなく、BCryptなどの低速のハッシュ方式が推奨されることを知っています。これは、プロジェクトに参加する前に行われた決定でした。

PS:私たちのWebアプリケーション(およびそのアプリケーションキー)はSQLサーバーから厳重にファイアウォールで保護されています-それらの間で開いているポートは1つだけで、SQLに使用されます)

4

2 に答える 2

4

正直なところ、あなたは物事を考えすぎていると思います。悪意のあるユーザーがusersテーブルに対して更新クエリを実行する立場にある場合、それらのユーザーはデータベース内の他のテーブルに同等にアクセスできる可能性があります。繰り返しになりますが、ほとんどの場合、アクセス許可は上記のデータベースにも保存されており、既存の管理者のアカウントを乗っ取るよりも、別のクエリを実行して適切なアクセス許可を付与する方が簡単です。または、データベース内の必要なデータを直接変更して、フロントエンドを完全に忘れてください。

したがって、ユーザーが(SQLインジェクションなどを介して)データベースにアクセスできるようになると、すべての賭けはすでにオフになっており、好きなように実行できます。

ハッシュをソルトする理由は、単にパスワードのダンプを無価値にするためであることに注意してください。つまり、(いつ?)ユーザーが別のサイトのパスワードを再利用し、それがソルトされていない場合、取得したハッシュ値を辞書(いわゆるレインボーテーブル)で検索すると、プレーンテキストのパスワードが提供されます。別のサイトでユーザーになりすますために使用されます。ハッシュをソルトすると、レインボーテーブルを使用して値を検索するというこの「可逆性」が排除されます。ソルトを知っていると、攻撃者は足を引っ張ることができますが、それでも、一致するパスワードを取得するためにブルートフォース攻撃を行う必要があります。未知のアプリケーション全体のソルトを追加すると、プロセスがはるかに困難になりますが、数百万のアカウントと多くのブルートフォースまたは完全な運があれば可能です。

于 2013-03-21T12:42:42.853 に答える
0

パスワードセキュリティやアプリケーションセキュリティの観点から、任意のSQLインジェクションのリスクを目立たないものと見なすのは確かに正しいことです。

データベースのセキュリティが侵害された場合(誰かがSQLダンプを盗んだり、データへの任意のSELECTアクセス権を持ったりした場合)、保存されたパスワードを強化する予防策により、エンドユーザーのパスワードのプライバシーとアプリケーションのセキュリティに関する保証が可能になります。 SELECTは、盗まれてログインに使用される可能性のあるパスワードに直接つながることはありません。

ただし、SELECTステートメントにアクセスできる場合は、他のSQLメカニズムと組み合わせて、たとえば、攻撃者がアプリケーションコードに影響を与える可能性のある、サーバー側の任意のWebシェルまたは他のファイルを書き込むことができます。ログイン時にユーザーパスワードをMITMします(暗号化はハッシュでサーバー側で行われているため)。

あなたの質問に対する最終的な答えは、SQLインジェクションは非常に深刻な問題であり、Webアプリケーションファイアウォール(WAF)やSQLプロキシ(GreenSQLが頭に浮かぶ)などのレイヤーを追加すると、適切なSQLセキュリティなしでコードをデプロイするときに利点が得られます。

于 2013-03-21T13:38:58.630 に答える