脆弱性について
概要
仕事で脆弱性について必要な場合があるため、少し調べてみた。
結論としては銀の弾丸のような「これだけやっていればすべてOK」みたいなものは存在しないため、
問題検知の精度を上げていくような方針を、お客様の予算感と相談しながら組み立てていくしか無いものと思われる。
脆弱性とは
Wikipediaさんによると、脆弱性とは システムやネットワークに存在するセキュリティ上の欠陥や弱点
を指す。
どうやらCAPEC(ケイペック)というもので分類されるらしい
CAPECとは
CAPEC(Common Attack Pattern Enumeration and Classification)は攻撃パターンの分類を示す。
各攻撃パターンにはCAPEC-XXX
という番号があって、分類されている
例えばスプーフィング攻撃は、不正なデータを用いて、攻撃者や攻撃プログラムを別の人物やプログラムに見せかける攻撃だが、この内の他人に見せかけて行う攻撃(フィッシング詐欺みたいなの)はCAPEC-151などに分類されている。
CAPEC-151: Identity Spoofing
深刻度(CVSS)
CVSS(Common Vulnerability Scoring System)は、脆弱性の深刻度を評価するための指標で、CVSSスコアは0から10までの範囲で表される。
攻撃の容易性や影響度などを数値化し、独自の計算により作成したCVSSスコアを元に、脆弱性の深刻度を評価することができる。
脆弱性データベース
脆弱性を調べる場合よく利用されるのがJVNDB(Japan Vulnerability Notes Database)やCVE(Common Vulnerabilities and Exposures)などの脆弱性データベースである。
JVNDB
JVNDBは日本の脆弱性情報を集めたデータベースで、JVN(Japan Vulnerability Notes)という組織が運営している。
各情報はCVEと連携しているため、CVEの情報をJVNDBで確認することができる。
CVE
CVEはアメリカの脆弱性情報を集めたデータベースで、MITREという組織が運営している。
脆弱性診断
ソフトウェアに対して脆弱性を診断する場合には単一の方法だけではすべての脆弱性を検出することはできないため、複数の方法を組み合わせて診断を行うことが一般的である。
基本的な考え方として、実装しているソフトウェア自体や環境設定に関しての脆弱性はソースに関する 静的な解析
を行い、実行時に発生する脆弱性は 動的な解析
を行うことで検出することができる。
また、依存しているライブラリやフレームワークに関しては、CVEやJVNDBなどの脆弱性データベースを参照して、脆弱性が存在するかどうかを判断する。
1. ソフトウェア成分解析
ソフトウェアに含まれるライブラリやフレームワークなどの成分を解析して脆弱性を検出する方法。
このときにCVEやJVNDBなどの脆弱性データベースを参照して、脆弱性が存在するかどうかを確認することができる。
2. 環境・設定診断
OSやミドルウェア、ネットワーク機器などの環境や設定を解析して脆弱性を検出する方法。
このときにCVEやJVNDBなどの脆弱性データベースを参照して、脆弱性が存在するかどうかを確認することができる。
3. 静的解析
ソースコードを解析して脆弱性を検出する方法。
様々なツールが存在し、エディタなどに組み込んで実行したり、CI/CDパイプラインに組み込んで実行することができる。
4. 動的解析
稼働中のアプリケーションに対して脆弱性を検出する方法。
サーバーであれば各種ポートに対してリクエストなどを送り、そのレスポンスを精査することで脆弱性を検出することができる。
Discussion