機密データ(数値)を保持するデータベースにリンクされたアプリケーションを使用しています。開発者によると、このデータは暗号化されています。ただし、数値をクリアテキストで表示するレポートを簡単に生成できます。暗号化されている場合、アプリケーションはどのようにしてこのデータにアクセスして取得できますか?また、アプリケーションがデータにアクセスする場合、そもそも暗号化のメリットは何ですか?その場合、Webアプリから攻撃を開始でき、暗号化を克服します...
これは、SQLインジェクション(または特定の形式)またはその他の方法でデータベースにアクセスできるユーザー(データベースサーバーの内部違反)に対する予防策です。アプリケーションは次のようになります。
Fetch information from DB ==> use decrypt function on information ==> present to the user
一方、SQLインジェクションを使用する場合は、インジェクトされたクエリを直接使用してデータを抽出します。ただし、アプリケーションで使用される復号化関数(アプリケーションのコードの一部であるため)を呼び出すことができないため、暗号化されたデータしか取得できません。
これは、SQLインジェクションを使用できるすべての状況に当てはまるわけではありません。関数がSQLインジェクションに対して脆弱であり、結果の配列をループしてその情報を復号化するコードがあり、関数によって収集された結果を変更できる場合(たとえば、インジェクション1=1
ステートメント)。復号化された結果が返されます。
データベースの暗号化は、データ駆動型アプリケーションを強化するためのセキュリティ対策の一部にすぎないことに注意してください。これもご覧になれます RSAによる論文 。
暗号化とは、機密性を保証することです。暗号化によって機密性が完全に保証されるわけではありませんが、問題がkeyに変換されます。データが暗号化されている場合、復号化キーにアクセスできるエンティティのみが読み取ることができます。キーはデータ自体と同じ場所に保存する必要はありません。これは、ここで説明している種類の分離です。つまり、暗号化されたデータはデータベース内ですが、復号化キーはアプリケーション内であり、これは別個のマシンである可能性があります-したがって、これにより、攻撃者からの攻撃を防ぐことができます。データベースサーバーでは、アプリケーションマシンではありません。
@Lucasが指摘するように、これはSQLインジェクションの一部の形式に対して有効です復号化がSQLで実行できない限り。一部のデータベースには暗号化自体を実行する機能があるため、SQLインジェクション攻撃はこれらの機能を利用する場合があります。極端な場合として、MicrosoftがSQL Serverで Transparent Data Encryption と呼んでいるものを考えてみます。すべてのデータは暗号化されますが、これはデータベースサーバー自体によって自動的に行われます。アプリケーションはそれを認識していません。これにより、SQLインジェクションやその他のアプリケーションレベルのハッキングに対するzero(nil、void、nada)保護が提供されます。 TDEは、SQL Serverコードを経由せずにストレージメディアを読む人に対してのみ反対です。
アプリケーションマシンをハイジャックする攻撃者は、データベース全体を読み取って完全に復号化できるため、暗号化ではそれを防ぐことができません。実際、データベースの暗号化が実際に追加の保護を提供するもっともらしいシナリオはほとんどありません(パスワードhashingとは対照的に、これは一方向であり、次の行として多くの追加の保護を提供します)防衛)。