日本ソフトウェア科学会第 35 回大会 (2018 年度) 講演論文集

Raspberry Pi 環境のためのサンドボックス検出ツール
大山 恵弘

IoT デバイスを攻撃対象とするマルウェアが出現している．IoT デバイス向けのマルウェアを解析するには，仮想的な IoT デバイス環境を提供するサンドボックスの利用が有効である．PC 向けの多くのマルウェアにはサンドボックスを検出して解析を回避する処理が組み込まれているが，今後，IoT デバイス向けのマルウェアにも同様の処理が組み込まれる可能性がある．本研究では，広く普及している IoT デバイスである Raspberry Pi を対象に，そのような処理の実現可能性を評価する．自身が動作している Raspberry Pi 環境がサンドボックスであるかどうかを判定するツールを構築し，そのツールがサンドボックスを検出する能力を実験によって明らかにする．
Malware that attacks IoT devices is emerging. To analyze malware against IoT devices, using a sandbox
that provides a virtual IoT device environment is eﬀective. Many malware programs for PCs have operations
to detect a sandbox and evade analysis, and similar operations can be incorporated into malware against
IoT devices in the future. In this study, we evaluate the feasibility of such operations targetting a widelyused IoT device Raspberry Pi. We develop a tool to determine whether the Raspberry Pi environment inwhich it is running is a sandbox, and clarify by experiments the ability of the tool to detect sandboxes.

アの多くには，サンドボックスを検出して解析を回避

1 はじめにする処理が組み込まれていることが知られている．例

IoT デバイスは爆発的に普及し，現在も無数の IoT

えばそれらの中には仮想マシンを検出すると実行をデバイスがインターネットに接続された状態で稼働終了するものがある．IoT システムに対してもそのよしている．インターネット経由でアクセスできる環境うなマルウェアは作られ始めており，2017 年には既が多数存在することはセキュリティ上の脅威であり，に仮想マシンの検出を試みるマルウェア Amnesia がIoT デバイスに感染するマルウェアも出現し始めてい発見されている [23]．今後出現する IoT デバイス向る [7, 23]．

けのマルウェアの多くにも同様の解析回避処理が組みIoT デバイス向けのマルウェアを解析する必要性も込まれる可能性がある．

急速に高まっている．解析において有効なツールの 1

現在，IoT システムの構築において，Linux/Armつは，仮想的な IoT デバイスの環境を作り出すサンベースのデバイスである Raspberry Pi が利用されるドボックスである．サンドボックスの中でマルウェアことが多くなっている．無数の Raspberry Pi がインを実行することにより，その挙動を効率的に把握できターネットに接続された状態で動作していることは，る．ただし，このようなマルウェアを実際に実行する

Raspberry Pi がマルウェア作者にとって魅力的な攻解析（動的解析）には，マルウェアによる解析回避へ撃対象であることを意味する．実際，Raspberry Piの対策という技術的課題がある．PC 向けのマルウェに感染するマルウェアも既に発見されている [7]．し∗ A Sandbox Detection Tool for Raspberry Pi Envi-

かし，Raspberry Pi 向けのマルウェアが実行する解

ronments.
This is an unrefereed paper. Copyrights belong tothe Author.
Yoshihiro Oyama, 筑波大学, University of Tsukuba.

析回避処理は，未だ十分に明らかにされていない．例
えば，どのような解析回避処理が実現可能であるかや，その効果はどの程度かについては，不明確である．

本研究では，自身が動作している Raspberry Pi 環て，Linux のコンテナを実マシンおよび 5 種類の仮境がサンドボックスであるかどうかを判定するための想マシンと比較している．多くのテストにおいてコ複数の方法を示す．さらに，それらの方法を組み込んンテナが仮想マシンよりも優れていたことを示すとだツール Gosanta を実装し，それらがサンドボックともに，いくつかの方法によってコンテナも検出できスの有無を正しく判定するかどうかを調べる．本研究ることを示している．彼らの研究は本研究に近いが，を通じて，Raspberry Pi ひいては Linux/Arm ベーIntel CPU および Ubuntu を対象に実験を行っていスの IoT デバイスを対象とするマルウェアがサンドる点で本研究と異なる．

ボックスを検出するために利用できる処理を明らかに

