2022 年 01 月 19 日
ソフトウェアの脆弱性について知ろう(前編)
1. 「脆弱性」とは?
脆弱性とは、ソフトウェアに内在する情報セキュリティ上の欠陥です。情報セキュリティの国際標準規格である ISO/IEC 27000 では、脆弱性の定義を「1つ以上の脅威によって悪用される施策もしくは資産にある弱点」としています ※1。ここでいう施策とは、リスクを減らすプロセスやアクション、装置を指しており、かつ、必ずしも想定した改善効果を発揮しない可能性があるとしています ※1。IT における資産とは、情報の収集・処理・管理を行う装置や情報そのものを指します ※1。
つまり、脆弱性はプログラムの不具合や設計のミスが原因で OS やソフトウェアに内在したり、企業や組織のセキュリティ対策が不十分なゆえに発生するものもあるということです。
2. 脆弱性は発見後、どのように取り扱われるのか
2.1. CVE によるリスト化
世界で発見された様々な脆弱性は、CVE(共通脆弱性識別子)が割り振られてリスト化されます ※2。このプロジェクトは、1999 年からアメリカの非営利団体である MITRE 社が主導となって進められています。目的は、脆弱性情報に名前をつけることで識別性を高めることであり ※3、今では世界で発見されたすべての脆弱性が CVE に集約されています。
1 つ 1 つの脆弱性は CVE レコードを参照することで確認でき、以下の情報が記載されています。
- CVE-ID:CVE 番号
- Description:脆弱性の概要
- References:参考情報
- Assigning CNA:CVE を登録した CNA(採番機関)
- Date Record Created:CVE レコードが作成された日
2.2. NVD による脆弱性の詳細情報の公開
NVD(National Vulnerability Database)とは、アメリカ国立標準技術研究所が管理する脆弱性情報データベースです ※4。NVD は CVE リストを基に構築されており、CVE レコードが追加されたら以下のような詳細情報を提供します。
- Severity:CVSS※5 で評価された脆弱性の深刻度
- References to Advisories, Solutions,and Tools:ベンダーが公開した修正情報やメーリングリストなどの参考情報
- Weakness Enumeration:CWE※6※7 で分類された脆弱性の種類
- Known Affected Software Configurations:脆弱性の影響を受けると思われるソフトウェア
また、NVD は検索機能も充実しており、OS 名、ベンダー名、製品名、バージョン名、脆弱性の種類、深刻度別に検索ができることも特徴的です ※8。
2.3. 世界の脆弱性情報を CVE に集約する CNA
CNA(CVE Numbering Authorities)とは、CVE プロジェクトを主導する MITRE 社に認められた、CVE 採番機関です ※9。発見された新たな脆弱性に CVE ID を付与して公表することが出来ます。現在、30 か国 177 団体が CNA として認められています。日本には 7 団体あり、その 1 つである JPCERT/CC(JPCERT コーディネーションセンター)※10 は Root CNA として、日本の脆弱性を CVE に登録しています。
2.4. 日本での脆弱性の取り扱い
日本での脆弱性の取り扱いは、経済産業省が公開している " ソフトウエア製品等の脆弱性関連情報に関する取扱規程 "※11 によって定められています。ソフトウエア製品の脆弱性の取り扱いは以下のようになっています。
- 脆弱性の発見者は、脆弱性情報を受付機関に届け出る
受付機関とは、脆弱性情報の届け出を取り扱う機関であり、現在は IPA(情報処理推進機構)※12 が担っています ※13。 - 受付機関は、届け出を受理した後、調整機関に脆弱性情報を知らせる
調整機関とは、ソフトウエア製品の脆弱性情報について、開発者への連絡や公表の調整を行う機関であり、現在は JPCERT/CC※10 が担っています。 - 調整機関は、脆弱性情報を開発者に知らせるとともに、脆弱性情報の公表日を定める
- 製品開発者は、脆弱性の検証と対策方法を作成し、調整機関へ報告する
- 受付機関と調整機関は、脆弱性情報公表日にインターネットを通じて脆弱性情報を公表する
日本における脆弱性情報は、IPA と JPCERT/CC が共同で運営する JVN(Japan Vulnerability Notes)という脆弱性情報データベースで公開されています ※14※15
3. 実在する脆弱性の例
3.1. BootHole
BootHole とは、GRUB2 というブートローダー(OS を起動するプログラム)にある脆弱性(CVE-2020-10713)およびそれに関連する脆弱性です。OS 起動前は、安全確保のためにソフトウェアのデジタル署名を確認するセキュアブートを行いますが、BootHole によって回避されてしまう恐れがあります ※16。セキュアブートが回避されると、不正プログラムの存在に気づかないため、OS 起動前に不正プログラムを実行されて、攻撃者に OS を制御されてしまいます。
BootHole の原因は、GRUB2 の設定ファイル(grub.cfg)を解析する際に生じるバッファオーバーフローです。攻撃者が意図的にバッファオーバーフローを起こすことで、本来は書き換えられないメモリ領域を書き換えて、不正プログラムを実行することが可能です ※17※18。
3.2. Linux カーネルにおける重要情報の平文送信
この脆弱性(CVE-2020-25645)は、通信が暗号化されない脆弱性です ※19。L2 over L3 のトンネル化方式の 1 つである GENEVE において、トンネル内の通信が暗号化されず、機密情報が誰でも読める形で通信されるため、情報漏洩につながります ※20。
参考文献
- ※1
- "ISO/IEC 27000:2018" ISO
- ※2
- CVE
- ※3
- "About CVE" CVE
- ※4
- NVD
- ※5
- " 共通脆弱性評価システム CVSS 概説" IPA
- ※6
- CWE
- ※7
- " 共通脆弱性タイプ一覧 CWE 概説" IPA
- ※8
- "CVE and NVD Relationship" CVE
- ※9
- "CVE Numbering Authorities" CVE
- ※10
- JPCERT/CC
- ※11
- " ソフトウエア製品等の脆弱性関連情報に関する取扱規程" 経済産業省
- ※12
- IPA
- ※13
- " 脆弱性情報ハンドリングとは?" JPCERT/CC
- ※14
- JVN
- ※15
- JVN iPedia
- ※16
- "CVE-2020-10713" CVE
- ※17
- "Linux で広く使われるブートローダー「GRUB2」にセキュアブートを回避できる脆弱性「BootHole」が見つかる" GigaZine
- ※18
- "THERE'S A HOLE IN THE BOOT" eclypsium
- ※19
- "CVE-2020-25645" CVE
- ※20
- "CVE-2020-25645 Detail" NVD