脆弱性診断やらねば!!

セキュリティ

こんにちは。ソフトウェアエンジニアの野村です。

最近、新しいキーボードを購入しました。

Keychron K8 Pro

Keychron K8 Pro QMK/VIA Wireless Mechanical Keyboard
Keychron K8 Pro QMK/VIA Wireless Mechanical Keyboard. Supports out-of-the-box QMK/VIA. Wireless or Wired. Hot swap every switch in a breeze with the hot-swappab...

US配列ということもあり時折違う記号を打ってしまうこともありますが、楽しく開発を進めております!

さて、今回は脆弱性診断についてご紹介します。先日取得したISMS認証の運用の一環として、社内で扱っているシステムの潜在的な問題や脅威を洗い出し、対策を講じるため脆弱性診断を実施することになりました。実施するにあたって調べたことを共有できればと思います。

脆弱性診断とは

システムで扱っている情報の漏洩やサイバー攻撃によるシステム被害を未然に防ぐため、運用しているシステム(アプリケーション)や稼働しているサーバーのOS・ミドルウェア、ネットワークなどを一通り確認し、セキュリティの問題点・弱点・欠陥などがないか診断することです。この 「セキュリティの問題点・弱点・欠陥など」脆弱性 といいます。

脆弱性診断を実施する目的

攻撃者はこの脆弱性をつき個人情報や企業の機密情報などを搾取してきます。攻撃内容によっては、サービスの停止や他のサーバを攻撃する踏み台にされる場合もあります。この脆弱性は日々追加・更新されていますので、この脆弱性をいち早く見つけ対策を講じる必要があります。

脆弱性を悪用した攻撃の例

この脆弱性を悪用し、サイバー攻撃を行う手法は様々です。代表的なものをいくつか紹介します

SQLインジェクション

アプリケーションの脆弱性を利用し、アプリケーションが意図しないSQLを実行させ、データベースを不正に操作・改ざんする攻撃です。データベースに保存されている公開されていない情報の閲覧、データの改ざんによるWebページの改ざん・パスワードの変更・システムの停止、不正なログインなどの危険性があります。

XSS(クロスサイト・スクリプティング)

Webアプリケーションの脆弱性を利用して、悪意のあるデータを埋め込み、スクリプトを実行させる攻撃です。利用者に悪意のあるスクリプトを実行させ、実際のページとは異なった偽のページを表示させフィッシング詐欺などを行ったり、ブラウザが保持しているCookie情報を取得・改ざんし悪用される危険性があります。

CSRF(クロスサイト・リクエスト・フォージェリ)

悪意のあるページにアクセスした際に、意図しないリクエストを特定のWebサービスに送られてしまうというものです。サービスへログイン中のユーザーを狙った攻撃や、意図しない情報発信を行わせるものがあります。前者の場合、オンラインバンキングで不特定多数へ送金するリクエストを送らせたり、後者の場合はSNS・掲示板などに犯罪予告の投稿をさせるものもあります。

OSコマンド・インジェクション

Webサイトに向けて不正なリクエスト(攻撃)を行うことにより、Webサーバ側で想定していない動作をさせる攻撃です。ユーザーが入力する値にOSへの命令を紛れ込ませサーバへリクエストし、その値を受け取ったサーバが誤ってOSに対する命令を実行してしまうことで発生します。サーバ内にあるファイルの閲覧・改ざんにより重要情報の漏洩や設定ファイルの改ざん、不正なシステム操作によりOSのシャットダウンやアカウントの追加・削除、不正なプログラムのダウンロード・実行によりウィルス・ワーム・ボットなどへの感染やバックドアの設置、他のシステムへの攻撃の踏み台にされる危険性があります。

脆弱性診断はどうやって実施する?

脆弱性診断を実施する方法として、社内で行うもしくは外部のサービスを利用する方法になるかと思います。社内で行う場合は、診断を行う担当者のセキュリティ知識の習得や診断ツールの選定・診断内容(攻撃方法)の洗い出し等必要なことが多々あります。弊社ではまだ少数精鋭の体制ですので、社内で行う方法は選択肢から外しました。なので外部サービスを利用する方法で、脆弱性診断を依頼する会社の選定を進めました。診断して頂く内容・診断の基準、診断結果で脆弱性が見つかった場合の対応や再診断の可否、診断費用などを考慮して選定を行いました。

脆弱性診断の内容

一つのWebサービスを診断する場合でも、検査する対象に応じて診断内容は異なってきます。今回弊社で実施したのは アプリケーション診断プラットフォーム診断 と呼ばれる2種類の診断となります。

アプリケーション診断

Web・スマホなどのアプリケーションの脆弱性を調査します。攻撃者の視点でツールを使った攻撃(診断)や手動での検査で脆弱性を洗い出します。今回弊社ではWeb上のアプリケーションを対象とし、診断を行いました。

