8

私の会社では、複数のサーバーで構成される大規模なシステムを開発しています。システムは、約5つの論理コンポーネントで構成されています。データはXML、MS SQL、およびSQLiteに保存されます。これは.Netシステム(ほとんど)であり、コンポーネントはWCFといくつかのカスタムUDPを使用して通信します。クライアントは、主にカスタムUDPまたはWEB(ASP.NETおよびSilverlight)を介してシステムにアクセスします。

通信の保護は簡単で、SSLとWCFのセキュリティがあり、これで完了です。

私たちが直面している主な問題は、システムをクライアントのサイトにデプロイする必要があることです。これは、必ずしも信頼できるとは限らないクライアントです。サーバー上のデータとソフトウェア自体をリバースエンジニアリングから保護する必要があります。どちらも私たちにとって非常に重要です。

また、キルスイッチが必要です。コマンドで、または一定期間家に電話できない場合は、データとソフトウェアを破壊するものが必要です。

私が考えていた方向は、TPMなどを使用することです。ハードウェア暗号化ソリューションを、サーバー上のすべてのソフトウェアとデータを暗号化するために内部的に保持できる別のサービスと組み合わせて、キーがサーバーから取得されるようにします。私たちのサイトで安全に、そしておそらくTPMからのメモリカーテン。

そのような問題をどのように解決することを提案しますか?


UPDATE 04/02実用的な提案を探している、または私を助けることができる製品についてアドバイスしているので、私は賞金を始めています...

私たちが基本的にクライアントのサイトにマシンを配置している人を見てください(ビジネスと実用上の理由から)、私たちはそのマシンを所有しており、クライアントは数時間以内に支払っているすべてのものを受け取り、彼は好きなようにデータを処理できます。しかし、私はそのマシンで実行されているアルゴリズムと、そこに保存されているデータの一部には、保護したい企業秘密があります。理想的には、マシンがまったく動作しないようにしたいのですが、それがOKであると言わなければ、マシン上のすべてが暗号化されたままであるという私のOKがなければ起動すらしません。メモリカーテンは、実行中にマシンを保護するための優れた方法のようにも見えます。

また、理想的には、誰かがドライバーで近づいたらすぐに、すべてのマシンのHDとストレージを爆発させたいと思います... :-)しかし、それでは行き過ぎだと思います...


UPDATE 10/02 OKいくつかの調査を行った後、ソフトウェアとデータを復号化するためのキーをサーバーから取り込むことを除いて、PS3暗号化システムと同じ方向で何かを試すつもりだと思います。そうすることで、キーを要求しているサーバーを信頼するかどうかをマシンで決定できます。マシンを取り付け直すだけで、キルスイッチを取得できます。これはおそらくTPMまたはそれに類似したもの、おそらくIntelのTXTに基づいています...私は重要なセキュリティ機能としてメモリカーテンにも本当に興味があります...

ところで、ビジネス要件と技術的に実現可能ではないため、システムの貴重な部分をサイトに移動することでこれを解決することはできません。膨大な帯域幅が必要になります。

4

7 に答える 7

10

あなたが求めているのは、事実上、聖杯です。これは、信頼できない環境で実行されている信頼できるプラットフォームがあるゲームコンソールで行われることとほぼ同じです。

マシンを1日目から危険にさらされたものとして扱うことができるかどうかを検討してください。その仮定の下で作業できれば、物事はかなり簡単になりますが、ここではそれほど実行可能ではありません。

実際にそれを確保するという点で、いくつかの懸念があります:

  • ファイルシステムを暗号化し、ハードウェア復号化を使用する必要があります
  • 1つのアプリケーションのセキュリティ問題が他のアプリケーションを危険にさらさないように、アプリケーションを相互に分離する必要があります。
  • セキュリティの問題が発生することを計画する必要があります。つまり、安全なハイパーバイザーなどの緩和戦略を導入する必要があります。

私はこれらがかなり曖昧であることを知っていますが、これは本当に過去数年間のゲームコンソール保護の歴史です-これがどのように何度も解決された(そして壊れた)かについて興味があるなら、コンソールメーカーに目を向けてください。

完全に成功したことはありませんが、参入障壁を大幅に高めることができます。

于 2011-02-01T21:50:22.307 に答える
4

...正直なところ、アプリケーションにウイルスを書き込む方法を尋ねているようです。これにより、クライアントはおそらく他の方法よりもあなたを信頼しない理由が多いと思います。

