iT邦幫忙

2023 iThome 鐵人賽

DAY 21
0
Security

一個人的藍隊系列 第 21

OpenCVE 開源CVE弱點預警平台架設

  • 分享至 

  • xImage
  •  

OpenCVE 介紹

https://ithelp.ithome.com.tw/upload/images/20231006/20114110xuEH1l6lE0.png

『OpenCVE 是追蹤 CVE 更新並收到新漏洞警報的最簡單方法。』-OpenCVE 官網說的

OpenCVE官網: https://www.opencve.io/welcome
OpenCVE 是一個開源的 CVE 預警平台(CVE Alerting Platform),讓你可以在本地端架設自己私有的CVE漏洞資料庫。

OpenCVE 與 NVD 來源同步,因此每個 CVE 都會顯示標準的弱點資訊(CVE、CWE、CPE、CVSS)。它也會儲存 CVE 的完整歷史記錄,從建立日期到最後一次變更(新增新的 CPE、變更 CVSS 分數...)。

你可以透過該服務在整個 CVE 列表中進行搜尋,並根據需求過濾結果:按供應商、產品、CVSS 或 CWE。也可以建立自己的標籤(未讀、重要、開發團隊...)來進行管理和追蹤。該服務也有整合訂閱機制,可以透過針對特定供應商或產品訂閱,當訂閱清單有 CVE 新出現或更時,OpenCVE 會向你設定的郵件發送通知。

其實 OpenCVE 是個非常單純的服務,它就是把 NVD 的 CVE 資料庫來源給同步一份到你的私有空間,然後幫你做好了一些篩選、標籤、通知的服務。該服務裡面的內容其實也都是公開資料,如果不談及訂閱與標籤的話,服務裡面的內容是沒有機敏資訊的。

特色:

  • 探索:探索 CVE 資料庫並依供應商、產品、CVSS 分數或 CWE 篩選結果
  • 訂閱:訂閱特定的供應商和產品
  • 通知:收到有關新 CVE 或基於訂閱的 CVE 更新的通知
  • 分析:所有 CVE 詳細資訊(供應商、產品、CVSS 分數、CPE、CWE、參考文獻...)
  • 建立:自訂標籤(未讀、重要、開發團隊...)來管理 CVE 列表
  • 顯示:每個 CVE 的歷史記錄並在主頁中查看其最後的更改
  • 報告:產生與自訂報告
  • 客製:可以自行設定通知條件(頻率、按 CVSS 分數過濾...)
  • 整合:使用 Rest API 將 OpenCVE 與你自己的工具集成

OpenCVE Online demo

如果想先看看 OpenCVE 長甚麼樣子
用起來是甚麼樣子
官方也有 Online demo 的服務可以讓你用看看
https://www.opencve.io/cve

架設私有 OpenCVE

OpenCVE的架設,可以在主機上安裝
也可以利用 docker-compose 進行架設
這邊流程我是利用 docker 架設

雖然它整個服務有不同的組件,但主要就是讀取同一個設定檔案而已
這邊架設過程其實有一點坑,如果你不想跟著操作 Debug,也可以看完全文才安裝

# Docker 安裝步驟

# 拉取 Github code 並且構建 Dockerfile
git clone https://github.com/opencve/opencve-docker.git
cd opencve-docker/
git checkout v1.4.1
cp ./conf/opencve.cfg.example ./conf/opencve.cfg
cd conf/
# 如果需要修改設定檔資訊在這個步驟修改
vim opencve.cfg
cd ..
sudo docker-compose build
sudo docker-compose up -d postgres redis webserver celery_worker
# 開始初始化CVE資料,這步驟會需要一段時間
sudo docker exec -it webserver opencve upgrade-db
sudo docker exec -it webserver opencve import-data
# 這個步驟是建立使用者帳號密碼. (先建立一個admin帳號)
# 帳號:密碼 hackercat:myPassword
# 信箱 hackercat@fake.org 
sudo docker exec -it webserver opencve create-user hackercat hackercat@fake.org --admin
sudo docker-compose up -d celery_beat

