Java Bytecode Modification and Applet Security

Slides:



Advertisements
Similar presentations
Web アプリをユーザー毎に カスタマイズ可能にする AOP フレームワーク
Advertisements

モバイルエージェントシステムの実装 エージェント移動(状態とコードの一括移送) エージェント移動の特徴 システム構成 エージェントプログラム
6.4継承とメソッド 6.5継承とコンストラクタ 11月28日 時田 陽一
Remote Method Invocation
セキュリティ機構のオフロードを考慮した仮想マシンへの動的メモリ割当
2006年11月22日 植田龍男 Webサービス II (第9回) 年11月22日 植田龍男.
ROBOMEC2007チュートリアル RTミドルウエア講習会
Struts1.xの脆弱性(CVE ) に対するSDEの対処:推奨タイプ (サンプルソースコードの公開)
アプレット (Applet)について.
アルゴリズムとデータ構造1 2007年6月12日
アルゴリズムとプログラミング (Algorithms and Programming)
実行時のメモリ構造(1) Jasminの基礎とフレーム内動作
コンパイラ演習番外編 (その2): JVM コンテスト
情報伝播によるオブジェクト指向プログラム理解支援の提案
Java2セキュリティ, クラスローダー,ベリファイア
リファクタリングのための 変更波及解析を利用した テスト支援ツールの提案
Javaプログラムの実行まで バイト Javaの コード 実行 ソースコード Java ファイル名 ファイル名 abc.java
ユーザ毎にカスタマイズ可能な Web アプリケーション用のフレームワークの実装
動的スライスを用いたバグ修正前後の実行系列の差分検出手法の提案
RMI ソフトウェア特論 第6回 /
Flyingware : バイトコード変換による 安全なエージェントの実行
IPv6アドレスによる RFIDシステム利用方式
既存Javaプログラムの バイトコード変換による 機能分散
進捗 Javaバイトコード変換による 細粒度CPU資源管理
コンパイラの解析 (2) GCJのデータ構造 - 1.
型付きアセンブリ言語を用いた安全なカーネル拡張
細かい粒度でコードの再利用を可能とするメソッド内メソッドのJava言語への導入
プログラミング言語入門 手続き型言語としてのJava
細かい粒度で コードの再利用を可能とする メソッド内メソッドと その効率の良い実装方法の提案
独習JAVA 6.8 コンストラクタの修飾子 6.9 メソッドの修飾子 6.10 ObjectクラスとClassクラス 11月28日(金)
安全なモバイルエージェント システム Flyingware のための 仮想ディスクの実現
暗黙的に型付けされる構造体の Java言語への導入
WebサービスII (第7回) 2007年11月7日 植田龍男.
コンパイラの解析 (3) クラスとインスタンスの初期化.
アスペクト指向言語による 例外処理の記述方法の改善
プログラミング言語入門.
動的スライスを用いたバグ修正前後の実行系列の差分検出手法
ユーザ毎にカスタマイズ可能な Webアプリケーションの 効率の良い実装方法
Javaプログラムの変更を支援する 影響波及解析システム
Javaバイトコード変換による 細粒度CPU資源管理 ~Progress Report for SWoPP2001~
パソコンのしくみ ハードウェア OS(Operating System) アプリケーション NEC DOS
Recoveryアドバイスをもつ アスペクト指向システム
Webプロキシ HTTP1.0 ヒント CS-B3 ネットワークプログラミング  &情報科学科実験I.
Intel SGXを用いた仮想マシンの 安全な監視機構
Javaへの変換による 安全なC言語の実装
new Calc(7,3).divInt()実行前
Java における 先進的リフレクション技術
仮想環境を用いた 侵入検知システムの安全な構成法
Cell/B.E.のSPE Isolationモードを用いた監視システム
JAVAバイトコードにおける データ依存解析手法の提案と実装
ソフトウェア工学 知能情報学部 新田直也.
仮想マシンと物理マシンを一元管理するための仮想AMT
Josh : バイトコードレベルでのJava用 Aspect Weaver
Cell/B.E. のSPE上で動作する 安全なOS監視システム
ユビキタスコンピューティングの ための ハンドオーバー機能付きRMIの実装
プログラム分散化のための アスペクト指向言語
プログラミング基礎a 第9回 Java言語による図形処理入門(1) Javaアプレット入門
JAVA入門⑥ クラスとインスタンス.
18. Case Study : Imperative Objects
プログラムの一時停止時に 将来の実行情報を提供するデバッガ
動的スライスを用いたバグ修正前後の実行系列の差分検出手法の提案
動的スライスを用いたバグ修正前後の実行系列の差分検出手法の提案
Microsoft Office Project Server 2007
コードクローン解析に基づく デザインパターン適用候補の検出手法
回帰テストにおける実行系列の差分の効率的な検出手法
Javaとは Javaとはオブジェクト指向言語でJava VM(Java仮想マシン)と呼ばれるプログラム上で動作します。
オブジェクト指向言語における セキュリティ解析アルゴリズムの提案と実現
VPNクライアント接続 サーバー保守のための安全な経路+作業者単位のアクセス制御 簡単な図 (網羅性より象徴性)
計算機プログラミングI 第10回 2002年12月19日(木) メソッドの再定義と動的結合 クイズ メソッドの再定義 (オーバーライド)
Josh : バイトコードレベルでのJava用 Aspect Weaver
Presentation transcript:

