- 著者
-
千葉 雄司
- 出版者
- 一般社団法人情報処理学会
- 雑誌
- 情報処理学会論文誌 (ISSN:18827764)
- 巻号頁・発行日
- vol.46, no.12, pp.3138-3152, 2005-12-15
Java アプリケーションの実行中に,ソフトウェアの脆弱性を利用した攻撃によってメモリが不正に書き換えられても,制御を奪われにくいJava 向け動的コンパイラの可搬な実装方法を提案する.提案する方法は次に示す4 つの要素からなる.(1)動的コンパイル済みコードやディスパッチ表,表引き法による例外処理向けの表を,書き込み不可のページに配置し,攻撃によって書き換えられないようにする.(2)動的コンパイラが生成途中の機械コードを,攻撃によって書き換えられないよう,動的コンパイラを,JavaVM とは別プロセスとして起動する.(3)間接分岐によるメソッド呼び出しの際に制御を奪われないよう,間接分岐の前に,間接分岐先の正当性を検査するコードを挿入する.(4)メソッドからの返戻時に制御を奪われないよう,メソッドごとに返戻先として有効な番地を登録した表を作成し,読み込み専用ページに配置する.そして,メソッドから返戻する際には,表から返戻先番地を求めて間接分岐する.表引きにあたって必要になる,返戻先番地を収めるエントリの番号は呼び出し元が提供する.提案した方法によって生じる定常的オーバヘッドを,SPECjvm98 およびSPECjbb2000 を使って評価した結果,1.59%であることが分かった.This paper shows a portable secure design of a dynamic compiler for Java with following 4 features. (1) To protect method dispatch tables, tables for exception handling and dynamically generated codes, they are placed in read-only pages. (2) To protect codes being generated by the dynamic compiler from overwriting, the dynamic compiler works in its own process. (3) To prevent hijacking in method invocations by indirect call, test code to verify the target address is inserted before indirect call. (4) To prevent hijacking on return, a table that contain valid return address for each method is created and placed in read-only pages. The return code retrieve the table on return, and the index to retrieve the table is given by the caller. Preliminary evaluation using SPECjvm98 and SPECjbb2000 showed overhead by the proposed method is 1.59%.