コンピュータ セキュリティにおいて、脆弱性とは、システムの設計、実装、または管理における欠陥または弱点であり、悪意のある人物がこれを悪用してセキュリティを侵害する可能性があります。
システム管理者が完全な正確性を実現するために最善を尽くしたとしても、事実上すべてのハードウェアとソフトウェアにはバグが含まれており、システムが期待どおりに動作しないことがあります。そのバグによって攻撃者がシステムリソースの機密性、整合性、または可用性を侵害できる場合、それは脆弱性とみなされます。安全でないソフトウェア開発手法や、複雑さなどの設計要因は、脆弱性の負担を増大させる可能性があります。
脆弱性管理とは、システムを特定し、最も重要なものを優先順位付けし、脆弱性をスキャンし、システムを保護するための対策を講じるプロセスです。脆弱性管理は通常、修復、緩和、そして受け入れを組み合わせたものです。
脆弱性は、共通脆弱性評価システム(CVSS)に基づいて深刻度が評価され、共通脆弱性識別子(CVE)データベースなどの脆弱性データベースに追加されます。2024年11月現在、CVEデータベースには24万件以上の脆弱性が登録されています。[1]
脆弱性は、ハードウェアまたはソフトウェアに導入された時点で発生します。脆弱性を含むソフトウェアまたはハードウェアが稼働すると、脆弱性はアクティブになり、悪用可能になります。脆弱性は、管理者、ベンダー、または第三者によって発見される可能性があります。脆弱性が(パッチなどを通じて)公開されると、攻撃者はこの情報を利用して、パッチが適用される前に既存のシステムを攻撃できるため、侵害のリスクが高まります。脆弱性は、システムにパッチが適用されるか、使用が停止されると、最終的に解消されます。
システム管理者の最善の努力にもかかわらず、事実上すべてのハードウェアとソフトウェアにはバグが存在します。[2]バグがセキュリティリスクを引き起こす場合、それは脆弱性と呼ばれます。[3] [4] [5]特定された脆弱性を修正するためにソフトウェアパッチが頻繁にリリースされますが、ゼロデイ脆弱性は依然として悪用される可能性があります。[6]脆弱性は、悪意のある攻撃者によって悪用される可能性が異なり、実際のリスクは脆弱性の性質と周囲のシステムの価値に依存します。[7]一部の脆弱性はサービス拒否攻撃にのみ利用可能ですが、より危険な脆弱性では、攻撃者がユーザーに気付かれることなくコードインジェクションを実行できます。 [3]権限昇格 を可能にする脆弱性はごくわずかであり、これは通常、より深刻な攻撃に必要です。[8]脆弱性がなければ、エクスプロイトは通常アクセスできません。[9]また、ソーシャルエンジニアリングや、施錠されていないドアや露出したポートなどの脆弱な物理的セキュリティを介して、エクスプロイトなしでマルウェアが直接インストールされる可能性もあります。 [10]
脆弱性は、次のような不適切な設計要素によって悪化する可能性があります。
一部のソフトウェア開発手法は、コードベースに脆弱性が取り込まれるリスクに影響を与える可能性があります。安全なソフトウェア開発に関する知識不足や、機能を迅速に提供することへの過度のプレッシャーは、特に企業文化においてセキュリティが優先されていない場合、回避可能な脆弱性が本番環境のコードに取り込まれることにつながる可能性があります。これは、意図しない脆弱性につながる可能性があります。システムが複雑になればなるほど、脆弱性が検出されなくなる可能性が高くなります。脆弱性の中には、意図的に作り出されるものもあり、その原因は様々です。不満を抱えた従業員がサイバー犯罪者にアクセス権を売ったり、国家が支援する巧妙な計画によってソフトウェアに脆弱性が取り込まれたりする可能性があります。
ソフトウェア開発のプラクティスが不十分だと、コードベースに脆弱性が入り込む可能性が高まります。安全なソフトウェア開発に関する知識やトレーニングの不足、納品への過度のプレッシャー、あるいはコードベースが過度に複雑であることなどは、脆弱性が入り込んでも気づかれないまま放置される原因となります。企業文化においてセキュリティが優先されていない場合、これらの要因はさらに悪化する可能性があります。[15]コードレビューが不十分だとバグの見逃しにつながる可能性もありますが、コードレビュープロセス中に静的コード分析ツールを使用することで、脆弱性を発見するのに役立つ場合もあります。[16]
DevOpsは、新機能の導入を迅速化するために自動テストと導入を重視した開発ワークフローですが、多くの開発者に構成変更のアクセス権を付与する必要があることが多く、これにより意図的または不注意で脆弱性が混入する可能性があります。[17] DevOpsワークフローの一部であることが多い依存関係の区分化は、依存関係を必要なものだけに絞り込むことで攻撃対象領域を減らすことができます。 [18]組織独自のハードウェアとソフトウェアではなく、サービスとしてのソフトウェアを使用する場合、組織は脆弱性を防ぐためにクラウドサービスプロバイダーに依存することになります。[19]
国家脆弱性データベースは、脆弱性を重複する可能性のある8つの根本原因に分類しています。[20]
製造中または製造後に意図的にセキュリティバグが混入され、特定の状況下で集積回路が期待通りに動作しなくなる可能性があります。ハードウェアにおけるセキュリティバグのテストは、時間の制約と21世紀のチップの複雑さのために非常に困難です。[23]また、設計と製造のグローバル化により、悪意のある行為者によってこれらのバグが混入される機会が増加しています。[24]
オペレーティングシステムの脆弱性は使用しているオペレーティングシステムによって異なりますが、一般的な問題は、攻撃者が本来許可されている以上のアクセス権を取得できる権限昇格バグです。LinuxやAndroidなどのオープンソースオペレーティングシステムは、ソースコードに自由にアクセスでき、誰でも貢献できるため、脆弱性が混入する可能性があります。しかし、 Microsoft WindowsやAppleオペレーティングシステムなどのプロプライエタリオペレーティングシステムでも同様な脆弱性が発生します。[25]信頼できるオペレーティングシステムベンダーはすべて、定期的にパッチを提供しています。[26]
クライアントサーバー型アプリケーションはエンドユーザーのコンピュータにダウンロードされ、通常、ウェブアプリケーションよりも更新頻度が低くなります。ウェブアプリケーションとは異なり、クライアントサーバー型アプリケーションはユーザーのオペレーティングシステムと直接やり取りします。これらのアプリケーションによく見られる脆弱性には、以下のものがあります。[27]
多くのウェブサイトではウェブアプリケーションが稼働しています。ウェブアプリケーションは他のアプリケーションに比べて本質的に安全性が低いため、データ侵害やその他のセキュリティインシデントの主な発生源となっています。[28] [29]ウェブアプリケーションには以下のようなものが含まれます。
Web アプリケーションの脆弱性を狙った攻撃には次のようなものがあります。
セキュリティバグは一般的に、以下の比較的少数の広範なカテゴリに分類されます。[33]
様々なサイバー攻撃防止対策の有効性と費用対効果に関する証拠はほとんどない。[34]攻撃のリスクを見積もることは簡単ではないが、侵入までの平均時間と予想コストを考慮することで、特定された脆弱性を修復または軽減するための優先順位と、そうすることが費用対効果が高いかどうかを判断することができる。[35]セキュリティに注意を払うことで攻撃のリスクを軽減できるが、複雑なシステムに完璧なセキュリティを実現することは不可能であり、多くのセキュリティ対策には許容できないコストや使いやすさの欠点がある。[36]たとえば、システムの複雑さと機能を減らすことは、攻撃対象領域を減らすのに効果的である。[37]
脆弱性管理を成功させるには、通常、修復(脆弱性を解消すること)、緩和(エクスプロイトの難易度を高め、その影響を軽減すること)、そしてある程度の残存リスクを受け入れることが必要です。多層防御戦略は、攻撃に対する複数の障壁に対して用いられることがよくあります。[38]一部の組織では、すべての脆弱性を修正するためのリソースが不足している状況において優先順位付けを可能にするため、最もリスクの高い脆弱性のみをスキャンします。[39]費用の増加は、収益の減少を もたらす可能性があります。[35]
修復は、例えばソフトウェアパッチをダウンロードするなどして脆弱性を修正します。[40] 脆弱性スキャナーは通常、ゼロデイ脆弱性を検出することはできませんが、データベースに基づいて既知の脆弱性を発見することにはより効果的です。これらのシステムは、いくつかの既知の脆弱性を発見し、パッチなどの修正をアドバイスすることができます。[41] [42]しかし、誤検知などの限界があります。[40]
脆弱性は、それがアクティブな状態、つまり脆弱性が埋め込まれたソフトウェアがシステム上でアクティブに実行されている場合にのみ悪用される可能性があります。[43]脆弱性を含むコードがシステム上で実行するように設定される前は、キャリアとみなされます。[44]休眠中の脆弱性は実行可能ですが、現在は実行されていません。休眠中の脆弱性とキャリアの脆弱性を含むソフトウェアは、アンインストールまたは無効化することでリスクを除去できる場合があります。[45]アクティブな脆弱性は、他の種類の脆弱性と区別することで、パッチ適用の優先順位を付けることができます。[43]
脆弱性緩和策とは、脆弱性を解消するのではなく、攻撃を困難にしたり、攻撃による影響を軽減したりする対策です。[46]特にルート(管理者)アクセス権を持つシステム部分の攻撃対象領域を縮小し、権限の悪用を企てる攻撃の機会を遮断することは、サイバー攻撃による被害を軽減するための一般的な戦略です。[40]サードパーティ製ソフトウェアのパッチが利用できない場合は、ソフトウェアを一時的に無効にできる可能性があります。[47]
侵入テストは、エクスプロイトを介してシステムに侵入し、システムが安全かどうかを確認します。[48]侵入テストが失敗したとしても、必ずしもシステムが安全であるとは限りません。[49]一部の侵入テストは、既存のエクスプロイトを用いて既知の脆弱性をテストする自動ソフトウェアを用いて実施できます。[50] 他の侵入テストは、訓練を受けたハッカーによって実施されます。多くの企業は、外部からの攻撃をシミュレートするため、この作業を外部委託することを好みます。[49]

