セキュアなモバイルアプリを作成する方法

目次

  1. モバイルセキュリティの基本原則
  2. セキュアなデバイスとアプリ
  3. 送信中のデータのセキュリティ
  4. バックエンドをセキュアにする

アプリをチームのモバイルデバイスにインストールする場合、安全なデータセンターやセキュアなクラウド環境から離れるため、新たなセキュリティの課題が発生します。

OutSystemsは、モバイルおよびWebアプリケーションのセキュリティを重要視しています。具体的には、OWASPで定義されているWebおよびモバイルのセキュリティのベストプラクティス厳守に努めています。

セキュアなモバイルアプリを作成するには、モバイルデバイス、バックエンド、そして通信チャネルに複数のセキュリティのレイヤーを実装する必要があります。

モバイルセキュリティの基本原則


モバイルセキュリティに関して配慮すべき最大の原則は、どのモバイルデバイスにもセキュリティ侵害の可能性があるということです。そのため、データをセキュアに保ち、機密が守られるようにすることに焦点を当てる必要があります。

セキュアなデバイスとアプリ


セキュアなデバイスアクセス


攻撃者によるアプリへの不正アクセスが起こらないようにするには、デバイス自体に以下の2つのセキュリティチェックを適用する必要があります。アプリはまず、デバイスがroot化または脱獄によりアクセス権を所持していないかどうかを確認する必要があります。次に、デバイスにPIN、パターン、またはパスコードのようなセキュリティロックのメカニズムがあるか確認する必要があります。

OutSystems ForgeのSecure Deviceプラグイン を使用すると、アプリを実行するデバイスの保護が十分かどうかを検証できます。もしデバイスがセキュリティ侵害が発生していればメッセージが表示され、アプリのデータが表示される前にすぐにアプリは終了します。

また、組織のEMM(エンタープライズモビリティ管理)に通常含まれている、MDM(モバイルデバイス管理)ツールを使用するアプローチもあります。MDMを使用すると、デバイスの構成とOSの更新を管理できるため、アクセス権を持つデバイスでのアプリ実行を防げます。また、管理対象のアプリ、企業のメール、またはWebへのアクセスにパスコードを要求するというポリシーをデバイスに適用することもできます。

アプリへのセキュアなアクセス


デバイスのアクセスへの対処後に検討すべきなのが、アプリへのアクセスをセキュアにすることです。これにあたってはアプリの配信方法と、アプリへのアクセス許可方法を検討する必要があります。

アプリの配信

一般ユーザー向けアプリは公式アプリストア(iTunesのApp StoreやGoogle Play)で配信されますが、従業員向け(B2E)のアプリケーションではこの手法はほとんど使用されません。こうしたアプリは、セキュリティポリシーを実装してユーザーのアクセスを制御することが可能な、企業のアプリストアを使用して配信されます。スタンドアロンであるかEMMスイートの一部であるかを問わず、MAM(モバイルアプリ管理)ツールにより、これらの機能を提供し、企業のストアアプリを自社のロゴやカラースキームでブランディングすることが可能になります。

OutSystemsが提供するアプリは、簡単に拡張してMAM機能を実装できるため、ユーザーは自らのユーザープロファイルに合ったアプリのカタログにアクセスし、デバイスにインストールすることができます。

認証

アプリがユーザーを認証する方法には、ローカル認証とフェデレーション認証の2つがあります。

ローカル認証は、OutSystemsで構築したモバイルアプリにデフォルトで実装されています。ユーザーがユーザー名とパスワードを入力するとサーバー側で認証され、同じセキュリティコンテキストを持つ他のアプリへのアクセスを可能にする、シングルサインオンのコンテキストを作成します。これは、状況により複数のアプリを使用して作業する必要のある従業員にとっては非常に役立ちます。

OutSystemsでは、ローカルに保存されたパスコードや Touch IDプラグインを使用してユーザーを認証する、別のログインフローを実装することもできます。B2Eのシナリオでは、Active Directoryや他のLDAPシステムといったID管理プロバイダシステムでユーザーを認証することも一般的です。これらはOutSystemsで簡単に構成できます。

フェデレーション認証は、通常はOAuthやSAMLプロトコルを使用するIDプロバイダが実装します。OAuthは、ソーシャルネットワークをIDプロバイダとして使用するB2Cアプリとしてはより一般的です。Google LoginプラグインなどのOutSystemsのビルトインコンポーネントを使用すると、OAuth IDプロバイダとの連携が簡単になります。B2Eアプリの主流であるSAMLは、 IdPコンポーネントなどを使用して実装できます。

他の選択肢としては、通常IDプロバイダに接続する機能を持ち、モバイルアプリにSSO機能を提供するMAMがあります。

セキュアな保存データ


モバイルアプリがデバイスに保存しているデータは、攻撃者の格好の標的です。その露出を最小化するために考えられる方法は、多数あります。

最小限の情報のみを保存する

デバイス上のデータをセキュアに保つうえで最も効果的なアプローチは、データを一切保存しないことです。しかしオフラインでの実行やユーザーエクスペリエンスの向上などを考えると、必ずしも可能なアプローチではありません。絶対に必要な場合にのみデバイスにデータを保存するというのが一般的なルールでしょう。

ローカルに保存するデータを暗号化する

ローカルに機密データを保存する必要がある場合は、データを暗号化することが最も安全な方法です。データの暗号化と復号化はオーバーヘッドを発生させるため、エンドユーザーエクスペリエンスを損なわないように、最小限のデータの暗号化にとどめます。OutSystemsには、ローカルデータの暗号化プロセスを簡素化する様々なビルド済みコンポーネント があります。

他のユーザーから情報を保護する

