アプリケーションセキュリティを高める 15 のベストプラクティス
Daniel Berman
2020年10月8日
0 分で読めますアプリ開発の世界は、2010年以降、かつてないほどの成長を遂げています。また、何百万ものモバイルアプリや Web アプリが利用できるようになったため、アプリケーションは現代の日常生活に欠かせないものになっています。それと並行して、モノのインターネット (IoT) の発展により、手動プロセスの自動化が進んでいます。
しかし、このような明るい進展の一方、さまざまな問題も発生しており、特にセキュリティの問題は日常茶飯事になっています。大多数の開発者や企業は、自社のアプリケーションのセキュリティが十分に確保されていると考えていますが、実際には脆弱性を含むコードを製品リリースに使用し続けています。
アプリが増えるほど増える [セキュリティ] の問題
アプリケーションセキュリティの代表的な課題には以下が挙げられます。
素人のプログラマー: アプリケーションの需要が高まるにつれ、資格のある開発者が不足し、多数の素人のプログラマーがモバイルアプリケーションを開発するようになっています。また、多くの場合、開発チームには、発生したセキュリティ問題を解決するための知識が不足しています。
ツールの使用が効率的でない: 開発者は、せっかく導入したテストツールを有効に活用できていないことがよくあります。そして多くの人は、これらのツールが開発プロセスを遅らせていると考えています。
Web アプリの攻撃ベクトル: Web アプリケーションは、データ流出の主な攻撃ベクトルとなっています。そのため、企業はアプリ内の API の存在と関連するリスクについて認識しておく必要があります。多くの API に対する不正アクセスは、これらのインタフェースが自社ソリューションに存在することに気づいていない企業で発生しています。
DevSecOps アプローチが採用されていない: ほとんどの企業は、ソフトウェアのセキュリティを確保するアプリケーション開発セキュリティのベストプラクティスに従っていません。このような企業は多くの場合、DevSecOps プロセス (「シフトレフト」アプローチ) の導入を怠っています。これは、セキュリティ関連のあらゆる問題にできるだけ早く対処して解決するために不可欠なアプローチです。
オープンソースの脆弱性: 多数の脆弱性が含まれているオープンソースソフトウェアは、リスク要因の 1 つとなっています。エンタープライズ向け市販アプリケーションの 96% では、オープンソースのソフトウェアやライブラリを使用していると推定されています。
以下のアプリケーションセキュリティチェックリストに従うことで、落とし穴を回避し、アプリケーションのセキュリティレベルを高めることができます。
アプリケーション開発セキュリティのベストプラクティスと Web アプリケーションセキュリティのベストプラクティスに関しては、Web、モバイル、デスクトップのソフトウェア開発プロセスが類似しているため、多くの場合、同じセキュリティのベストプラクティスを両方に適用できます。
アプリケーションセキュリティを高める 15 のベストプラクティスチェックリスト
1. DevSecOps アプローチを採用する
DevSecOps またはシフトレフトのアプローチは、最初からセキュリティホールを検出できるようにすることで問題を未然に防ぎ、問題が発生した場合でも、できるだけ早く解決することを目指す、というアプローチです。DevSecOps により、開発チームは設計から導入までのソフトウェアサプライチェーンの全段階でセキュリティ問題を発見できます。
2. セキュア SDLC 管理プロセスを導入する
セキュアソフトウェア開発ライフサイクル管理プロセス (SSDLC) とは、製品のライフサイクルを製品セキュリティの観点から定義したものです。このプロセスにより、以下の製品ライフサイクルが導入されます。
セキュリティのトレーニングを受けた従業員が開発してメンテンナンスを行う
ソフトウェアセキュリティのベストプラクティスに従って、安全な環境で構築する
顧客に安全に納入する
SSDLC は、新製品のコンセプトから、すべての開発活動を通じて、成熟した製品として市場に完全かつ安全に導入され、そのライフサイクルが終了するまでの全体的なプロセスに適用されます。
3. オープンソースの脆弱性に対処する
オープンソースのツールは、コスト効率など多くのメリットがある反面、重大な脆弱性にもさらされます。そのため、オープンソースソフトウェアを使用する場合は、脆弱性を継続的にモニタリングし、定期的なアップデートして、脆弱性のパッチをできるだけすばやく適用することが重要です。
4. 簡単なセキュリティタスクを自動化する
手動のプロセスでは、無数に存在する脆弱性を軽減することは事実上不可能です。したがって、自動化は非常に重要です。単純な作業はすべて自動化し、チームはもっと難しい問題に集中できるようにする必要があります。
5. 自社のアセットを把握する
企業のセキュリティの状態を把握するための最初のステップは可視化です。なぜなら、特定できていないものを保護することはできないからです。特にアプリケーションやソフトウェアの本番環境インフラを構成するアセットを正確に把握することが重要です。
6. リスクを評価する
ハッカーの立場に立って、リスク評価を行いましょう。万全を期し、漏れがないか確認してください。
保護が必要なすべてのアセットのリストを作成します。
脅威を特定し、隔離して封じ込める方法を見極めます。
アプリケーションに対する不正アクセスのリスクがある攻撃ベクトルを見極めます。
攻撃を検知し、防止するために、適切なセキュリティ対策が講じられていることを確認します。
追加のツール、あるいは別のツールが必要かどうかを判断します。
7. 開発者向けセキュリティトレーニングを実施する
開発者には、コードを本番環境にプッシュする責任もあるため、セキュリティチームによるトレーニングを受けることが重要です。もちろん、このトレーニングは開発者の役割とセキュリティのニーズに合わせて調整する必要があります。
8. コンテナを適切に管理する
まず、コンテナイメージが電子署名ツール (Docker Content Trust など) で署名されていることを確認する必要があります。また、オープンソースの脆弱性の自動スキャンを実行して、共通の統合パイプライン全体でコンテナのセキュリティを確保することも重要です。
9. ユーザーによるデータへのアクセスを制限する
データのアクセスをさらに制限することは、セキュリティを高める上で最善の方法の一つです。
特定のリソースに実際にアクセスする必要があるユーザーを決定します。
アクセスルールを作成します。
データのアクセスが不要になったら、有効な認証情報を削除して、アクセス権を最新の状態に保ちます。
10. 定期的に更新してパッチを当てる
ソフトウェアのアップデートやパッチをインストールすることは、ソフトウェアのセキュリティを確保するための最も効果的な方法の一つです。すでに対策が講じられているのであれば、改めて問題を解決する必要はないはずです。ただし、新しいバージョンにアップグレードする際に、API の互換性の問題が発生しないよう、適切なアーキテクチャを設計することが求められるため、新しいアップデートのたびに計画を立てることが重要です。
11. ログデータへのアクセスを確保する
日々のクラウド運用のログデータにアクセスできることは、インシデント対応計画において非常に重要な要素となります。インシデント発生までの期間のデータを蓄積して解析できることは、セキュリティ態勢に直接影響を及ぼすだけでなく、その後の調査においても重要です。このようなデータがないと、セキュリティインシデントが発生したときに何もできなくなるおそれがあります。
12. データを暗号化する
Web アプリケーションセキュリティのベストプラクティスについては、データの保存と転送の両方において、暗号化が重要な鍵を握ります。基本的な暗号化には、特に最新の証明書による SSL の使用が必要です。ID やパスワードなどの機密データをプレーンテキストで保存することは、中間者攻撃 (MITM) につながる可能性があるため、容認することはできません。最強の暗号化アルゴリズムを使用していることを確認してください。
13. ペンテストを実施する
自動化されたテストは、リリース前にほとんどのセキュリティ問題を検出することができますが、潜在的なギャップを見過ごしている可能性があります。このリスクを最小化するため、経験豊富なペンテスターを採用してアプリケーションをテストすることが有益です。このタイプのホワイトハッカーは、実際の攻撃からシステムを保護することを目的として、アプリケーションへの侵入を試行し、脆弱性を検出して、潜在的な攻撃ベクトルを見つけしようとします。ペンテスターを、プロジェクトに関与していない外部の専門家にすることが重要です。
14. 正確な入力検証を行う
入力データはすべて、構文的にも意味的にも正しいものにすることが重要です。データの長さについては、予期される桁数や文字数、適切なサイズ、長さなどについて検証する必要があります。ホワイトリスト化が推奨されていますが、この検証方法を常に導入できるとは限りません。
15. 永続的な修正を目指す
CVE リストを分析すると、いくつかのタイプの脆弱性が時々繰り返し発生していることに気づきます (例: クロスサイトスクリプティング (XSS)、SQL インジェクション、バッファオーバーフローなど)。そのため、新たな脆弱性が発生した場合、部分的にパッチを当てるのではなく、根本原因を特定することが、脆弱性を永続的に解消するための鍵となります。
結論
アプリケーションセキュリティのベストプラクティスについては、セキュリティ専門家の間でもさまざまな見解や意見があることは確かですが、ここで取り上げるように、アプリケーションセキュリティのレビューチェックリストに含めるべきいくつかの重要なポイントがあることは、ほとんどの人が同意するところでしょう。
ただし、他よりも保護されているという状態や、アプリケーションのエラーを最小限に抑えて、より攻撃されにくい環境を作ることには、常に価値があります。
アプリケーションセキュリティについてのよくある質問
アプリケーションセキュリティとは?
アプリケーションセキュリティは、アプリケーションレベルの脆弱性を特定し、軽減するプロセスです。これに続いて、アプリケーションの全体的なセキュリティ態勢を向上させるハードニングの手順が実行されます。
推奨されるアプリケーションセキュリティテストツールとは
考えられるあらゆるセキュリティリスクを軽減できるツールやテストプロトコルは存在しません。そのため、チームは静的アプリケーションセキュリティテスト (SAST)、対話型アプリケーションセキュリティテスト (IAST)、動的アプリケーションセキュリティテスト (DAST) ツール、ソフトウェアコンポジション解析 (SCA) テストツールなどのツールを組み合わせて適用する必要があります。
アプリケーションセキュリティテストの主な手法とは
製品ソースコードの脆弱性を検出する方法の 1 つとして、静的アプリケーションセキュリティテスト (SAST) ツールを使用する方法があります。一方、動的アプリケーションセキュリティテスト (DAST) ツールは SAST ツールとは対照的に、ランタイムのアプリケーションを積極的に攻撃することで脆弱性を検出します。