セキュリティ脆弱性とは:種類と修正方法
2021年2月11日
0 分で読めます2020年のデータ侵害による平均被害額は386万ドル、2021年の世界のサイバー犯罪による損失額は6兆ドルに達しました。既知の脆弱性の82%はアプリケーションコードに存在し、Web アプリケーションの脆弱性は90%がハッキングの危険にさらされ、そのうち68%では機密データが侵害される可能性があります。
脆弱性・エクスプロイト・脅威の違い
サイバーセキュリティリスクを効果的に管理するには、脆弱性、エクスプロイト、脅威の違いを理解することが重要です。
セキュリティ脆弱性とは?
セキュリティ脆弱性とは、ソフトウェアコードの欠陥や、Log4Shellのようなシステムの設定ミスを指します。攻撃者はこれらを悪用して、システムやネットワークに不正に直接アクセスできます。侵入後は、認証や権限を利用してシステムや資産を侵害する可能性があります。
脆弱性スキャナーは、環境をスキャンして脆弱性データベースや既知の脆弱性リストと照合し、弱点のある箇所を見つけるのに役立ちます。
ソフトウェアの脆弱性とは?
ソフトウェアの脆弱性とは、攻撃者に悪用される可能性のあるソフトウェアプログラムのコード上の弱点です。攻撃者は脆弱性を利用してネットワークに不正アクセスし、データを盗み、システムを侵害することがあります。
サイバーセキュリティにおけるエクスプロイトとは?
エクスプロイトとは、ハッカーが脆弱性を利用して攻撃を仕掛ける手段です。通常は、特別に作成されたソフトウェアや一連のコマンドを指します。たとえば、CodeRed、Spida、Slammerなどのネットワークワームは、長年にわたってMicrosoft IIS(Internet Information Services)やMS-SQLサーバーの脆弱性を悪用してきました。
Rig、Magnitude、Falloutなどのエクスプロイトキットが、侵害されたWebページに埋め込まれることもあります。これらのキットは脆弱性を継続的にスキャンします。弱点が検出されると、ホストシステムへのマルウェア注入など、エクスプロイトの実行を直ちに試みます。
エクスプロイトとハッキングの違いとは?
サイバーセキュリティにおけるエクスプロイトとは、コードのバグや抜け穴を悪用し、通常は機密データを取得するためにシステム内で優位に立つことです。ハッキングとは、誰かがデータに不正アクセスすることを指します。
サイバー脅威とは?
脅威とは、1つ以上のエクスプロイトが脆弱性を利用して攻撃を仕掛ける、現実または仮想の事象です。たとえば、Microsoft IISの脆弱性を狙うCodeRedエクスプロイトは、30万を超える標的への感染に実際に使われてきました。こうした脅威は、世界中で甚大な経済的損失を引き起こしています。