ローカルに保存されたデータを暗号化していても、場合によってはこの情報を人間が読める形で表示する必要があります。攻撃者がロック解除されているデバイスを手に入れた場合、バックグラウンドでの実行中であってもアプリから機密情報を読めてしまう可能性があります。こうした場合に情報を安全に保つには、Privacy Screenプラグインが役立ちます。このビルド済みコンポーネントは、バックグラウンドに移動した時点でアプリの情報を非表示にし、再開時にユーザーに再認証を求めます。

リバースエンジニアリングへの対応


攻撃者がアプリのパッケージにアクセスできると、バックエンドのアドレス、アプリコードのロジック、リソースファイルといったコンテンツを閲覧できるようになります。静的ファイルには機密情報を含めないようにします。HTML、CSS、JavaScriptはプレーンテキストのファイルであるため、容易に読んで解釈できます。やむを得ずクライアント側のコードに機密情報を含める場合、この情報を別のスクリプトファイルに抽出してアプリにインポートし、 jscramblerJavaScript Obfuscatorといったツールを使用して難読化します。

その他のアプリのリソース

バンドルまたは取得されてローカルに保存されているその他のアプリのリソース(PDF、Excelファイルなど)も、リスクにさらされています。これらのファイルについても、パスワード保護や暗号化といったセキュリティメカニズムの実装を検討してください。

侵入の検知と対処


完全にセキュアなシステムやアプリはありません。iOSAndroid のOS、端末メーカーのソフトウェアプロトコルには、個人情報を危険にさらすセキュリティ上の欠陥があるとされています。こうした欠陥の影響例は、常にニュースになっています。

大規模なテクノロジー企業であれば、資産をセキュアに保つために 投資を行い、セキュリティの問題を迅速に解決することができます。しかし、すべての企業がこういった投資をできるわけではありません。OutSystemsでは、ほとんどのセキュリティリスクにバックエンドで対処できます。1-Click Publishとアプリのハイドレーションを利用すると、アプリストアで手動でバージョン更新を行う場合と比べ、問題をより迅速に解決できます。

デバイスの廃用

デバイスが盗まれたり、従業員が退職したりした場合、対処が必要です。ユーザーのアクセス権を削除しても、それだけでは不十分です。デバイスにはアプリがインストールされたままになっており、データがローカルに保存されている可能性もあるためです。

OutSystemsで作成されたすべてのネイティブアプリが持つデバイスのプラグインを使用すると、デバイスのUUIDを保存してアプリケーションのデバイスとユーザーを管理することができます。

盗難の報告や従業員の退職によりデバイスがブラックリストに載った場合に、ローカルに保存されたデータを除去するための安全メカニズムをアプリケーションに実装することも可能です。

MDMやMAMの多くには、リモートでアプリ削除およびデータ消去を実行するツールがあるため、これらを使用していれば対応はより簡単になります。

送信中のデータのセキュリティ


デバイスとアプリのセキュリティに加えて、バックエンドとデバイス間で機密データを送受信するチャネルについても検討する必要があります。

OutSystemsで作成したモバイルアプリケーションでは、すべての通信において、有効な証明書を使用したHTTPSプロトコルが必須になります。これにより、そのチャネルで送受信されるすべてのデータを確実に暗号化できます。

中間者攻撃への対処

チャネルが暗号化されていても、受信した情報の出元を検証して、中間者攻撃を防ぐ必要があります。これは、通信チャネル内での情報暗号化に使用された証明書が予期されたものと一致するかどうかを検証する「SSLピンニング」と呼ばれる手法で実現できます。

OutSystemsでは、 SSL pinningプラグインを使用するだけでモバイルアプリでSSLピンニングを実装可能です。

企業ネットワークへのアクセス

モバイルアプリが、企業ネットワークのファイヤウォールの先にあるバックエンドとの通信を必要とする場合は多くあります。こうした場合、一般的には企業ネットワークに安全にアクセスするためにVPNが使用されます。つまり、アプリケーションをバックエンドと通信させるには、デバイスにVPN構成を設定する必要があるのです。

OSはこうしたVPN接続の作成を許可します。しかし、エンドユーザーが構成方法を把握し、アプリの使用前に構成を切り替える必要があるという構成上の問題と、さらには安全上の問題が発生します。システム全体でVPN構成を行うと、デバイスで実行されるすべてのアプリが企業ネットワークにアクセスできてしまいます。

MAMツールはアプリごとにVPNを構成することで、両方の問題を解決します。構成はアプリにバンドルされているため、ユーザーがデバイス上で構成を行う必要はありません。アプリを実行すると、自動的にVPN接続が確立されます。バックエンドとの通信にVPNトンネルが使用できるのはそのアプリだけであり、他のアプリによる企業ネットワークへのアクセスを防止できます。

バックエンドをセキュアにする


モバイルアプリのパーツの中で、特にB2Cのシナリオで非常に狙われやすいモバイルアプリのは、モバイルアプリとモバイルアプリ以外の両方から攻撃される可能性のあるバックエンドです。実はこれが、モバイルセキュリティについて OWASPが特定した最大のリスク です。

バックエンドをセキュアにするために、OutSystemsではモバイルのアプリケーションに、厳格なHTTPトランスポートセキュリティポリシーを強制しています。さらに総当たり攻撃、コードインジェクション攻撃、およびその他の攻撃を防ぐセキュリティのメカニズムもあります。改ざん防止メカニズムは、ユーザーが認可済みのリクエストを匿名化してアクセス権限を高めることを防ぎます。こうしたメカニズムのほとんどで、開発者の介入は不要です。介入が必要なものについては、開発段階でOutSystemsが事前に通知するため、適切な対応が可能です。

詳細については、次のリンクをご覧ください。

セキュアなアプリケーションの開発にOutSystemsがどう役立つか