2.2K 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/
NaITE(長崎IT技術者会)です。 イベントや勉強会の資料を公開していきます! ★NaITE(長崎IT技術者会) https://naite.swquality.jp/
入力値に着目したAndroid 用ファジングシステムの提 案とプロトタイプ実装 佐久間耀大朗 長崎県立大学
目次 研究背景 提案手法 実装 検証 検証結果 課題 まとめ 2
目次 研究背景 提案手法 実装 検証 検証結果 課題 まとめ 3
研究背景 現在、世界中でスマートフォンが普及している 世界の主要40カ国での普及率は約75% そのうちAndroidのシェア率は約72% 普及に伴い、アプリも多く開発されている 入力値に着目したセキュリティテストは少ない 入力値に着目し、新たなセキュリティ関連のバグを見つけ られるテストが必要 4
目次 研究背景 提案手法 実装 検証 検証結果 課題 まとめ 5
提案手法 入力値に着目したテストとしてファジングを用い たテスト手法を提案する ファジングとは、大量の予測不可能なデータ (Fuzz)を与えて意図的に例外を起こさせ、バグ を見つけるテスト手法 世界のスマートフォンのシェア率を考慮し、 Androidをテスト対象とする 6
提案手法の全体像 ② コントロールプログラム Fuzz Fuzz ① ③ ファジング ツール PC 自動入力 ツール USB 入力欄 Fuzz ④ Android 7
ファジングツール Fuzzを生成 生成したFuzzをファイルに保存 ② コントロールプログラム Fuzz Fuzz ①ファジング ツール ③自動入力 ツール PC USB 入力欄 Fuzz ④ Android 8
コントロールプログラム(テストシナリオ) Fuzzファイルの読み込み 一連のアプリケーション操作方法を記述 Fuzz自動入力後に、クラッシュした場合にメインクラス名がホーム画面 のクラス名になることを利用し、クラッシュを検知 クラッシュ原因の特定と表示を行う ② コントロールプログラム Fuzz Fuzz ③自動入力 ツール ①ファジング ツール PC USB 入力欄 Fuzz ④ Android 9
Fuzzの自動入力 Android操作のテスト自動化ツールを利用 テストシナリオに従ってAndroidを自動操作 ② コントロールプログラム Fuzz Fuzz ①ファジング ツール ③自動入力 ツール PC USB 入力欄 Fuzz ④ Android 10
目次 研究背景 提案手法 実装 検証 検証結果 課題 まとめ 11
実装 使用したソフトウェア 使用したハードウェア 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
コントロールプログラム(テストシナリオ) Appium Desktopの画面 の実装 言語はJavaを用いる プログラム作成前に、テスト 対象となるアプリケーション 内の要素名(xpath)を Appium Desktopを用いて取得 する 「xpath」は、アプリケーショ ン内のボタン等を指定する際 に使用する 取得した「xpath」を利用し、 タップやスワイプ等の具体的 な操作方法を記述する 13 アプリケーション操作の具体例
クラッシュを検知する 「currentActivity」というAppiumのコマンド用いて、動作 しているアプリケーション(テスト対象のアプリケーショ ン)のメインクラス名を取得する Fuzzの入力後に再び「currentActivity」を使用し、メイン クラス名が変わっていないか(クラッシュした場合、ホー ム画面のクラス名になる)を確認することでクラッシュし たかを検知する Fuzzが入力し終わるまでクラッシュしなかった場合そのま まテストを終了する 14
クラッシュした原因の特定 Androidアプリケーションのログから原因の特定を行う 「logcat」というコマンドでログを取得できる ログ内には、「System.err」という文字列の後ろにクラッ シュの原因が記述されている これを利用し、該当部分の文字列を抜き出し、クラッシュ の原因として出力結果に表示する 15
目次 研究背景 提案手法 実装 検証 検証結果 課題 まとめ 16
app1 検証 以下の三つのアプリを用いて検証を行う app1:数値の入力エリアを持つ,脆弱性を仕込んだ自 作のアプリケーション app2:標準インストールされているGmailアプリケー ション app3:設定アプリケーションのWi-Fi検索機能 17
テスト仕様 app1 入力エリア(テキストボックス)にFuzzを入力し,回答ボタンを 押す。これをFuzzが無くなるまで繰り返す app2 Gmailのメール作成画面に移動し,件名と本文の欄にFuzzを入力 し,送信ボタンを押す。その後受信フォルダ画面に移動し、再び 作成画面に移動し入力を行う。これをFuzzが無くなるまで繰り返 す app3 設定アプリケーションを開き,ネットワークとインターネットの 設定に移動する。その後,Wi-Fiの項目へ移動しネットワークの 追加へ移動し,SSIDの入力エリアにFuzzを入力し,保存ボタンを 18 押す。これをFuzzが無くなるまで繰り返す
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
結果:app1 値の自動入力、操作の繰り返し に成功 1項目あたりの入力時間は2~3 秒 仕込んだ脆弱性によるクラッ シュを検知した クラッシュの原因と、クラッ シュを起こした値の特定、表示 に成功した app1のファジング出力結果 21
app1のファジング実行時の映像 22
結果:app2及びapp3 値の自動入力、操作の繰り返しに成功 1項目あたりの入力時間は2~3秒 バグの発見は出来なかった 入力したFuzzの数 app2:7938個 app3:16722個 入力時間と操作時間を合わせた時間 app2:約20時間 app3:60時間 23
目次 研究背景 提案手法 実装 検証 検証結果 課題 まとめ 24
課題 入力速度が遅く、テストに時間がかかる 長時間のテストにより、ハードウェアに不具合が起きる 自作アプリケーション以外のアプリケーションのバグは見つ けられなかった 複数のAndroidを用いて、自動入力を並列化し、テスト時間 を短縮する Fuzzの研究や既存のファジングツールの複数利用などでFuzz の質を向上させる 25
目次 研究背景 提案手法 実装 検証 検証結果 課題 まとめ 26
まとめ ファジングを用いたAndroidアプリケーションのテスト手法 を提案 提案した手法を実装し、脆弱性の発見が可能であることを 確認 今後は複数のAndroidを用いたテストの並列化や、Fuzzの 質の向上を行いより効率の良いテスト手法の実装を目指す 27