SBOM管理ツール SW360 - オープンソースをオープンソースで管理しよう （3．設定編 その2）

<font color="DeepPink">この記事で取り扱うSW360のバージョンはとても古いです。以下を参照に最新のバージョンの導入をお勧めします。（2023年追記）
https://www.eclipse.org/sw360/docs/deployment/nativeinstall/</font>

This article is written in Japanese and I am writing an English version now. If you can read English, you can check  https://www.eclipse.org/sw360/docs/deployment/nativeinstall

If you have any questions in English, please send emails to <a href="m&#97;i&#108;t&#111;:&#115;&#119;&#51;&#54;&#48;-&#100;&#101;v&#64;&#101;&#99;&#108;i&#112;&#115;&#101;&#46;&#111;&#114;&#103;">&#115;&#119;&#51;&#54;&#48;-&#100;&#101;v&#64;&#101;&#99;&#108;i&#112;&#115;&#101;&#46;&#111;&#114;&#103;</a>

###### この記事は[SW360](https://github.com/eclipse/sw360)の設定方法を説明する記事です。 SW360のインストール方法や概要は[OSS管理ツール SW360 - オープンソースをオープンソースで管理しよう （1．インストール編）](https://qiita.com/K-Hama/items/90a6105a16400ce3e718) に記載しています。

#はじめに

今回の設定編で構築されるツールの全体像は以下の図のようになる。
<img width="326" alt="all.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373931/2f02d446-8527-a400-7619-f775dd0810c9.png">

図における各ソフトウェアの役割は下記のとおり。

* SW360： ソフトウェアコンポーネントとその利用状況を管理するソフトウェアカタログツール
* Fossology： 管理するコンポーネントがOSSの場合にOSSライセンスの解析と解析結果のレビューを行うツール

製品開発でこれらのツールを用いてソフトウェアコンポーネントを管理するには、大まかに次の3ステップを行うことになる。
1. SW360: OSSコンポーネントの一般情報とソースコードの登録
2. Fossology: OSSライセンス解析とレビュー
3. SW360: 開発プロジェクトへのOSS利用状況の登録


今回の設定編その2では、下記の 4~6 の作業を始めるために必要な作業に焦点をあてて解説。

インストール完了後SW360利用開始までに必要な作業は大きく分けて次の6つになる。
1. SW360利用ユーザの設定・追加
2. 検索機能の有効化
3. Fossologyとの連携設定
4. 脆弱性情報自動取得設定
5. ライセンス情報初期設定
6. ログ取得設定


