ソフトウェア開発のためのトップ10のセキュリティ慣行
安全なソフトウェア開発に含めるべきいくつかのベストプラクティスを見てみましょう。
![Treat Software Security as a Priority Right From The Start]()
1. ソフトウェアセキュリティを最初から優先事項として扱う
プロジェクトの計画段階からセキュリティを検討する必要があります。セキュリティは要件から始まるため、ソフトウェア開発の各段階でどのような脆弱性が発生する可能性があるかを考えることが不可欠です。つまり、後で変更を加えたり機能を追加したりするときは、セキュリティを常に評価する必要があります。
安全なソフトウェア開発ライフサイクル(SDLC)は、安全なアプリケーションを開発する方法です。これは、アプリケーションのライフサイクル全体に伴うセキュリティリスクを考慮に入れています。さらに、各フェーズを通じて機能し、すべてのプロセスステップで適切な制御が確実に実装されるようにします。
![Conduct Security Awareness Training]()
2. セキュリティ意識向上トレーニングを実施する
ソフトウェア開発者は、彼らが何に反対しているのかを知る必要があります。彼らは、ソフトウェア開発の世界で一般的な攻撃とそれらを回避する方法について知らされるべきです。
セキュリティ意識向上トレーニングには、一般的なソフトウェア開発の脆弱性に関する情報を含める必要があります。また、ハッカーやサイバー犯罪者がどのように機能するかについての情報も含める必要があります。
開発者は、コードを書くときにどのような間違いを犯す可能性があるかを把握し、同じ間違いを自分で犯さないようにする必要があります。教育と知識の伝達は、ソフトウェア開発者が最初から安全なアプリケーションを作成するのに役立ちます。
セキュリティ意識向上トレーニングの一環として、全員が集まり、安全な開発方法について話し合う定期的な会議を開催することをお勧めします。これらの会議は、サイバー攻撃者が行う前にコードの脆弱性を特定する方法に関して非常に有益です。
![Use Code Reviews to Identify Potential Security Threats]()
3. コードレビューを使用して潜在的なセキュリティの脅威を特定する
コードレビューは、開発者がセキュリティの脆弱性を特定して修正するのに役立ち、一般的な落とし穴を回避できます。安全な設計は、ソフトウェア開発の不可欠な部分です。コードを書くときは、できるだけ少ないコードを書くのに役立つ防御的な考え方を採用してください。また、コードをテストし、すべての懸念事項について単体テストを作成する必要があります。
コードを変更するたびに、戻って、それらの変更によって新しいセキュリティの脆弱性が発生したかどうかを確認する必要があります。さらに、セキュリティ要件を確認して、開発プロセス全体で安全なコーディング慣行に従っていることを確認することが不可欠です。
![Use Static Code Analysis Tools]()
4. 静的コード分析ツールを使用する
セキュリティの間違いは絶妙であるため、経験豊富な開発者ですら見落としてしまう場合があります。静的コード分析ツールは、この理解のギャップを埋め、セキュリティの脆弱性を見つけ、コードレビュープロセスを容易にすることができます。
ソフトウェアを展開する前に、静的コード分析ツールはソフトウェアの脆弱性を見つけるための優れたアプローチです。パイプラインに統合できるため、新しいビルドが発生するたびに、これらのチェックが自動的に実行され、潜在的な問題にフラグが立てられます。
セキュリティコードのレビュー中に、静的コード分析ツールを使用して懸念事項を特定することができます。これらのツールは、開発者が行き来したり、セキュリティの知識が不足している可能性がある大規模な組織にとって不可欠です。
静的コード分析ツールは完璧ではありませんが、SQLインジェクション、クロスサイトスクリプティング(XSS)、機密データの公開など、ソフトウェアの脆弱性につながる最も一般的な問題のいくつかを確実に見つけるのに役立ちます。
![Use Popular and Well-Maintained Libraries and Frameworks]()
5. 人気があり手入れの行き届いたライブラリとフレームワークを使用する
ソフトウェアを作成するときは、新しく作成されたコードベースよりも脆弱性が少ない可能性があるため、一般的で手入れの行き届いたライブラリまたはフレームワークを使用することをお勧めします。
オープンソースコンポーネントを使用すると、バグの早期検出とパッチの恩恵を受けることができるため、ソフトウェアのセキュリティをより適切に管理できます。さらに、安全なソフトウェア開発ライブラリを使用すると、アプリケーションの攻撃対象領域を減らし、より安全にすることができます。
開発者は、アプリケーションで広く使用する前に、ライブラリまたはフレームワークの評判を常に調査する必要があります。彼らは、各プロジェクトのコミュニティアクティビティ、リリース頻度、およびその他のメトリックに関する詳細情報を提供するオンラインツールを使用できます。これは、このコンポーネントがニーズに対して十分に安全であるかどうかについて情報に基づいた決定を下すのに役立ちます。
![OWASP’s Top Ten Software Security Vulnerabilities]()
6. OWASPのソフトウェアセキュリティの脆弱性トップ10
チームにOWASPのソフトウェアの脆弱性トップ10を知ってもらいましょう。これらのWebアプリケーションのセキュリティ上の欠陥は、安全なソフトウェア開発のベストプラクティスが回避する最も一般的な間違いです。
ソフトウェアの主要な脆弱性の更新されたリストを1か所にまとめることで、開発者はこれらの一般的なエラーを回避するための措置を講じていることを簡単に確認できます。チームがOWASPに精通していない場合でも、チームの最も重要なポイントを知っていると、ソフトウェア開発プロジェクトを保護するための最善の方法を決定するのに役立ちます。
![Secure coding guidelines and standards]()
7. 安全なコーディングガイドラインと標準
安全なソフトウェア開発は、コーディングガイドラインと標準から始まります。組織の安全なコーディングガイドラインと対策は、業界のベストプラクティスを考慮して、専門家のコンセンサスによって定義する必要があります。
安全なコーディング標準は、組織内でより優れた設計原則を推進するのに役立ち、ソフトウェアが稼働する前に脆弱性を減らします。さらに、どのような種類のコードが記述されるかに関する一連の標準的なルールと制限を提供することにより、チームはソフトウェア開発ライフサイクル全体で信頼できるテスト方法を実施し、新しい脆弱性が導入されないようにすることができます。
脅威モデリングは、ソフトウェア開発者がソフトウェアを保護するために使用する必要があるもう1つの手法です。脅威モデリングは、特定のデータフローを調べ、各フロー内で何がうまくいかないかを分析することで脅威を特定します。
安全なコーディングガイドラインを作成するために開発者が知っておくべきいくつかの概念を次に示します。
暗号化
すべてのデータは、転送中および保存時に暗号化する必要があります。これには、データベースストレージ、ファイルストレージ、セッション、Cookieなどが含まれます。暗号化は、ネットワーク上のユーザーデータの機密性を維持する唯一の方法であり、攻撃者が監視するすべてのトラフィックに完全にアクセスできる攻撃者によってノードが危険にさらされる可能性があります(つまり、プレーンテキスト)。
パスワードハッシュ
パスワードを保護するために、パスワードをプレーンテキストで保存しないでください。代わりに、パスワードハッシュアルゴリズムを使用して、データベースに保存できるユーザーのパスワードの一意のハッシュを計算します。
SQLインジェクション
SQLインジェクション攻撃とは、ハッカーがアプリケーションインターフェイスを介してSQLクエリを挿入し、バックエンドデータベースからデータを抽出または操作することです。SQLインジェクション攻撃は、動的SQLステートメントの代わりにパラメーター化されたクエリを使用することで防ぐことができます。
クロスサイトスクリプティング(XSS)
XSSは、攻撃者が悪意のあるスクリプトをアプリケーションに挿入したときに発生する攻撃の一種です。この種の攻撃は、ユーザーがリンクをクリックして悪意のあるサイトに送信したり、ユーザーがアクションを実行することなくマルウェアをデバイスに直接配信したりすることを目的としています。
機密データの公開
データの漏洩は、暗号化キー、パスワード、社会保障番号、クレジットカード情報、およびその他の個人を特定できる詳細がハッカーから適切に保護されていない場合に発生します。機密データは、ストレージ内とインターネット経由で送信する場合の両方で暗号化する必要があります。特定の情報の機密性はさまざまですが、デフォルトで保護する必要のある機密データを判断するための実証済みの方法があります。
入力検証攻撃
入力検証攻撃とは、攻撃者がアプリケーションを操作して、本来はいけないデータを受け入れる方法を見つけた場合です。これは厳密にはSQLインジェクションに限定されませんが、ネットワークパケットなどの外部ソースからの入力や、テキストメッセージや電子メールアドレス識別子などのユーザー生成コンテンツを含めることができます。
バッファオーバーフロー攻撃
これらの攻撃は、アプリケーションが入力データにスペースを割り当てるときに、指定された境界を超えてメモリにアクセスできるという事実を悪用します。その結果、ハッカーは、ソフトウェア開発プロセス中に開発者が予想したよりも多くのコードをプログラムのバッファーに導入し、この余分なデータを実行してアプリまたはシステムを制御します。
未検証のリダイレクトと転送
これは、攻撃者が事前に切り替えについて警告することなく、ユーザーを正当なWebサイトから悪意のあるWebサイトにリダイレクトできる場所です。さらに、リクエスト内で認証されていないパラメータを使用することにより、ハッカーは表示されるページを変更することを回避できることがよくあります。
不適切なエラー処理
不適切なエラー処理とは、アプリケーションが開発者に予期しないエラーを処理する方法を提供できない場合です。これにより、ハッカーは、適切に処理されないエラーメッセージを悪用して、コードを実行したり、バックエンドサーバーを介してアクセスしたりすることができます。
アプリケーションのホワイトリスト(別名:「最小特権」)
最小特権の概念は、アプリケーションが安全に実行するために必要な最小限のリソースにのみアクセスできるようにすることです。このように、Webアプリまたはバックエンドサービスの1つに脆弱性がある場合、悪用可能な弱点を探しているハッカーがそのエントリポイントとして使用することはできません。
不十分なロギングとモニタリング
多くの場合、ソフトウェアには不十分なログ機能と監視機能があり、開発者が攻撃が行われたかどうかを判断するのが(不可能ではないにしても)困難になる可能性があります。
攻撃者は通常、アクションがログに記録されることを望まないため、検出されないままになります。したがって、開発者は、ユーザーアクティビティの追跡、ファイルの整合性の監視、ネットワークアクティビティのログなど、適切なセキュリティの監視と監査を実装する必要があります。
![ISO 27001 Certification]()
8. ISO27001認証
また、会社のISO27001認定を取得することも検討する必要があります。ISO 27001は、情報セキュリティ管理システムを開発、実装、保守、および改善するためのセキュリティ標準の概要を示す世界的な情報セキュリティ標準です。
ISO 27001認定は、重要なビジネス情報の機密性、整合性、および可用性を保護する組織の能力を高めることにより、ソフトウェア開発を保護するのに役立ちます。
![Penetration Testing]()
9. 侵入テスト
ペネトレーションテストは、ソフトウェアの潜在的なセキュリティ問題を特定する自動化された方法です。ソフトウェアセキュリティを専門とする侵入テストチームを雇うことで、適切な侵入テストを行うことができます。
これらのセキュリティ専門家は、ハッカーと同じツールを使用して、これらのタイプの攻撃に対してシステムがどの程度安全であるかを評価します。ほとんどの場合、企業は自社のシステムまたは製品のサブセットに対して毎月何らかの形の侵入テストを実施する必要があります。このようにして、攻撃者が最初に脆弱性を見つける前に、既存の脆弱性が迅速に対処および解決されていることを確信できます。
セキュリティテストには、サードパーティのソフトウェアコンポーネントに関する懸念を特定して軽減することも含まれます。さらに、企業はコードを保護し、ベンダーやパートナーの製品も保護する必要があります。
![Incorporate secure software development practices into your DevOps practices]()
10. 安全なソフトウェア開発プラクティスをDevOpsプラクティスに組み込む
これらのベストプラクティスの実装を開始したら、必ずそれらをDevOpsプロセスに統合してください。これにより、ソフトウェア開発チーム全体がセキュリティ要件を認識し、安全なソフトウェアを構築できるようになります。
その結果、チームは手遅れになるまで待つのではなく、開発の開始時にセキュリティの問題を特定できます。これが、脆弱性を減らし、エンドユーザーに影響を与える前にバグを排除するために、安全なソフトウェア開発を最初から最後まで処理するときに、安全なDevOps(またはDevSecOps)プラクティスが非常に重要である理由です。
必要に応じて、企業は自社のアプリやサービスのセキュリティバグを特定するための報酬を伴うバグ報奨金プログラムを実装することもできます。最後に、社内で進捗状況の最新情報を定期的に伝達して、これらすべての新しいポリシーがどこから来ているのか、なぜそれらが必要なのかを人々が理解できるようにすることが重要です。