脆弱性情報 (CVE) の対応状況を確認する

脆弱性情報 (CVE : Common Vulnerabilities and Exposures) の対応状況を確認する手順をまとめておこうと思う.

CVE データベース

CVE 情報は全て以下にまとまっている.

cve.mitre.org

全ての CVE にはユニークな ID が振られていて,例えば,環境変数 HTTP_PROXY を悪用して外部サイトと通信できてしまう可能性がある "httpoxy" なら CVE-2016-5385 だし,ImageMagick で任意のスクリプトが実行されてしまう可能性がある "ImageTragick" なら CVE-2016-3714 となる."Shellshock" もそうだけど,どの脆弱性もカッコイイ別名(厨ニ)が付いてて,エンジニア同士の会話だとバズワード的に認識できて良いと思う.

対応状況を確認する

今回は CentOS を前提にする.例えば CVE-2016-3714 の対応状況を確認するためには Red Hat の Security ページを見る.そうすると ImageMagick-6.7.2.7-4 で対応されていることがわかる.

実際に ImageMagick-6.7.2.7-4 にアップデートして,rpm の --changelog オプションで変更履歴を確認すると,ちゃんと CVE-2016-3714 の対応が含まれていることがわかる.

$ yum list installed ImageMagick
(中略)
インストール済みパッケージ
ImageMagick.x86_64                                                     6.7.2.7-4.el6_7                                                     @updates

$ rpm -q --changelog ImageMagick | head -n 2
* 木  505 2016 Jan Horak <jhorak@redhat.com> - 6.7.2.7-4
- Add fix for CVE-2016-3714, CVE-2016-3715, CVE-2016-3716 and CVE-2016-3717

ちなみに yum-changelog というパッケージを使うと yum changelog コマンドで同様の変更履歴を確認することができる.

$ yum install yum-changelog

$ sudo yum changelog 1 ImageMagick
(中略)
==================== Installed Packages ====================
ImageMagick-6.7.2.7-4.el6_7.x86_64       installed
* Thu May  5 21:00:00 2016 Jan Horak <jhorak@redhat.com> - 6.7.2.7-4
- Add fix for CVE-2016-3714, CVE-2016-3715, CVE-2016-3716 and CVE-2016-3717
(中略)

Amazon Linux

Amazon Linux を使っている場合は Amazon Linux AMI Security Center を見ると対応状況がわかる.

あと最近 GA になった Amazon Inspector を使うと,エージェントが CVE を検知してくれる.

aws.typepad.com

Vuls: VULnerability Scanner

脆弱性スキャンツールとして Vuls(バルス)がある.バルス!

github.com

試しに CVE-2016-3714 の対応前のバージョンを導入した Vagrant 環境に Vuls を実行したら,ちゃんと検出してくれた.

$ yum list installed ImageMagick
(中略)
インストール済みパッケージ
ImageMagick.x86_64                                                       6.7.2.7-2.el6                                                        @base
$ vuls scan --cve-dictionary-dbpath=/xxx/cve.sqlite3
INFO[0000] Start scanning

(中略)

CVE-2016-3714
-------------
Score           10.0 (High)
Vector          (AV:N/AC:L/Au:N/C:C/I:C/A:C)
Summary         The (1) EPHEMERAL, (2) HTTPS, (3) MVG, (4) MSL, (5) TEXT, (6) SHOW, (7) WIN, and (8) PLT coders in
                ImageMagick before 6.9.3-10 and 7.x before 7.0.1-1 allow remote attackers to execute arbitrary code
                via shell metacharacters in a crafted image, aka "ImageTragick."
NVD             https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2016-3714
MITRE           https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2016-3714
CVE Details     http://www.cvedetails.com/cve/CVE-2016-3714
CVSS Claculator https://nvd.nist.gov/cvss/v2-calculator?name=CVE-2016-3714&vector=(AV:N/AC:L/Au:N/C:C/I:C/A:C)
RHEL-CVE        https://access.redhat.com/security/cve/CVE-2016-3714
Package/CPE     ImageMagick-6.7.2.7-2.el6 -> ImageMagick-6.7.2.7-5.el6_8
                ImageMagick-devel-6.7.2.7-2.el6 -> ImageMagick-devel-6.7.2.7-5.el6_8

(中略)

まとめ

脆弱性情報をサッと見て状況判断ができるのは重要なスキルだなと感じた.最近 CVE を調べる機会があって,自分で調査結果を書いていたんだけど,インフラ関連のメンターをお願いしている先輩に話を聞いて,より理解を深めることができた.日々 CVE は出るだろうし,Amazon Inspector や Vuls などを活用して自動で検知できると一番良いんだけど,ゼロデイ攻撃などもあるし,CVE に対する情報のアンテナは常に立てておかないとなーという感じ.