SandPrint [24] はサンドボックスの fingerprintingするとともに，それらが組み込まれることの脅威を明を行うシステムである．SandPrint は様々なサンドらかにすることを目指す．

ボックスが出力したマルウェア解析レポートの学習に多くのサンドボックスは仮想マシンを用いて構築さ基づいて，自身が動作する環境がどのサンドボック

れているため，サンドボックスの検出においても仮想スであるかを推定する．SandPrint はサンドボックスマシンの検出が極めて重要である．本稿で述べる処理の種類を推定するものであり，Gosanta のようにサの多くも，サンドボックスに限らない仮想マシンを検ンドボックスの有無を推定するものではない．また，出するものである．ただ，当然ながら仮想マシンを用

SandPrint は，Gosanta とは異なり，Windows 環境いないサンドボックス（例えばコンテナを用いたサンを提供するサンドボックスを扱っている．

ドボックス）も存在するため，本稿ではそれらを検出するための処理も扱う．

Android 環境でサンドボックスを検出する方法についてはいくつかの研究が存在する [11, 17, 21]．An-

droid の下層は Linux であるため，それらの研究と本2 関連するシステムおよび研究研究には多くの共通点が存在する．しかし，Androidサンドボックスや仮想マシンを検出するためのシ環境と Raspberry Pi 環境の間には相異も多く，それステムは多数存在する．例えば，Pafish [14]，Al-らの研究による知見をそのまま Raspberry Pi に適用

Khaser [2]，InviZzzible [1]，Sems [19]，nEther [16]することはできない．例えば，Android 環境ではマがある．これらは Windows OS および Intel CPU

ルウェアはパーミッションを与えられない限り，プロを 対 象 に し て い る た め ，Raspberry Pi 環 境 で 用セスリストを取得することも外部ストレージを読むいることはできない．サンドボックスや仮想マシこともできない．

ンを検出する方法そのものについても多くの研

Paleari ら [15] は，CPU エミュレータを検出する

究 [3–6, 8, 9, 13, 18, 20, 25, 26] が存在するが，それためのコードを自動生成する方法を提案している．そら の ほ ぼ 全 て が や は り Windows OS お よ び Intelの方法では，自動的に大量の命令列を生成，実行し，CPU を対象にしている．

実マシンと仮想マシンで動作が異なる命令列を収集

UNIX で標準的に用いられているシステム管理プする．それらの命令列が CPU エミュレータを検出す

ログラム systemd にはハイパバイザやコンテナなどるためのコードとして利用される．Willems ら [22]の仮想化機構を検出するための仕組みが入っており，は，atomic に実行される命令を利用して CPU エミュ単体のコマンドとして systemd-detect-virt が利レータを検出する方法を示している．これらの方法用可能である．このコマンドは Raspberry Pi 環境では CPU エミュレータにおける命令実行の挙動が，実も利用できる．しかし，後述するように，このコマン装の不備などの理由により，実際の CPU におけるそドは QEMU 上で動作する Raspberry Pi の仮想マシれに忠実ではないことを利用している．後述するが，ンを仮想マシンであると判定しない．

本研究では対象が Arm であり既存の知見がそのままKedrowitsch らの研究 [10] では，ハニーポットをでは適用できないことから，仮想マシンの検出には命構築した際にマルウェアから自身を隠す能力に関し令実行の挙動の違いは用いずに，ファイルの内容や性能情報を用いている．

Ninja [12] は Arm 環境向けのマルウェア解析フレームワークであり，自身が存在しないかのような「透明な」環境を構築することができる．Ninja は Androidを対象に実装されているため，他の OS でそのまま利用することはできない．

3 提案システム
3. 1 概要
Gosanta は，仮想マシン，コンテナ，デバッガなどのサンドボックス構築に利用される機構を検出するための様々なテストを実行する．各テストの後に，そのテストによる判定の結果を表示する．Gosantaは Raspberry Pi 環境，すなわち，CPU が Arm アーキテクチャで OS が Raspbian (Linux) である環境

図1

スクリーンショットを想定して作られている．ただし，一部のテストはRaspberry Pi には依存しておらず，広範囲の Linux

