---
title: 6th長崎QDG　「Android 用ファジングツールの適用及びその性能評価」
tags:  #naite #長崎qdg #ファジング  
author: [NaITE（長崎ＩＴ技術者会）](https://www.docswell.com/user/naite)
site: [Docswell](https://www.docswell.com/)
thumbnail: https://bcdn.docswell.com/page/MLELY2317R.jpg?width=480
description: 2022年4月15日(金)に出島メッセ長崎にて「6th長崎QDG」を開催しました。 ご講演者より許可を頂いた資料につきましてNaITEにて公開いたします。（公開版資料は当日版資料と内容が異なっていることがあります）  ★6th長崎QDG 　https://nagasaki-it-engineers.connpass.com/event/222448/  ★NaITE（長崎ＩＴ技術者会） 　https://naite.swquality.jp/
published: April 15, 22
canonical: https://www.docswell.com/s/naite/KLNV8Z-6thQDG_3
---
# Page. 1

![Page Image](https://bcdn.docswell.com/page/MLELY2317R.jpg)

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


# Page. 2

![Page Image](https://bcdn.docswell.com/page/54JMN8D5EW.jpg)

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


# Page. 3

![Page Image](https://bcdn.docswell.com/page/ZPJRD54ZE9.jpg)

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


# Page. 4

![Page Image](https://bcdn.docswell.com/page/NPEX1K21EX.jpg)

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


# Page. 5

![Page Image](https://bcdn.docswell.com/page/63EK25MMJD.jpg)

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


# Page. 6

![Page Image](https://bcdn.docswell.com/page/4L734KY2J5.jpg)

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


# Page. 7

![Page Image](https://bcdn.docswell.com/page/V87DQ356JG.jpg)

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


# Page. 8

![Page Image](https://bcdn.docswell.com/page/4VJPL4DZ78.jpg)

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


# Page. 9

![Page Image](https://bcdn.docswell.com/page/L2EVQX1M7Q.jpg)

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


# Page. 10

![Page Image](https://bcdn.docswell.com/page/Z57GWV2XJL.jpg)

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


# Page. 11

![Page Image](https://bcdn.docswell.com/page/V4EQ36P5EP.jpg)

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


# Page. 12

![Page Image](https://bcdn.docswell.com/page/DKJ414YVJ1.jpg)

実装
使用したソフトウェア

使用したハードウェア
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


# Page. 13

![Page Image](https://bcdn.docswell.com/page/PLE1G4647G.jpg)

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


# Page. 14

![Page Image](https://bcdn.docswell.com/page/8GEWKXWZE2.jpg)

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


# Page. 15

![Page Image](https://bcdn.docswell.com/page/W47ZZ65L73.jpg)

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


# Page. 16

![Page Image](https://bcdn.docswell.com/page/KYJ6Z29MJV.jpg)

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


# Page. 17

![Page Image](https://bcdn.docswell.com/page/5GJ5W2NQE4.jpg)

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


# Page. 18

![Page Image](https://bcdn.docswell.com/page/V9E2Q45W7R.jpg)

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


# Page. 19

![Page Image](https://bcdn.docswell.com/page/5D7YWMK9JM.jpg)

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


# Page. 20

![Page Image](https://bcdn.docswell.com/page/2VEN9WRDE8.jpg)

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


# Page. 21

![Page Image](https://bcdn.docswell.com/page/GY792XM8E3.jpg)

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


# Page. 22

![Page Image](https://bcdn.docswell.com/page/5G7852LZ7D.jpg)

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


# Page. 23

![Page Image](https://bcdn.docswell.com/page/ML7LY2L1JR.jpg)

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


# Page. 24

![Page Image](https://bcdn.docswell.com/page/54EMN8M57W.jpg)

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


# Page. 25

![Page Image](https://bcdn.docswell.com/page/ZPERD5VZ79.jpg)

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


# Page. 26

![Page Image](https://bcdn.docswell.com/page/NP7X1KZ17X.jpg)

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


# Page. 27

![Page Image](https://bcdn.docswell.com/page/637K258MED.jpg)

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


