バイトコード変換を用いた

安全なモバイルエージェント
システム Flyingware のための
仮想ディスクの実現
筑波大
東工大
筑波大
筑波大
大塚紀子
千葉 滋
新城 靖
板野肯三
モバイルエージェントを使った
プログラム例
 企業による顧客に対する
商品の宣伝
企業
 商品の宣伝
 商品の宣伝のため、実行中に
画像ファイルが大量に必要
 商品の申し込み
 注文書を他のアプリケーション
Agent
Agent
(Result)
顧客
からも使いたい
エージェントの移動以外にファイルの移動も必要
注文
ディスクを利用するエージェント
 画像ファイルとともに移
動、表示するエージェン
ト
 注意点
 移動先マシンでは、アク
セス制限がありうる
 制限にふれないプログ
ラミングが必要
malicious
innocent
access
Javaセキュリティ・ポリシー
NO
ディスク
問題点
 実行中にディスクにアクセスしないように、ファイル
を運ぶプログラムを書く必要がある
Agent
変換
表示
01000110
01101101
10001100
バイト配列
メモリ中に
データを保持
読み込み
プログラミングが面倒
File
Flyingware
 電子メールで移動するモバイ
ルエージェントシステム
送信者
 プラットフォームが必要ない
 Java言語が実行できる環境であ
れば実行可能である
 常時接続の必要はない
 通信回数が大幅に削減される
Agent
(Result)
Agent
受信者
Agent2
move
受信者(2)
本研究の提案: 仮想ディスク
 仮想ディスクの概念
Agent
エージェントは自由に使える
メモリ上のディスク(仮想ディスク)
移動先のディスク(実ディスク)
実ディスク上にファイルがなくても
エージェントの実行が可能
access
file 仮想ディスク
Javaセキュリティ・ポリシー
file
NO
ディスク
仮想ディスクの生成と移動
 実ディスクの一部をコピーした仮想ディスクを
エージェントと一緒に移動させる
Agent + 仮想ディスク
Agent
Agent
access
file 仮想ディスク
file 仮想ディスク
copy
Javaセキュリティ・ポリシー
送信側
(企業)
file
ディスク
Javaセキュリティ・ポリシー
file
NO
ディスク
受信側
(顧客)
プログラマの負担軽減
 プログラマはJava通常のファイルアクセスAPIを
使ってエージェントを書ける
 Serializableインタフェースも自動的に実装
Agent
Agent
変換
表示
読み込み
File
表示
01000110
01101101
10001100
バイト配列
読み込み
File
アプリケーションの開発の流れ
 開発者が作成する部分は通常のAPIを使っ
たアプリケーションプログラムだけになる
import java.io.*;
import java.util.*;
アプリケーション
プログラム
エージェント生成
Agent + 仮想ディスク
public class Ponta()
{
…..
Agent
バイトコード変換
Access
import java.io.*;
import java.util.*;
public class Ponta()
{
…..
一部変更
実行
仮想
ディスク
本システムの実装
 仮想ディスク用のクラスライブラリ
 Java 標準のクラスライブラリと同じAPIを提供
 エージェントに含まれて移動する
 バイトコード変換するプログラム
 実ディスクにアクセスするプログラムを仮想ディス
クにアクセスするように自動変換する
 クラスライブラリ Javassist [Chiba00] を利用
java.ioパッケージ内のクラス


File
InputStream
 ByteArrayInputStream
 FileInputStream・・・・・・・・(1)
FilterInputStream
 BufferedInputStream
 DataInputStream
 LinrNumberInputStream
 PushbackInputStream
 ObjectInputStream
 PipedInputStream
 SequenceInputStream
OutputStream
 ByteArrayOutputStream





 FileOutputStream・・・・・・(2)



FilterOutputStream
 BufferedOutputStream
 DataOutputSTream
 PrintStream
ObjectOutputStream
PipedOutputStream
FilePermission
RandomAccessFile
Reader
 BufferedReader
 LineNumberReader
 CharArrayReader
 FilterReader
 PushbackReader
 InputStreamReader
 FileReader・・・・・・・・・(3)

 PipedReader
 StringReader
Writer
 BufferedWriter
 CharArrayWriter
 FilterWriter
 OutputStreamWriter
 FileWriter ・・・・・・・・・(4)



PipedWriter
PrintWriter
StringWriter
アプリケーションの変換(前)
 実ディスク上のファイルにアクセスするアプリ
ケーションを自動変換する
public class Foo() {
FileInputStream fin =
new FileInputStream(ファイル名);
:
fin.read();
}
アプリケーションの変換(後)
 実ディスク上のファイルにアクセスするアプリ
ケーションを自動変換する
public class Foo()
implements java.io.Serializable {
VDInputStream fin =
new VDInputStream(ファイル名);
:
fin.read();
}
評価アプリケーション
 仮想ディスクを評価するアプリケーション:
Shopping with Agent
 画像や商品データなどのファイルを使用
企業
Agent
(Result)
Agent
顧客
注文
変更した箇所
 バイトコード変換でShopping with Agent(クラス数
17)を自動変換した箇所
変更されたクラス
java.io.Serializable
java.io.FileInputStream
java.io.FileOutputStream
java.io.FileReader
java.io.FileWriter
javax.swing.ImageIcon
変更箇所
17
0
0
2
1
8
機能制限された場所での実行
 Flyingware を実行するために最低限必要なアクセ
ス権





classpathなどJavaの実行環境を調べる権利
ウィンドウを出す権利
ネットワーク通信をする権利
スレッド機能を使う権利
リフレクション機能を使う権利
 これらを与えるとエージェントは実行できる
ファイルアクセスを禁止した状態でも
エージェントは実行可能
関連研究
 SoftwarePot [加藤ら‘02]
 特別なミドルウェアによりモバイルエージェントが
特定のディスク領域にしかアクセスできないよう
に制限
 システムコールの引数の書き換えにより実現
 エージェントの移動先で特別なソフトウェアが必要
 本研究
 バイトコード変換により実現
 エージェントの移動先で特別なソフトウェアが不要
まとめ
 安全なモバイルエージェントシステムを実現した
 仮想ディスクを一緒に移動させることでエージェントを安
全に実行できる
 通常のAPIの開発なのでプログラマの負担を軽減できる
アプリケーションを作成して確認した
 java.io内の基本クラスの仮想ディスクAPIを作成すること
でストリームクラス全てを仮想ディスクに対応させた
 今後の課題
 対応していないクラスの実装をする