Memsize: ファイル /proc/meminfo からメモリ環境で動作する．Gosanta を実行した際のスクリーサイズを取得する．取得されたメモリサイズが，ンショットを図 1 に示す．

Model テストで取得したモデルが備えているとテストは 2 種類のグループに分けられる．1 つ目
は属性ベーステストであり，OS やデバイスの情報をされているメモリサイズと異なる場合には，環境が仮想マシンであると判断する．

取得するものである．2 つ目は性能ベーステストであSerial: ファイル /proc/cpuinfo から system-

り，所定の時間内に実行できる処理の量を計測するもon-chip のシリアル番号を取得する．シリアル番のである．どちらにおいても，得られた結果をもと号が 0 である場合には，環境が仮想マシンであに，サンドボックスが存在するかどうかを判定する．

ると判断する．

Dmesg: dmesg コマンドを実行して，カーネル3. 2 属性ベーステストのリングバッファの内容を取得する．その中に，以下のテストを順に実行する．

QEMU や VMware などの仮想マシンの存在を示唆

Model: ファイル /sys/firmware/devicetree/

する文字列が含まれる場合には，環境が仮想マシ

base/model からデバイスのモデルを表す文字列ンであると判断する．

を取得する．そのファイルが存在しない場合や，

Tracer: ファイル /proc/self/status の Tracer

取得した文字列に Raspberry Pi という文字列

Pid と書かれた行から，自プロセスが他プロセスが含まれない場合には，環境が Raspberry Pi のによってトレースされているかどうかの情報を実マシンでも Raspberry Pi の仮想マシンでもな取得する．トレースされている場合には，サンドいと判断し，プログラムを即座に終了する．

ボックス内で動いていると判断する．

Ncores: ファイル /proc/cpuinfo から CPU コ

Systemd: systemd-detect-virt コマンドを実ア数を取得する．取得されたコア数が，Model テ行して，systemd による仮想化検出処理を実行

ストで取得したモデルが備えているとされていする．systemd-detect-virt が none 以外の結るコア数と異なる場合には，環境が仮想マシンで果を返したら，環境が仮想マシンであると判断あると判断する．

する．

Nproc: ps コマンドと sysinfo システムコール

るはずの値の半分以下または 2 倍以上である場合にのそれぞれを用いてプロセス数を取得する．2 つは，環境が仮想マシンであると判断する．今回用いたのプロセス数の差が大きいときには，コンテナ内実マシンではその値は 38.4 であり，したがって実マで動いていると判断する．この方法は実際のマルシンと判断される範囲は 19.2 から 76.8 である．

ウェアによっても使用されている [10]．今回の実験では差の閾値を 100 とした．

加えて，文献 [27] で述べられている方法を用いる．
その方法は，所定の時間内に OS の基本処理を実行でInit: ps コマンドを実行して，PID が 1 であるプきる回数を計測するというものである．その回数が，ロセスのプログラム名を取得する．そのプログラ実マシンで計測されるはずの値の半分以下である場

ム名が lxc という文字列を含むならば（典型的合には，サンドボックスが存在すると判断する．OSにはそのプログラム名が init.lxc ならば），コの基本処理としては，実マシンと仮想マシンとの間のンテナ内で動いていると判断する．

性能差が大きいものが選ばれている．それらの例とEnvvar: env コマンドを実行して，container

しては，パイプによるプロセス間通信，プロセスの生という名前の環境変数の有無を検査する．存在成（fork 処理），実行可能プログラムのロードと実行する場合には，コンテナ内で動いていると判断（exec 処理），ページフォルト処理がある．

する．

Procfs: /proc/1/ の下と /proc/self/ の下に

4 実験ある cgroup，environ という名前のファイルの4. 1 環境

中身に container または lxc という文字列が含Gosanta を，(1) 実マシン，(2) 実マシン上に作まれるかどうかを検査する．含まれるならば，コられた LXC コンテナ，(3) QEMU 上に作られた仮ンテナ内で動いていると判断する．加えて，ファ想マシンの上で実行し，各テストが環境をどう判断

イル /proc/1/sched の先頭行から取得できるするかを調べる実験を行った．実験に用いた環境をPID が 1 ではないならば，コンテナ内で動いて表 1，2，3 に示す．実マシンと仮想マシンのハードいると判断する．