上面 vim opencve.cfg 的階段,官方建議更新下列參數

  • server_name (use the same port if you changed it in the .env file)
  • secret_key (see the Flask recommandations)
  • smtp_server
  • smtp_user & smtp_password if any or leave empty

上面的步驟我是先修改監聽的 IP 跟 secret_key 而已

https://ithelp.ithome.com.tw/upload/images/20231006/20114110JHKkMcyRO4.png

OpenCVE 架設 Bug

以上流程完成之後,應該服務就成功啟動了
可以檢查看看容器都有正常運作

https://ithelp.ithome.com.tw/upload/images/20231006/20114110vNPkhRRXV2.png

也可以用以下指令檢查 Webserver 有監聽

netstat -antup | grep 8000

https://ithelp.ithome.com.tw/upload/images/20231006/20114110dwwNJphu2X.png

有成功架設 Server,但連線過去發現內容有問題
直接打開瀏覽器查看就會發現轉址到的地方都會是無法連線或 404
查了一下,可以看到原始碼的 src 全部去抓 0.0.0.0 的資料,所以抓不到

https://ithelp.ithome.com.tw/upload/images/20231006/20114110EKzDp7qekT.png

這個網路上也有其他人遇過,別人留言建議的解法是
把設定檔 opencve.cfg 裡面的 server_name 設為空值即可

這個 opencve.cfg 是被 bind mount 的
所以修改主機上的,容器內的也會被修改
可以直接改主機上面的檔案
實際上我們修改成空值之後

https://ithelp.ithome.com.tw/upload/images/20231006/20114110NxvBJKVgSu.png

[core]
; The name and the port of OpenCVE server. Change it if you launch the
; webserver with a different value (ie opencve webserver -b 0.0.0.0:80).
server_name =

https://ithelp.ithome.com.tw/upload/images/20231006/201141106XNpt3PeQo.png

重啟容器

docker-compose restart

是可以讓 Web 正常運作

https://ithelp.ithome.com.tw/upload/images/20231006/20114110MWtEpKFSVQ.png

再次Debug,寄信通知

服務看起來很正常,世界多麼美好,空氣多麼清新
但其實這邊有個坑要提醒一下大家

網路上會看到有人建議留空的方式
這樣其實看起來是可以正常運作的
網站瀏覽都沒問題
但實際上會有問題,這樣是沒辦法正常寄信的

OpenCVE 有一個寄信通知的功能
如果你要使用到這個功能,Maybe 就不能用這種方式修補
其實查看 Server log 也會發現剛剛的方式有顯示問題

https://ithelp.ithome.com.tw/upload/images/20231006/20114110OIgX56YSIY.png

所以我們要改成使用給定的 IP
不要使用 0.0.0.0,我們用 LAN 端的 IP
這邊我直接使用

[core]
; The name and the port of OpenCVE server. Change it if you launch the
; webserver with a different value (ie opencve webserver -b 0.0.0.0:80).
server_name = 192.168.101.142:8000

https://ithelp.ithome.com.tw/upload/images/20231006/20114110b4hEsQQhvK.png

docker-compose restart

這樣我們就可以讓服務正常運作也可以正常寄信了
(記得要在 opencve.cfg 配置你的 SMTP 資訊)

; Configuration to set up SMTP mails.
smtp_server = <your_smtp_server>
smtp_port = 465
smtp_use_tls = True
smtp_use_ssl = False
smtp_username = <your_username>
smtp_password = <your_password>

CVE 更新機制

https://ithelp.ithome.com.tw/upload/images/20231006/20114110pRq9SDuFyt.png

然後 OpenCVE 預設情況是 15 分鐘會去檢查一次更新
celery_beat 會定期去更新
我們可以查看 Logs 看一下有沒有正常的運行
A periodic task is scheduled every 15 minutes to check the new changes

https://ithelp.ithome.com.tw/upload/images/20231006/20114110oFOxeRvP2d.png


上一篇
SOC 鐵三角 (SOC visibility triad) 與 可觀測性三本柱 (Observability)
下一篇
OpenCVE 資訊說明,從 CVE、NVD 到 CVSS
系列文
一個人的藍隊30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言