79.2K Views
September 15, 23
スライド概要
Vuls祭り#8 (https://vuls-jp.connpass.com/event/290311/) 資料
CVSSとその限界 Vuls祭り#8 / 2023-09-15 はせがわようすけ
長谷川陽介(はせがわようすけ) セキュリティ・キャンプ協議会代表理事 (株)セキュアスカイ・テクノロジー 取締役CTO 千葉大学 非常勤講師 OWASP Kansai ボードメンバー OWASP Japan ボードメンバー CODE BLUEカンファレンス レビューボードメ ンバー Webブラウザー、Webアプリケーションに 関する多数の脆弱性を発見。 Black Hat Japan 2008、韓国POC 2008、2010、OWASP AppSec APAC 2014他講演や記事執筆も多数。 https://utf-8.jp/ Vuls祭り#8 #vulsjp
情報セキュリティとは? Vuls祭り#8 #vulsjp
情報セキュリティとは? 情報セキュリティとは情報の「機密性」「完全性」「可用性」を維持す ること(ISO/IEC 17799) 機密性 完全性 可用性 (Confidentiality) (Integrity) (Availability) 情報にアクセスするこ とが認可されたもの だけがアクセスできる ことの保証 情報および処理方法 の正確さおよび完全 である状態を安全に 防護すること これらを侵害する可能性のある問題点を脆弱性という Vuls祭り#8 #vulsjp 認可されたユーザが、 必要なときに情報お よび関連財産にアク セスできることを保 証すること
脆弱性に関する規格 CWE 脆弱性の種別 CVE 脆弱性を一意に識別する CVSS 脆弱性の評価 Vuls祭り#8 #vulsjp
脆弱性に関する規格 CWE CWE、CVE、CVSS CVE CVSS 脆弱性の種類を識別する分類 個別の脆弱性を識別する番号 個別の脆弱性を評価する基準 例: CWE-78 OSコマンドインジェクション CWE-89 SQLインジェクション 例: CVE-2021-44228 Apache Log4jにおける任意 のコードが実行可能な脆弱性 CVE-2022-33632 Microsoft Office のセキュ リティ機能のバイパスの脆弱性 攻撃の影響、攻撃の難易度から 脆弱性の深刻度を評価する計算 方法 Vuls祭り#8 #vulsjp
脆弱性に関する規格 CWE CWE、CVE、CVSS CVE CVSS 脆弱性の種類を識別する分類 個別の脆弱性を識別する番号 個別の脆弱性を評価する基準 例: CWE-78 OSコマンドインジェクション CWE-89 SQLインジェクション 例: CVE-2021-44228 Apache Log4jにおける任意 のコードが実行可能な脆弱性 CVE-2022-33632 Microsoft Office のセキュ リティ機能のバイパスの脆弱性 攻撃の影響、攻撃の難易度から 脆弱性の深刻度を評価する計算 方法 Vuls祭り#8 #vulsjp
CWE - 脆弱性の種類を識別 脆弱性の名称、呼称が人によって違うと… XSRFの脆弱性が 見つかりました! 聞いたことないけど たぶんCSRFと同じ 意味かな XSSのことかな? XSSなら危険だ! すぐに対応しないと! 聞いたこともない マイナーな脆弱性だし 大丈夫だな。 脆弱性に対する脅威の評価や対応が 正しく行えない Vuls祭り#8 #vulsjp
CWE - 脆弱性の種類を識別 CWE - Common Weakness Enumeration 脆弱性の種類を識別するための共通の脆弱性タイプの一覧を定義 米国MITREを中心に40を超える団体やベンダによって策定 例 CWE-78 : OSコマンドインジェクション CWE-89 : SQLインジェクション ツリー構造で脆弱性どうしを関連付け 個別の「脆弱性」だけでなく「カテゴリー」や「脆弱性クラス」「脆弱性バリア ント」などにも識別子がある https://www.ipa.go.jp/security/vuln/CWE.html https://www.ipa.go.jp/files/000024379.pdf Vuls祭り#8 #vulsjp
CWE - 脆弱性の種類を識別 ※黄色はJVN iPediaで使用されるCWE https://www.ipa.go.jp/security/vuln/scap/cwe.html より 広く普及して使われている わけではない 弊社の脆弱性診断でもCWEで表 記することはない こういう分類体系があると知っ ておくだけでいい 表記の揺れに悩んだときや、どの ような脆弱性の種類があるのか俯 瞰したいときに見ると良い Vuls祭り#8 #vulsjp
脆弱性に関する規格 CWE CWE、CVE、CVSS CVE CVSS 脆弱性の種類を識別する分類 個別の脆弱性を識別する番号 個別の脆弱性を評価する基準 例: CWE-78 OSコマンドインジェクション CWE-89 SQLインジェクション 例: CVE-2021-44228 Apache Log4jにおける任意 のコードが実行可能な脆弱性 CVE-2022-33632 Microsoft Office のセキュ リティ機能のバイパスの脆弱性 攻撃の影響、攻撃の難易度から 脆弱性の深刻度を評価する計算 方法 Vuls祭り#8 #vulsjp
CVE - 脆弱性を一意に識別する番号 発見、報告される脆弱性が一意に特定できないと OpenSSLにまた脆弱 性が見つかりました! 昨日パッチ あてたから大丈夫♪ 昨日も見つかったのに 今日もかよ しょっちゅう出てて よくわからないから もういいや 脆弱性への対応の管理ができなくなる Vuls祭り#8 #vulsjp
CVE - 個別の脆弱性を一意に識別する番号 CVE - Common Vulnerabilities and Exposures 個別製品中の脆弱性を一意に識別するための番号 米国MITREを中心に多数の団体やベンダによって番号を採番 新しい脆弱性が発見される都度、新しく採番される https://www.ipa.go.jp/security/vuln/CVE.html Vuls祭り#8 #vulsjp
CVE - 個別の脆弱性を一意に識別する番号 個々の脆弱性にはそれを識別するための番号が振られている Vuls祭り#8 #vulsjp
CVE - 個別の脆弱性を一意に識別する番号 どの脆弱性かを指すために広く使われている JVNをはじめとする公的サイト Microsoft、Google等ベンダの告知ページ CVE番号は「製品」「商品」等として流通しているソフトウェアの脆 弱性に対して割り当てられる ユーザー独自のWebアプリ(特定サイト上で動いているものなど)には CVE番号は振られない Vuls祭り#8 #vulsjp
脆弱性に関する規格 CWE CWE、CVE、CVSS CVE CVSS 脆弱性の種類を識別する分類 個別の脆弱性を識別する番号 個別の脆弱性を評価する基準 例: CWE-78 OSコマンドインジェクション CWE-89 SQLインジェクション 例: CVE-2021-44228 Apache Log4jにおける任意 のコードが実行可能な脆弱性 CVE-2022-33632 Microsoft Office のセキュ リティ機能のバイパスの脆弱性 攻撃の影響、攻撃の難易度から 脆弱性の深刻度を評価する計算 方法 Vuls祭り#8 #vulsjp
CVSS - 個別の脆弱性を評価する基準 発見、報告される脆弱性の危険度がすぐに把握できないと 今度の脆弱性は ヤバいです! ちゃんとパッチ あてたから大丈夫♪ ヤバいって言われても 時間ないから後回し 脆弱性ぜんぶ ヤバくてわからん! 脆弱性への対応の優先順位や緊急度の 判断(トリアージ)ができない Vuls祭り#8 #vulsjp
CVSS - 個別の脆弱性を評価する基準 脆弱性が公表されたときには「どれくらい脅威があるのか」「実際 にどれくらい攻撃されやすそうか」といった判断を速やかに下す ための指針が必要 CVSS - Common Vulnerability Scoring System 脆弱性の深刻度をスコアリングし て評価するための基準 CVSSv3が広く使われている CVSSv4が2023年10月に公開予定 深刻度 スコア 緊急 9.0 〜 10.0 重要 7.0 〜 8.9 警告 4.0 〜 6.9 注意 0.1 〜 3.9 なし 0 脆弱性の深刻度を0〜10.0の 数値で表す https://www.ipa.go.jp/security/vuln/CVSSv3.html Vuls祭り#8 #vulsjp
CVSS - 個別の脆弱性を評価する基準 基本評価 基準 脆弱性の特性そのもの。機密性、完全性、可 用性に対する影響を評価。固定された値とな る 現状評価 基準 攻撃コードの有無や対策方法の有無も含め評価 環境評価 基準 ユーザーの利用環境や対策状況も 含めて評価 https://www.ipa.go.jp/security/vuln/CVSSv3.html Vuls祭り#8 #vulsjp
CVSS - 個別の脆弱性を評価する基準 基本評価基準がソフトウェアベンダーなどにも広く採用されてい る 攻 基本評価基準 深刻度 撃 「攻撃の難易度」と「攻撃の影響」の 二軸で脆弱性の深刻度を評価する 例: 容易に攻撃できる場合でも影響が 小さければ脅威はそこまで大きくはならない の 影 響 攻撃の難易度 ※実際の計算方法はベクトルではありません Vuls祭り#8 #vulsjp
CVSS - 個別の脆弱性を評価する基準 ソフトウェアベンダーなどに基本評価基準が広く採用されている 攻撃の 難易度 攻撃の 影響 Vuls祭り#8 攻撃元区分 (AV) 物理(P) ローカル (L) 攻撃条件の 複雑さ(AC) 高(H) 低(L) 必要な特権 レベル(PR) 高(H) 低(L) ユーザ関与 レベル(UI) 要(R) 不要(N) スコープ(S) 変更なし(U) 変更あり(C) 機密性への 影響(C) なし(N) 低(L) 高(H) 完全性への 影響(I) なし(N) 低(L) 高(H) 可用性への 影響(A) なし(N) 低(L) 高(H) #vulsjp 隣接(A) 不要(N) ネットワーク (N)
CVSS - 個別の脆弱性を評価する基準 基本評価基準が広く公表される ベンダーやJVN、IPAなど 基本評価基準をもとに現状 評価基準、環境評価基準を 計算する 自分たちの組織での使われ 方への影響を評価する 計算のためのツール例➡︎ https://jvndb.jvn.jp/cvss/ja/v3.html Vuls祭り#8 #vulsjp
脆弱性の評価(例:CVE-2017-5638) Apache Struts 2の脆弱性(S2-045) Apache Struts2のJakarta Multipart parser の処理に起因する、 任意のコードが実行可能な脆弱性 リモートからの細工されたリクエストにより、アプリケーション権限で任意 コードの実行が可能 https://jvndb.jvn.jp/ja/contents/2017/JVNDB-2017-001621.html https://nvd.nist.gov/vuln/detail/CVE-2017-5638 Vuls祭り#8 #vulsjp
脆弱性の評価(例:CVE-2017-5638) CVSSv3基本評価基準 : 10.0 攻撃の 難易度 攻撃の 影響 Vuls祭り#8 攻撃元区分 (AV) 物理(P) ローカル(L) 攻撃条件の 複雑さ(AC) 高(H) 低(L) 隣接(A) 必要な特権 レベル(PR) 高(H) 低(L) ユーザ関与 レベル(UI) 要(R) 不要(N) スコープ(S) 変更なし(U) 変更あり(C) 機密性への 影響(C) なし(N) 低(L) 高(H) 完全性への 影響(I) なし(N) 低(L) 高(H) 可用性への 影響(A) なし(N) 低(L) 高(H) #vulsjp 不要(N) ネットワーク(N) 深刻度 スコア 緊急 9.0 〜 10.0 重要 7.0 〜 8.9 警告 4.0 〜 6.9 注意 0.1 〜 3.9 なし 0
脆弱性の評価(例:CVE-2017-1001000) WordPressのREST APIにより任意のページを変更される脆 弱性 リモートからの細工されたリクエストにより任意のページを変更できる脆 弱性 https://jvndb.jvn.jp/ja/contents/2017/JVNDB-2017-002318.html https://nvd.nist.gov/vuln/detail/CVE-2017-1001000 Vuls祭り#8 #vulsjp
脆弱性の評価(例:CVE-2017-1001000) CVSSv3基本評価基準 : 7.5 攻撃の 難易度 攻撃の 影響 Vuls祭り#8 攻撃元区分 (AV) 物理(P) ローカル(L) 攻撃条件の 複雑さ(AC) 高(H) 低(L) 隣接(A) 必要な特権 レベル(PR) 高(H) 低(L) ユーザ関与 レベル(UI) 要(R) 不要(N) スコープ(S) 変更なし(U) 変更あり(C) 機密性への 影響(C) なし(N) 低(L) 高(H) 完全性への 影響(I) なし(N) 低(L) 高(H) 可用性への 影響(A) なし(N) 低(L) 高(H) #vulsjp 不要(N) ネットワーク(N) 深刻度 スコア 緊急 9.0 〜 10.0 重要 7.0 〜 8.9 警告 4.0 〜 6.9 注意 0.1 〜 3.9 なし 0
脆弱性の評価(例:CVE-2016-7819) アイ・オー・データ製の複数のネットワークカメラ製品における OS コマンドインジェクションの脆弱性 当該製品にログイン可能な攻撃者によって任意の OS コマンドを実行さ れる可能性 https://jvndb.jvn.jp/ja/contents/2016/JVNDB-2016-000234.html Vuls祭り#8 #vulsjp
脆弱性の評価(例:CVE-2016-7819) CVSSv3基本評価基準 : 6.8 攻撃の 難易度 攻撃の 影響 Vuls祭り#8 攻撃元区分 (AV) 物理(P) ローカル(L) 攻撃条件の 複雑さ(AC) 高(H) 低(L) 隣接(A) 必要な特権 レベル(PR) 高(H) 低(L) ユーザ関与 レベル(UI) 要(R) 不要(N) スコープ(S) 変更なし(U) 変更あり(C) 機密性への 影響(C) なし(N) 低(L) 高(H) 完全性への 影響(I) なし(N) 低(L) 高(H) 可用性への 影響(A) なし(N) 低(L) 高(H) #vulsjp 不要(N) ネットワーク(N) 深刻度 スコア 緊急 9.0 〜 10.0 重要 7.0 〜 8.9 警告 4.0 〜 6.9 注意 0.1 〜 3.9 なし 0
CVSS - 現状評価基準 Vuls祭り#8 攻撃される 可能性(E) 未評価(X) 容易に攻撃 可能(H) 攻撃可能(F) 実証可能(P) 未実証(U) 利用可能な対策の レベル(RL) 未評価(X) なし(U) 非公式(W) 暫定(T) 正式(O) 脆弱性情報の 信頼性(RC) 未評価(X) 確認済(C) 未確証(R) 未確認(U) #vulsjp
CVSS – 環境評価基準 機密性の要求度(CR) 未評価(X) 低(L) 中(M) 高(H) 完全性の要求度(IR) 未評価(X) 低(L) 中(M) 高(H) 可用性の要求度(AR) 未評価(X) 低(L) 中(M) 高(H) 緩和策後の攻撃元区分(MAV) 未評価(X) 未評価(X) ネットワーク (N) 隣接(A) 緩和策後の攻撃条件の複雑さ (MAC) 未評価(X) 低(L) 高(H) 緩和策後の必要な特権レベル (MPR) 未評価(X) 不要(N) 低(L) 緩和策後のユーザ関与レベル (MUI) 未評価(X) 不要(N) 要(R) 緩和策後のスコープ(MS) 未評価(X) 変更なし(U) 変更あり(C) 緩和策後の機密性への影響(MC) 未評価(X) 高(H) 低(L) なし(N) 緩和策後の完全性への影響(MI) 未評価(X) 高(H) 低(L) なし(N) 緩和策後の可用性への影響(MA) 未評価(X) 高(H) 低(L) なし(N) Vuls祭り#8 #vulsjp 高(H) ローカル(L) 物理(P)
CVSSの課題(1) - 基本評価基準以外が使われていない 現状評価基準、環境評価基準はほぼ使われていない ソフトウェアの利用者が個別にこれらを計算・評価するのは高コストすぎ る 結果的に、基本評価基準のみが使われている 意思決定のためにCVSS(基本評価基準)を使うことは難しい 本来であれば公表された基本評価基準をもとに現状評価基準や環境評 価基準を計算し、それをもとにした意思決定が行われなければいけない CVSS基本評価基準だけでは意思決定の材料 とするには足りていない ➡ SSVCのような他のフレームワークが検討され 始めている Vuls祭り#8 #vulsjp
CVSSの課題(2) - バラツキ 評価する機関や人によってばらつきが出る 特に「攻撃の難易度」よりも「攻撃の影響」(機密性/完全性/可用性への影 響) の判断にブレがある(気がする) 例:CVE-2016-1202のCVSSv3値 - JVN:5.3、NVD:7.8 NVD: CVSS 7.8 JVN: CVSS 5.3 Vuls祭り#8 #vulsjp
CVSSの課題(3) - 計算値が信用できないものがある 公表されているCVSSの値が信用できないものが時々ある クロスサイトリクエストフォージェリ (受動的攻撃)で利用者の関与が不 要??? Vuls祭り#8 #vulsjp
CVSSの課題(3) - 計算値が信用できないものがある JVN iPediaでCWE-352(CSRF)を検索 キーワードに「JVN#」あり/なしで結果を比較 「JVN#」あり(IPA経由で報告されたもの)は ほとんどがCVSS 4.3で、あきらかに固定値 のように見える Vuls祭り#8 #vulsjp
CVSSの課題(3) - 計算値が信用できないものがある 何者かが、Curlのリトライ待ち時間での整数オーバーフ ローのバグ(2020年修正済)を脆弱性と報告し、CVE2020-19909が採番された。待ち時間が長すぎる場合 にループして短くなるだけだが、NVDは脳も使わなけれ ばコードも読まず(作者談)、整数オーバーフローだからと CVSSスコア9.8を割り当てた模様。 https://twitter.com/__kokumoto/status/1695331101018107978 のちにNVDのCVSSスコアは3.3に引き下げ https://daniel.haxx.se/blog/2023/09/05/bogus-cve-follow-ups/ Vuls祭り#8 #vulsjp
CVSSとWebアプリケーションの脆弱性診断 Webアプリケーションの脆弱性診断ではCVSSによる評価は行 われないことが多い CVSSの考え方とWebアプリケーションの脆弱性診断とはあまり 相性がよくない 攻撃元区分がそもそもネットワークに限定される アプリケーションの一部機能のみが診断対象となっている 脆弱性を発見することに重点が置かれ、攻撃の影響を正確に測ることが 難しい とはいえ、脆弱性診断でも発見された脆弱性は 「攻撃の難易度」と「攻撃の影響」の2つの軸で 深刻度を評価する考え方は広く適用されている Vuls祭り#8 #vulsjp
CVSSまとめ 脆弱性がどれくらい危険かを判断する指標になる JVNやベンダーによる告知ページなど様々な場面で使われている CVSSだけを判断材料とするには課題もある 基本評価基準だけでは実際の環境に適用できない 評価する人によってばらつきがある 公表されているCVSS値が信用できないときがある ➡ CVSSを絶対視するのではなく、あくまでも参考情報として利用すること Webアプリを対象とした脆弱性診断ではCVSSの 評価は行わないことも多い 他の評価方法も様々に検討され始めている SSVC / EPSS など Vuls祭り#8 #vulsjp
EPSS Exploit Prediction Scoring System Vuls祭り#8 #vulsjp
EPSS - Exploit Prediction Scoring System 脆弱性(CVE)の脅威を数値で示すためのFIRSTによる取り組み https://www-first-org.translate.goog/epss/ CVEが30日以内に悪用される可能性を0~1であらわす 数字が大きいほど脆弱性が悪用される可能性が高い CVSSだけでなくExploit DB、GitHub等でのPoC公開状態なども含 めて機械学習により毎日値が更新される APIが公開されており誰でも無料で利用可能 Amazon Inspectorなどでも利用されている 強化された脆弱性インテリジェンスには、…略… エクスプロイト 予測スコアリングシステム(EPSS)スコア、…略…が含まれます。 https://aws.amazon.com/jp/about-aws/whats-new/2023/07/amazoninspector-vulnerability-intelligence-findings/ Vuls祭り#8 #vulsjp
EPSS取得の例1 - API経由、個別CVE
C:¥>curl -s https://api.first.org/data/v1/epss?cve=CVE-2023-3519 | jq .
{
"status": "OK",
"status-code": 200,
"version": "1.0",
CVE-2023-3519
"access": "public",
Citrix ADCおよびCitrix Gateway
"total": 1,
におけるリモートからの任意コード実行
"offset": 0,
"limit": 100,
30日以内の悪用可能性91%
"data": [
{
"cve": "CVE-2023-3519",
"epss": "0.911990000",
"percentile": "0.984850000",
"date": "2023-09-06"
}
]
}
Vuls祭り#8
#vulsjp
EPSS取得の例2 - API経由、条件に合致するEPSS
2023-09-07時点
C:¥>curl -s "https://api.first.org/data/v1/epss?epss-gt=0.1&days=50&pretty=true"
{
"status": "OK",
jq なくても
"status-code": 200,
整形してくれる
"version": "1.0",
"access": "public",
"total": 15,
直近50日の登録で攻撃可能
"offset": 0,
性が10%以上のもの
"limit": 100,
"data": [
15個あり
{
"cve": "CVE-2023-39143",
"epss": "0.921370000",
"percentile": "0.985750000",
"date": "2023-09-06"
},
{
"cve": "CVE-2023-38646",
"epss": "0.540870000",
"percentile": "0.971860000",
"date": "2023-09-06"
},
Vuls祭り#8
#vulsjp
EPSS取得の例3 - API経由、EPSSの高いもの
2023-09-15時点
C:¥>curl -s "https://api.first.org/data/v1/epss?order=!epss&limit=5&pretty=true"
{
"status": "OK",
"status-code": 200,
"version": "1.0",
"access": "public",
"total": 212110,
EPSSの大きいもの
"offset": 0,
(降順)を5件
"limit": 5,
"data": [
Heartbleed
{
"cve": "CVE-2014-0160",
"epss": "0.975880000",
"percentile": "1.000000000",
"date": "2023-09-14"
},
Oracle WebLogic Server
{
RCE
"cve": "CVE-2019-2725",
"epss": "0.975760000",
"percentile": "1.000000000",
"date": "2023-09-14"
},
Vuls祭り#8
#vulsjp
EPSS取得の例4 - 全データ csv.gz形式で全データが毎日生成される 211,529行 #model_version:v2023.03.01,score_date:2023-09-06T00:00:00+0000 cve,epss,percentile CVE-1999-0001,0.01167,0.83211 CVE-1999-0002,0.02833,0.89392 CVE-1999-0003,0.02487,0.88738 https://www.first.org/epss/data_stats Vuls祭り#8 #vulsjp
EPSSまとめ 名前どおり、脆弱性の悪用可能性を推定するために利用可能 EPSSが高いCVEについて対応を急ぐ等の判断材料のひとつに使えそう 日々、状況に応じて値が更新されるのはめちゃくちゃありがたい 「スコアが公開されている」だけでなくAPIとして提供されている 単に人間が見るというだけのものでなく、システムに取り込むことが前提 とされている 弊社内では単純にEPSSが高いものだけでなく、日単位でスコア が急上昇したものを再点検する取り組みをお試し中 Vuls祭り#8 #vulsjp
EPSSまとめ(感想) 数値で示されるが、数値そのものを絶対視したくない 「これより大きい」「これより小さい」みたいに二分できるものではない 数値の根拠が(自分には)理解できない 数値に再現性や合理性があるのかも(自分には)不明 ←わかる https://twitter.com/papa_anniekey/status/1701584602547225020 Vuls祭り#8 #vulsjp
質問などあればお気軽に @hasegawayosuke @hasegawa.bsky.social Vuls祭り#8 #vulsjp