脆弱性対策(OSS編)

# OSSとは、、、
ソースコードの改変や再配布が自由に認められている無償のソフトウェア
⇔プロプライエタリソフトウェア:ソースコードへのアクセスや改変が制限されているソフトウェア

●OSSの定義（10項目）
1．再配布を自由に認めること
2．ソースコードを無償で配布すること
3．派生ソフトウェアの配布を許可すること
4．ソースコードのどの部分が、作者オリジナルのコードかわかるようにすること（作者コードの完全性）
5．個人やグループに対する差別をしないこと
6．使用分野に対する差別をしないこと
7．プログラムに付随する権利はすべての再頒布者に平等に与えられること（ライセンスの分配）
8．特定の製品だけに限定したライセンスにしないこと
9．他のソフトウェアを制限するライセンスにしないこと
10．ライセンスは技術的に中立であること

### OSSを利用するメリット
●信頼性がある
●安定性が高い
●コスト削減が可能

### OSSを使うときの注意点
●ライセンスに準拠する必要がある
●「無償＝OSS」ではない
●派生物もOSSとなる

## CVSSとは
情報システムの脆弱性に対するオープンで汎用的な評価手法であり、ベンダーに依存しない共通の評価方法を提供
__(1)基本評価基準(Base Metrics)__
情報システムに求められる3つのセキュリティ特性、『機密性(Confidentiality Impact)」、『完全性(Integrity Impact)」、『可用性(Availability Impact)」に対する影響を、ネットワークから攻撃可能かどうかといった基準で評価
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2609668/ffb654d3-8318-3afd-9e3a-6606c337dbe6.png)

__(2)現状評価基準(Temporal Metrics)__
攻撃コードの出現有無や対策情報が利用可能であるかといった基準で評価

__(3)環境評価基準(Environmental Metrics)__
ユーザの利用環境も含め、最終的な脆弱性の深刻度を評価する基準で評価
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2609668/ed2bb2ca-5a76-61d0-d4d6-0b6079ae0718.png)

#### 値の算出方法
(1)脆弱性の技術的な特性を評価する基準(基本評価基準：Base Metrics)、(2)ある時点における脆弱性を取り巻く状況を評価する基準(現状評価基準：Temporal Metrics)、(3)利用者環境における問題の大きさを評価する基準(環境評価基準：Environmental Metrics)を順番に評価
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2609668/b9d3c8aa-6218-353b-679c-3502281cef83.png)

## Trivy
コンテナイメージの脆弱性診断ツール

### 主な特徴
●コンテナイメージを脆弱性データベースを元に診断
●単一バイナリでの導入
●未修正の脆弱性の除外
●任意の脆弱性の除外
●複数のシステムでの利用


### 主な機能
●yumやapt-getなどからinstallしたパッケージの脆弱性の検知
【対応OSイメージ】
Alpine
CentOS
openSUSE Leap
SUSE Enterprise Linux
Red Hat Universal Base Image
Oracle Linux
Ubuntu
Photon OS
Red Hat Enterprise Linux
Debian
Amazon Linux
Distroless

●アプリケーションの依存関係定義から脆弱性を発見
【対応する依存関係定義】
Bundler
poetry
Cargo
Composer
npm
pipenv
yarn

診断結果を標準出力・テキストに出力
【対応フォーマット】
table
json
custom




## Black Duck
組織におけるOSSの活用状況とリスクのマネジメントを支援するOSS管理ツール

### OSS管理の流れとその特長
1.スキャン
ソースコードやバイナリを解析し、利用しているOSSのコンポーネント名やバージョンを正確に特定
↓
2.リスクの検出
OSSのセキュリティ脆弱性、ライセンス違反、運用上のリスク、暗号に関する情報などを明らかにする
↓
3.継続的な管理
OSSに関する脆弱性などの情報を継続的に監視し、新しいリスクが出た場合にアラートを通知

