web-dev-qa-db-ja.com

データベースのフィールドを暗号化することは一般的に悪い考えですか?

私は小さな会社で働いています。それは文字通り私(プログラマー)と所有者です。所有者から、顧客データを保護するためにデータベースのいくつかのフィールドを暗号化するように依頼されました。これは、法律事務所がデータを管理するのに役立つWebアプリケーションです。したがって、基本的には、個人と訴訟の情報(誰が訴えられたのか、なぜ、どれだけのことか)を保存します。彼は、簡単に見られるべきではないこの機密情報を考慮します。彼の恐れは「私はこの情報を許可されていない人に見られたくない」です。他の法律事務所だけがこのデータに興味を持つことができるので、これは、例えばクレジットカードほど重要ではないはずです。

私はこれについてWebで多くのことを読みましたが、これらのフィールドで対称暗号化を単に使用することを考えていたため、パフォーマンスはそれほど悪くありません。キーはサーバーに格納されます。しかし、stackoverflowの this スレッドは、これは悪いアイデアだと言っています。

フィールドを暗号化してサーバーにキーを保存することがどのように役に立たないのか理解できません。ディスクがAmazon EC2にあるため、ディスクが盗まれる心配はありません。私はセキュリティの専門家ではありませんが、私の考えでは、何か問題が発生する可能性がある場合、データベースがリークすると思います。それでも、重要な情報は暗号化されます。さて、その男がEC2サーバーにハッキングすることさえできたとしたら、これを手助けするために私ができる保護はほとんどまたはまったくないでしょう。私たちは小さな会社なので、ページの提供からデータの保存まで、すべてを行うサーバーは1つだけです。

私の質問は、サーバーを1台しか購入できないことを考えると、これらのフィールドを対称キーで暗号化して、このサーバーに保存されているということです。

65
Bhaskara

一般的なコメント。先に進む前に、あなたと上司がいくつかの基本的なセキュリティの概念を学ぶことは役に立ちそうです。セキュリティは専門分野です。路上でランダムな人にあなたに開胸手術をするように頼むことはないでしょう。また、平均的なソフトウェア開発者がシステムを保護する方法を知っていると期待してはいけません。

ここで誤解を感じます。たとえば、上司はセキュリティと暗号化を同一視しているようです。しかし、これは間違いです。 Bruce Schneierが強調したように、暗号化は、システムに振りかけることでセキュリティを確保できる魔法のピクシーダストではありません。そして、ロジャーニーダムがかつて有名に言ったように、暗号化が問題を解決すると思われる場合、暗号化を理解していないか、問題を理解していません

コンピュータシステムを保護する際の重要な概念の1つは、脅威モデルです。つまり、阻止しようとしている攻撃と攻撃者の種類とそうでないものについて慎重に検討する必要があります。脅威モデルを明確に考慮しないと、セキュリティシアターにつながる可能性があります。一見すると見た目は良いが、実際には非常に不十分なセキュリティメカニズム。優れたセキュリティ管理は、しばしばリスク管理に帰着します。最も深刻なリスクを慎重に分析し、それらの特定のリスクを軽減または管理するための戦略を考案します。

セキュリティは最も弱いリンクのプロパティであることを理解することも重要です:システムのセキュリティは最も弱いリンクと同じくらい強力です。システムの一部に脆弱性があると、システム全体のセキュリティが侵害される可能性があります。つまり、システムを保護するのに十分な答えは1つもありません。代わりに、システムを防御するには、さまざまな場所でセキュリティを確保する必要があります。

詳細に飛び込んでいきます。機密データの不正な開示を防ぐことが目的のようです。もしそうなら、あなたはいくつかのアイテムに焦点を合わせる必要があります。これを解決する簡単な魔法の特効薬はありません。あなたは一般的にアプリケーションのセキュリティに取り組む必要があるでしょう。

