組込みソフトウェアのテストを目的とした CPUエミュレータ上での異常注入手法 東 誠† 山本 哲男‡ 早瀬 康裕† 石尾 隆† 井上 克郎† † ‡ 2009/11/6 大阪大学大学院情報科学研究科 立命館大学総合理工学院情報理工学部 SIGSE-166-19 1 Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University 発表内容 • 背景 – 組込みシステムの信頼性 – 組込みソフトウェアのテストの問題点 – 本研究の目的 • 提案手法 • ケーススタディ • 考察 SIGSE-166-19 Department of Computer Science, Graduate School of Information Science and Technology, Osaka University 2 2009/11/6 組込みシステムの信頼性 • 組込みシステムは,専用の外部デバイスと組 込みソフトウェアから成り立つ 外部デバイス:機器の外部から受け取った入力を 変換してソフトウェアに出力する装置 携帯電話の場合,ボタンやタッチパネル,カメラなど • 組込みシステムには高い信頼性が求められ るものがある – ペースメーカーが停止すると人命の危機に陥る – 携帯電話内の個人情報が読み取られる SIGSE-166-19 Department of Computer Science, Graduate School of Information Science and Technology, Osaka University 3 2009/11/6 組込みソフトウェアの故障 信頼性を向上させるには,組込みソフトウェア の故障に対処する必要がある – 特定の状況で外部デバイスから特定の入力列を 受け取った際に,故障が発生することがある • 短期間で通信を繰り返すと,携帯電話端末の動作が 不安定になる[1] • 携帯電話でメール作成中,「題名」を入力直後に「本 文」を入力すると,操作ができなくなる場合がある[2] – 以降,組込みソフトウェアの故障を発生させる可 能性のある入力を,異常な入力と呼ぶ [1] FOMA M1000 | お客様サポート | NTTドコモ, http://www.nttdocomo.co.jp/support/trouble/data/smart_phone/m1000/ [2]重要なお知らせ : 「FOMA D900i」をご愛用のお客様へ | お知らせ | NTTドコモ , http://www.nttdocomo.co.jp/info/notice/page/040817_00.html SIGSE-166-19 Department of Computer Science, Graduate School of Information Science and Technology, Osaka University 4 2009/11/6 組込みソフトウェアのテストの問題点 • 異常な入力を用いたテストには手間がかかる – テストの度に外部デバイスから受け取る入力値を 調整しなければならない – ソースコードを書き換えて入力値を自動的に書き 換えるには,ビルドし直す必要がある – デバッガで入力値を書き換えるには,細かい作 業を大量に行う必要がある • テストには様々な入力が必要になるため,そ れらの用意に必要な手間は無視できない SIGSE-166-19 Department of Computer Science, Graduate School of Information Science and Technology, Osaka University 5 2009/11/6 入力を用いたテストを容易にする ツール ソフトウェアに異常な入力を注入する FIG[3]は関数の呼び出しを横取りし,代わりの返 り値を返す → 外部デバイスから入力を受け取る関数の呼び 出しを横取りすれば,異常な入力の注入が可能 main関数 main(){ read(); ・ ・ ・ ・ ・ ・ 呼び出す FIG 代わりの返り値を返す 返り値を返す read関数 read(){ アクセスする 外部デバイス ・ ・ ・ return input; } 入力を渡す [3] P. Broadwell, N. Sastry, and J. Traupman, FiG: A Prototype Tool for Online Verification of Recovery Mechanisms Proc. ACM ICS SHAMAN Workshop, June 2002. SIGSE-166-19 Department of Computer Science, Graduate School of Information Science and Technology, Osaka University 6 2009/11/6 組込みソフトウェアのテストに FIGを利用する際の問題点 外部デバイスから入力を受け取る際に関数を 利用しない組込みソフトウェアがある メモリからの読み込みと同じ方法を利用する 外部デバイス専用のアドレスを指定 組込みソフトウェア LDR ADDR ADD MOV ・ ・ ・ ・ ・ ・ メモリアドレスにアクセスする 外部デバイス FIG 横取りできない 入力を渡す SIGSE-166-19 Department of Computer Science, Graduate School of Information Science and Technology, Osaka University 7 2009/11/6 本研究の着眼点 組込みシステムには,外部デバイスがメモリ アドレスに対応付けられているものがある その組込みソフトウェアが外部デバイスから入力 を受け取るには,CPUのロード命令を使用する → ロード命令を横取りすれば,組込みソフトウェ アに異常な入力を注入することができる SIGSE-166-19 Department of Computer Science, Graduate School of Information Science and Technology, Osaka University 8 2009/11/6 本研究の目的 • 目的:外部デバイスから受け取る入力を用い た組込みソフトウェアのテストを容易にする • 手段:ロード命令を横取りしてソフトウェアに異 常な入力を注入する SIGSE-166-19 Department of Computer Science, Graduate School of Information Science and Technology, Osaka University 9 2009/11/6 発表内容 • 背景 – 組込みシステムの信頼性 – 組込みソフトウェアのテストの問題点 – 本研究の目的 • 提案手法 • ケーススタディ • 考察 SIGSE-166-19 Department of Computer Science, Graduate School of Information Science and Technology, Osaka University 10 2009/11/6 提案手法 異常な入力を注入する機構をCPUエミュレー タに加え,ロード命令を横取りする – 組込みソフトウェアのテストには,CPUや外部 デバイスのエミュレータを用いることが多い 外部デバイスと同時にソフトウェアを開発する際,外 部デバイスが未完成の時にもテストをするため – CPUに比べ,機構を加えるのが容易 ハードウェアよりもソフトウェアの方が加工が容易 SIGSE-166-19 Department of Computer Science, Graduate School of Information Science and Technology, Osaka University 11 2009/11/6 異常な入力を注入する手順 ロード命令 CPUエミュレータ プログラム メモリアドレスにアクセスする メモリアドレスにアクセスする アクセスする LDR ADDR ADD MOV ・ ・ ・ ・ ・ ・ 異常な入力を 注入する 外部デバイス または そのエミュレータ 異常注入機構 ロード命令のロード元が 外部デバイスか調べる ロード元が外部デバイスなら 受け取った入力値を破棄し, 新しい入力値を設定する 入力を渡す 入力を渡す SIGSE-166-19 Department of Computer Science, Graduate School of Information Science and Technology, Osaka University 1 2 3 4 5 6 7 8 9 * 0 # 12 2009/11/6 注入内容の指定方法 プログラムの実行前に,ユーザは異常注入 設定ファイルに指定内容を記述 – 算出式:新しい入力値を計算するための数式 – 異常な入力を注入する条件 条件式:利用する算出式を選ぶための数式 異常注入設定ファイル 関数A メモリアドレスa : 0x10000000 条件式A-a-1 : 現在の入力値が 5 算出式A-a-1 : 変数temp 条件式A-a-2 : 変数temp が0以下 算出式A-a-2 : 現在の入力値 + 1 異常注入機構 異常な入力の 注入を指定 指定内容に従って, 異常な入力を注入する ・ ・ ・ SIGSE-166-19 Department of Computer Science, Graduate School of Information Science and Technology, Osaka University 13 2009/11/6 注入の条件として指定可能な要素 1/2 • メモリアドレス – ロード元が外部デバイスか判断するために必要 – この要素は条件に必須で,他の要素はオプション • 関数名 指定された関数が実行されている間のみ,異常 な入力を注入することが可能 • 全ての状況で異常な入力を注入すると,ソフトウェア の動作が遅くなるから • 異常な入力によって故障が発生するのは,特定の機 能を実行している時に限定されるから SIGSE-166-19 Department of Computer Science, Graduate School of Information Science and Technology, Osaka University 14 2009/11/6 注入の条件として指定可能な要素 2/2 • 条件式のオペランドに利用可能な値 – 定数 – プログラム中の変数 プログラムの状況を考慮 – 現在の入力値 特定の入力値を異常な入力値に変更 プログラム 異常注入設定ファイル 条件式A-a-1 : 変数temp が 20 算出式A-a-1 : 現在の入力値 + 1 条件式A-a-2 : 現在の入力値が1 算出式A-a-2 : -999 switch(temp){ case 10: ・ ・ ・ 状況を考慮 case 20: ・ ・ ・ ・ ・ ・ SIGSE-166-19 Department of Computer Science, Graduate School of Information Science and Technology, Osaka University 15 2009/11/6 算出式のオペランドに利用できる値 • 定数 • プログラム中の変数 • 現在の入力値 これを用いた演算結果を新しい入力値とすれば, 入力値が部分的に変更された状況を模倣できる 例:センサの検出結果がノイズの影響を受けた場合 異常注入設定ファイル 条件式A-a-1 : 現在の入力値が0x00000001 算出式A-a-1 : 入力値の3ビット目を1に ・ ・ ・ SIGSE-166-19 Department of Computer Science, Graduate School of Information Science and Technology, Osaka University 16 2009/11/6 発表内容 • 背景 – 組込みシステムの信頼性 – 組込みソフトウェアのテストの問題点 – 本研究の目的 • 提案手法 • ケーススタディ • 考察 SIGSE-166-19 Department of Computer Science, Graduate School of Information Science and Technology, Osaka University 17 2009/11/6 ケーススタディ 提案手法をCPUエミュレータに実装し,ソフト ウェアに異常な入力を注入 CPUエミュレータはskyeye C言語で実装されているため,ロード用関数が異常注 入用関数を呼び出すように改変した 提案手法を用いれば,組込みソフトウェアの テストが容易に行えるようになることを確認 実行が困難な処理を異常な入力の注入で実行 SIGSE-166-19 Department of Computer Science, Graduate School of Information Science and Technology, Osaka University 18 2009/11/6 実験対象 Rockboxというデジタルオーディオプレイヤー のファームウェアに含まれるSERIAL0関数 シリアルポートから受信するデータの転送率を取 得し,それに応じた処理を行う → 殆ど取得される機会がない転送率への処理を 実行させるのは困難 SIGSE-166-19 Department of Computer Science, Graduate School of Information Science and Technology, Osaka University 19 2009/11/6 実験内容 現在の転送率を取得する際に,SERIAL0関 数の処理に必要な転送率を注入 – 1つの処理につき,1組の条件式と算出式を記述 – 通常の転送率と,殆ど取得される機会がない転 送率の両方を注入するように指定 異常注入設定ファイル SERIAL0関数 通常の 転送率への処理 殆ど取得される 機会がない 転送率への処理 switch(temp){ case 0xFE: ・ ・ ・ default: 条件式A-a-1 : 現在の転送率が0x0D 算出式A-a-1 : 0xFE 条件式A-a-1 : 現在の転送率が0x4E 算出式A-a-1 : 0x00 ・ ・ ・ ・ ・ ・ ・ ・ ・ SIGSE-166-19 Department of Computer Science, Graduate School of Information Science and Technology, Osaka University 20 2009/11/6 実験結果 SERIAL0関数内の全処理が実行できた 計31行の指定内容を記述し, 13の処理を実行 異常注入設定ファイルの内容を変更しつつ,計5回プ ログラムを起動 提案手法でテストが容易に行えることを確認 – 異常注入設定ファイルを2行書き換えるだけで, 実行する処理を追加または変更できた – 取得される頻度に関わらず様々な転送率を注入 し,それに応じた処理が実行できた SIGSE-166-19 Department of Computer Science, Graduate School of Information Science and Technology, Osaka University 21 2009/11/6 発表内容 • 背景 – 組込みシステムの信頼性 – 組込みソフトウェアのテストの問題点 – 本研究の目的 • 提案手法 • ケーススタディ • 考察 SIGSE-166-19 Department of Computer Science, Graduate School of Information Science and Technology, Osaka University 22 2009/11/6 注入内容を決める指針 異常な入力を注入する目的は組込みソフト ウェアの故障を発見するため → 故障が発生する状況を漏れなくテストでき るように注入内容を指定すべき – できる限り多くの処理を実行するように注入 – 故障を発生させる可能性の高い入力を注入 SIGSE-166-19 Department of Computer Science, Graduate School of Information Science and Technology, Osaka University 23 2009/11/6 指定すべき注入内容の特定方法 • 他のテスト手法で作成した入力値に加減算 • プログラム中の条件分岐全てを網羅するよう に,注入する入力値を指定 ソースコードの静的解析によって自動化可能 • 過去の故障から,異常な入力の傾向を調査 – 発生時に実行していた機能 – ソフトウェアが入力を受け取った外部デバイス – 異常な入力の値 SIGSE-166-19 Department of Computer Science, Graduate School of Information Science and Technology, Osaka University 24 2009/11/6 故障発見に対する有用性 • 短期間で通信を繰り返す時に発生する故障 [1]は,連続で入力を注入すれば発見可能 割り込みを連続で発生させる機能によって実現 既に実装している • 「題名」から「本文」の入力で発生する故障[2] は,特定の順で入力を注入すれば発見可能 注入する値を格納するキューによって実現 まだ実装していない [1] FOMA M1000 | お客様サポート | NTTドコモ, http://www.nttdocomo.co.jp/support/trouble/data/smart_phone/m1000/ [2]重要なお知らせ : 「FOMA D900i」をご愛用のお客様へ | お知らせ | NTTドコモ , http://www.nttdocomo.co.jp/info/notice/page/040817_00.html SIGSE-166-19 Department of Computer Science, Graduate School of Information Science and Technology, Osaka University 25 2009/11/6 まとめ • テストに手間がかかる組込みソフトウェアを容 易にテストする手法を提案 CPUエミュレータのロード命令を横取り → 異常な入力をソフトウェアに注入 • 今後の課題 – 提案手法によるソフトウェアの故障の発見 – 指定すべき注入内容を特定する方法の適用 – 注入する値を格納するキューの追加 SIGSE-166-19 Department of Computer Science, Graduate School of Information Science and Technology, Osaka University 26 2009/11/6 2009/11/6 SIGSE-166-19 27 Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University 以降,質疑応答用 SIGSE-166-19 Department of Computer Science, Graduate School of Information Science and Technology, Osaka University 28 2009/11/6 SIGSE-166-19 Department of Computer Science, Graduate School of Information Science and Technology, Osaka University 29 2009/11/6 割り込み機能の実装 • 割り込みを行う条件として指定可能な要素 – ソースコード中の行番号 – 前に実行した割り込みからの経過時間 • 時間の指定単位および測定方法を,より実際 の組込みシステムに近づける必要がある – 実行した命令数で指定および測定 – 命令毎に実行に必要な時間を定めて測定 – 外部デバイスから入力を受け取るのに必要な ウェイトを考慮 SIGSE-166-19 Department of Computer Science, Graduate School of Information Science and Technology, Osaka University 30 2009/11/6 FIGの関数呼び出し横取り方法 • Linux の環境変数 LD_PRELOAD を利用 LD_PRELOAD に横取りしたい関数と,代わり に実行する関数を指定すれば,横取りが可能 • FIGが横取りを行う手順 1. ソフトウェアの実行前にユーザが異常な入力を 注入する内容をファイルに記述 2. ファイルから横取りしたい関数の代わりになる 関数を自動的に生成し,LD_PRELOADに指定 注入する値を代わりの関数の返り値に設定 SIGSE-166-19 Department of Computer Science, Graduate School of Information Science and Technology, Osaka University 31 2009/11/6 提案手法の実装 skyeye に,以下の機能を追加 – 関数名に対応するメモリアドレスの範囲を取得 求めた範囲をプログラムカウンタの値と比較すること により,指定された関数が実行中か判断できる – ロード命令を横取りして,新しいロード値を設定 – 異常注入設定ファイルの算出式,条件式を構文 解析して数式として利用 – グローバル変数に対応するメモリアドレスを取得 数式の利用時に,グローバル変数の値を取得できる SIGSE-166-19 Department of Computer Science, Graduate School of Information Science and Technology, Osaka University 32 2009/11/6 提案手法とFIGの差別化 1/2 • Rockboxには外部デバイスから入力を受け 取る関数があるため,FIGも利用可能 様々な機種を想定しているため,様々な外部デ バイスに対応する必要がある • Rockbox以外の組込みソフトウェアでも,FIG が利用できるものは考えられる OSが提供する関数を用いて外部デバイスから入 力を受け取っているソフトウェア SIGSE-166-19 Department of Computer Science, Graduate School of Information Science and Technology, Osaka University 33 2009/11/6 提案手法とFIGの差別化 2/2 しかし,FIGが利用できなくても,提案手法な ら注入が可能なソフトウェアは存在する 例:ペースメーカーの組込みソフトウェア • 専用の外部デバイスにのみ対応している • 機能が限定されているため,OSを利用する可能性が 低い SIGSE-166-19 Department of Computer Science, Graduate School of Information Science and Technology, Osaka University 34 2009/11/6 例外処理の検知機能をテストする必 要性 異常な入力が例外処理の検知機能で検知で きないことがある 検知機能の条件で網羅していない異常な入力が 存在する 検知機能の条件が適切かをテストする必要 がある SIGSE-166-19 Department of Computer Science, Graduate School of Information Science and Technology, Osaka University 35 2009/11/6 例外処理の対処機能をテストする必 要性 組込みシステムや外部デバイスの種類に よって,適切な例外処理が必要になる – 携帯電話のボタンなら,入力がない時と同じ処理 – 携帯電話のネットワークなら,通信履歴の整合性 チェック – ペースメーカなら,機能を制限して動作を継続 各入力に対して実行される対処内容が適切 かをテストする必要がある SIGSE-166-19 Department of Computer Science, Graduate School of Information Science and Technology, Osaka University 36 2009/11/6 SIGSE-166-19 Department of Computer Science, Graduate School of Information Science and Technology, Osaka University 37 2009/11/6
© Copyright 2024 ExpyDoc