* [1~3設定](https://qiita.com/K-Hama/items/c66d9becf9aeb8f8863e) 
* この記事ではあくまで設定方法のみを紹介する。利用方法は後日投稿予定

* 他の参考資料

 - [GoogleSummerCode](https://wiki.eclipse.org/Google_Summer_of_Code_2019_Ideas#Eclipse_SW360)
 - [公式スライド](https://github.com/sw360/sw360slides)
 - [企業利用例 (SIEMENS): (PDF)](https://wiki.linuxfoundation.org/_media/openchain/036_oss_tooling_20190506_fossology_and_sw360_updates_04.pdf)
 - [日本語資料 : (pptx)](https://github.com/sw360/sw360slides/raw/master/sw360slides-collection-JPN.pptx)


* [SW360のバージョン 3.3.0-M1　/ Commit id : a3a0698](https://github.com/eclipse/sw360/releases/tag/sw360-3.3.0-M1) 利用

<font color="Red">追記：以下で利用方法を記したドキュメントを公開</font>
https://docs.google.com/document/d/1wNV--UhIDiRPP10Hhk0vspiKtoLupug7v2AAu4yxEC8/edit?usp=sharing

誰でも閲覧編集できるので，ご確認ください．

# 4. 脆弱性情報自動取得設定

SW360はcomponentに登録する[CPE ID](https://www.ipa.go.jp/security/vuln/CPE.html)をもとに各コンポーネントに関連する脆弱性情報を[cve-search](http://cve-search.github.io/cve-search/)を利用して拾ってくる。ここでは、このために必要な設定を行う。

## 4.1 初期設定確認
デフォルトではこれらの情報の取得先が　
https://cve.circl.lu　
となっている。これは、SW360の以下でpropertiesファイルで確認することが可能である。


```sw360/backend/src/src-cvesearch/src/main/resources/cvesearch.properties
#
# Copyright (c) Bosch Software Innovations GmbH 2016.
#
# All rights reserved. This configuration file is provided to you under the
# terms and conditions of the Eclipse Distribution License v1.0 which
# accompanies this distribution, and is available at
# http://www.eclipse.org/org/documents/edl-v10.php

cvesearch.host=https://cve.circl.lu
```
https://cve.circl.lu　
から脆弱性を取得してくる場合、proxyの設定を適切に行えば、検索を開始する。例えばtomcat内のbinに設定ファイルsetenv.shを置く場合以下のように設定する。

```sw360/backend/src/src-cvesearch/src/main/setenv.sh
JAVA_OPTS="-Duser.timezone=JST -Dhttp.proxyHost=exapmle.proxy -Dhttp.proxyPort=8080 -Dhttps.proxyHost=example.proxy -Dhttps.proxyPort=8080"
```

脆弱性を取得してくる時刻は以下のファイルから設定する。デフォルトだと24時間に1回AM00:00に取得する設定になっているので、必要に応じて変数を設定する。

```/tomcat-7.0.62/webapps/schedule/WEB-INF/classes/sw360.properties　
# Copyright (c) Bosch Software Innovations GmbH 2016.
#
# All rights reserved. This configuration file is provided to you under the
# terms and conditions of the Eclipse Distribution License v1.0 which
# accompanies this distribution, and is available at
# http://www.eclipse.org/org/documents/edl-v10.php

#in seconds of today: 0*60*60 = 0 means midnight
schedule.cvesearch.firstOffset.seconds = 0

#in seconds: 24*60*60 = 86400 means every 24 hours
#schedule.cvesearch.interval.seconds = 86400
schedule.cvesearch.interval.seconds = 21600

```


## 4.2 ローカルのデータベースから脆弱性情報取得

CVEデータベースをローカルに保存して、SW360に取り込む方法を解説する。
前準備としてVersion 3.3以上のPythonをインストールする。

```console
$ sudo apt install python3
$ sudo apt-get install python3-pip
```

次にmongodb-serverとredis-serverのインストールを行う。

```console

$ sudo apt install mongodb-server
$ sudo apt install redis-server
```

上記が完了すれば、いよいよcve-searchを使いCVEデータベースを構築する。途中時間がかかる作業があることには留意。

```console
$ git clone https://github.com/cve-search/cve-search.git
$ pip3 install -r requirements.txt
$ cd cve-search
$ ./sbin/db_mgmt.py -p
$ ./sbin/db_mgmt_cpe_dictionary.py # >45minutes on a decent machine, please be patient
$ ./sbin/db_updater.py -c # This will take >45minutes on a decent machine, please be patient
```

db_mgmt_cpe_dictionary.py ,　db_updater.py　は場合によっては1時間程度かかる。（ターミナル上で変化がなくても問題なし）
* なお　db_updater.py　実行時以下の出力が確認できる。


```console
$ ./sbin/db_updater.py -c
INFO:root:Starting cve
Preparing [##################################################] 885/885
INFO:root:cve has 127237 elements (161 update)
INFO:root:Starting cpe
Not modified
INFO:root:cpe has 289463 elements (0 update)
INFO:root:Starting cwe
Preparing [##################################################] 981/981
INFO:root:cwe has 981 elements (981 update)
INFO:root:Starting capec
Preparing [##################################################] 463/463
INFO:root:capec has 463 elements (463 update)
INFO:root:Starting redis-cache-cpe
Redis server not running on localhost:6379
INFO:root:redis-cache-cpe updated
INFO:root:Starting via4
Redis server not running on localhost:6379
INFO:root:via4 has 0 elements (0 update)
INFO:root:Starting ensureindex
[+]Success to create index id on cpe
[+]Success to create index id on cpeother
[+]Success to create index id on cves
[+]Success to create index vulnerable_configuration on cves
[+]Success to create index vulnerable_product on cves
[+]Success to create index Modified on cves
[+]Success to create index [('summary', 'text')] on cves
[+]Success to create index id on via4
[+]Success to create index id on mgmt_whitelist
[+]Success to create index id on mgmt_blacklist
[+]Success to create index related_weakness on capec
INFO:root:
[-] No plugin loader file!

```

cve-search　を起動しAPIが使えるようにしていく。


```console
$ cd ./web
$ ./index.py &
```

上記が完了したら、デフォルトのport 5000でwebサーバが起動する。成功したかは以下のように確認できる。

```console
$ unset http_proxy # Clear http_proxy proxy if using
$ curl http://127.0.0.1:5000/api/browse/zyxel 
{
  "product": [
    "n300_netusb_nbg-419n",
    "n300_netusb_nbg-419n_firmware",
    "p-660h-61",
    "p-660h-63",
    "p-660h-67",
    "p-660h-d1",
    "p-660h-d3",
    "p-660h-t1",
    "p-660h-t3",
    "p-660hw",
    "p-660hw_d1",
    "p-660hw_d3",
    "p-660hw_t3"
  ],
  "vendor": "zyxel"
}
```

ここまで完了したら、cvesearch.properties　のcveserach.hostを変更する。

```sw360/backend/src/src-cvesearch/src/main/resources/cvesearch.properties

#
# Copyright (c) Bosch Software Innovations GmbH 2016.
#
# All rights reserved. This configuration file is provided to you under the
# terms and conditions of the Eclipse Distribution License v1.0 which
# accompanies this distribution, and is available at
# http://www.eclipse.org/org/documents/edl-v10.php

cvesearch.host=http://127.0.0.1:5000
```

脆弱性取得が成功したら[Vulnerabilites]タブに以下のような情報が取得される。ただし、コンポーネント情報に基づいた脆弱性を取得してくるため、最低1件はコンポーネントリリース情報を登録しておく必要がある。

![setting_v1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373931/00a24647-3421-d495-c45e-f5d8f6026cf7.png)



# 5. ライセンス情報初期設定

いくつかのライセンスに関してはあらかじめライセンステキスト、略称、ライセンス名を自動でインストールしてくることができる。

![gpl_v3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373931/35b7e1d7-03a3-bc08-4249-25ee58f39f5d.png)
![gpl_v3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373931/ebbdd61e-abea-f6d7-a5f4-621d75a21366.png)

上記例のGPLv3のような情報はAdminユーザのみが自動取得の設定を行える。Adminユーザでログイン後[Admin]を選択。

<img width="795" alt="33.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373931/8f236007-0b65-f99b-e333-bcbfc9cbdbe7.png">

[License admin]を選択し、[Import all SPDX license information]横のimportボタンを押す。

<img width="647" alt="34.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373931/98b64b17-b539-76b2-9187-8d24ff73b12a.png">

Warningがでてくるので、緑の[CONFIRM]ボタンを押すことでインポートが開始される。

<img width="639" alt="35.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373931/ecf8236c-f82f-f09f-ff17-678148692a69.png">

インポートには数分かかる場合があるが、完了すれば[License]タブから各種ライセンスを確認することができる。

<img width="889" alt="36.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373931/98d445f3-72be-9e1d-fea6-5e2cadff71db.png">

# 6. ログ取得設定
 運用にあたり、どこからログを参照、ある日は出力レベルの変更を行えばいいのかをこの章で記す。

基本的にはtomcat中のlogファイルのなかのcatalina.outから確認を行う。


```liferay/tomcat-7.0.62/logs/catalina.out
OpenJDK 64-Bit Server VM warning: ignoring option MaxPermSize=256m; support was removed in 8.0
Jul 31, 2019 11:12:07 PM org.apache.catalina.startup.VersionLoggerListener log
INFO: Server version:        Apache Tomcat/7.0.62
Jul 31, 2019 11:12:07 PM org.apache.catalina.startup.VersionLoggerListener log
INFO: Server built:          May 7 2015 17:14:55 UTC
Jul 31, 2019 11:12:07 PM org.apache.catalina.startup.VersionLoggerListener log
INFO: Server number:         7.0.62.0
Jul 31, 2019 11:12:07 PM org.apache.catalina.startup.VersionLoggerListener log
INFO: OS Name:               Linux
Jul 31, 2019 11:12:07 PM org.apache.catalina.startup.VersionLoggerListener log
INFO: OS Version:            4.15.0-55-generic
Jul 31, 2019 11:12:07 PM org.apache.catalina.startup.VersionLoggerListener log
INFO: Architecture:          amd64
Jul 31, 2019 11:12:07 PM org.apache.catalina.startup.VersionLoggerListener log
INFO: Java Home:             /usr/lib/jvm/java-8-openjdk-amd64/jre
Jul 31, 2019 11:12:08 PM org.apache.catalina.startup.VersionLoggerListener log
INFO: JVM Version:           1.8.0_212-8u212-b03-0ubuntu1.18.04.1-b03
Jul 31, 2019 11:12:08 PM org.apache.catalina.startup.VersionLoggerListener log
INFO: JVM Vendor:            Oracle Corporation
Jul 31, 2019 11:12:08 PM org.apache.catalina.startup.VersionLoggerListener log
INFO: CATALINA_BASE:         /opt/liferay/tomcat-7.0.62
Jul 31, 2019 11:12:08 PM org.apache.catalina.startup.VersionLoggerListener log
INFO: CATALINA_HOME:         /opt/liferay/tomcat-7.0.62

```

ログの出力レベルを上げるにはtomcat/conf 内のlogging.propertiesを変更する。参考：[Tomcat7のlog情報](https://tomcat.apache.org/tomcat-7.0-doc/logging.html)

```liferay/tomcat-7.0.62/conf/logging.properties

     45 ############################################################
     46 # Facility specific properties.
     47 # Provides extra control for each logger.
     48 ############################################################
     49
     50 org.apache.catalina.core.ContainerBase.[Catalina].[localhost].level = INFO
     51 org.apache.catalina.core.ContainerBase.[Catalina].[localhost].handlers = 2localhost.org.apache.juli.FileHandler
     52
     53 org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/manager].level = INFO
     54 org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/manager].handlers = 3manager.org.apache.juli.FileHandler
     55
     56 org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/host-manager].level = INFO
     57 org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/host-manager].handlers = 4host-manager.org.apache.juli.FileHandler
     58
```
必要に応じてのINFOをDEBUGなどに変えて、catalina.out　を確認すればよい。

さいごに
ここまでの設定が完了すると一通り初期設定が完了したといえる。実際にadminユーザや一般ユーザがどのように操作をするかの説明は後日行う。

この記事のフィードバックやコメント等はいつでもお待ちしております。気軽にお申し付けください。