そうは言っても、これはいくつかの理由でひどい考えです。

  1. インターネット接続が切断されたり、オフィスを移動してマシンを少し切断したりするとどうなりますか?
  2. あなたがそれを間違ってコーディングし、それが失火した場合はどうなりますか?お客様が正しく使用していてもデータを削除しますか?
  3. 私はあなたの要求があなたのアプリケーションがバックアップ機能を提供しないことを意味すると仮定することができるだけです。私は正しいですか?私が買わない製品とまったく同じように聞こえます。
  4. アプリケーションが管理するデータはどの程度価値がありますか?それが削除された場合、これはクライアントにどのような経済的損失をもたらすでしょうか?あなたの法務部門はこれを承認し、あなたが責任を問われることができないことを確認しましたか?
于 2011-02-01T21:39:36.977 に答える
4

この質問は週に2〜3回SOで行われ、答えは常に同じです。ユーザーに与えたものは、もはやあなたのものではありません。

ユーザーがデータにアクセスするのを難しくすることはできますが、ユーザーがデータに完全にアクセスするのを防ぐことはできません。データを暗号化でき、復号化キーをUSB暗号トークン(秘密鍵を公開しない)に保持できますが、理論的には、コードが暗号トークンを呼び出してデータのチャンクを復号化するように要求できる場合、ハッカーは複製できますコード(理論上)を作成し、このコードでcryptotokenを呼び出して、すべてのデータを復号化します。

実際には、タスクを複雑にして、データの取得を不可能にすることができます。この時点で、復号化されたデータがユーザーにとって実際にどれほど重要であるかを確認する必要があります。

キルスイッチについて:これは機能しません。一度もない。ユーザーは、必要に応じてコピーを作成し、バックアップから復元できます。彼はコンピューターの時計を変えることができます。彼はおそらくコンピューターのクロックを遅くすることさえできます(データが非常に価値があり、カスタムエミュレーションハードウェアへの投資が可能である場合)。

重要なデータについて:貴重な資産が他の人にとって実際にはほとんど価値がないことが判明する場合があります[そしてソリューションの他の側面はそうです]。例:ドライバー製品のソースコードを出荷します。これは私たちにとって最も価値のある資産ですが、ユーザーはコード行ではなく、サポート、更新、その他のメリットに対して料金を支払います。ユーザーは、ライセンスのコストに匹敵する金額を投資せずに、[盗まれた]ソースコードを効果的に使用することはできません。

難読化について:コードの一部(VMProtect製品など)の仮想化は非常に効果的であるように見えますが、ある程度の努力で回避することもできます。

一般的に、現金自動預け払い機のように密閉された(クライアントが封印を破らずに侵入できないように)、定期的な検査などで、カスタムビルドのオペレーティングシステムを備えたカスタムハードウェアを考えることができます。これは機能する可能性があります。したがって、タスクは技術的なだけでなく、ほとんどが組織的なものです。マシンなどの定期的な検査を手配する必要があります。

要約すると、データが非常価値がある場合は、サーバーに保存し、インターネット接続のみを提供します。そうしないと、リスクを最小限に抑えることしかできず、完全に回避することはできません。

于 2011-02-01T21:46:35.057 に答える
2