Java Bytecode Modification and Applet Security 2001/05/16 Mizukami Tatsuo

概要 信頼できないJavaのプログラムをバイトコードの変換によってより安全に実行する。 そのためのテクニックを発表。

注意 著者はJava2以前の仕様を前提にしている。 Java2の正式リリースは1998年12月8日 この論文は98にSubmit

問題背景 筆者がいうJavaアプレットのセキュリティの主な問題 具体的にいうと…… Denial of Service Attack Disclosure of Confidential Information Attack Spoofing Attack Annoyance Attack 具体的にいうと……

Denial of Service Attack CPUやメモリ等の占有 大量のウィンドウの表示 ファイルシステムの占有

Disclosure of Confidential Information Attack Java Applet内で得られた情報をもとのサーバーに漏らす。 ファイルアクセス可能なアプレットA, Bがあり、ネットアクセス不可能なAがネットアクセス可能なBとファイルを中継して、情報を漏洩する。

Spoofing Attack 間違った情報を表示して、ユーザーに不適切な選択をさせる。 これへの対処は難しい。 論文では出力情報に対するインターフェースを強固にし、その引数チェックを行っている。

Annoyance Attack ユーザーにとって不快な操作を行う。 音を永久に鳴らしつづける 不快な画像を表示 大量のWindowを表示するのもこちらにも分類できる

別な分類 Securityに対する攻撃は別な文献(Securing Java)では次のように分類している System Modification Invasion of Privacy Denial of Service Antagonism

解決方法 ダウンロードするクラスファイルを解釈して、危険な操作を行うクラスの修正or置換を行う。 WindowクラスをSafe$Windowに置き換え、ウィンドウの生成個数のチェック ネットワークアクセスの際に、接続先のマシン名やポート番号を調べる。

FinalやInterfaceには不可能 テクニック 著者は2つの修正方法をとっている。 置き換え 個所 長所 短所 Class 簡単 FinalやInterfaceには不可能 Method どのようなものでもOK 置き換え操作に時間がかかる

Class-level Modification 危険なクラスを、事前に検査を行うその子クラスで置換する方法。 Constant poolのクラス名を置き換える

Method-level Modification 危険な呼び出しを行うメソッドを、事前に検査を行う別なクラスメソッドに置換する方法。 例えば、下記のように変換する void foo(Thread t, int i) { Safe$Thread .setPriority(t, i); } void foo(Thread t, int i) { t.setPriority(i); }

Method-level Modification(2) バイトコードを見比べると void foo(java.lang.Thread, int) aload_1 iload_2 invokevirtual #2 <void setPriority(int)> return void foo(java.lang.Thread, int) aload_1 iload_2 invokestatic #2 <void setPriority(Thread,int)> return

Method-level Modification(3) 修正前のコンスタントプール

Method-level Modification(4) 修正後のコンスタントプール

実装 サーバーとクライアントの間にバイトコードの修正を行うプロクシをおく。 長所 短所 実装が楽。 簡単にブラウザ等の拡張が可能。 余計な時間が必要 クラスファイルかどうかわからない時がある。

性能評価 実際にPythonでProxy serverを作成

仮想性能評価 仮にCでProxy serverを作成すると

実行性能評価 修正されたコードの性能評価 Safeguarding code Overhead Safe$Frame for Window Attack 4% Safe$Socket for Network Accesses Safe$AppletContext for URL Spoofing 5% Safe$AppletContext for Sound Object Control 55%

筆者の結論 ある種の危険な動作をあらかじめ予防し、ユーザーがそれをカスタム化できる変換テクニックを提案した。 バイトコード変換はProxy Serverで行ったが、将来的にはクラスローダで行うべきである。

意見 CPUやメモリのResource Control等が問題として提起はされているものの、全く解決されていない。 Java2のAccess Controlを細かく設定できるように拡張したほうが、性能がよくなり、実装上のバグも少なくなる。 JavaのReflection機能を使用しても大丈夫?