6th長崎QDG 「Android 用ファジングツールの適用及びその性能評価」

155 Views

April 15, 22

スライド概要

2022年4月15日(金)に出島メッセ長崎にて「6th長崎QDG」を開催しました。
ご講演者より許可を頂いた資料につきましてNaITEにて公開いたします。(公開版資料は当日版資料と内容が異なっていることがあります)

★6th長崎QDG
 https://nagasaki-it-engineers.connpass.com/event/222448/

★NaITE(長崎IT技術者会)
 https://naite.swquality.jp/

profile-image

NaITE(長崎IT技術者会)です。 イベントや勉強会の資料を公開していきます! ★NaITE(長崎IT技術者会)  https://naite.swquality.jp/

シェア

埋め込む »CMSなどでJSが使えない場合

関連スライド

各ページのテキスト
1.

入力値に着目したAndroid 用ファジングシステムの提 案とプロトタイプ実装 佐久間耀大朗 長崎県立大学

2.

目次  研究背景  提案手法  実装  検証  検証結果  課題  まとめ 2

3.

目次 研究背景 提案手法  実装  検証  検証結果  課題  まとめ  3

4.

研究背景       現在、世界中でスマートフォンが普及している 世界の主要40カ国での普及率は約75% そのうちAndroidのシェア率は約72% 普及に伴い、アプリも多く開発されている 入力値に着目したセキュリティテストは少ない 入力値に着目し、新たなセキュリティ関連のバグを見つけ られるテストが必要 4

5.

目次  研究背景 提案手法  実装  検証  検証結果  課題  まとめ 5

6.

提案手法  入力値に着目したテストとしてファジングを用い たテスト手法を提案する  ファジングとは、大量の予測不可能なデータ (Fuzz)を与えて意図的に例外を起こさせ、バグ を見つけるテスト手法  世界のスマートフォンのシェア率を考慮し、 Androidをテスト対象とする 6

7.

提案手法の全体像 ② コントロールプログラム Fuzz Fuzz ① ③ ファジング ツール PC 自動入力 ツール USB 入力欄 Fuzz ④ Android 7

8.

ファジングツール  Fuzzを生成  生成したFuzzをファイルに保存 ② コントロールプログラム Fuzz Fuzz ①ファジング ツール ③自動入力 ツール PC USB 入力欄 Fuzz ④ Android 8

9.

コントロールプログラム(テストシナリオ)  Fuzzファイルの読み込み  一連のアプリケーション操作方法を記述  Fuzz自動入力後に、クラッシュした場合にメインクラス名がホーム画面 のクラス名になることを利用し、クラッシュを検知  クラッシュ原因の特定と表示を行う ② コントロールプログラム Fuzz Fuzz ③自動入力 ツール ①ファジング ツール PC USB 入力欄 Fuzz ④ Android 9

10.

Fuzzの自動入力  Android操作のテスト自動化ツールを利用  テストシナリオに従ってAndroidを自動操作 ② コントロールプログラム Fuzz Fuzz ①ファジング ツール ③自動入力 ツール PC USB 入力欄 Fuzz ④ Android 10

11.

目次  研究背景  提案手法 実装  検証  検証結果  課題  まとめ 11

12.

実装 使用したソフトウェア  使用したハードウェア Fuzzの生成:「JQF」 文字列だけのものや決められた範 囲内のランダムな数値などが生成 可能 JQFの動作に用いた長崎県立大学情報 セキュリティ演習室の仮想環境 OS CPU メモリ ストレージ Ubuntu 18.04 1 4GB 300GB Appiumの動作に用いたPC  Androidの自動操作ツール: 「Appium」 コマンドラインで実行する OS CPU メモリ ストレージ Ubuntu 18.04 1 4GB 300GB テスト対象のアプリケーションを実行したスマートフォン モデル番号 製品名 RAM ROM SH-M13 AQUOS zero2 12 8GB 256GB

13.