ウェアの仕様は厳密には同一ではない．しかし，ど

現在は，デフォルト設定の Raspbian において実行

ちらも CPU アーキテクチャは Armv7 であり，それに高い特権が必要である処理は扱っていない．そのよらの仕様は極めて近い．仮想マシンのハードウェアうな処理には例えば，Processor Feature Register をの仕様は，QEMU のコマンド qemu-system-arm に，読み出す命令（Intel CPU における CPUID 命令に

Raspberry Pi 2 を表すオプション -M raspi2 を与え相当）による CPU 情報の取得や，dmidecode コマンて指定した．実験で用いた LXC のバージョンは 1.0.6

ドによる DMI (Desktop Management Interface) 情である．コンテナ内に実マシンと異なる OS インスタ報の取得がある．これらによっても仮想マシンを検出ンスをインストールすることはせず，実マシンとファできる可能性があるが，マルウェアが管理者権限やイルシステムを共有するコンテナ内でシェルを実行

カーネル権限を既に奪取しているケースは多くない

し，そこから Gosanta を実行した．という観点から，本研究では扱わない．

4. 2 結果
3. 3 性能ベーステスト
まず，dmesg コマンドの実行結果から BogoMIPSの値を取得する †1 ．その値が，実マシンで取得され各テストの判断の結果を表 4 に示す．表中の de-tected はサンドボックスが存在すると判断したことを意味し， — は存在しないと判断したことを意味する．実マシン上では，どのテストでも実マシンである†1 /proc/cpuinfo からも BogoMIPS の値は取得できる．ただし，dmesg コマンドの実行結果と異なり，/proc/cpuinfo 内の値は CPU の周波数の変化に伴って変化するため，現在の周波数に合わせて補正する必要がある．

表1

Machine model
System-on-chip
Architecture
Number of cores
MemoryOS

表2

Raspberry Pi 2 Model B Rev 1.1
BroadCom BCM2836
Armv7 revision 5 (410fc075)
41 GB
Raspbian 8.0 (Linux 4.9.35-v7+)

Raspberry Pi 2 の仮想マシンの仕様

Machine model
System-on-chip
Architecture
Number of cores
MemoryOS

表3

表4

Raspberry Pi 2 の実マシンの仕様

Raspberry Pi 2 Model B
BroadCom BCM2835
Armv7 revision 1 (412fc0f1)
41 GB
Raspbian 8.0 (Linux 4.9.35-v7+)

ModelNcores
Memsize
SerialDmesg
Tracer
SystemdNprocInit
Envvar
ProcfsBogoMIPS
Pipe
Exec
Fork
Forkexec
Pagefault

テストの結果実マシン—————————————————

コンテナ
—
—
—
—
—
—
—
detecteddetected†2

detecteddetected
—
—
—
—
—
—

仮想マシン
—
—
—
detecteddetected——————detecteddetecteddetecteddetecteddetecteddetected

仮想マシンを動作させるホストマシンの仕様

CPU
MemoryOS
Emulator

Intel Core i7-7700 (3.6 GHz)
32 GB
Ubuntu 18.04 (Linux 4.15.0-24-generic)
QEMU 2.11.1

では，systemd-detect-virt がアクセスする仮想化
関連のファイル（/run/systemd/container，/proc/xen/capabilities，/sys/hypervisor/type など）
が，コンテナ内にも仮想マシン内にもなかったため，と判断されている．一方，コンテナ上では，コンテナ何も検出されなかった．Nproc，Init，Envvar，Procfsを検出するためのテストにおいてコンテナを検出さテストでは，各テストが想定するコンテナの特徴が観れており，仮想マシン上では，いくつかのテストで仮測され，コンテナが存在すると判断された．

想マシンを検出されている．

性能ベーステストの詳細を説明する．このテストで

属性ベーステストの詳細を説明する．仮想マシン上は表 1 の実マシンで計測された性能を基準として閾

では，Serial テストにおいて system-on-chip のシリ値を設定した．BogoMIPS テストでは，1 コアあたりアル番号として 0 が読み出された．また，Dmesg テの BogoMIPS の値として実マシン上では 38.0，仮想ストでは，dmesg コマンドの実行結果として以下のマシン上では 125.0 が取得されており，大きな開きが文字列が出力された．

