Java Raula Gaikovina Kula 1 Software Engineering Laboratory
Javaバイトコード比較を用いた ライブラリ再利用検出ツールの提案 〇矢野 裕貴,Raula Gaikovina Kula, 石尾隆,井上克郎 大阪大学 情報科学研究科 1 Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
ライブラリを含むJarファイル • 通常は別ファイルとして使用 Software. jar Library. jar • JARを展開して内部に含まれるファイルをコピーして 使用しているソフトウェアも存在(Fat JAR) – Maven Repositoryに登録されているライブラリのうち,約 13%が他のライブラリを 1つ以上含んでいた Library Software. jar Department of Computer Science, Graduate School of Information Science and Technology, Osaka University 3
脆弱性を含むライブラリの再利用 Google Web Toolkit は多数のライブラリを内 部に含んでいる ドキュメントには再利用されたという情報はあるが, バージョン番号が記述されていない Google Web Toolkit 2. 7. 0 Apache Ant Commons Codec Apache Http. Client Apache Xalan Commons Collections ・・・ Department of Computer Science, Graduate School of Information Science and Technology, Osaka University 4
脆弱性を含むライブラリの再利用 脆弱性が報告されているバージョンのライブラ リが内部に含まれていた – Commons Collections 3. 2. 1 – Apache Xalan 2. 7. 1 Google Web Toolkit 2. 7. 0 Apache Ant 1. 6. 5 Vulnerability Note VU#576313 Commons Codec 1. 8 Apache Http. Client 4. 3. 1 Apache Xalan 2. 7. 1 Commons Collections 3. 2. 1 ・・・ Department of Computer Science, Graduate School of Information Science and Technology, Osaka University #2014 -002 Xalan. Java insufficient 5 secure processing
脆弱性を含むライブラリの再利用 利用者はこれらのライブラリの脆弱性の影響 を受けるリスクがある Google Web Toolkit 2. 7. 0 Apache Ant 1. 6. 5 Vulnerability Note VU#576313 Commons Codec 1. 8 Apache Http. Client 4. 3. 1 Apache Xalan 2. 7. 1 Commons Collections 3. 2. 1 ・・・ Department of Computer Science, Graduate School of Information Science and Technology, Osaka University #2014 -002 Xalan. Java insufficient 6 secure processing
既存研究: バイトコード比較による 再利用元の特定 Jarファイル内に含まれるクラスファイルの比較により コードの再利用を検出する手法 • Software Bertillonage [1] – 複数のライブラリからコードの再利用が行われたときに再 利用元特定が難しい • Software Ingredients [2] – パッケージのリネームが行われた場合に再利用が検出 不可 [1] J. Davies, D. M. German, M. W. Godfrey, and A. Hindle. Software bertillonage: Finding the provenance of an entity. In Proceedings of the 8 th Working Conference on Mining Software Repositories, pages 183– 192, 2011. [2] T. Ishio, R. G. Kula, T. Kanda, D. M. German and K. Inoue. Software Ingredients: Detection of Third-party Component Reuse in Java Software Release. In Proceedings of the 13 th Working Conference on Mining Software Repositories, pages 339 -350, 2016 7 Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
パッケージのリネーム Javaでは,クラスファイル名の衝突を避けるため,パ ッケージという名前空間が用いられる – 再利用が行われる際にパッケージ名を変更するような場 合がある 再利用 Package lib A. class Package X Package Y A. class B. class Library. jar Software. jar Department of Computer Science, Graduate School of Information Science and Technology, Osaka University 8
1. クラスファイルからの ハッシュ値の生成 最終的に,jar ファイルをハッシュ値の多重集合として 扱う – パッケージ名を考慮しないことで,ハッシュ値が衝突する 場合があるため多重集合としている Target. jar [4] Package X A. class B. class Package Y A. class {7 fabc. . . , b 93 d 6. . . , 07 a 51. . . } C. class Target. jar Department of Computer Science, Graduate School of Information Science and Technology, Osaka University 12
手順1: 再利用元候補の選択 • データベース内の各ライブラリに対して,入力ソフト ウェアとハッシュ値が一致するクラス数の割合を計 算 (オーバーラップ値) Target. jar [5] Hash af 3 bc. . . bf 1 dc. . . c 20 b 4. . . da 18 e. . . e 2 cdb. . . 入力ソフトウェア A-1. 0. jar [2] A-2. 0. jar [2] C-1. 0. jar [2] Hash af 3 bc. . . bf 1 dc. . . af 3 bc. . . 368 dd. . . e 2 cdb. . . 2 a 7 cb. . . B-1. 0. jar [2] B-2. 0. jar [3] D-1. 0. jar [3] Hash c 20 b 4. . . da 18 e. . . 4 f 231. . . af 3 bc. . . bf 1 dc. . . c 20 b 4. . . Database データベース 14 Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
手順1: 再利用元候補の選択 • データベース内の各ライブラリに対して,入力ソフト ウェアとハッシュ値が一致するクラスの割合を計算 – 例) A-2. 0. jar は 2つのハッシュ値を持ち 1つが入力と一 致するため 1/2 = 0. 5 Target. jar [5] Hash af 3 bc. . . bf 1 dc. . . c 20 b 4. . . da 18 e. . . e 2 cdb. . . A-1. 0. jar [2] A-2. 0. jar [2] Hash af 3 bc. . . bf 1 dc. . . af 3 bc. . . 368 dd. . . e 2 cdb. . . 2 a 7 cb. . . B-1. 0. jar [2] B-2. 0. jar [3] D-1. 0. jar [3] Hash c 20 b 4. . . da 18 e. . . 4 f 231. . . af 3 bc. . . bf 1 dc. . . c 20 b 4. . . 0. 5 C-1. 0. jar [2] Hash Database 15 Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
手順1: 再利用元候補の選択 • 全てのライブラリに対して計算する A-1. 0. jar [2] Target. jar [5] Hash af 3 bc. . . bf 1 dc. . . c 20 b 4. . . da 18 e. . . e 2 cdb. . . Hash C-1. 0. jar [2] A-2. 0. jar [2] 1. 0 Hash 0. 5 Hash af 3 bc. . . bf 1 dc. . . af 3 bc. . . 368 dd. . . e 2 cdb. . . 2 a 7 cb. . . B-1. 0. jar [2] B-2. 0. jar [3] D-1. 0. jar [3] Hash c 20 b 4. . . da 18 e. . . 1. 0 Hash 0. 7 c 20 b 4. . . da 18 e. . . 4 f 231. . . Hash 0. 5 1. 0 af 3 bc. . . bf 1 dc. . . c 20 b 4. . . Database 16 Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
手順1: 再利用元候補の選択 • オーバーラップ値が最大のライブラリを再利用元候 補とする {A-1. 0. jar,B-1. 0. jar,D-1. 0. jar} A-1. 0. jar [2] Target. jar [5] Hash af 3 bc. . . bf 1 dc. . . c 20 b 4. . . da 18 e. . . e 2 cdb. . . Hash C-1. 0. jar [2] A-2. 0. jar [2] 1. 0 Hash 0. 5 Hash af 3 bc. . . bf 1 dc. . . af 3 bc. . . 368 dd. . . e 2 cdb. . . 2 a 7 cb. . . B-1. 0. jar [2] B-2. 0. jar [3] D-1. 0. jar [3] Hash c 20 b 4. . . da 18 e. . . 1. 0 Hash 0. 7 c 20 b 4. . . da 18 e. . . 4 f 231. . . Hash 0. 5 1. 0 af 3 bc. . . bf 1 dc. . . c 20 b 4. . . Database 17 Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
手順2: 再利用元ライブラリの確定 • 手順1で得られた候補中から再利用元となっている ライブラリを確定する. 候補ライブラリ 入力ソフトウェア A-1. 0. jar [2] Target. jar [5] Hash af 3 bc. . . bf 1 dc. . . c 20 b 4. . . da 18 e. . . e 2 cdb. . . Hash af 3 bc. . . bf 1 dc. . . B-1. 0. jar [2] Hash D-1. 0. jar [3] Hash af 3 bc. . . bf 1 dc. . . c 20 b 4. . . da 18 e. . . 18 Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
手順2: 再利用元ライブラリの確定 • 入力ソフトウェアに含まれる1つのクラスファイルは 1 つの再利用元に由来するとする 候補ライブラリ 入力ソフトウェア A-1. 0. jar [2] Target. jar [5] ? Hash af 3 bc. . . bf 1 dc. . . c 20 b 4. . . da 18 e. . . e 2 cdb. . . ? Hash af 3 bc. . . bf 1 dc. . . B-1. 0. jar [2] Hash D-1. 0. jar [3] Hash af 3 bc. . . bf 1 dc. . . c 20 b 4. . . da 18 e. . . 19 Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
手順2: 再利用元ライブラリの確定 • 条件を満たし,要素数の和が最大の 4となる {A-1. 0. jar, B-1. 0. jar}が結果として確定する A-1. 0. jar [2] Target. jar [5] Hash af 3 bc. . . bf 1 dc. . . c 20 b 4. . . da 18 e. . . e 2 cdb. . . Hash af 3 bc. . . bf 1 dc. . . B-1. 0. jar [2] Hash D-1. 0. jar [3] Hash af 3 bc. . . bf 1 dc. . . c 20 b 4. . . da 18 e. . . 20 Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
手順2: 再利用元ライブラリの確定 • 入力ソフトウェアから,再利用元が確定されたクラス ファイルに対応するハッシュ値を取り除き,手順1に 戻る – 再利用元候補がなくなり次第終了 A-1. 0. jar [2] Target. jar [5] Hash af 3 bc. . . bf 1 dc. . . c 20 b 4. . . da 18 e. . . e 2 cdb. . . Hash af 3 bc. . . bf 1 dc. . . B-1. 0. jar [2] Hash D-1. 0. jar [3] Hash af 3 bc. . . bf 1 dc. . . c 20 b 4. . . da 18 e. . . 21 Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
手順1 (2回目) • 入力が持つ残りのハッシュ値集合に対してオーバー ラップ値を計算 Target. jar [5] Hash af 3 bc. . . bf 1 dc. . . c 20 b 4. . . da 18 e. . . e 2 cdb. . . A-1. 0. jar [2] A-2. 0. jar [2] C-1. 0. jar [2] Hash af 3 bc. . . bf 1 dc. . . af 3 bc. . . 368 dd. . . e 2 cdb. . . 2 a 7 cb. . . B-1. 0. jar [2] B-2. 0. jar [3] D-1. 0. jar [3] Hash c 20 b 4. . . da 18 e. . . 4 f 231. . . af 3 bc. . . bf 1 dc. . . c 20 b 4. . . Database 22 Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
手順1 (2回目) • データベース内の各ライブラリに対して,入力ソフト ウェアとハッシュ値が一致するクラス数の割合を計 算 A-1. 0. jar [2] Target. jar [5] Hash af 3 bc. . . bf 1 dc. . . c 20 b 4. . . da 18 e. . . e 2 cdb. . . Hash A-2. 0. jar [2] Hash 0. 0 C-1. 0. jar [2] Hash af 3 bc. . . bf 1 dc. . . af 3 bc. . . 368 dd. . . e 2 cdb. . . 2 a 7 cb. . . B-1. 0. jar [2] B-2. 0. jar [3] D-1. 0. jar [3] Hash c 20 b 4. . . da 18 e. . . Hash 0. 0 c 20 b 4. . . da 18 e. . . 4 f 231. . . Hash 0. 5 0. 0 af 3 bc. . . bf 1 dc. . . c 20 b 4. . . Database 23 Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
手順2 (2回目) • 候補が1つしかないのでC-1. 0. jarを選択 Target. jar [5] Hash af 3 bc. . . bf 1 dc. . . c 20 b 4. . . da 18 e. . . e 2 cdb. . . C-1. 0. jar [2] Hash e 2 cdb. . . 2 a 7 cb. . . 24 Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
手順1 (3回目) • オーバーラップ値を計算 A-1. 0. jar [2] Target. jar [5] Hash af 3 bc. . . bf 1 dc. . . c 20 b 4. . . da 18 e. . . e 2 cdb. . . Hash A-2. 0. jar [2] Hash 0. 0 C-1. 0. jar [2] Hash af 3 bc. . . bf 1 dc. . . af 3 bc. . . 368 dd. . . e 2 cdb. . . 2 a 7 cb. . . B-1. 0. jar [2] B-2. 0. jar [3] D-1. 0. jar [3] Hash c 20 b 4. . . da 18 e. . . Hash 0. 0 c 20 b 4. . . da 18 e. . . 4 f 231. . . Hash 0. 0 af 3 bc. . . bf 1 dc. . . c 20 b 4. . . Database 25 Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
手順1 (3回目) • 再利用元候補がなくなったため (オーバーラップ値 が全て 0. 0), 検出を終了する A-1. 0. jar [2] Target. jar [5] Hash af 3 bc. . . bf 1 dc. . . c 20 b 4. . . da 18 e. . . e 2 cdb. . . Hash A-2. 0. jar [2] Hash 0. 0 C-1. 0. jar [2] Hash af 3 bc. . . bf 1 dc. . . af 3 bc. . . 368 dd. . . e 2 cdb. . . 2 a 7 cb. . . B-1. 0. jar [2] B-2. 0. jar [3] D-1. 0. jar [3] Hash c 20 b 4. . . da 18 e. . . Hash 0. 0 c 20 b 4. . . da 18 e. . . 4 f 231. . . Hash 0. 0 af 3 bc. . . bf 1 dc. . . c 20 b 4. . . Database 26 Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
検出結果: {A-1. 0. jar[2/2], B-1. 0. jar[2/2], C-1. 0. jar[1/2] } A-1. 0. jar [2] Hash af 3 bc. . . bf 1 dc. . . Target. jar [5] Hash af 3 bc. . . bf 1 dc. . . c 20 b 4. . . da 18 e. . . e 2 cdb. . . B-1. 0. jar [2] Hash c 20 b 4. . . da 18 e. . . C-1. 0. jar [2] Hash e 2 cdb. . . 2 a 7 cb. . . Department of Computer Science, Graduate School of Information Science and Technology, Osaka University 27
検出精度の評価 (実験方法) ① 約230, 000個のライブラリから、ランダムに 選択した 5 -100個を 1つのjarファイルにまと めたものを作成 A-1. 0. jar ランダムに 選択 コピー B-1. 0. jar Target. jar データベース C-1. 0. jar Department of Computer Science, Graduate School of Information Science and Technology, Osaka University 29
検出精度の評価 (実験方法) ② ツールに入力し、出力結果として得られたラ イブラリのリストが正しいかどうかを評価 提案手法 出力結果 (ライブラリのリスト) Target. jar Software Ingredients 30 Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
検出精度の評価 (結果) • 再現率が向上している – 検出アルゴリズムの違いによる precision recall 提案手法 0. 87 0. 98 Software Ingredients 0. 87 0. 96 ※提案手法によって 30分以内に検出が完了したもの 31 Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
実行時間 • 提案手法は計算時間に大きなばらつきが見られる – 候補数に対して指数オーダーで計算時間が増加するた め 提案手法 Software Ingredients Department of Computer Science, Graduate School of Information Science and Technology, Osaka University 32
ケーススタディ: パッケージリネームの検出 実験対象: Elasticsearch-0. 90. 5 – 既存研究のツール(Software Ingredients)ではライブラリ の再利用は検出されなかった – 9つのライブラリをパッケージ名を変更して再利用している との記述(pom. xmlより) • 利用しているクラスファイルのみが含まれる trove 4 j mvel 2 jackson-core jackson-dataformat-smile jackson-dataformat-yaml joda-time netty compress-lzf guava 33 Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
検出結果: POMに記述されていた 9つのライブラリ • バージョン番号はツールによる推定値 ライブラリ名 検出バージョン クラス数 検出クラス数 trove 4 j 3. 0. 3 691 98 mvel 2 2 -2. 1. 5. Final 349 253 jackson-core 2. 2. 3 69 63 jackson-dataformat-smile 2. 2. 2 12 8 jackson-dataformat-yaml 2. 2. 2 112 70 joda-time 2. 3 157 144 netty 3. 7. 0. Final 546 239 compress-lzf 0. 9. 6 26 10 guava 15. 0 -rc 1. jar 453 205 36 Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
検出結果: POMに記述されていた 9つのライブラリ バージョン番号はツールによる推定値 ライブラリ名 検出バージョン クラス数 検出クラス数 trove 4 j 3. 0. 3 691 98 mvel 2 2 -2. 1. 5. Final 349 253 jackson-core 2. 2. 3 69 63 検出対象(Elasticsearch)において,Trove 4 jが含まれるパ jackson-dataformat-smile 2. 2. 2 12 8 ッケージ中(org. elasticsearch. common. trove)のクラスファ jackson-dataformat-yaml 2. 2. 2 112 70 イル 103個中,98個がこのバージョンに対応付けられていた joda-time 2. 3 157 144 - 実際の再利用元バージョンがデータベース内に含ま netty 3. 7. 0. Final 546 239 れていない可能性が高い compress-lzf 0. 9. 6 26 10 guava 15. 0 -rc 1. jar 453 205 37 Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
検出結果: Google Guiceと 関連ライブラリ 再利用されたという記述はなかったが,実際には再 利用されている可能性が高い – 一部機能のみを持つものが優先的に検出されてしまって いる ライブラリ名 検出バージョン クラス数 検出クラス数 guice 2. 0 -no_aop 184 123 guice-multibindings 2 -2. 1. 5. Final 4 4 guice-annotations 2. 2. 3 10 10 guice-assisted-inject 2. 2. 2 7 5 38 Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
検出結果: 誤検出について 小規模なライブラリが誤検出されやすい – Guavaの一部機能のみを実装しているライブラリ – 偶然数個のクラスファイルが一致したものなど ライブラリ名 検出バージョン クラス数 検出クラス数 Guava-annotations r 03 4 4 Reader-files 1. 1. 2 2 1 Guavaのannotationに関する機能のみが含まれるライブラリ hadoop-job-builder 1. 0 6 3 jsr 166 y 1. 7. 0 9 4 jellydoc-annotations 1. 0 3 1 偶然一致? Department of Computer Science, Graduate School of Information Science and Technology, Osaka University 39
- Slides: 40