私があなたの目標を正しく理解したなら、あなたにとって優先事項であるべきいくつかのことを提案させてください:

  • アプリケーションのセキュリティ。 Webアプリケーションのセキュリティについて学習する必要があります。問題にどれだけの暗号を投げるかは関係ありません。攻撃者がアプリケーションコードにセキュリティホールを見つけることができる場合、あなたはうんざりしています。 Webアプリケーションのセキュリティの背景として、OWASPには多くの優れたリソースがあります。 OWASPトップ10、XSS、SQLインジェクション、入力のサニタイズ/検証、出力のエスケープ、ホワイトリスト、およびその他の概念について必ず理解してください。

  • アクセス制御。システムの1人のユーザーが(承認なしに)別のユーザーの情報にアクセスできないようにするには、Webアプリケーションに堅固なアクセス制御が必要です。これの詳細は、特定のシステムの詳細に依存するため、これについてさらにヘルプが必要な場合は、アプリケーションとアクセス制御の現在の戦略に関する詳細を含む別の質問を投稿する必要があるでしょう。

  • Authentication。 Webアプリケーションには、ユーザーを認証する方法が必要です。標準的な最小労力のスキームは、ユーザー名とパスワードを使用することです。ただし、これには実際にはよく理解されている重大な制限があります。ユーザーが自分のパスワードを選択すると、多くの場合、貧弱なパスワードを選択するため、システムのセキュリティが破壊される可能性があります。

  • 安全なソフトウェア開発ライフサイクル。ソフトウェア開発プロセスにセキュリティを統合する必要があります。ソフトウェアアーキテクチャを検討するときは、セキュリティ要件について考え、脅威のモデリングとアーキテクチャのリスク分析を実行する必要があります。コードを作成するときは、セキュリティを侵害する可能性のある一般的な実装エラーについて理解し、それらを回避する必要があります。ソフトウェアが構築されたら、そのセキュリティをテストし、セキュリティの状況を常に評価する必要があります。ソフトウェアを展開するとき、運用担当者はソフトウェアを安全に管理する方法を知る必要があります。マイクロソフトには、安全なソフトウェア開発ライフサイクル(SDL)に関する優れたリソースがあります。詳細については、BSIMMも参照してください。

  • セキュリティ評価。セキュリティについて懸念がある場合は、アプリケーションのセキュリティを評価することをお勧めします。単純な開始点は、誰かにWebアプリケーションのペンテストを実行させて、特定の種類の一般的なエラーをチェックすることです。これはセキュリティを保証するものではありませんが、大きな問題が多数存在する場合に、ウェイクアップコールとして役立つ場合があります。あなたはWhiteHat Securityのサービスを見るかもしれません。 Webペンテストを実行する人は他にもたくさんいます。

これが些細なことではないと感じている場合は、申し訳ありませんが、それは事実です。一方、良いニュースは、そこには多くのリソースがあり、さらにエキスパートレベルのセキュリティの第一人者になる必要がないことです。いくつかの基本的な概念と一般的なセキュリティに精通する必要があるだけです。 Webプログラミングの間違い、そしてそれがあなたのニーズのほとんどを処理します。

101
D.W.

データベースのデータが暗号化されていれば、データベースが何らかの方法で盗まれた場合でも情報が保護されます。しかし、攻撃されているWebサイトから保護するために何もしません。たとえば、ユーザー名/パスワードを推測することによって。キーを見つける必要があるためにサーバーを危険にさらした場合、誰かが遅くなる可能性がありますが、停止することはできません。また、高額になる可能性もあります。たとえば、暗号化されたフィールドは、効率的な方法で検索できなくなりました。また、バックアップの影響を認識し、キーがデータベースバックアップに個別にバックアップされていることを確認して、バックアップテープが盗まれた場合にデータベースが破壊されるのを防ぐ必要もあります。また、キーのコピーがいくつかあることを確認し、定期的にテストする必要があります。

15
pipTheGeek

SoAの優れたコンセプトは、サーバー上の他のプロセスから分離して実行する暗号化サービスを用意することです(Webアプリも分離して実行する必要があります!)。次に、オブジェクト/フィールドを暗号化/復号化する必要がある場合、プレーンテキスト/暗号化テキストを暗号化サービスに送信すると、暗号化テキスト/プレーンテキストで返されます。この方法では、Webアプリが危険にさらされても、暗号化サービスだけがキーを知っているため、攻撃者は暗号化キーを読み取ることができません。また、あなたのウェブアプリは隔離されているので、あなたのシステムで彼ができることは厳しく制限されています。サービスの分離は通常、SElinux、TOMOYO(SElinux imoよりもはるかに使いやすい)、AppArmorなどのMACシステムで行われます。また、grsecurityがパッチされた最新のLinuxカーネルを実行することをお勧めします。

6
Matrix

短い答え:はい、対称暗号化を使用します。これにより、SQLインジェクションを通じてSQLデータを読み取るなどの攻撃を防ぐことができます。ただし、Webアプリケーションが攻撃された場合、問題にはならない場合があります。誰かがあなたのサーバーに十分なアクセス権を取得した場合、あなたはほとんど何もできません。非対称暗号化でも。

3
user5575