他の人がおそらくこの解決策に穴を開けるだろうことを私は知っています-そして私が生活のためにこの種のことをし、挑戦を歓迎するので、気軽にそうしてください!-しかし、なぜこれをしないのですか?

  1. 明らかにWindowsを使用しているので、最大のセキュリティ設定でハードドライブのビットロッカードライブ保護を有効にします。これは、私の理解としてドライブのクローンを作成する人々を軽減するのに役立ちます-私が間違っている場合は、そう言ってください!-その内容は、そのシステムのハードウェア設定に基づいて暗号化されます。

  2. ハードウェアでTPMを有効にし、ソフトウェア用に正しく構成します。これは、ハードウェアのスニッフィングを停止するのに役立ちます。

  3. 自分が使用していないアカウントを無効にし、システムアカウントとグループをロックして、必要なものだけを使用します。Active Directoryとセキュリティで保護されたVPNをセットアップするためのボーナスポイント。これにより、バックドアを介してリモートでネットワークにアクセスし、公式のオンサイト訪問を行わなくてもシステムをチェックできます。

  4. これに取り組むために必要な技術的基準を引き上げるには、ソフトウェアをC ++またはその他の非.Net言語で記述します。これは、MSILバイトコードは公開されている無料ツールによってソースコードに簡単に逆コンパイルでき、逆コンパイルにはより技術的なスキルが必要になるためです。適切なツールで非常に実行可能であっても、アセンブリ内の何か。さらに問題を複雑にするために、使用するハードウェアのすべてのCPU命令を有効にしてください。

  5. 展開されたシステムのハードウェアプロファイル(一意のハードウェアID)をソフトウェアに頻繁に検証させます。これが失敗した場合(ハードウェアが変更された場合など)、自己破壊します。

  6. ハードウェアが検証されたら、暗号化されたRAMディスクにロードされた暗号化されたバイナリイメージからソフトウェアをロードします。このディスクは、それ自体が(固定されていない!)メモリで復号化されます。それを固定したり、定数メモリアドレスを使用したりしないでください。これは悪い考えです。

  7. 一部のコンパイラはセキュリティで保護されていないbzero/memset0呼び出しを愚かに最適化し、キーをメモリに残すため、復号化が完了すると、キーがRAMから削除されることに十分注意してください。

  8. セキュリティキーは、他のメモリブロックとのランダム性によってメモリ内で検出できることを忘れないでください。これを軽減するために、複数の「ダミー」キーを使用していることを確認してください。これらのキーを使用すると、侵入検知と爆発のシナリオがトリガーされます。キーが使用するメモリを固定するべきではないため、これにより、同じダミーキーを複数回トリガーできるようになります。すべてのダミーキーをランダムに生成でき、実際のキーは以下の#12のために毎回異なるため、変更されていないキーを単純に探すことができない場合はボーナスポイントがあります。

  9. ポリモーフィックアセンブリコードを利用します。アセンブリは、実際には、スタックの命令と状態/以前に呼び出されたものに基づいて自己変更できる単なる数値であることを忘れないでください。たとえば、単純なi386システムでは、0x0F97(上記の場合はバイトを設定)は、5を減算するだけで、簡単に正反対の(以下の場合はバイトを設定)命令になります。キーを使用してスタックを初期化し、CPUのL1/L2キャッシュを活用します。ハードコアに行きたい。

  10. システムが現在の日付/時刻を理解し、現在の日付/時刻が許容範囲内にあることを検証していることを確認してください。導入の前日から4年の制限を設けることで、保証/サポート対象のハードドライブのハードウェア障害のベルカーブと互換性があるため、このような保護を利用して、ハードウェアの更新の合間に十分な時間を確保できます。この検証に失敗した場合は、それ自体を強制終了します。

  11. pidファイルが頻繁に現在の時刻で更新されるようにすることで、時計をめちゃくちゃにする人を軽減できます。最後に変更された時刻(暗号化されたデータとファイルシステム上のファイル属性の両方)を現在の時刻と比較すると、人々が時計を台無しにした場合の早期警告システムになります。問題が検出されたら、爆発します。

  12. すべてのデータファイルは、コマンドで自分自身を更新するキーで暗号化する必要があります。少なくとも週に1回、再起動するたびにシステムを更新するようにシステムを設定します。これを、必要なソフトウェアのサーバーからの更新機能に追加します。

  13. すべての暗号化はFIPSガイドラインに従う必要があります。したがって、強力な暗号を使用し、HMACSを使用します。現在の状況を考慮してFIPS-140-2-level-4仕様に到達するようにしてください。ただし、当然のことながら、一部の要件は経済的観点から、現実的にはFIPS-140では実現できない可能性があります。 -2-level-2があなたの限界かもしれません。

  14. すべての自己破壊の場合、何が起こったのかをすぐに知ることができるように、最初に電話で家に帰らせてください。

