2

バックエンドサーバーからバイト配列を取得するアプレットがあります。このバイト配列にはダイナミックライブラリ(アプレットが実行されているOSに応じてDLLまたはSO)が含まれており、ディスクに書き込んだ後、System.load()を呼び出してディスクからロードする必要があります。

ファイルがディスクに書き込まれた後、System.load()の呼び出しを通じてOSによってロードされる前に、ファイルが改ざんされていないことを確認する必要があります。ファイルがディスクに書き込まれているときにファイルの排他ロックを取得しますが、テストでは、System.load()を呼び出す前にこのロックを解除する必要があることが示されています。そうしないと、ライブラリの読み込みに失敗します。

ファイルをロードしている間、ファイルのロックを維持する方法はありますか?

サンプルコード:

File f = File.createTempFile("tmp", "");
RandomAccessFile raf = new RandomAccessFile(f, "rwd");
FileChannel channel = raf.getChannel();
FileLock lock = channel.lock(0, Long.MAX_VALUE, false);

// This would be where I write the DLL/SO from a byte array...             
raf.write((int)65); // 'A'
raf.write((int)66); // 'B'
raf.write((int)67); // 'C'

System.out.println("Wrote dynamic library to file...");

// Close and release lock
raf.close();

System.out.println("File closed. Lock released.");

// This call fails if the file is still locked.             
System.load(f.getAbsolutePath());

どんな助けでも大歓迎です。ソリューション(存在する場合)は、OSにネイティブである必要はありませんが、Javaでサポートされているすべてのプラットフォームで機能します。また、ソリューションがJava1.4と互換性があることも要件です。

4

1 に答える 1

0
  1. Java 7 では、メモリ内ファイル システムを実装できるため (「参考文献」を参照java.nio.file.spi.FileSystemProvider)、ライブラリ コンテンツは完全にメモリ内にあるため、攻撃者の命はさらに困難になります。
  2. 別の可能なアプローチは、ライブラリに署名し、ディスクからファイルを読み取った後に OS にセキュリティ チェックを実行させることです。ただし、移植性はあまり高くないかもしれません。
  3. 最も重要なのは、それが本当にあなたが直面している最大のセキュリティ問題ですか? 2 つの呼び出しの間の時間は、数マイクロ (わかりました、おそらくミリ) 秒です。悪いことを行うには、ファイルシステムの奥深くまでハッキングする必要があります。ネットワーク経由でファイルを転送している間にファイルを変更する方が簡単ではないでしょうか? それとも、高度な攻撃者が、JVM をハッキングして、ライブラリがディスクに書き込まれている間にコンテンツを置き換える可能性があると思いませんか? 防弾というものはありませんが、これはあなたが受け入れることができるリスクでしょうか?

興味がないだけです-あなたが得ているエラーは正確には何ですか?

于 2011-11-01T15:16:50.737 に答える