既知の脆弱性のうち、実際に悪用される、つまりシステムへの侵入に使われるものはごく一部です。最もリスクが高いのは悪用される可能性が高い脆弱性です。そのため、図に示すように、優先順位を上げて早急に対処する必要があります。
セキュリティ脆弱性の種類
セキュリティ脆弱性は、インフラ、ネットワーク、アプリケーションなど、あらゆる層に存在します。このセクションでは、アプリケーションとWebサイトのセキュリティ上の弱点に焦点を当てます。
WebアプリケーションやWebサイトをサイバーセキュリティリスクにさらす弱点を追跡する、重要なリストが2つあります。1つ目は、次の団体が管理しています。
オープンコミュニティであるグローバルなOpen Web Application Security Project(OWASP)です。OWASPが説明する約60のアプリケーションセキュリティ上の弱点のうち、OWASP Top 10 Vulnerabilitiesでは、脆弱性として最も頻繁に悪用されるものを取り上げています。
2つ目のリストはCWE(Common Weakness Enumeration)です。これは「セキュリティ上の影響をもたらす、一般的なソフトウェアおよびハードウェアの弱点の種類をまとめた、コミュニティ主導のリスト」です。CWEは、よく知られるCommon Vulnerabilities and
Exposures(CVE)標準辞書と同様に、連邦政府が資金を提供する研究開発センターを運営する非営利企業、MITRE Corporationが管理しています。CWE-25は、最も危険なソフトウェアの弱点を25件まとめた、毎年更新されるリストです。
MITRE CWE-25では、アプリケーションとWebサイトのセキュリティ上の弱点を次の3つの主要な種類に分類しています。
1. 防御の不備
この最初の種類には、ユーザーが認証や認可のプロセスを回避したり、偽装したりできる欠陥が含まれます。認証はシステムへのアクセスを試みる人の本人確認を行い、認可はユーザーに割り当てられたアクセス権と利用権限を定めます。
防御の不備による欠陥の例:
脆弱なパスワードのエンコード
保護が不十分な認証情報
認証がない、または単一要素認証
安全でない権限の継承
適切なタイミングで失効しないセッション
不正な第三者が機密リソースへのアクセスに成功し、それを悪用すると、こうした防御の不備による脆弱性はすべて、組織のセキュリティ体制を大きく損なうおそれがあります。
防御の不備による脆弱性を悪用するエクスプロイトには、次のようなものがあります。
クレデンシャルスタッフィング攻撃
セッションIDの乗っ取り
ログイン認証情報の窃取
中間者(MITM)攻撃(電子的な盗聴)
2. リソース管理の不備
メモリ、関数、オープンソースフレームワークなどのリソース管理に関する脆弱性は数多くあります。WebアプリケーションやWebサイトの設計・開発段階では、ライブラリや関数など、アーキテクチャに組み込むすべてのサードパーティ製コンポーネントをスキャンし、脆弱性の有無を確認することが重要です。
このカテゴリの欠陥には、次のようなものがあります。
境界外への書き込みまたは読み取り(バッファオーバーフロー):アプリケーションをだまして、意図したメモリバッファの末尾を越えた領域、または先頭より前の領域にデータを書き込ませたり、そこから読み取らせたりします。
パストラバーサル:攻撃者がパス名を細工し、アクセス制限のあるディレクトリの外にあるファイルにアクセスできるようにします。
バッファオーバーフロー攻撃は、リソース管理の不備によってWebアプリケーションやWebサイトがサイバーセキュリティリスクにさらされる典型例です。メモリバッファの制御が不十分な状態を悪用して実行経路を変更し、アプリケーションの制御を奪ったり、ファイルを破損させたり、機密情報を窃取したりします。
3. コンポーネント間の安全でない相互作用
現在の高度に分散されたアプリケーションアーキテクチャでは、さまざまなサービス、スレッド、プロセス間でデータを送受信します。実行時には、WebアプリケーションやWebサイトでゼロトラストのアプローチを採用する必要があります。すべての入力を疑わしいものとして扱い、信頼できるソースからのものであり、意図した目的に沿っていることを検証して初めて受け入れます。
WebアプリケーションやWebサイトを安全でない危険な相互作用にさらす弱点には、次のようなものがあります。
クロスサイトスクリプティング(XSS):Webページの生成時に、ユーザーが制御できる入力値を適切に無害化しないことです。生成されたWebページで悪意のあるスクリプトが配信されるまでの一連の流れは、通常、Webリクエストを介して信頼できないデータがWebアプリケーションに入るところから始まります。
クロスサイトリクエストフォージェリ(CSRF):正当で本物に見えるリクエストが、意図的に送信されたかどうかを適切に検証しないことです。この攻撃は、偽のメール内のリンクをクリックするようユーザーを誘導したり、すでに認証済みのサイトやサーバーに偽造リクエストを送信させたりするなど、ソーシャルエンジニアリングを通じて仕掛けられることがよくあります。
一般に、ゼロトラストのセキュリティ制御を実装していないWebアプリケーションやWebサイトは、バックドア攻撃、スクリプト攻撃、ワーム、トロイの木馬など、インフラ、データ、システムに被害をもたらす悪意のあるコードを展開するエクスプロイトに対して脆弱です。
最も一般的な脆弱性とは?
OWASP Top 10とCWE-25はどちらも、最も一般的な脆弱性としてインジェクションの欠陥を挙げています。コードインジェクションにはSQL、NoSQL、OS、LDAPなどさまざまな形式がありますが、いずれもコマンドやクエリを介してインタープリターに悪意のあるデータを送信します。インタープリターはだまされて、コマンドの実行やデータへのアクセスなど、不正な操作を実行します。
セキュリティ脆弱性の発見と修正方法
セキュリティ脆弱性の発見と修正は、正式な脆弱性管理プログラムを通じて行います。脆弱性管理とは、部門横断的なベストプラクティスと手順を整備し、脆弱性を適切なタイミングで大規模に特定、優先順位付け、修正する取り組みです。
セキュリティ脆弱性評価は、脆弱性管理プログラムの重要な要素です。ペネトレーションテストなどの自動化された脆弱性評価テストを通じて、組織の脆弱性管理プロセスと手順がどれほど有効かを把握します。

セキュリティ脆弱性の管理と評価は、セキュアなソフトウェア開発ライフサイクル(Secure SDLC)に不可欠です。製品ライフサイクルのすべての段階を通じて、コード、ライブラリ、コンテナイメージなどのコンポーネントに弱点や脆弱性がないかをテストします。
SDLC全体でセキュリティ脆弱性を修正するツール
DevSecOpsチームがSecure SDLCを実践するのに役立つ自動化ツールには、次のようなものがあります。
ソフトウェア構成分析 (SCA)ツール:すべてのコンポーネントを検出して監視し、問題を通知して修正します。
静的アプリケーションセキュリティテスト(SAST)ツール:コンパイル前のコードを対象に、ホワイトボックス方式で脆弱性を評価します。
動的アプリケーションセキュリティテスト(DAST)ツール:実行可能なコードを対象に、ブラックボックス方式で脆弱性を評価します。
オープンソース脆弱性スキャナー:コードライブラリの脆弱性を特定して迅速な対応と修正を可能にするとともに、オープンソースライセンス要件への準拠を支援します。
多くの脆弱性管理ツールは、既知の脆弱性データベースを使ってスキャンと評価を行います。たとえばSnyk Intel Vulnerability Databaseは、公開情報と独自の脆弱性・脅威インテリジェンスの情報源を活用・拡充し、業界で最も包括的かつ効率的なオープンソース脆弱性スキャナーを提供します。
CTFを始めよう
オンデマンドのバーチャル入門ワークショップで、CTFチャレンジの解き方を学びましょう。



