3

これは非常に広範な質問のように思えるかもしれませんが、どんな助けも大歓迎です。

Cajo プロジェクト (RMI を使用) を使用する Java で記述されたクライアント/サーバー ソリューションがあります。サーバーとクライアント間で転送される機密データを考慮して、ソリューションを可能な限り安全なものにしたいだけです。

これまでのところ、私の考えは、すべてのクラスを「最終」にし、サーバー内のすべてのクラスに対して「シリアル化できない」例外をスローすることです (RMI レジストリにバインドされたオブジェクトと、実際に必要なオブジェクトを除く)。もちろん転載可)。

他のアイデアを思いつく人はいますか?

誰かが悪意のあるクライアントを作成できることは知っています。リフレクションを使用してリモート オブジェクトの API を見つけることができるので、これを行うのは難しくありません。しかし、悪意のあるクライアントがアクセスするべきではないサーバー内のクラス/オブジェクトにアクセスするのを防ぐためにできることはありますか?

どうもありがとう

更新: 有益なヒントを提供してくださった皆様に感謝いたします。ご連絡が遅くなり申し訳ありません。安全なシステムを作るための私の現在の考え方は次のとおりです。

  • クライアントとサーバー間で OpenVPN を使用します。つまり、アクセスするには物理クライアントにアクセスする必要があります。(注:以下の2点により、VPNは実際にはサーバーとオフィスLANの間になります。これで十分安全だと思います)
  • サーバーとクライアント間の認証には、ユーザー名とパスワードを使用します (おそらく JBOSS を使用します)。これは、サーバー上で何かを行うために、攻撃者がユーザー名とパスワードを必要とすることを意味します。
  • 実際にネットワーク経由で送信されるはずのオブジェクトを除いて、すべてのオブジェクトに対して「シリアル化できない」例外をスローします。これにより、機密オブジェクトがネットワーク経由で送信されなくなります。

それは公平に聞こえますか?何か不足している場合は修正してください。

さらなる更新:私が防ごうとしているものについて混乱があるようです。私が阻止しようとしているのは、誰かがサーバーを「ハッキング」することです。したがって、基本的にサーバーを悪用して、たとえばデータベース全体をダンプ/ドロップします。

ありがとう

4

4 に答える 4

2

侵害された可能性のあるシステムに接続するシステムを RMI 経由で保護することは非常に困難です。最初に行うことは、システム プロパティを使用して RMI の動的コード読み込み機能を無効にすることですjava.rmi.server.useCodebaseOnly。これ以上のモバイル コードはありません (このチャネル経由)。RMI 担当者の Stuart Marks が指摘しているように、このプロパティは現在、Oracle のポリシーに沿ってデフォルトでセキュアになっています。

于 2010-06-01T13:33:14.830 に答える
0

カスタムソケットファクトリを使用して、すべてのRMIデータを暗号化します。たとえば、SSLを使用すると、データの表示、変更、およびリプレイ攻撃を防ぐことができます。

このチュートリアルでは、カスタムRMIソケットファクトリを作成する方法と、SSLを介したRMIの一般的な説明について説明します。

大変な作業のように思われるかもしれませんが、本当に機密データを許可された目から隠す必要がある場合、オブジェクトを最終的にすることは、実際のセキュリティを提供しません-機密データは引き続き読み取ることができます。

編集:以下のコメントでVPNが使用されているとOPが言及しているため、これはすべてかなり重要なポイントです。

于 2010-05-19T22:07:33.850 に答える
0

VPN を使用しているとのことですが、悪意のあるクライアントがサーバーに接続するには、VPN を侵害するか、VPN への正当なアクセス権を持つマシンに不正なソフトウェアをインストールする必要があります。

これが完了すると、不正なクライアントを許可されたソフトウェアと区別する簡単な方法はありません。追加の認証のために、クライアント ソフトウェアの各ユーザーに追加の資格情報を提供できますが、クライアント マシンが侵害された場合、これらは侵害される可能性があります。より強力な認証方式は、アクセス コードを計算する小さな「ウィジェット」を各ユーザーに送信することです。不正なクライアントはこれにアクセスできず、クライアント マシンから物理的に分離されているため、ソフトウェアだけで侵害することはできません。これを各ユーザーのユーザー名/パスワードと組み合わせると、あるユーザーが別のユーザーのウィジェットを盗むのを阻止できます。

必要な安全性と、投資する準備ができている労力によっては、これはやり過ぎかもしれません. あなたの主な関心事が、不正なクライアントとソフトウェアを使用する通常のユーザーからの自動化された攻撃を防ぐことである場合、ログイン時にキャプチャを提示することにより、「私は人間です」認証を実装できます。

于 2010-05-20T10:19:59.567 に答える
0

Cajo では、エクスポートされたオブジェクトに対してのみメソッドを呼び出すことができますか? その場合は、安全に起動できるオブジェクトのみをリモートでエクスポートしてください。そうしないと、ホストを安全にしたい場合、サンドボックスを使用する必要があります。これも参照してください。

ネットワーク トラフィックのスニッフィング/変更を防止するには、 SSLが必要です。

于 2010-05-19T23:45:16.173 に答える