アプリケーションセキュリティのベストプラクティス15選
2020年10月8日
0 分で読めます重要なポイント
シフトレフトのアプローチを採用する:開発ライフサイクルの初期段階(設計・実装)からセキュリティ対策を取り入れ、脆弱性をできるだけ早く検出・修正します。
オープンソースの脆弱性に対処する:既知の脆弱性がないかオープンソースソフトウェアを継続的に管理・監視し、迅速に更新・修正します。多くのエンタープライズアプリケーションがオープンソースに依存しているため、重要な対策です。
可視性とリスク管理を強化する:すべての資産を把握し、定期的なリスク評価を実施して、脅威や攻撃経路、必要なセキュリティ対策を特定します。
基本的なセキュリティ対策を実施する:保存中・転送中のデータを暗号化し、入力値を適切に検証します。また、簡単なセキュリティタスクを自動化して、チームがより複雑な課題に集中できるようにします。
2010年以降、アプリ開発はかつてないほどの成長を遂げてきました。何百万ものモバイルアプリやWebアプリが利用できるようになり、アプリケーションは私たちの日常生活に欠かせない存在となっています。同時に、モノのインターネット(IoT)の開発も進み、手作業によるプロセスの自動化が可能になりました。
しかし、こうした前向きな進展に伴い、さまざまな問題も生じています。特にセキュリティ上の問題は、今や珍しいものではありません。多くの開発者や企業は自社のアプリケーションが十分に安全だと考えていますが、それでも脆弱なコードを本番リリースに含めてしまっています。 Snykのようなアプリケーションセキュリティソリューションを活用すれば、開発者が開発ライフサイクルの早い段階でセキュリティ問題を修正できるようになり、脆弱性への先手を打つことができます。
アプリが増えれば、セキュリティ上の問題も増える:AppSecにおけるよくある課題
よくあるアプリケーションセキュリティの課題には、次のようなものがあります。
経験の浅いプログラマー:アプリケーションの需要が高まる一方で、熟練した開発者が不足し、多くの経験の浅いプログラマーがモバイルアプリを開発しています。また、開発チームにセキュリティ上の問題を解決する知識が不足していることも少なくありません。
ツールを効果的に活用できていない:開発者が、導入したテストツールを十分に活用できていないことがあります。また、多くの開発者はツールによって開発プロセスが遅くなると考えています。
Webアプリが攻撃経路になる:Webアプリケーションは、データ漏えいの主な攻撃経路です。そのため、企業はアプリにAPIが含まれているかどうかと、それに伴うリスクを把握する必要があります。自社のソリューションにAPIが存在することを認識していない企業が、API侵害の被害に遭うケースも多くあります。
DevSecOpsのアプローチを採用していない:多くの組織では、ソフトウェアを保護するためのアプリケーション開発セキュリティのベストプラクティスが実践されていません。DevSecOpsプロセス(「シフトレフト」アプローチ)を導入せず、セキュリティ関連の問題をできるだけ早く処理・解決する重要性を見落としがちです。
オープンソースの脆弱性:多くの脆弱性を抱えるオープンソースソフトウェアは、リスクの一因となります。エンタープライズ市場向けアプリケーションの96%が、オープンソースソフトウェアやライブラリを使用していると推定されています。
アプリケーションセキュリティのチェックリストに従うことで、こうした落とし穴を回避し、アプリケーションのセキュリティを強化できます。
アプリケーション開発やWebアプリケーションセキュリティのベストプラクティスでは、Web、モバイル、デスクトップのソフトウェア開発プロセスに共通点が多いため、多くの場合、同じセキュリティ対策を適用できます。
アプリケーションセキュリティのギャップ分析を実施する方法
このガイドでは、資産の可視性、AppSecのカバレッジ、優先順位付けを対象に、アプリケーションセキュリティのギャップ分析を実施する手順を解説します。
アプリケーションセキュリティのベストプラクティス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インジェクション、バッファオーバーフローなど、繰り返し発生する脆弱性の種類があることに気づきます。そのため、新たな脆弱性が見つかった際は、部分的なパッチにとどめず、根本原因を特定することが恒久的な解決につながります。
まとめ:AppSecが重要な理由
アプリケーションセキュリティのベストプラクティスについては、セキュリティ専門家の間でもさまざまな見解があります。しかし、ここで紹介したような重要なポイントを、アプリケーションセキュリティのレビューチェックリストに含めるべきだという点では、多くの専門家が同意するでしょう。
ただし、他社よりも万全な保護を目指し、アプリケーション内のエラーをできる限り減らすことが大切です。そうすれば、攻撃者にとって侵害しにくい標的になります。1
アプリケーションセキュリティに関するよくある質問
アプリケーションセキュリティとは何ですか?
アプリケーションセキュリティとは、アプリケーションレベルの脆弱性を特定し、緩和するプロセスです。その後、アプリケーション全体のセキュリティ態勢を強化するための対策を実施します。
おすすめのアプリケーションセキュリティテストツールは何ですか?
あらゆるセキュリティリスクを軽減できるツールやテスト手法はありません。そのため、チームは静的アプリケーションセキュリティテスト(SAST)、インタラクティブアプリケーションセキュリティテスト(IAST)、動的アプリケーションセキュリティテスト(DAST)、ソフトウェア構成分析(SCA)のテストツールなどを組み合わせて活用する必要があります。
アプリケーションセキュリティテストの主な手法にはどのようなものがありますか?
製品のソースコードに潜む脆弱性を検出する主な方法の一つは、静的アプリケーションセキュリティテスト(SAST)ツールを利用することです。一方、SASTツールとは異なり、動的アプリケーションセキュリティテスト(DAST)ツールは、実行時にアプリケーションへの攻撃を試みて脆弱性を検出します。
開発者を第一に考えたツールで、アプリケーションを保護
IDE、リポジトリ、コンテナ、パイプライン全体で、効率的かつ実践的なアプリケーションセキュリティのアドバイスを提供します。