コントロールプログラム(テストシナリオ) Appium Desktopの画面 の実装     言語はJavaを用いる プログラム作成前に、テスト 対象となるアプリケーション 内の要素名(xpath)を Appium Desktopを用いて取得 する 「xpath」は、アプリケーショ ン内のボタン等を指定する際 に使用する 取得した「xpath」を利用し、 タップやスワイプ等の具体的 な操作方法を記述する 13 アプリケーション操作の具体例

14.

クラッシュを検知する  「currentActivity」というAppiumのコマンド用いて、動作 しているアプリケーション(テスト対象のアプリケーショ ン)のメインクラス名を取得する  Fuzzの入力後に再び「currentActivity」を使用し、メイン クラス名が変わっていないか(クラッシュした場合、ホー ム画面のクラス名になる)を確認することでクラッシュし たかを検知する  Fuzzが入力し終わるまでクラッシュしなかった場合そのま まテストを終了する 14

15.

クラッシュした原因の特定  Androidアプリケーションのログから原因の特定を行う  「logcat」というコマンドでログを取得できる  ログ内には、「System.err」という文字列の後ろにクラッ シュの原因が記述されている  これを利用し、該当部分の文字列を抜き出し、クラッシュ の原因として出力結果に表示する 15

16.

目次  研究背景  提案手法  実装 検証  検証結果  課題  まとめ 16

17.

app1 検証  以下の三つのアプリを用いて検証を行う app1:数値の入力エリアを持つ,脆弱性を仕込んだ自 作のアプリケーション app2:標準インストールされているGmailアプリケー ション app3:設定アプリケーションのWi-Fi検索機能 17

18.

テスト仕様  app1  入力エリア(テキストボックス)にFuzzを入力し,回答ボタンを 押す。これをFuzzが無くなるまで繰り返す  app2  Gmailのメール作成画面に移動し,件名と本文の欄にFuzzを入力 し,送信ボタンを押す。その後受信フォルダ画面に移動し、再び 作成画面に移動し入力を行う。これをFuzzが無くなるまで繰り返 す  app3  設定アプリケーションを開き,ネットワークとインターネットの 設定に移動する。その後,Wi-Fiの項目へ移動しネットワークの 追加へ移動し,SSIDの入力エリアにFuzzを入力し,保存ボタンを 18 押す。これをFuzzが無くなるまで繰り返す

19.

app1 入力するFuzz  app1  2桁のランダムな数字  app2  ランダムな10文字のアルファベッ トの文字列を入力する  app3  桁の多い数字の入力を試行するも のとし,符号付き64ビットlong型 (-9,223,372,036,854,775,808~ 9,223,372,036,854,775,807) のラ ンダムな値を入力する app2 app3 19

20.

目次  研究背景  提案手法  実装  検証 検証結果  課題  まとめ 20

21.

結果:app1  値の自動入力、操作の繰り返し に成功  1項目あたりの入力時間は2~3 秒  仕込んだ脆弱性によるクラッ シュを検知した  クラッシュの原因と、クラッ シュを起こした値の特定、表示 に成功した app1のファジング出力結果 21

22.

app1のファジング実行時の映像 22

23.

結果:app2及びapp3 値の自動入力、操作の繰り返しに成功  1項目あたりの入力時間は2~3秒  バグの発見は出来なかった  入力したFuzzの数 app2:7938個 app3:16722個   入力時間と操作時間を合わせた時間 app2:約20時間 app3:60時間 23

24.

目次  研究背景  提案手法  実装  検証  検証結果 課題  まとめ 24

25.

課題      入力速度が遅く、テストに時間がかかる 長時間のテストにより、ハードウェアに不具合が起きる 自作アプリケーション以外のアプリケーションのバグは見つ けられなかった 複数のAndroidを用いて、自動入力を並列化し、テスト時間 を短縮する Fuzzの研究や既存のファジングツールの複数利用などでFuzz の質を向上させる 25

26.

目次  研究背景  提案手法  実装  検証  検証結果  課題 まとめ 26

27.

まとめ  ファジングを用いたAndroidアプリケーションのテスト手法 を提案  提案した手法を実装し、脆弱性の発見が可能であることを 確認  今後は複数のAndroidを用いたテストの並列化や、Fuzzの 質の向上を行いより効率の良いテスト手法の実装を目指す 27