技術は、目まぐるしく進歩しています。数年前、スマートフォンはキーボードがほとんどなく、技術オタク向けの高価なおもちゃでした。 今となってはスマートフォンは私たちの生活に不可欠で、ビジネスや社会生活のどこにでも存在しており、いつでも情報、ナビゲーション、コミュニケーションで使うことができます。
新しい技術が出るたびに新たなセキュリティリスクも発生し、セキュリティ業界はそれらの変化に遅れまいとしますが、守る側は常に数ステップ遅れています。例えば、スマートフォンは小型のコンピュータのようなものですし、モバイルアプリケーションは典型的なソフトウェアのようなものに過ぎません。しかし、過去の方法を当てはめて対応することが標準的だからといって、セキュリティ要件も似ていると言えるでしょうか?いいえ、そうとは限りません。スマートフォンのOSは、デスクトップコンピュータのOSとは異なりますし、モバイルアプリケーションは、ウェブアプリケーションとは全く異なります。例えば、シグネチャベースのウイルススキャンのような旧知の方法は、最新のモバイルOS環境では意味がありません。モバイルアプリケーションの配布モデルと互換性がないだけでなく、サンドボックスの制限により技術的にも不可能です。また、バッファオーバーフローやXSSの問題など、いくつかの脆弱性は、例えば、デスクトップアプリケーションやWebアプリケーションと言われるようなものよりも、ありふれたモバイルアプリケーションという文脈においてはあまり意味がありません(例外はありますが)。
時間が経過するにつれ、私たちの業界はモバイル脅威の状況をよく把握できるようになりました。結局、モバイルセキュリティといえば、すべてデータ保護に関すると言えます。アプリケーションには、個人情報や、写真、録音、メモ、アカウントデータ、ビジネス情報、ロケーション、その他さまざまな情報が含まれています。それらはクライアントとして、私たちが日常的に使用するサービスに接続したり、私たちは他の人とやり取りするすべてのメッセージを処理する通信ハブとなったりします。だれかのスマートフォンへ侵入すると、その人の生活を閲覧することができます。モバイルデバイスについて、無くしたり盗まれたりしやすいことや、モバイルマルウェアが増加していることを考慮すると、データ保護の必要性はより明確なのです。
それ故、モバイルアプリケーションのためのセキュリティ基準は、どのようにモバイルアプリケーションが機密情報を取り扱い、保存し、守るかについて焦点を当てなければなりません。iOSやAndroidのような最近のモバイルオペレーティングシステムは、安全なデータ保存と通信のための良いAPIを提供しています。しかし、これらが効果的であるためには、適切に実装し使用されることが必要です。データ保存、アプリケーション間通信、暗号化APIの適切な使用、安全なネットワーク通信というのは、入念な考察が必要な側面のほんの一部でしかないのです。
どの程度まで正確にデータの機密性と完全性を保護できるかは、業界において総意が必要な重要課題です。例えば、モバイルアプリケーションがTLS交換(TLS exchange)でサーバ証明書を検証するべきであることは、ほぼ合意されている事項です。しかし、SSL証明書ピニングはどうでしょうか?それを実施しないと脆弱性が生まれるでしょうか?アプリケーションが機密データを処理する場合には、SSLピニングは要件にあるべきでしょうか?もしかすると、非生産的になるかもしれません。たとえOSがアプリケーションをサンドボックス化していたとしても、SQLiteデータベースに格納されたデータを暗号化する必要があるでしょうか?アプリケーションによっては適切だったものが、他のアプリケーションでは非現実的であるかもしれません。MASVSは、さまざまな脅威シナリオに適合した検証レベルによってこれらの要件を標準化しようとしているのです。
さらに、ルート化マルウェアやリモート管理ツールの出現により、モバイルオペレーティングシステムそのものには悪用されうる欠点があることも明らかになりました。そのため、機密データをより強固に保護したり、クライアント側の改ざんを防ぐために、コンテナ化(コンテナリゼーション)手法は、ますます使用されるようになりました。より複雑にさせている箇所は、ここです。Android for WorkやSamsung Knoxなどのハードウェアに備わるセキュリティ機能や、OSレベルのコンテナ化(コンテナリゼーション)のソリューションは存在しますが、どれも異なるデバイス間で使用可能ではありません。これらは、絆創膏のようにソフトウェア上のセキュリティ対策を実装することは可能ですが、残念ながら、このような保護を検証するための標準やテストプロセスは存在しないのです。
結果として、モバイルアプリケーションのセキュリティテストレポートがそこら中に存在しています。例えば、Androidアプリの難読化やルート検知が実装されていないことを「セキュリティ的欠点」として報告されている一方で、文字列の暗号化、デバッガ検出、制御フローの難読化のような手法は必須でないと報告されていることもあります。しかし、この二極的な見方は意味をなしません。なぜなら、強靭性は、二極ではないからです。クライアント側の脅威に対して何を守りたいかに依存するからです。ソフトウェア保護は役に立たなくはないですが、それらは最終的に突破される可能性があります。そのため、ソフトウェア保護をセキュリティ制御の代わりとして決して使用してはいけません。
総じて、MASVSの目標は、モバイルアプリケーションのセキュリティの成功事例(ベストプラクティス)の基準(ベースライン)を提供すること(MASVS-L1)であり、その一方で多層防護手段を含めることを可能にすること(MASVS-L2)、またクライアント側の脅威に対する防御(MASVS-R)です。MASVSのねらいは、以下のとおりです。
- セキュアなモバイルアプリケーションを開発しようとするソフトウェア設計者と開発者のための要件の提供
- モバイルアプリケーションのセキュリティレビューに対して検証ができる業界標準の提供
- モバイルセキュリティにおけるソフトウェア保護メカニズムの役割を明確にし、それらの有効性を検証するための要件の提供
- ユースケースごとに推奨されるセキュリティレベルに関して明確な推奨を提供
業界の総意が100%に達することは、不可能であると認識しています。それでも、MASVSがモバイルアプリケーションの開発とテストにおけるすべての段階でガイダンスを提供することで役に立つことを願っています。MASVSはオープンソース標準として、年々進化していきます。そして、どうぞ自由に投稿や助言をしてください。