そのSMS、安全ですか?自分で調べてみる方法について
2020年12月23日 水曜日
CONTENTS
【IIJ 2020 TECHアドベントカレンダー 12/23(水)の記事です】
TL;DR
身に覚えのないSMSには気を付けよう
あやしいファイルを手に入れたときは取り扱いに注意しよう
不審なファイルの表層解析をしてみよう
プロローグ
こんにちは。IIJ入社2年目、セキュリティ本部で開発とセキュリティアナリストの兼業をしています。naotです。
突然ですが、みなさんの元にこんなSMSが届いたことはありませんか?
あっ、これ…見たことある…!
となった方も多いのではないでしょうか。
このメッセージに含まれている、
「お荷物のお届けにあがりましたが不在の為持ち帰りました。ご確認ください。」
でGoogle検索してみてください。
Malicious、つまり危険なものであると既に多数の報告が上がっていることがわかります。
IPAのセキュリティセンターからも2018年にこんな資料が発行されています。
私は以前からこのようなSMSについて少し調べており、数年前から存在する手法にも関わらず、未だ多くの方が騙されてしまっていることが気がかりでした。
自分でも調べて、受け取った人が悪意のあるSMSかどうかについて確認する方法を考えてみたい・書いてみたいと思っていたものの、これまではなかなかこういったメッセージが届いてくれませんでした。
今回やっと現物のSMSを入手することができたため、調査してみました。
記事の前半は、あやしいSMSについて調査する方法を考えてみたので、参考にしてみてください。
後半は、もう少し深く調査をするための入り口として、実際にどのような手法が用いられているのかを確認してみるために、表層解析を実践してみました。
URLを調べてみる
このSMSに書かれているURLにアクセスしたら何が起こるのかを調べるのに、一番手っ取り早いのは実際に開いてみることです。
しかし、届いているこのURLをタップして直に開くのには抵抗がありますし、実際に開いてしまったら端末に何らかの被害が及ぶかもしれません。
そこで、アグスネット株式会社さんのaguse(https://www.aguse.jp/)を利用して、URLをチェックしてみます。
すると、結果を得ることができました。
入力したURLはページ遷移をして、あるapkファイルのURLに辿り着きます。
apkファイルとは、Android用のソフトウェアパッケージファイルです。
Android端末にアプリケーションをインストールすることができます。
荷物の受け取りに関するURLなのに、どうしてapkファイルが…?
この時点で、不審なURLである可能性が高まります。
ちょっとでもあやしいものは開かない方が安全ですので、そこまでわかれば十分という方はここで調査をやめてしまっても良いと思います。
aguse以外に、urlscan.io(https://urlscan.io/)もURLを調査・観察する際に個人的によく使います。
直接Webページを見なくても、ページに存在するリンク先や挙動をまとめてくれているので便利です。
その他にも、フィッシングサイトか否かの判定の際に使えるPhishTank(https://www.phishtank.com/)や、情報提供等によってMaliciousなURLが集まるURLhaus(https://urlhaus.abuse.ch/)、オンラインサンドボックスであるANY.RUN(https://any.run/)などを使って調査するのも良いと思います。
VirusTotal(https://www.virustotal.com/)もよく用いられるサービスです。
こうしたSMSやメールに書かれているURLですが、URLのパラメータやURL自体が個人のメールアドレスや電話番号に紐づいている可能性があります。
URLへのアクセスが発生してしまうaguseやurlscan.io、ANY.RUNなどを使う際は注意が必要です。
メールアドレスや電話番号と紐づいているURLの場合は、それらのメールアドレス・電話番号が存在するという情報を送り主が得てしまいます。
また、こうしたサービスを使うと入力値がサービス側に保存される可能性があることを忘れてはいけません。
urlscan.ioを見ると分かるのですが、入力された値が公開されるサービスもあります。
表向きには公開されていなくても、課金することでほかのユーザが入力したものや添付したファイルが見えるサービスもあります。
本当に入力していいものなのかどうか、自分で見分ける必要があります。
今回は入力される値やサイトに渡されるパラメータですが、ファイル自体をこうした調査サイトに上げる際も注意が必要です。
ファイルの中に機微な情報が含まれていませんか?
個人情報が含まれている・社外秘が含まれているファイルがVirusTotalなどのファイルについて調査できるサイトにアップされていることがよくあります。
一見これらのアップロードされたファイルが第三者に入手されることは無いように見えますが、有料版や企業版のライセンスがあれば他の方がアップロードされたファイルを入手することができるサービスが多々存在します。
インターネット上に公開されてしまっても良いファイルであること確認してからアップロードしましょう。
参考:VirusTotalへアップロードされる機微情報
apkファイルは何のファイルなのか
【注意!】ここから先の調査は、マルウェアに感染してしまう可能性があります。
私は隔離された環境上にVirtualMachineを立て、必要なとき以外はネットワークを遮断した状態で解析に臨んでいます。
ここでの検体の採取目的は注意喚起記事を書くためのものであり、第三者への配布や第三者の端末での実行目的のものではありません。
ここからは、上記の隔離環境下のVirtualMachine(以下、VM)に環境を移します。
VM上でURLをwgetすると綺麗に難読化されたJavaScriptのコードを手に入れることができました。
このコードの一部分が、aguseで調査した際に手に入れることができたURLにページを遷移させます。
そのURLから、yPgXdJjWoHlEa.apk というファイルを手に入れることができます。
Android環境で動かせるファイルということはわかりましたが、このファイルはどんなことができるのでしょうか。
自分でできる範囲で調べてみようと思います。
表面的なことを調べてみる
コマンドライン上でファイルを調べていきます。
$ file yPgXdJjWoHlEa.apk yPgXdJjWoHlEa.apk: Java archive data (JAR)
apkファイルならJAR形式なのは理解できます。
JARとは、ZIP形式に基づくファイル形式です。コンパイルされた複数のJavaプログラムやそれらが利用する画像等を一つにまとめたものになります。
次に、ファイル内に読める文字がないか探ってみます。
stringsコマンドで見てみましょう。デフォルトでは、ファイルの4文字以上の可読文字を抽出してくれます。
$ strings yPgXdJjWoHlEa.apk
AndroidManifestという文字が見えたり、
xmlファイルやpngファイルがあることがわかります。
ファイルのハッシュ値を調べてみて、検索してみましょう。
ハッシュ値の算出には、md5sumコマンドを使います。md5アルゴリズム形式でのハッシュ値を計算してくれます。
ファイルを直接添付して調べるのではなく、ハッシュ値を調べる方がお手軽で、かつファイル自体を他のサービスのデータベースに残すことなく調べられます。
$ md5sum yPgXdJjWoHlEa.apk
Virus Totalのファイルの検索欄にハッシュ値を入力してみます。
No matches found と言われてしまいました。
また、Google検索でもマッチしないようです。
ファイルの中身を見てみる
apkファイルはunzipコマンドで解凍できると調べたものの、それでは中身のファイルが壊れてしまい、きれいに文字を読み取ることができませんでした。
そこで、apktool(https://ibotpeaches.github.io/Apktool/)を使います。
apktoolはAndroidアプリを解析できるツールです。
これで中身を見てみましょう。
$ apktool d yPgXdJjWoHlEa.apk
yPgXdJjWoHlEaという名前でディレクトリが作られ、その中にapkファイルをばらしたものが入っています。
AndroidManifest.xmlを見てみます。
大量のパーミッションに関する記述が見えます。
これを見れるだけでも、どんな権限を要求してくるアプリケーションなのか分かるため、インストールして良いものかどうかという判別の材料になります。
見たところ、SMSを送る権限まで要求しているようです。
アイコンのic_launcherも気になります。
BROADCAST_SMSという文字も見えます。
このアプリはSMSを送る機能を持っていそうです。
ディレクトリ内を探ったところ、res/drawable-xhdpi/にic_launcher.pngというファイルを見つけました。これが、どういうわけか、見覚えのあるWebブラウザ的アイコンでした。画像は載せられないのですが、Chromeのアイコンに酷似しています。
どうしてこういったアイコンを使っているのでしょう…?
ディレクトリ内の他のファイルを漁ってみると、smaliディレクトリには.smali形式のファイルが入っており、これがプログラム部分のようです。
smaliファイルは、通常どのAndroidアプリケーションにも含まれておりプログラムの本体であるclasses.dexという機械語ファイルを人間が読めるように変換したものになります。
smaliファイルを解読することで、より詳しい挙動を見ることができるでしょう。
しかし、それより気になるのが、assetsディレクトリに含まれている
assets/azepkwatgfzdwfhupfjhonenpdvy/1p0gueo
というファイルです。
fileコマンドで調べてもデータとしか出てこず、stringsコマンドで調べても可読性のある文字が見えません。
ここまで出た情報を整理すると、
- Androidアプリケーション(apkファイル)
- SMSを送信するアプリケーション?
- 某Webブラウザのアイコンをしている
- assetsディレクトリに特徴的なファイルがある
このアプリがマルウェアであるという当たりをつけて、
「apk SMS Chrome assets malware」
という検索文字列でGoogle検索してみました。
すると、気になる記事が出てきます。
https://www.nic.ad.jp/ja/materials/iw/2018/proceedings/d2/d2-1-ishimaru.pdf
https://www.mcafee.com/blogs/other-blogs/mcafee-labs/android-banking-trojan-moqhao-spreading-via-sms-phishing-south-korea/
このアプリはもしかしたらMoqHaoという名前のマルウェアか、それに近い存在かもしれません。
あやしいapkファイルが何なのかは、難しいことをしなくても手順を追って見えてきたと思います。
これは、このアプリが既に多くの方に解析されているものであるからでしょう。
もし未知のapkファイルに出会った場合は、少し前に書いたようにAndroidManifest.xmlをまずじっくりと眺めてみるのがどんなアプリであるか調べるための糸口になると思います。
また、もう少し細かく調べたいと思った際は、smaliファイルをJavaプログラムに変換するなども有効な手段だと考えます。
まとめ
私が今回後半で行ったようなことは、マルウェア解析の中でも表層解析の一部です。
マルウェア解析には段階があり、一般に
(易しい) 表層解析<動的解析<静的解析 (難しい)
の順番に難しくなっていきます。
一番簡単な表層解析の部分であれば、このようにマルウェア解析入門者でも比較的簡単に手を出すことができます。
まずはメッセージに書いてあることについて調査してみて、ファイルの取り扱いに注意することができるのであれば、気になるファイルを調べてみるのも良いと考えました。
この記事に書いたことが、不審なSMSが届いて不安な方への有効な情報になれば嬉しいです。
もし次を書く機会があれば、今度は動的解析について入門する方法を考えてみたいと思います。
最後まで読んでいただきありがとうございました!