あった．なお，表 3 のホストマシンでの BogoMIPS

mmcblk0:の値は 7200 であった．OS の基本処理を実行できる

mmc0:4567 QEMU! 2.00 GiB

仮想マシン内で認識された SD カードの型番に QEMU

回数を計測するテストでは，コンテナを使ったときのという文字列が含まれている．今回の実験では，仮性能の変化は極めて小さく，どのテストでも実マシン想マシンのコア数やメモリサイズは実マシンのそれと判断された．仮想マシンを使ったときには，どのテに合わせたので，Ncores テストや Memsize テストでストでも，実マシンで計測された回数の半分に満たなは仮想マシンは検出されなかった．Tracer テストはい値が計測された．

プロセストレースの有無を検査するものであるため，当然ながらそのテストではコンテナも仮想マシンも検出されなかった．なお，今回用いたどの環境においても，デバッガやトレーサでプロセストレースをしながら Gosanta を実行した場合には，Tracer テス
トでサンドボックスが検出された．Systemd テスト†2 コンテナ内で別の OS インスタンスを実行した場合には，当該プログラム名は init であり，このテストではコンテナは検出できなかった．

5 まとめと今後の課題
自身が動作する Raspberry Pi 環境がサンドボックスであるかどうかを判定するためのシステム Gosantaを開発した．Gosanta は，実行した多くのテストにおいて，仮想マシンやコンテナなどのサンドボックス構築に利用される機構の存在を正しく判定することができた．Raspberry Pi を対象とするマルウェアも，Gosanta と同様の処理を組み込むことにより，高い精度でサンドボックスの有無を判定できるようになると考える．
今後の課題としては，Raspberry Pi 以外のデバイスへの対応が挙げられる．マルウェアが攻撃対象としている IoT デバイスは Raspberry Pi 以外にも多数存在する．それらのデバイスにおけるサンドボックスの検出方法についても調査，開発を進めることが必要である．長期的には，IoT デバイス向けのサンドボックスを開発する上での指針となる知識体系を構築することが必要であると考えている．
謝辞 本研究において，株式会社富士通研究所の小久保博崇氏，筑波大学の忠鉢洋輔氏より有用な助言をいただいた．本研究の一部は JSPS 科研費 17K00179の助成を受けている．