プラットフォーム診断

アプリケーションを実行するサーバやネットワーク機器、利用しているOSやミドルウェア・ソフトウェアに潜む既知の脆弱性を調査します。

脆弱性診断の基準

診断により検出された脆弱性は、サービスに対するリスク評価に基づき優先度を定め対応する必要があります。この脆弱性の評価において世界的に活用されているのがCVSS(Common Vulnerability Scoring System)と呼ばれる評価指標です。この評価指標に基づき算出された値で優先度を決め対応を行えるよう診断会社の選定時に考慮しました。

CVSS(Common Vulnerability Scoring System)

CVSS は、情報システムの脆弱性に対するオープンで汎用的な評価手法であり、ベンダーに依存しない共通の評価方法を提供しています。CVSSを用いると、脆弱性の深刻度を同一の基準の下で定量的に比較できるようになります。また、ベンダー、セキュリティ専門家、管理者、ユーザ等の間で、脆弱性に関して共通の言葉で議論できるようになります。

CVSSとは、脆弱性の深刻度を評価するための標準化されたシステムです。標準化されているので、ベンダーに依存せず、異なった製品間の脆弱性を比較することが容易となります。基本評価基準現状評価基準環境評価基準 という3つの異なる評価基準で脆弱性の深刻さを評価し、スコアとして算出されます。

基本評価基準 (Base Metrics)

  • 脆弱性そのものの特性を評価する
  • 算出されるもの:CVSS 基本値 (CVSS Base Score)
  • 評価項目:
    • AV: Attack Vector (攻撃元区分)
    • AC: Attack Complexity (攻撃条件の複雑さ)
    • PR: Privileges Required (必要な特権レベル)
    • UI: User Interaction (ユーザ関与レベル)
    • S: Scope (スコープ)
    • C: Confidentiality (攻撃された場合の機密性への影響)
    • I: Integrity (攻撃された場合の完全性への影響)
    • A: Availability (攻撃された場合の可用性への影響)

現状評価基準 (Temporal Metrics)

  • 脆弱性をとりまく状況を評価する
  • 算出されるもの:CVSS 現状値 (Temporal Score)
  • 評価項目:
    • E: Exploit Code Maturity (攻撃される可能性)
    • RL: Remediation Level (利用可能な対策のレベル)
    • RC: Report Confidence (脆弱性情報の信頼性)

環境評価基準 (Environmental Metrics)

  • 脆弱性を利用する環境における重要度を評価
  • 算出されるもの:CVSS 環境値 (Environmental Score)
  • 評価項目:
    • CR: Confidentiality Requirement (機密性のセキュリティ要求度)
    • IR: Integrity Requirement (完全性のセキュリティ要求度)
    • AR: Availability Requirement (可用性のセキュリティ要求度)
    • MAV: Modified Attack Vector (緩和策後の攻撃元区分
    • MAC: Modified Attack Complexity (緩和策後の攻撃条件の複雑さ)
    • MPR: Modified Privileges Required (緩和策後の必要な特権レベル)
    • MUI: Modified User Interaction (緩和策後のユーザ関与レベル)
    • MS: Modified Scope (緩和策後のスコープ)
    • MC: Modified Confidentiality Impact (緩和策後の機密性への影響)
    • MI: Modified Integrity Impact (緩和策後の完全性への影響)
    • MA: Modified Availability Impact (緩和策後の可用性への影響)

スコアの算出方法と深刻度

上記の基準・評価項目を用いて0.0から10.0までのスコアが算出されます。評価項目毎に算出する計算式が用意されており、一つ一つ計算して算出することも可能ですが、下記サイトに各評価項目を入力すればスコアが計算されますので深刻度の把握にぜひ活用ください。

CVSS v3Calculator
https://jvndb.jvn.jp/cvss/ja/v31.html

また、算出されたスコアに応じて深刻度が分けられています。緊急・重要にあたる深刻度の脆弱性を指摘された場合は急いで対応する必要があります。そのまま放置していれば、個人情報漏洩・サービス運用妨害などに繋がるリスクとなります。

深刻度 スコア
緊急(Critical) 9.0 〜 10.0
重要(Important) 7.0 〜 8.9
警告(Warning) 4.0 〜 6.9
注意(Attention) 0.1 〜 3.9
なし(None) 0

脆弱性診断実施とその後

今回脆弱性診断を実施しいくつかの脆弱性を指摘頂きましたが、緊急度の高い脆弱性は見つかりませんでした。一旦ほっとしつつも、いつ緊急度の高い脆弱性が見つかりいつ攻撃されるかわかりませんので、日々セキュリティ関連の情報収集と対策のほうを進めて行きたいと思います。