そして最後に、いくつかの非ソフトウェアソリューション:

  1. 電話をかけられない場合..最後の努力として、リレーをアクティブにするように設定された内部シリアル/ USBポートに接続されたカスタムハードウェアデバイスは、ケース、ハードウェア、またはソフトウェアの改ざんを検出すると、テルミットのブロックを起動します。それをハードドライブの上に置き、マザーボードの上に置くと、最も効果的です。ただし、米国にいると想定しているため、これが米軍が承認した状況でない場合は、必要な許可などについて法務部門に確認する必要があります。

  2. ハードウェアが改ざんされていないことを確認するには、システムが物理的に安全であることを確認するための詳細について、FIPSの物理的セキュリティ要件を参照してください。ハードウェアの移動/改ざんを軽減するためのカモフラージュとして、使用している最新のラックを古いAS400ケースにボルトで固定/溶接する方法を確認できる場合は、ボーナスポイントがあります。若い男は何をすべきかわからず、「古いものを吸う」ことを心配し、年配の男は「wtf?」と疑問に思うでしょう、そしてほとんどの人は血を残します。少なくとも私自身の経験に基づくと、鋭いエッジのケース。

  3. 侵入通知の場合は、軌道からそれを核攻撃します。それが確実な唯一の方法です。;)アクセスに関するすべての法的フォームと要件が記入されていることを確認してください。そうすれば、法的事項はリスクや責任の軽減に満足します...または、通知システムを設定して、爆発したことを知らせる通知。

于 2012-06-01T16:59:39.493 に答える
2

他のみんなが言ったように、魔法の弾丸はありません。ユーザーは、マシンの電源を切り、HDを他のマシンのスレーブとして取得し、すべてをバックアップし、コードをリバースエンジンして、正常にクラックすることができます。ユーザーが実行可能ファイルに物理的にアクセスできるようになると、実行可能ファイルが危険にさらされる可能性があり、100%の場合に実行可能ファイルを停止することはできません。

あなたができる最善のことは、潜在的なクラッカーの仕事を地獄のように難しくすることですが、あなたが何をしても、それは壊れることはありません。

何か問題が発生した場合に自己破壊を使用することは、すべてをバックアップするクラッカーによって回避できます。

USBドライバーでキーを使用すると、クラッカーの寿命が短くなりますが、最終的には有能な決定されたクラッカーによって打ち負かされる可能性があります。暗号化を解除するコードは、暗号化された状態(キーを取得する部分を含む)にすることはできません。それが大きな弱点です。コードのその部分をハッキングしてキーを別の場所に保存すると、キーが無効になります。

ソフトウェアがリモートサーバーで認証を行う場合、これはクライアントを攻撃して認証を回避することで機能します。サーバーからキーを取得した場合、ネットワークのスニッフィングを使用して、キーを含むサーバーデータを傍受する可能性があります。サーバーデータが暗号化されている場合、クラッカーは、サーバーデータを暗号化解除するソフトウェアを分析し、暗号化されていないデータをフィッシングすることで、暗号化を解除できます。

特に、クラッカーがエミュレーターを使用して、メモリのスナップショット(暗号化されていないバージョンのアルゴリズムを含む)を保存できるソフトウェアを実行すると、クラッカーにとってははるかに簡単になります。彼があなたのソフトウェアを実行している間にメモリを直接操作して固定することができれば、さらに簡単です。

信頼できないクライアントが非常に決心していることを期待しない場合は、物事を複雑にして、それを破る価値のある十分なエネルギーとスキルが得られないことを期待できます。

私の意見では、より良い解決策は、信頼できるサーバーにすべてのソフトウェアを入れて、サーバーに仕事を依頼するだけで、アルゴリズムをサーバーに保持することです。これは、根本的な問題を取り除くため、他のすべてよりもはるかに安全で簡単です。ユーザーはアルゴリズムに物理的にアクセスできなくなります。クライアントにコードを保持する必要をなくすことで、これを行う方法を本当に本当に考える必要があります。ただし、これは破られないわけではありませんが、ハッカーは、入力の関数で出力が何であるかを分析することにより、アルゴリズムが何をするかを推測できます。ほとんどのシナリオ(これがあなたの場合ではないように見えます)では、アルゴリズムはシステムで最も重要ではありませんが、代わりにデータが重要です。

したがって、信頼できないパーティでアルゴリズムを実行することを本当に避けられない場合は、すでに言ったこと以上のことはできません。すべてを暗号化し(できればハードウェアで)、すべてを認証してチェックし、誰かの前で重要なデータを破棄します。何かがおかしいと思われる場合は、それをバックアップすることを考え、誰かがそれをクラックするのを地獄のように難しくします。


しかし、あなたが本当にいくつかのアイデアを望んでいて、本当にこれをしたいのであれば、ここに行きます:

