特定のプログラムがフォーク、プロセス間パイピング、入出力リダイレクト、ファイル処理などの悪意のある操作を実行できるかどうかを検出したい。実際、Javaコードをチェックするプログラムを開発しており、コーダーがコードチェッカーシステムに害を及ぼさないようにしている。とにかく。
これを確実にするためにコードで探す必要があるパッケージは何ですか?
前もって感謝します... !
4 に答える
チェックはコンパイル時ですか、それとも実行時ですか?
実行時にチェックする場合は、権限を持つセキュリティマネージャを使用できます。SecurityManagerチュートリアルをご覧ください。権限の幅広いリストがあります。フレームを開いていても、ファイルへのアクセスを禁止できます。
java.lang.Runtime
基本クラスに関しては、とjava.lang.System
、に注意する必要がありjava.lang.ProcessBuilder
ます。これらは作成しますjava.lang.Process
。またjava.io.File
、、、java.io.FileDescriptor
おそらくソケットでさえjava.nio.*
、OS/ファイルシステム上で動作します。また、反射を禁止します、、
java.lang.reflect.*
およびいくつかの方法java.lang.Class
も反射します。名前でクラスをロードすると、チェックが回避される場合があります。の一部のクラスjava.beans.*
もリフレクションを使用しています。必要に応じて、ユーザーコードをサンドボックスで実行することもできます。しかし、それはあなたには行き過ぎかもしれません。クラスの使用状況(一定のプール)を確認するのは簡単な方法かもしれません。
Colin HEBERTが以前に指摘したように、これ
native
も危険です。Object
しかし、のメソッドのように、それらのいくつかは間違いなく必要です。
OSの相互作用機能の多くは、およびで提供されjava.lang.Runtime
ますjava.lang.System
。これらはjava.lang
パッケージに含まれているため、インポートは必要ありません。
しかし...コードを分析しているだけなら、なぜコードに含まれる呼び出しを気にするのでしょうか?おそらく、どのクラスが呼び出されるかではなく、Javaセキュリティを検討する必要があります。
「ネイティブ」とマークされたすべてのメソッドもチェックすることを検討する必要があります。
簡単な答え:java.lang。これが、OS機能へのアクセスを提供するクラスを含む唯一の「すぐに使える」パッケージだと思います。さて、ここでは、「OS関連」のものとしてI/Oを含めないと仮定しています。その場合は、java.io、javax.swing、およびその他のいくつかのパッケージも含める必要があります。
より長い答え:プログラマーは、OSと対話する独自のJNI関数を作成し、それらを好きなパッケージに入れることができます。これを特定しようとすると、かなり注意が必要になる可能性があります。そうですね、「ネイティブ」関数は自動的に疑わしいと言えるでしょう。