参 考 文 献[ 1 ] InviZzzible, https://github.com/CheckPointSW/InviZzzible.
[ 2 ] Al-Khaser, https://github.com/LordNoteworthy/
al-khaser/.
[ 3 ] Branco, R. R., Barbosa, G. N., and Neto, P. D.:
Scientific but Not Academical Overview of Malware Anti-Debugging, Anti-Disassembly and AntiVM Technologies, Black Hat USA 2012, 2012.
[ 4 ] Brengel, M., Backes, M., and Rossow, C.: Detecting Hardware-Assisted Virtualization, Proceedings of the 13th International Conference on Detection of Intrusions and Malware and Vulnerability
Assessment, 2016, pp. 207–227.
[ 5 ] Chen, P., Huygens, C., Desmet, L., and Joosen,
W.: Advanced or Not? A Comparative Study of
the Use of Anti-debugging and Anti-VM Techniquesin Generic and Targeted Malware, Proceedings ofthe 31st IFIP International Conference on ICT
Systems Security and Privacy Protection, 2016,
pp. 323–336.
[ 6 ] Chen, X., Andersen, J., Mao, Z. M., Bailey,M., and Nazario, J.: Towards an Understanding ofAnti-virtualization and Anti-debugging Behavior inModern Malware, Proceedings of the 38th Annual
IEEE/IFIP International Conference on Dependable Systems and Networks, 2008, pp. 177–186.
[ 7 ] Dr.Web: Doctor Web examines two LinuxTrojans, https://news.drweb.com/show/?i=11320&
lng=en, 2017.
[ 8 ] Ferrand, O.: How to detect the Cuckoo Sandbox
and to Strengthen it?, Journal of Computer Virology and Hacking Techniques, Vol. 11, No. 1(2015),pp. 51–58.
[ 9 ] Garfinkel, T., Adams, K., Warfield, A., andFranklin, J.: Compatibility is Not Transparency:
VMM Detection Myths and Realities, Proceedingsof the 11th Workshop on Hot Topics in OperatingSystems, 2007.
[10] Kedrowitsch, A., Yao, D., Wang, G., andCameron, K.: A First Look: Using Linux Containers for Deceptive Honeypots, Proceedings of the2017 Workshop on Automated Decision Making forActive Cyber Defense, 2017, pp. 15–22.
[11] Maier, D., Müller, T., and Protsenko, M.:
Divide-and-Conquer: Why Android Malware cannot be stopped, Proceedings of the 9th International
Conference on Availability, Reliability and Security,
2014, pp. 30–39.
[12] Ning, Z. and Zhang, F.: Ninja: Towards Transparent Tracing and Debugging on ARM, Proceedings of the 26th USENIX Security Symposium,
2017, pp. 33–49.
[13] Oyama, Y.: Trends of anti-analysis operations ofmalwares observed in API call logs, Journal of Computer Virology and Hacking Techniques, Vol. 14,
No. 1(2018), pp. 69–85.
[14] Pafish (Paranoid Fish), https://github.com/a0rtega/pafish/.
[15] Paleari, R., Martignoni, L., Roglia, G. F., andBruschi, D.: A fistful of red-pills: How to automatically generate procedures to detect CPU emulators,
Proceedings of the 3rd USENIX Workshop on Offensive Technologies, 2009.
[16] Pék, G., Bencsáth, B., and Buttyán, L.: nEther:In-guest Detection of Out-of-the-guest Malware Analyzers, Proceedings of the 4th European Workshop
on System Security, 2011.
[17] Petsas, T., Voyatzis, G., Athanasopoulos, E.,
Polychronakis, M., and Ioannidis, S.: Rage Against
the Virtual Machine: Hindering Dynamic Analysisof Android Malware, Proceedings of the 7th European Workshop on System Security, 2014.
[18] Raﬀetseder, T., Kruegel, C., and Kirda, E.: Detecting System Emulators, Proceedings of the 10thInformation Security Conference, 2007, pp. 1–18.
[19] Sems, https://github.com/AlicanAkyol/sems/.
[20] Shi, H., Alwabel, A., and Mirkovic, J.: Cardinal Pill Testing of System Virtual Machines, Proceedings of the 23rd USENIX Security Symposium,2014, pp. 271–285.
[21] Vidas, T. and Christin, N.: Evading Android
Runtime Analysis via Sandbox Detection, Proceedings of the 9th ACM Symposium on Information, Computer and Communications Security,
2014, pp. 447–458.
[22] Willems, C., Hund, R., Fobian, A., Felsch, D.,
Holz, T., and Vasudevan, A.: Down to the Bare
Metal: Using Processor Features for Binary Analysis, In Proceedings of the 28th Annual Computer
Security Applications Conference, 2012, pp. 189–198.
[23] Xiao, C., Zheng, C., and Jia, Y.: New
IoT/Linux Malware Targets DVRs, Forms Botnet, https://researchcenter.paloaltonetworks.
com/2017/04/unit42-new-iotlinux-malware-targetsdvrs-forms-botnet/, 2017.

[24] Yokoyama, A., Ishii, K., Tanabe, R., Papa, Y.,
Yoshioka, K., Matsumoto, T., Kasama, T., Inoue,D., Brengel, M., Backes, M., and Rossow, C.: SandPrint: Fingerprinting Malware Sandboxes to Provide Intelligence for Sandbox Evasion, Proceedingsof the 19th International Symposium on Research inAttacks, Intrusions and Defenses, 2016, pp. 165–
187.
[25] 大山恵弘: マルウェアが実行する耐解析処理の定量的傾向, 日本ソフトウェア科学会第 34 回大会講演論文集, 2017.
[26] 大山恵弘: 動的マルウェア解析においてスリープ時間を短縮する方式, コンピュータセキュリティシンポジ
ウム 2017 論文集, 2017, pp. 487–494.
[27] 大山恵弘: Raspberry Pi 環境におけるステルス性の高い仮想マシン検出, 情報処理学会研究報告 コンピュー
タセキュリティ（CSEC）, Vol. 2018-CSEC-81, 2018.