こちらは、2019年3月6日に公開された以下のドキュメントを翻訳したものとなります。
Mobile Application Security- 10 Best Practices for Developers to Follow
インターネットトラフィックの3/4がモバイルデバイスによるものとなり、主要な事業をモバイルアプリケーションに移行するなど、アプリケーションはビジネス界で必要不可欠な機能となってきました。このような状況なので、ディベロッパーにとっても最優先させるべき事項はアプリケーションのセキュリティニーズといえるでしょう。アプリケーションには通常、金融取引を含む個人情報が補完されているからです。セキュリティはアプリケーションにとって運命を左右する要となります。迫りくるサイバーアタックの脅威からアプリケーションを隠す必要性は増してきています。
ほとんどのセキュリティ機能はアプリケーションのビルド段階でディベロッパーが処理することになります。ディベロッパーはアプリケーションセキュリティのエコシステムにおけるベストプラクティスについてアンテナを張り、製品から情報漏えいが発生することのないよう心がけなければなりません。今回はそんなディベロッパーの皆さんのために、セキュリティ脆弱性を回避し、顧客の信頼を裏切らないためのベストプラクティス10選をご紹介します。
1.コードの保護の実施
コードの保護がまず第一の、そして多くの場合セキュリティ侵害に対する最も強力な防御となります。積極的にコードを保護することで公開コードベースのリバースエンジニアリングの防止につながります。安全なコーディングがバイナリ保護となり、リバースエンジニアリングを阻止します。企業の不正を防止し、結果的に収益の損失を食い止めることになります。
2.エンドツーエンドデータの暗号化
アプリケーションのホストサーバーには、多くのユーザーデータが保管されています。そのため、ディベロッパーに求められるのは、データベースのテーブルが全て暗号化され必要な認証キーなくしては解読不可であることの徹底です。ホストサーバーに保管されているデータの安全性は何よりも責任をもって取り扱わなければなりません。ユーザーは自分で管理することができないからです。そのため、どのような状況下でも、元の形でホストされたデータに、悪意のある攻撃者がアクセスできないように保つことがディベロッパーに課せられています。
3.ライブラリと拡張機能の慎重な扱い
セキュリティに関するエキスパートによると、サードパーティのライブラリおよび拡張機能がハッカーに狙われやすい危険ゾーンだそうです。資料全体に目を通してセキュリティの脆弱性を理解することなく、サードパーティのライブラリや拡張機能をコーディングに使うディベロッパーもいます。このようなライブラリはマルウェアの温床となり、アプリケーションインテグリティが破壊されてしまいます。
4.APIの適切な保護
API設計がうまくいっていないと、悪意のある活動が行われる、安全でないゲートウェイを開放することになります。特に異なるノード、データベース、モバイルアプリケーション間で発生するデータプッシュを通じてその危険性が高まります。全てのインジェクション攻撃から保護されるよう、ディベロッパーはAPIを設計すべきです。そうすればOAuthのような適切な認証メカニズムを利用してリソースを安全に保つことができます。
5.マクロレベルでのタンパー検出
動的で常にリッスンしてくれるセキュリティレイヤがモバイルアプリケーションには必要です。これがあれば、悪意のあるアクセスを追跡でき、アプリケーションインテグリティもリアルタイムで保証されるようになります。このプロセスは、認証されていないメモリアクセスをリッスンするとともに、本質的にリソース生成である必要があります。
6.安全なセッション管理
クッキーを通したデスクトップに比べて、モバイルデバイス上でのユーザーセッションの方が長いことから、明らかにユーザーの都合によるトレードオフにおいてセッションを適切に処理することが難しくなっています。ここでディベロッパーに期待されることは、ユーザーの使い勝手を落とさずに、ユーザーデータとコードを保護することです。解決のカギは予測可能なセッションを持たないという点にあります。ディベロッパーによるアプリケーションの設定をそのように行うことで、セッション情報が難読化され続けます。
7.暗号化のベストプラクティス
SHA-256ハッシュのAES暗号最先端の暗号規格を用いて、アプリケーション内そのものに手動のコーディングが含まれることなく、全てのキーがハッシュされていることを確認します。同時アクセスによってアルゴリズムがnullやvoidになってしまうため、キーと認証の両方が保護されているべきです。
8.強力なトランスポート層保護
クライアントとサーバーの間でデータ交換時にセキュアソケットレイヤー(SSL)を適用すると、中身の濃い目的が解決されると考えられています。しかしデータ伝達セキュリティには、ただ単にSSLを追加する以上に多くの意味があります。適切な認証、十分な長さの強力なキー、サーバーとの伝達が確立される前にサードパーティーにより発行された正しいSSL認証が必要となります。
9.厳格な検査
目標の「開発時間」に間に合わせようと焦るあまり、不足のある試験戦略を採用してしまいがちです。そうすると、コードベースと依存性が保護されず、結果としてアプリケーションを攻撃の危険にさらしてしまいます。最新のアプリケーションのセキュリティ基準に厳格に則ったコンプライアンスを順守するためOWASPセキュリティ診断基準がガイドラインとして機能しています。一連の侵入テストは脆弱性を生み出すことにあり、これは見つけ次第パッチを当てなければなりません。このような理由から、リリースの前にディベロッパーはハッカーの役目もこなさなければならないのです。
10.保護されていないデータストレージ
クライアントのストレージ環境はセキュリティ違反に免疫がない可能性があるので、重要な情報を入内性の高いビジネスを行うユーザーのデバイスに保管するのは賢明な方法ではありません。さらに大切なのはクライアントのストレージに保管されたデータの脆弱性です。デバイスで「情報漏えいにつながる」挙動が起きていること自体に気が付かず、アプリケーションの信頼が失われていくのです。これを防ぐには、サーバー上の安全性の確保された環境に全ての重要なデータを保管しておくことです。
まとめると、モバイルアプリケーションにおいて、ビジネス上の目的を果たすにはセキュリティの側面が非常に重要な役割を負っているということです。ただし、セキュリティは保全性・パフォーマンス・ユーザーの使い心地と慎重にバランスがとれていなければなりません。
ご紹介した上記の方法で、アプリケーションとその中のデータを守るのに必要なセキュリティが有効になります。詳しくお知りになりたい方は、AppSealingチームまでご連絡ください。 info@appsealing.jp
コメント
0件のコメント
サインインしてコメントを残してください。