脆弱性のライフサイクルは、ハードウェアまたはソフトウェアに脆弱性が導入されたときに始まります。[51]脆弱性の検出は、ソフトウェアベンダーまたはサードパーティによって行われます。後者の場合、脆弱性をベンダーに直ちに開示して修正してもらうのが最も倫理的だと考えられています。[52]政府機関や諜報機関は、公表されていない脆弱性を購入し、攻撃に利用したり、蓄積したり、ベンダーに通知したりすることがあります。[53] 2013年時点で、ファイブアイズ(米国、英国、カナダ、オーストラリア、ニュージーランド)が市場の過半数を占めており、その他の主要な購入者には、ロシア、インド、ブラジル、マレーシア、シンガポール、北朝鮮、イランなどが含まれています。[54]組織犯罪グループも脆弱性を購入していますが、通常はエクスプロイトキットを好みます。[55]
脆弱性が公開されていたり、修正プログラムが適用されていても、長期間にわたって悪用される可能性があります。[56] [57]セキュリティパッチの開発には数か月かかる場合があり、[58]あるいは開発されないこともあります。[57]パッチはソフトウェアの機能に悪影響を及ぼす可能性があり[57] 、ユーザーは機能と互換性を確認するためにパッチをテストする必要がある場合があります。 [59]大規模な組織では、すべての依存関係を特定してパッチを適用できない場合があります。一方、小規模な企業や個人ユーザーはパッチをインストールしない場合があります。[57]調査によると、脆弱性が公開されたり、パッチがリリースされたりすると、サイバー攻撃のリスクが高まります。[60]サイバー犯罪者は、パッチをリバースエンジニアリングして根本的な脆弱性を見つけ、エクスプロイトを開発することができ、 [61]多くの場合、ユーザーがパッチをインストールするよりも早く開発できます。[60]
脆弱性は、ソフトウェアまたは脆弱なバージョンが使用されなくなると廃止されます。[52]これには長い時間がかかる場合があり、特に産業用ソフトウェアは、メーカーがサポートを停止しても交換が不可能な場合があります。[62]
脆弱性の深刻度を評価するために一般的に用いられる尺度として、オープンソース仕様の共通脆弱性評価システム(CVSS)があります。CVSSは、脆弱性を悪用してデータの機密性、可用性、および整合性を侵害する可能性を評価します。また、脆弱性がどのように利用されるか、そしてエクスプロイトにはどの程度の複雑さが必要かを考慮します。エクスプロイトに必要なアクセス量や、ユーザーの介入なしにエクスプロイトが実行可能かどうかも、総合スコアに反映されます。[63] [64]
脆弱性を発見した者は、直ちにそれを開示する(完全開示)ことも、パッチが開発されるまで待つ(責任ある開示、または調整された開示)こともできる。前者のアプローチはその透明性が高く評価されているが、欠点は、開示後にパッチがない状態で攻撃を受けるリスクが増大する可能性が高いことである。[65]ベンダーの中には、脆弱性を報告した人にバグ報奨金を支払うところもある。 [66] [67]開示は法的責任や運用上のオーバーヘッドを引き起こす可能性があるため、すべての企業が開示に積極的に応じるわけではない。[68] 脆弱性の開示を義務付ける法律はない。[69]脆弱性がベンダーや一般に開示されない第三者によって発見された場合、それはゼロデイ脆弱性と呼ばれ、防御策が少ないため、最も危険なタイプであると考えられることが多い。[70]
最も一般的に使用されている脆弱性データセットは、 Mitre Corporationが管理するCommon Vulnerabilities and Exposures (CVE)です。[71] 2024年11月現在、24万件を超えるエントリがあります[1]この情報は、米国のNational Vulnerability Database を含む他のデータベースと共有され、[71]各脆弱性にはCommon Vulnerability Scoring System (CVSS)、Common Platform Enumeration (CPE) スキーム、およびCommon Weakness Enumerationを使用してリスクスコアが与えられます[要出典] CVE やその他のデータベースでは、通常、サービスとしてのソフトウェア製品の脆弱性は追跡されません[41] CVE の提出は、脆弱性を発見した企業にとって任意です[69][update]
ソフトウェアベンダーは、脆弱性が攻撃に利用された場合、通常、その費用について法的責任を負いません。そのため、安価だが安全性の低いソフトウェアを開発するインセンティブが生まれます。[72]一部の企業は、 PCI、HIPAA、サーベンス・オクスリー法など、脆弱性管理に法的要件を課す法律の対象となっています。[73]