KDL BLOG

スマホアプリの脆弱性診断って何してるの?

スマホアプリ開発向けの便利なツールやサービスが増え、手軽に開発できるようになってきた一方で、アプリの脆弱性による情報漏えいのニュースも目にするようになりました。このブログでは、スマホアプリのセキュリティ対策の必要性、脆弱性とは何者なのか、スマホアプリの診断は何をしているのかを、ざっくり解説します。

なぜ脆弱性診断をするのか

サービス品質のセキュリティと品質の関係で考えてみましょう。製品やサービスの品質をモデル化した「狩野モデル」で言えば、脆弱性がないということは「当たり前の品質」に相当します。これは、例えば扇風機であれば、風を起こすなどの基本機能や羽のガードがついているなど最低限の製品の安全性に相当するものです。

kanoumodel.jpg

当たり前のことができていないと、がっかりの度合いもおおきいですよね。それどころか、クレジットカード情報など顧客情報の流出となると企業の信用問題に発展し、大きなダメージを受けることになります。

どこが狙われるのか

スマホアプリはどこが狙われるのでしょうか?

身近な例えで言えば、家の留守を狙う泥棒なら空いた窓やピッキングしやすい鍵などを狙います。万引きなら店員から死角になる場所など。野球なら、隙を見て盗塁したり、技術が高い選手はピンポイントに打ち分けたり。

共通しているのは、「強固じゃなさそうなところを狙う」というところです。

例えば、バックエンドサーバーや、データベース、認証基盤をクラウドにおいて、WebAPIを通じてアプリから呼び出すという構成の場合ならどこを狙うか考えてみましょう。

spapp001.png

脆弱性診断の方法(WebAPIとネットワーク)

ここからは、脆弱性診断の方法をご紹介します。WebAPIとネットワークの診断は、Webアプリケーションの脆弱性診断とだいたい同じです。

spappsec002.png

WebAPIが攻撃されると、クラウド上のデータベースにあるデータの漏えいや、機能の不正利用につながるなどのリスクがあります。診断ではWebAPIの仕様に合わせてツールおよび手作業による疑似攻撃診断を行います。

ネットワークを攻撃されると、通信ののぞき見や改ざんのリスクがあります。例えばIDやパスワードを入力してログインすればその情報が、住所やメールアドレスなどの個人情報を入力して登録すれば、その個人情報がネットワーク上に流れます。ネットワークの脆弱性による漏えいでは、例えばホテルやカフェなどの公衆のネットワーク上でのぞき見されるようなケースがあります。診断では、通信内容が暗号化されているかどうかを検査します。

脆弱性診断の方法(アプリ)

スマホアプリの脆弱性診断では、スマホにダウンロードしたアプリのファイルを調べて脆弱性がないかどうかを診断します。

spappsec004.png

KDLの脆弱性診断サービスでは、AndroidとiOSに対応しています。今回は、Androidアプリを例にざっくりと何をしているのかをご紹介します。

診断では主に次の3つの方法で診断を行います。

  • APKファイルの解析
  • 端末内データの解析
  • その他不正操作

APKファイルや端末内データの解析は、まずアプリがどのような流れでどのような動作をするのかを調べる作業です。空き巣が、どこにドアがあって窓があるのか、開きやすそうな鍵はないか、など下見をするイメージですね。

akisu.png

そのあとに、いろいろな不正操作をしてを脆弱性を調べるという流れです。

APKファイルの解析

APKファイルとは、プログラムをビルドしたデータや、アプリの情報や権限が記載された設定ファイルが同梱されている、ZIPファイルのようなものです。中のファイルを開いて、例えば重要な情報に外からアクセスできないか、ID・パスワードや個人情報などの重要情報がハードコードされていないかなどを確認します。

また、データを逆コンパイルしてソースコードを復元し、例えば暗号化キーやAPIの接続先などの隠しURLなどの重要情報がハードコードされていないかを確認します。

端末内データの解析

APKファイルを使ってインストールし、アプリをひととおり操作してから、端末内のデータを解析します。これは、インストールによってアプリが使うデータファイルが作成され、アプリを操作することでアプリの機能で必要となるデータが蓄積されるためです。これらのデータファイルには、接続先から取得した情報を保管するデータベースや、XMLファイルなどが入っています。

まず、データベースにどのようなデータが入っているかを確認します。パスワード情報、保持しているポイント数などが入っていると要注意です。

その他不正操作

ここまでで集めたアプリの情報や、アプリが使っているデータの情報からあたりをつけ、脆弱性を検査します。例えば、ゲームアプリで強さのスコアを保持していれば、これを書き換えてもっと強くできるかも、というようなイメージです。

また、アプリの構成要素のアクティビティを開始する、インテントと呼ばれるメッセージを強制送信して、意図しない動作を起こさせられないか、などを試します。例えば、ログイン後にしか起動できない機能を強制起動させてみる、などです。

KDLの脆弱性診断では、ここまででご紹介したようなことを、様々な観点から細かく項目立てて診断し、レポートを作成・報告、対処法のアドバイスを行っています。

まとめ

脆弱性診断を実施する際、網羅的に脆弱性を探すことも大切ですが、「攻撃者ならどこを狙いそうか?」「どの機能が悪用されそうか」という視点を持つことで、より質の高い脆弱性診断ができると思います。Webアプリケーションやサービスだけではなく、日常生活でも「自分ならどこを狙うか?」を意識しておくと、セキュアな開発の意識づけが自然とできてきます。

また、アプリ開発者の皆様には、一般社団法人日本スマートフォンセキュリティ協会(JSSEC)が提供しているAndroidアプリのセキュア設計・セキュアコーディングガイドを参照することをお勧めします。OSアップデートのたびに、多大な苦労をしてアップデートされており、サンプルも豊富に用意されています。脆弱性診断のみに頼らず、ぜひセキュアな開発を心がけてください。

KDLのスマホアプリの脆弱性診断サービスの内容、フローはこちら

セキュア開発の始め方が知りたい方はこちらもどうぞ

監修:久野 祐介

セキュリティ事業部

筆者:松丸恵子

広報室