まずアプリのコンセプトを考えます。これは簡単な部分です。ひらめきが湧いた後は、アプリの夢を現実にするために、綿密な計画、アウトライン作成、そして戦略策定に取り組みます。
アプリ開発には多くの要素が関係しますが、ハッキング、データ漏洩、サイバー犯罪がこれまで以上に蔓延している世界では、新しいプロジェクトを開始する際にはセキュリティを最優先に考慮する必要があります。
アプリ開発者にとって、重大なセキュリティ上の欠陥によってアイデアが頓挫することは最悪の事態です。しかし、適切なセキュリティ計画と戦略があれば、そのような事態は避けられます。モバイルアプリを安全にリリースするための10のヒントをご紹介します。
1. 初日からセキュリティチームを組み込む
セキュリティは、開発チームが初めてチームを組んだ瞬間から、モバイル開発プロセスの一部であるべきです。SWOT分析、スクラム、DevOps、ラピッド、アジャイルなど、どんな手法を用いていても、セキュリティを組み込むことで、あらゆる変更にセキュリティが組み込まれるようにしましょう。
変更が行われたり、大幅な改訂が計画されたりする場合は、必ずセキュリティ チームに相談して、発生する可能性のある問題への対処方法をセキュリティ チームに知らせてください。
2. テスト、テスト、そして再テスト
TechRepublicが昨年報じたように、開発者の60%は自身のコードのセキュリティに自信がないにもかかわらず、修正措置を講じていません。NodeSourceとSqreenのレポートでも指摘されているように、この問題は部分的にはテストに起因しており、多くの開発者がテストを実施していないのです。
QAは安全なコードを構築する上で重要な部分であり、セキュリティ全般の概念と同様に、プロセスの最後に付け足すような単純な作業ではありません。コードを継続的にレビューし、潜在的なセキュリティホールをすべて特定し、リリース前に修正することが重要です。
参照: ソフトウェア品質管理ポリシー (Tech Pro Research)
上記のレポートによると、開発者が抱える最大の懸念は、実際にはテスト不足によるものではなく、まったく別の問題、特にサードパーティの依存関係に固有の問題によるものです。
3. サードパーティの依存関係の安全性を前提としない
開発者が他のソースから無料で入手したり販売したりできるコードの一部を組み込むことはよくあります。現状のままでも問題なく動作するのに、なぜわざわざ車輪の再発明をするのでしょうか?
サードパーティのコードは必ずしも安全ではありません。前述の NodeSource/Sqreen の調査によると、開発者のうち、使用しているサードパーティの依存関係を信頼しているのはわずか 16% です。ただし、40% はサードパーティのコンポーネントのレビューを省略しています。
そういったプログラマーにはならないでください。サードパーティ製モジュールを徹底的に分析し、安全性を確認してください。
4. APIには注意する
APIはバックエンドプログラミングに不可欠な要素ですが、外部に公開されることが多いため、セキュリティ上の懸念材料にもなります。使用するAPIが開発対象のプラットフォームで検証されていることを確認してください。
TechRepublic のこの記事で説明されているように、API ゲートウェイも必ず組み込んでください。
5. 攻撃者のように考える
コードを書くときは、攻撃者の立場で考えてみましょう。「これを悪用できるだろうか?」対処する価値がないと思われる小さな問題でも、ハッカーがアプリケーションを攻撃するために利用できる脆弱性になる可能性があります。
コードレビューには、アプリを破る方法を探す時間も必ず含める必要があります。明らかな欠陥だけで終わらせてはいけません。中には想像を絶する攻撃もあるため、あらゆる点をテストし、考慮する必要があります。これは、様々な環境変数の影響を受けるモバイルデバイスでは特に重要です。
6. 権限を最小限に抑えて攻撃ベクトルを排除する
ゼロトラスト・セキュリティは、最も急速に成長しているセキュリティ手法の一つです。それには十分な理由があります。ネットワーク上の誰も、そして何もかもが安全であるとは考えていないからです。そのため、ユーザーやマシンには、必要な場合にのみ、必要最低限の権限のみが付与されます。
モバイルアプリも同様に設計する必要があります。カメラ、連絡先、ダイヤラーへのアクセスが必要ない場合は、それらを要求しないでください。常時接続が必要ない場合は、接続をプログラムしないでください。
アプリに必要な権限は、それぞれが持つ新たな接続です。最も堅固な城でさえ、入り口は一つしかありません。アプリを城に例え、秘密の出口や隠れた通路をすべて排除しましょう。
7. デバイスに保存されているものに注意してください
アプリによって保存された個人データは、盗み取られる危険性があります。削除するか、デバイス上の安全な場所に移動してください。機密情報や個人を特定できる情報をユーザーのデバイスに保存する必要がある場合は、暗号化してください。
アプリで機密データを使用する場合、どこかで妥協が必要になります。デバイス上かサーバー上かのどちらかになりますが、どちらもリスクを伴います。アプリ開発の一環として、ユーザーデータの最適な保存場所を、ユーザーにとってのメリットとセキュリティの観点から、時間をかけて決定してください。
8. 安全なデータ転送
VPN、SSL、TLSは、送信者と受信者間の暗号化と同様に、転送中のデータのセキュリティ確保に役立ちます。アプリが安全にデータを送受信し、傍受やなりすましを防止できる方法を見つけましょう。
9. トークンを使用してセッションを処理する
トークンは、現代のアプリの世界ではユーザーログインを処理するための事実上の標準的方法であり、ユーザーセッションをより適切に管理するために活用すべきです。トークンは簡単に失効させてユーザーのセキュリティを確保できるだけでなく、よりユーザーフレンドリーであるため、アプリにとって常にプラスとなります。
OAuth2、JSON Web Token、OpenID Connect はすべて、ユーザー ログインをセキュリティ保護し、簡素化するための優れた方法です。
10. 改ざん防止を実装する
簡単にデコンパイルされてしまうAndroidアプリでは、改ざん防止機能はセキュリティ対策として必須です。Google Playには模倣アプリが登場し、何百万人ものユーザーを騙しています。自分のアプリがそのようなアプリの1つになることは避けたいものです。
Android アプリを改ざんから保護する方法は数多くあります。ユーザーを保護し、信頼できるアプリとしての評判を守るために、そのうちの 1 つ、またはできれば複数の方法を実装してください。
こちらもご覧ください
- すべてのプログラマーが読むべき15冊の本(無料PDF)(TechRepublic)
- DevOps:今後の方向性と最大限に活用する方法(ZDNet)
- 開発者になる方法:プロからの7つのヒント(TechRepublic)
- 資金もプログラミングスキルもなくてもモバイルアプリビジネスに参入する方法(ZDNet)
- アプリ開発プロジェクトを軌道に乗せるための 4 つのスクラムベストプラクティス (TechRepublic)