私はあなたにあなたのプログラムを突然変異体にすることを提案することができます。IE:コードを復号化するときは、別のキーで暗号化し、古いキーを破棄します。サーバーから新しいキーを取得し、キー自体が、侵害された新しいキーを提供するものでサーバーをモックするのが非常に難しい方法でコーディングされていることを主張します。キーが一意であり、再利用されないことを保証します。繰り返しますが、これは壊れないわけではありません(そして、クラッカーが最初に行うことは、この機能そのものを攻撃することです)。

もう1つ:意味のない奇妙な整合性チェックを行う非自明な赤いニシンをたくさん入れてください。これは、アルゴリズムの機能しない偽のバージョンをたくさん追加し、効果的に何もせず、実行されることを主張する複雑なオーバーブロートをたくさん追加します実際のコードから予想されるように。実際のコードに、奇妙で意味のないように見えるいくつかのことを実行させます。これにより、デバッグとリバースエンジニアリングがさらに困難になります。これは、クラッカーが有用なものとジャンクなものを区別するために多大な労力を必要とするためです。

編集:そして明らかに、ジャンクコードの一部を正しいものよりも見栄えよくするので、クラッカーは最初にそこを見て、時間と忍耐を効果的に失います。言うまでもなく、すべてを難読化するため、クラッカーが暗号化されていない単純な実行コードを取得したとしても、混乱を招き、非常に奇妙に見えます。

于 2011-02-09T23:01:08.190 に答える
1

答えを要約すると、はい。準同型暗号化が必要になるため、この問題に対する「完全に安全な」解決策はありません(これは現在、ばかげた量の計算を必要とする限られたプロトタイプの形でのみ存在します)。

実際に必要なのは、適切な要件エンジニアリングとセキュリティエンジニアリングの組み合わせです(関係者、利益、展開されたシステム内の貴重な資産、成功した各攻撃シナリオからの攻撃と損害の可能性と、それから防御するためのコストを評価します)。

その後、保護が実際には必要ないことがわかります。または、いくつかの合理的な手段を展開して他の「穴」を法的なものでカバーするか、ビジネスモデルから始めてシステムを完全に再設計することができます(可能性は低いですが、可能です)。

一般に、セキュリティはシステムエンジニアリングの問題であり、技術的なアプローチだけに限定するべきではありません。

于 2011-02-10T08:47:46.877 に答える
1

「完全に安全なシステムを実現する唯一の方法は、ハンマーでシステムを粉砕することです」

とは言うものの、それが価値があるよりも多くの問題を引き起こすのに十分なハッカーになる可能性のある人とねじ込むことは可能です。マシンが実際に直接アクセスできない「ブラックボックス」であるが、代わりにそれを処理するプログラムがある場合、そのマシンに対する最大の脅威は物理的なアクセスです。ケースをロックして、ケースを開けるとスナップする小さな壊れやすいアイテムをケースに取り付けることもできます...サービス担当者が常にこのアイテムを交換するようにしてください...誰かが開いたかどうかが通知されます許可なくそれを(はい、それは古いティーンエイジャーのトリックですが、それは機能します)。ボックス自体については、絶対に必要ではないハードウェア(USBポートなど)を物理的に無効にします。

ブラックボックスではないマシンを扱っている場合は、すべてのものから地獄を暗号化してください... 256ビット暗号化はキーなしで解読することは事実上不可能です...そして、トリックはキーを取得することになります。

理論的には、(データを再暗号化することによって)キーを変更する可能性があり、(安全な)サーバーと直接通信するプロセスによってのみ取得できます。

さらに、ボックスに発生するすべてのこと、特に通常の使用以外のソフトウェアで発生するすべてのことを追跡します。これの多くは、本当に、本当に決心している誰かからあなたを守ることはできません...しかし、それはあなたのシステムが危険にさらされていることをあなたに警告することができます。(侵入した人から一体を訴えることができます)

キルスイッチに関しては...まあ、スリーパーウイルスはそこにありますが、言われているように、それらは偶然にだまされたり、引き起こされたりする可能性があります。違反が疑われる場合は、自分自身を完全に消去するのではなく、ランダムに生成されたキーを使用してシステムに可能な限りすべてを暗号化し、サーバーにキーを送信して(損傷を元に戻すことができるように)、「細断処理」することをお勧めします。キーが含まれていたファイル。(そこにある多くのファイルシュレッダーは、データを十分に破壊する可能性があるため、(ほとんど)回復することは不可能です。)

于 2011-02-08T21:02:42.740 に答える