■CVEデータベースの最新版のチェック csv.gzをダウンロード、解凍してファイルとパイプに渡して、 CVE番号のみを抽出、 最初と最後のCVE番号を出力。 $ wget -O - https://cve.mitre.org/data/downloads/allitems.csv.gz 2>/dev/null | \ zcat | tee CVEdatabase_`date '+%Y%m%d_%H%M%S'`.csv | \ awk -F, '{print $1}' | grep ^CVE | \ awk '(NR==1){print};END{print}' CVE-1999-0001 CVE-2014-5880 ■ファイルに落としてあるので、以下で確認出来る。 「ls -t」で更新日時の新しい順に並び替えすることで、 最新のCSVを選択して表示する。 $ ls -t CVEdatabase_* | head -1 | xargs cat | \ awk -F, '{print $1}' | grep ^CVE | tee CVE-ALL_`date '+%Y%m%d_%H%M%S'`.log | \ awk '(NR==1){print};END{print}' CVE-1999-0001 CVE-2014-5880 ■最新のCSVにあるCVEは約7万。 $ ls -t CVEdatabase_* | head -1 | xargs cat | \ awk -F, '{print $1}' | grep ^CVE | tee CVE-ALL_`date '+%Y%m%d_%H%M%S'`.log | \ wc -l 71611 ■DEBIANをCVE基準で検索。 ※古いものに一部、DSAの無い番号がある。 $ ls -t CVEdatabase_* | head -1 | xargs cat | grep DEBIAN: | \ awk -F, '{print $1}' | grep ^CVE | tee CVE-DEBIAN_`date '+%Y%m%d_%H%M%S'`.log | \ awk '(NR==1){print};END{print}' CVE-1999-0374 CVE-2014-4049 ■DSA基準で検索 ※一部DSAで始まらない番号がある。 $ ls -t CVEdatabase_* | head -1 | xargs cat | grep "DEBIAN:[D0-9]" | \ sed s/".*DEBIAN\:\([0-9A-z_:\-]*\).*"/"\1"/g | tee DSA_CVE_list_`date '+%Y%m%d_%H%M%S'`.log | \ awk '(NR==1){print};END{print}' 19990215 DSA-2961 ■wheezy固有のCVEが2件なはずは無くて、少なくとも約3千はある。 $ ls -t CVEdatabase_* | head -1 | xargs cat | grep -i wheezy | \ awk -F\, '{print $1}' CVE-2012-0216 CVE-2013-1048 $ grep -i wheezy CVE*.log | awk -F\: '{print $1}' | sort -u | wc -l 3445 ■本家のセキュリティ勧告は日付不詳、1997-1998など、 外部参考セキュリティデータベースが無いセキュリティ情報も管理している。 $ for list in undated `seq 1997 2014`;do \ if [ -f "$list.log" ];then \ cat "$list.log"; \ else \ w3m -dump "https://www.debian.org/security/${list}" 2>/dev/null | \ tee "$list.log"; \ fi; \ done | grep "\[[0-9A-z]" | \ tee DSA-list_`date '+%Y%m%d_%H%M%S'`.log | \ awk '{if("[undated]"==$1) \ {OLD=$0} \ else \ {if("[2014-07-01]" > $1 && MAX < $1) \ {MAX=$0} \ } \ };END{print OLD"\n"MAX}' [undated] bliss virus [2014-06-27] DSA-2969 libemail-address-perl - security update ■最新のDSAとCVEの対応リストでクリティカルバグの条件を加えるなら以下。 Debian Wheezyのセキュリティ情報の取得(DSA/CVE/クリティカルバグ) http://labunix.hateblo.jp/entry/20140614/1402674748 ■REDHATをCVE基準で検索。 ※一部RHSAの書式が異なる番号がある。 $ ls -t CVEdatabase_* | head -1 | xargs cat | grep "REDHAT:" | \ awk -F, '{print $1}' | grep ^CVE | tee CVE-REDHAT_`date '+%Y%m%d_%H%M%S'`.log | \ awk '(NR==1){print};END{print}' CVE-1999-0342 CVE-2014-3496 ■REDHATをRHSA基準で検索。 $ ls -t CVEdatabase_* | head -1 | xargs cat | grep "REDHAT:RHSA" | \ sed s/".*REDHAT\:\(RHSA[0-9A-z_:\-]*\).*"/"\1"/g | tee RHSA_CVE_list_`date '+%Y%m%d_%H%M%S'`.log | \ awk '(NR==1){print};END{print}' RHSA-1999:032-01 RHSA-2014:0764 ■Redhat社のCVEデータベースから一覧を取得 修正した「公開日」の無いものもある。 $ for list in `seq 1999 2014`;do \ if [ -f "Redhat-CVE-$list.log" ];then \ cat "Redhat-CVE-$list.log"; \ else \ w3m -dump "https://access.redhat.com/security/cve/?year=${list}" | tee "Redhat-CVE-$list.log"; \ fi | grep "CVE-"; \ done | \ awk '(NR==1){print};END{print}' CVE-1999-0002 Buffer overflow in NFS mountd gives root access to CVE-2014-4667 Details pending Moderate 2014-06-12 ■Redhat社もCVE互換認定されているが、 サポートが終了したバージョンのCVEの詳細情報をRedhat社から得ることは難しい。 例えば、以下の参照先はリンク切れ。 CVE-1999-0342 http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-1999-0342 ■他にCVE番号が見つからなかったのは58件ある。 $ grep "CVE が見つかりませんでした" REDHAT-CVE*.log | awk -F\: '{print $1}' | sort -u | wc -l 58 ■Microsoft社はCVE互換認定されていないことが、 CVE番号で検索するのが難しい理由なのかも知れない。 CVE-Compatible Products and Services https://cve.mitre.org/compatible/compatible.html ■MicrosoftのMS番号で検索。 $ ls -t CVEdatabase_* | head -1 | xargs cat | grep "MS:" | \ awk -F, '{print $1}' | grep ^CVE | tee CVE-MS_`date '+%Y%m%d_%H%M%S'`.log | \ awk '(NR==1){print};END{print}' CVE-1999-0004 CVE-2014-2782 ■MS Security BulletinのデータベースからMS番号のリストを取得 Microsoft Security Bulletin https://technet.microsoft.com/security/bulletin/ Microsoft Security Bulletin Data http://www.microsoft.com/en-us/download/confirmation.aspx?id=36982 ■MS番号基準のリストの作成 MS12よりも前が無いのはサポートが終了しているからだろうか。。。 $ test -d MS || mkdir MS && cd MS; \ URL1="http://download.microsoft.com/download"; \ URL2="/6/7/3/673E4349-1CA5-40B9-8879-095C72D5B49D/";\ URL3="MSRC-CVRF.zip"; \ wget -O ${URL3} ${URL1}${URL2}${URL3}; \ unzip ${URL3}; \ for list in ms*.xml;do \ echo -n "$list," | sed s/".xml"//g | tr '[a-z]' '[A-Z]'; \ cat "$list" | sed s%".*\(<vuln\:CVE>.*\)"%"\n\1"%g | \ grep "^<vuln\:CVE" | sed s%"</*vuln\:CVE>"%%g | xargs echo | \ tr ' ' ','; \ done | tr -d '\r' > MS-CVE_list-`date '+%Y%m%d_%H%M%S'`.log $ ls -t MS-CVE_list-[0-9]* | head -1 | xargs cat | \ awk '(NR==1){print};END{print}' MS12-036, MS14-036,CVE-2014-1817,CVE-2014-1818 ■またMS番号にあるCVEは、CVEデータベースよりも古い情報を最新としている。 MS番号のDBの更新タイミングによるものだろうか。。。 $ grep CVE-2014 ms* | sed s/"<"/"\n<"/g | sed s/">"/">\n"/g | \ grep ^CVE | sort -n | tail -1 CVE-2014-2778 ■MSがきちんと管理していないだけで、CVE番号は存在する。 ※他にもMS番号とCVEの関係に過不足があるかも知れない。 $ ls -t MS-CVE_list-[0-9]* | xargs cat | grep -v CVE MS12-036, MS12-038, MS12-040, MS12-041, MS13-015, MS13-082, $ ls -t MS-CVE_list-[0-9]* | head -1 | xargs cat | grep -v CVE | \ tr '[A-Z]' '[a-z]' | tr -d ',' | \ for list in `xargs`;do \ echo -n "$list,"; \ if [ -f "$list.log" ];then \ cat "$list.log"; \ else \ w3m -dump "https://technet.microsoft.com/library/security/${list}" | \ tee "$list".log; \ fi | grep CVE | sed s/".*\(CVE[0-9-]*\).*"/"\1"/g | \ sort -u | tr '\n' ','; \ done | sed s/",ms"/"\nms"/g | sed s/",\$"/"\n"/ ms12-036,CVE-2012-0173 ms12-038,CVE-2012-1855 ms12-040,CVE-2012-1857 ms12-041,CVE-2012-1864,CVE-2012-1865,CVE-2012-1866,CVE-2012-1867,CVE-2012-1868 ms13-015,CVE-2013-0073 ms13-082,CVE-2013-3128,CVE-2013-3860,CVE-2013-3861 ■結論 CVEデータベース、ベンダーのサポート情報の両方を確認し、 必要なら各ベンダーのサポートに問い合わせた上で対応しましょう。