シノプシス ソフトウェア・インテグリティ・グループはブラック・ダックになりました 詳細はこちら

close search bar

申し訳ありませんが、この言語ではまだご利用いただけません

close language selection

プログラミングを始めたときに知っておけばよかったと思うセキュリティの知識

Allon Mureinik

Dec 21, 2022 / 1 min read

ソフトウェア開発チームは問題を解決する創造的な人材の集まりです。その仕事は、機能するアプリケーションを構築し、状況の進化と開発速度の加速に伴うテクノロジー、ツール、プログラミング言語の急速な変化に対応することです。開発プロセスの主な役割は、ユーザーニーズとビジネス目標を満たす製品を提供することであり、開発チームは常にセキュリティについて考えているわけではありませんが、セキュアアプリケーション構築の最前線にいます。

アプリケーションセキュリティは自分でコントロールできない手の届かない領域で発生するもののように思われて、開発者がアプリケーションセキュリティについて考えていない場合もあれば、適切なセキュリティトレーニングを受けていないことにより、真にセキュアなアプリケーションを構築するために何が必要かを認識していない場合もあります。セキュリティの脅威は常に進化しており、トレーニングセッションからの情報はすぐに陳腐化する可能性があります。すでに一定のセキュリティ対策(ファイアウォール、Webアプリケーションファイアウォール、エンドポイント保護など)をとっている組織は、アプリケーションにセキュリティを組み込むことに苦心する必要はないと考える可能性があります。

このようなセキュリティ意識の欠如により、脆弱性を残したままアプリケーションが構築され、悪意のある人物が容易にシステムに侵入して機密データにアクセスできる可能性があります。セキュリティテストは開発の全工程において重要なステップですが、アプリケーションが本番環境またはリリース段階に入ってから問題が特定された場合、セキュリティ上の課題への対処はさらに困難になります。セキュリティチームは開発チームと協力してコードを修正する必要があるため、大幅な遅延が生じる可能性があります。

開発チームは完璧なアプリケーションの構築を望みますが、機能がどれほど優れていても、ソフトウェアアプリケーションのセキュリティを100%確保することはできません。開発チームセキュリティチームの目標は、侵入が困難で割に合わない行為であると思い知らせることです。

シフトレフト

従来、数週間~数か月かかっていた開発スケジュールが数時間~数日に短縮された昨今では、ソフトウェア開発ライフサイクル(SDLC)のどの段階でも、もはやセキュリティを考慮しないという選択肢はありません。DevOpsチームは、SDLCの初期段階でアプリケーションを保護するためのプロセスを組み込み、基本的なタスクを実行するのに十分なアプリケーション・セキュリティ能力を装備する必要があります。また、セキュリティの問題に固有の知識が必要になる状況を認識し、関連する専門知識を持つ人に助言を求めて問題に対処する必要があります。

つまり、リリース後のテストまで待つことなく、開発プロセスでバグを見つけて修正する必要があるということであり、これがシフトレフトの意味です。2022年の侵害の平均コストが435万米ドルであり、83%の組織が複数の侵害を経験しているという調査結果から、開発サイクルの早い段階で脆弱性とバグを修正することが、費用対効果の面でも、評判の失墜を防ぐ面でも優れた方策であることは明らかです。

この移行を実現するには、SDLC全体にセキュリティを組み込む必要があります。開発スケジュールを停滞させることなく開発チームをサポートする、さまざまな自動化されたアプリケーションセキュリティ・ツールがあります。これらのツールを使用すると、コードの作成中に脆弱性が特定された時点で優先順位を付けて修正することができるため、変更がはるかに容易になります。

開発チームが知っておくべきこと

開発チームの仕事は、アプリケーションの目的を達成する機能を作成することです。開発チームは、有用な製品の構築を念頭に置いています。開発チームがセキュアなアプリケーションを開発できるようになるには、エンジニアリングの知識を活かし、機能に重点を置くことに加えて、必要なスキルがあり、これには、基本的なセキュリティの概念、セキュリティ技術のユースケース、およびそれらが組織とどのように関連しているかに関する知識が含まれます。

開発チームは、脅威を防ぐ方法を理解する必要がありますが、日頃システムを侵害することではなく、構築することを意識しているため、これが難しい場合があります。他者によるシステムの侵害方法を想定できるようになるには、ソフトウェアサプライチェーンのコンポーネントと依存関係、既知の脆弱性など、ソフトウェアで問題が発生する可能性のあるあらゆる事態を把握している必要があります。

また、開発者は、セキュリティテストの仕組み、およびセキュリティテストでできることとできないことを理解し、セキュリティテストでの動作、テストでの検索対象、脆弱性に優先順位を付ける方法、問題を軽減する方法を把握している必要があります。

ソフトウェアやシステムへのパッチの適用、日常的なタスクの自動化、最小特権の適用など、セキュリティのベストプラクティスを理解することも、開発チームにとって有益です。基本に従い、セキュリティを最優先に考えることは、組織に対する攻撃のリスクを軽減するために大いに役立ちます。

ソフトウェア開発プロセスが組織とどのように関連しているかを理解することも開発チームにとって有益です。以下に例を示します。

  • ソフトウェア・コンポジション解析(SCA):コードベース内のオープンソース・ソフトウェアを特定し、セキュリティ、ライセンス・コンプライアンス、コード品質を評価します。アプリケーションをデプロイする前に、既知の脆弱性の原因を特定できます。
  • 静的アプリケーション・セキュリティ・テスト(SAST):ビルド・プロセス中に、または開発者のIDE(統合ソフトウェア開発環境)から、直接ソースコードを解析し、脆弱なコード行を特定できます。SASTは、SCAと同様に、アプリケーションをデプロイする前に使用できます。SCAおよびSASTで特定された問題の修正を数サイクル行った後、IASTおよびDASTテスト用にアプリケーションをデプロイできます。
  • インタラクティブ・アプリケーション・セキュリティ・テスト(IAST):通常、SDLCのテスト/QA段階で行われ、コードが変更され、再コンパイルされるとすぐに問題を捕捉します。脆弱性をリアルタイムで特定できます。
  • 動的アプリケーション・セキュリティ・テスト(DAST):本番システムまたはテスト/QAシステム内のアプリケーションを検査します。DASTでは実行時に脆弱性を特定できますが、脆弱なコード行を特定することはできません。
  • ペネトレーション・テスト(ペンテスト):ソフトウェアの運用とデプロイの準備が整った段階で、さまざまな種類の攻撃の許可されたシミュレーションを行います。システムの弱点を特定するために効果的なテストです。

セキュリティの適用

開発者はセキュリティの専門家ではないかもしれませんが、アプリケーションにセキュリティが組み込まれていることを確認するための基本を習得することはできます。Webセミナー「セキュアな開発のための学習をサポート~eラーニング活用のススメ」で、日常業務の一環としてセキュリティを取り入れる開発チームを支援する方法をご覧ください。

Continue Reading

トピックを探索する