モバイルアプリの脆弱性診断を社内でするための3つのポイント
サイバー攻撃の脅威が増すなか、アプリケーションのセキュリティ品質向上を目指すことも重要な課題だ。サイボウズでは製品にフォーカスを当てて、セキュリティ品質向上やインシデント対応やその支援を行うチーム「PSIRT(Product Security Incident Response Team)」がある。主に脆弱性に関して取り組み、開発チームとの連携も多い。
これまで同社ではモバイルアプリの脆弱性診断を外部の専門会社を通じて実施していたため、十分に内製化できていないことが課題となっていた。内製化できなかった背景にはモバイルアプリの診断に関する知見が十分になく「そもそも何を確認すればいいか分からない」や、診断を実施する体制がなかったことが挙げられる。
そこでサイボウズ PSIRTでは、モバイルアプリの脆弱性診断の課題解決に向けて「モバイルの基礎知識を増やす」「モバイルアプリに特化した専門チームを立ち上げる」「モバイルアプリの脆弱性診断体制を構築する」の3つに取り組むことにした。
モバイルの基礎知識を増やす
まずは基礎知識を固める。AndroidとiOS、それぞれのOSがどのような仕組みで動いているのか、使用されている技術にはどのようなものがあるのか、バージョンの違いなども含めてセキュリティ機能を中心に基本的な理解を深めた。
小西氏は「基礎的なモバイル技術の理解を深め、脆弱性の仕組みや原因を理解するための土台作りをしていきました」と話す。なお理解を深めるための資料にはAndroid Developer DocumentやApple Developer Documentationなど各OSの開発者向けオフィシャルドキュメント類を参照した。
脆弱性に関しても主要なドキュメントで学習した。代表的なものとしてソフトウェアのセキュリティ技術の情報共有や普及啓発を目的としたコミュニティOWASP(Open Worldwide Application Security Project)が公開している「OWASP MASVS」がある。こちらはモバイルアプリの診断観点がまとめられている。同じくOWASPの「OWASP MASTG」は、モバイルの脆弱性や具体的なテスト方法が記されている。またJSSEC(一般社団法人日本スマートフォンセキュリティ協会)の「Androidアプリのセキュア設計・セキュアコーディングガイド」にはセキュアな実装方法について記されており、小西氏は「インテントの学習に役立ちました」と話す。
各種ドキュメントを読みこなした結果、小西氏はモバイルアプリへの攻撃パターンは主に次の3つ、アプリの機能や通信への攻撃、アプリや端末への攻撃、悪意あるアプリからの攻撃に分けることができると理解した。
アプリの機能や通信に攻撃とは、アプリに実装されている機能、例えば入力値検証不備を狙うXSS(クロスサイトスクリプティング)、あるいはアプリとシンク先の通信を盗聴することで機密情報を取得したり、改ざんしたりするものなどが該当する。
アプリ端末への攻撃とは、攻撃者が端末にダウンロードされたアプリを解析することで、(ハードコードされた)シークレットや機密データを不当に入手すること。あるいは端末に直接アクセスすることで機密情報を取得すること、広義にはショルダーハックのように背後から画面を盗み見ることも含む。
悪意あるアプリからの攻撃とは、同一端末内にある別のアプリや実行ファイルからアプリの設定や実装の不備を用いて情報を抜き取ったり、なりすましを行ったりするものとなる。
また小西氏はモバイルアプリの脆弱性を大まかに分類して示した。1点目は機密情報の漏えいで、ログ、ストレージ、内部ファイル、画面(盗み見)などから機密情報が盗まれるもの。2点目はアプリの設定不備で、本来アクセスが想定されていない画面や機能がアプリのマニフェストファイルなどの設定不備により、操作可能となってしまったことなどが該当する。3点目は入力検証不備で、外部からの入力を正しく処理しないものとなり、XSSやSQLインジェクションが含まれる。4点目は偽装系で、悪意あるアプリが正規のアプリになりすまして、ユーザーに何らかの操作を誘導するなど。他にもサーバー証明書の検証不備、脆弱な暗号など何らかの設定不備がある。
一通り、基礎知識を理解すると、次に小西氏は手を動かしながら学ぶことにした。そこで利用したのがモバイル版のやられアプリ。意図的に脆弱性を含ませておいた学習用アプリを指す。いろいろとあるなかから、基本的な脆弱性が実装されたAndroidアプリ「InsecureBankv2」を選び、脆弱性の仕組みや診断テクニックを体得していった。
最終的には最新の知見も収集するようになった。具体的には、公開されているCVE(共通脆弱性識別子:Common Vulnerabilities and Exposures)やバグバウンティングレポートなどだ。なおCVEはアメリカ国立標準技術研究所が管理しているNVDから過去3年分、JPCERT/CCとIPA(情報処理推進機構)が共同で運営しているJVNから過去6年分を収集した。
小西氏は収集した情報を分析した結果として「最近の報告を見ると、サーバー証明書の検証不備、アクセス制御の不備、機密情報の漏えいが多くありました。またインテントのパラメーターを経由してアプリでXSSなどの攻撃につなげるものや、ディレクトリトラバーサル攻撃を利用してアプリが端末に保存している機密情報を取得するなど、モバイルの特性に合わせた攻撃もありました」と話す。
モバイルアプリに特化した専門チームを立ち上げる
モバイルアプリの脆弱性診断の内製化を実現するため、小西氏らは製品のセキュリティに対応するPSIRTにモバイルアプリの現状についてヒアリングを実施した。主な内容は現在の管理方法や各製品のモバイル開発チームについてだ。ある程度、現状を把握するとPSIRT内で専門チームのメンバーを募集して、チームの立ち上げを進めた。
チームの立ち上げでは、ヒアリング結果をもとにチームでやるべきタスクを洗い出し、モバイルアプリ開発チームへのヒアリングを実施した。そして専門チームにおける業務の進め方、チームの体制、フローの整備を進めた。
また同時にモバイル専門PSIRTチームへの相談窓口を作り、開発チームに周知することで、開発チームがモバイルアプリのセキュリティに関して相談できるようにした。こうしてモバイルアプリのセキュリティに対応できる専門チームの体制が整っていった。
モバイルアプリの脆弱性診断体制を構築する
知識や知見を蓄え、チームを整え、いよいよモバイルアプリの脆弱性診断のための体制作りに着手した。
社内診断の大まかな流れはこうだ。まずは新しく実装する機能に対して、診断が必要かどうか判断する。もし診断が必要であれば、診断項目を記載した試験仕様書を作成する。そして仕様書を元に診断を実施し、結果を報告する流れになる。
それぞれの段階で必要なものは何かと考えると、診断可否の判断と試験仕様書作成では診断を考察する知見、つまり診断観点が必要となる。診断を実施する際には診断方法が必要となる。そして診断報告時には診断結果にもとづいた対応フローが必要となる。そのため診断観点、診断方法、診断対応フローを準備していくことにした。
必要なものをどのように準備したのかを順に見ていこう。まず診断観点では、チームでOWASP MASVSの輪講を実施し、知見を高めていった。輪講中のメモからMiroで付せんを作り、それぞれの機能に対してどのような場所を注意するかという視点で分類していった。この分類から診断観点を判断できるチェックシートを作成した。例えばデータを表示する機能なら、画面表示、エラー文、クリップボードなどに注目し、それぞれの観点を確認する。これで診断可否の判断や診断項目の作成ができるようになった。
次に診断方法の作成では、サイボウズのkintoneで診断方法を登録するためのアプリを作成し、具体的な診断方法を登録していった。登録する項目は、脆弱性のタイプ、脆弱性が起こりうる場所、どのようなケースで発生し、どのように診断するのかなどの手順を登録していく。またどのような結果が出れば脆弱性があると判断できるかも記載してある。
最後に製品ごとの診断の進め方や、脆弱性を検出した時の共有や報告方法などの診断対応フローを作成した。同じくkintoneでモバイルアプリの診断を管理するアプリも作成し、診断状況の把握や議論に役立てることにした。
こうして診断を社内で進めていく体制が構築できた。この取り組みから、小西氏はさまざまな変化を実感できたという。モバイルアプリ診断を常に実施できるようになり、外部からの指摘や検出された挙動に対して専門的な観点で判断が可能となった。また相談窓口を作ったことで相談も増えた。
これまでの取り組みを振り返り、小西氏は「モバイル製品のセキュリティ面での品質向上につなげることができました」と話す。今後は診断項目を最新の状況に合わせた改善と最適化、iOSの診断方法の拡充、チーム全体で知見を増やす場の提供などに向けて取り組みを継続していく。