#### 1.スキャン
__・コンポーネントのスキャン__：ソースコード内に含まれるOSSのコンポーネント（フォルダー、ライブラリ、バイナリなど）を検出
__・ファイルのスキャン__：ソースコード内に含まれるOSSのソースファイルを検出するスキャン
__・スニペットのスキャン__：ソースコード内に含まれるOSSのコードスニペットを検出するスキャン
__・ストリングサーチ__：ソースコード内に含まれるOSSライセンスに関する文字列を検出するスキャン
__・依存関係のスキャン__：パッケージマネージャを使って利用しているOSSライブラリを検出するスキャン
__・独自バイナリのスキャン__：独自のバイナリに含まれるOSSを検出するスキャン
__・コンテナのスキャン__：コンテナに含まれるOSSを検出するスキャン

#### 2.リスクの検出
__・ライセンス違反のリスク__：KnowledgeBaseは数多くのオープンソースライセンスに関する情報を保持しており、GPL、LGPL、Apache Licenseなどの著名なライセンスだけでなく、利用数の少ないライセンスについても幅広くカバー。各OSSについては宣言されたライセンスだけでなく内包するライセンス（Deep License Data）も知ることができる。各OSSについては宣言されたライセンスだけでなく内包するライセンス（Deep License Data）も知ることができるため、ライセンスコンプライアンス遵守に必要な情報を幅広く入手可。

__・セキュリティ脆弱性のリスク__：CVE情報だけでなく、独自のデータ「Black Duck Security Advisories（BDSA）」を含む膨大な脆弱性情報を保持しており、リスクの検出に加えて具体的な対策情報の提供。

__・運用上のリスク__：アップデート状況、コミット アクティビティ、コントリビュータ数などの情報に基づいて、古くなった・活動的でなくなったOSSとそのバージョンを独自の指標で評価。

__・暗号に関するリスク__：暗号化機能を持つOSSを含む製品・サービスを海外へ輸出する場合には、法令への対応が必要になる場合がある。


#### 3.継続的な管理
__・外部ツール連携（DevOps統合）__：CI/CDツール、バグ管理ツール、バイナリリポジトリ、多くの外部ツールと連携することができ、またREST APIによってさまざまな外部ソフトウェアと連携することが可能
__・ポリシーの設定とアラート__：利用OSSに問題が見つかった際には自動的にアラート通知
__・脆弱性の早期検知と対処情報の提供__：NVDよりも早期に脆弱性情報を提供し、また脆弱性の回避方法、修正方法などに関する有用な調査結果も提供
__・SBOMおよびレポート（通知ファイル）の生成__：OSSリストを通知ファイル、CSV、SPDXといった形式で生成することができる



![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2609668/1d9c572f-1499-03b4-8bdd-79c0ffa76180.png)

### 仕組み

脆弱性情報はNVDから最新の情報を1日3回（8時間ごとに）確認
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2609668/c3916a7d-d40f-0447-0dc7-764276f8517b.png)



## 用語集
__・CI/CD__：ビルドやテスト・デリバリー・デプロイメントを自動化し、継続的に行うアプローチを指す名称
__・CVE__：Common Vulnerabilities and Exposures（MITRE社が採番を行い、NISTが運営するNVDによって提供されている共通脆弱性識別子）
__・GPL__：GNU General Public License（GNU 一般公衆利用許諾書）
__・LGPL__：GNU Lesser General Public License（GNU 劣等一般公衆利用許諾書）
__・OSS__：Open Source Software（オープンソースソフトウェア）
__・SBOM__：ソフトウェアがどのような構成要素（モジュール、ライブラリなど）から成り立っているかを一覧できるリス
__・コンポーネント__：ソフトウェア、システムの構成する部品や要素
__・スニペット__：再利用可能な ソースコード 、 マシンコード 、またはテキストの小さな領域を表す


## 参考HP
https://opensource.org/osd
https://www.hitachi-solutions.co.jp/blackduck/