Khi sử dụng hệ điều hành thì ta thường xuyên cài đặt các gói và các ứng dụng. Làm sao để biết được nó có lỗ hỏng nào đó. Thì Vuls là một giải pháp giúp bạn có thể scan được các lỗ hỏng. Tôi sẽ hướng dẫn các bạn cài đặt Vuls.

I. Giới thiệu Vuls

Khái niệm

  • Vuls được viết tắt của vulnerability scanner là một công cụ được sử dụng để quét các lỗ hỏng của các gói ứng dụng
  • Vuls được viết bằng ngôn ngữ GO và có khả năng tự động phân tích các lỗ hổng bảo mật của các phầm mềm cài đặt trên hệ thống
  • Vuls sử dụng nhiều loại  vulnerability databases để đối chiếu như là : National Vulnerability Database(NVD), FREEBSD, OVAL…
  • NVD : là một nơi lưu trữ các thông tin các lỗ hỏng được công khai lớn nhất.

Chức năng

  • Vuls Có khả năng scan được nhiều hệ thống cùng một lúc. Và có thể cảnh báo qua được e-mailslack
  • Vuls sẽ có 3 mode được sử dụng : fast, fast root, deep
  • Vuls Không thể kiểm soát lưu lượng mạng
  • Khi mà DB của Vuls đưa ra các phát hiện lỗ hỏng thì nó cũng được đưa vào tin nhắn gửi cảnh báo
  • Mức độ ưu tiên của cảnh báo đã được cài đặt sẵn ở trong DB của Vuls. Và nó sẽ thực hiện theo mức độ cảnh báo đó

Mục tiêu bài viết

  • Bài viết này sẽ hướng dẫn bạn cài đặt Vuls trên ubuntu 18.04 server
  • Cài đặt cấu hình của Vuls cảnh báo về slack
  • Cần chuẩn bị hai máy ubuntu 18.04 tối thiểu RAM 2G

IPPlanning

Host name IP RAMDISKCPU
vuls10.10.34.1312G30G1
vuls-client10.10.34.1332G20G1

Mô hình

Máy vuls-client sẽ là một máy remote để có thể được scan từ xa

II. Thực hiện

1. Cài đặt môi trường

Tạo thư mục để lưu trữ dữ liệu của Vuls

sudo mkdir /usr/share/vuls-data

Update các gói dữ liệu

sudo apt update

Cài đặt các gói cần thiết

sudo apt install sqlite git debian-goodies gcc make wget

Cài đặt ngôn ngữ GO. Dùng snap để có thể download được phiên bản mới nhất của GO

sudo snap install go --classic

Tạo file /etc/profile.d/go-env.sh. Chức năng của nó là tạo ra các biến môi trường. Thêm nội dưới đây vào file

export GOPATH=$HOME/go
export PATH=$PATH:$GOPATH/bin:/snap/bin

Cấp quyền cho thư mục

sudo chmod +x /etc/profile.d/go-env.sh

Chạy để thực thi file để có biến môi trường

source /etc/profile.d/go-env.sh

NOTE : Hãy chạy file này mỗi khi bật máy để có biến môi trường

2. Cài đặt gói go-cve-dictionary

Chức năng của gói:

  • Gói này sẽ cung cấp quyền truy cập NVD(National Vulnerability Database)
  • NVD là kho lưu trữ vulnerabilities và public lớn nhất. Nó có sẵn định dạng cho máy đọc

Tạo thư mục để lưu trữ go-cve-dictionary. và di chuyển tới thư mục

mkdir -p $GOPATH/src/github.com/kotakanbe
cd $GOPATH/src/github.com/kotakanbe

clone go-cve-dictionary từ git về

git clone https://github.com/kotakanbe/go-cve-dictionary.git

Cài đặt go-cve-dictionary

cd go-cve-dictionary
make install

Để hệ thống có sẵn copy nó vào thư mục của hệ thống

sudo cp $GOPATH/bin/go-cve-dictionary /usr/local/bin

Tạo thư mục log cho nó và cấp quyền cho thư mục

sudo mkdir /var/log/vuls

sudo chmod 777 /var/log/vuls

Download dữ liệu từ NVD về máy

for i in `seq 2002 $(date +"%Y")`; do sudo go-cve-dictionary fetchnvd -dbpath /usr/share/vuls-data/cve.sqlite3 -years $i; done

NOTE : Thời gian làm bước này rất lâu nên hãy đợi nó download

3. Cài đặt và chạy goval-dictionary

Di chuyển đến thư mục chứa được tạo ra trước đó

cd $GOPATH/src/github.com/kotakanbe

Clone gói từ github

git clone https://github.com/kotakanbe/goval-dictionary.git

Cài đặt goval-dictionary

cd goval-dictionary

make install

Sao chép vào thư mục /usr/local/bin

sudo cp $GOPATH/bin/goval-dictionary /usr/local/bin

Tìm dữ liệu cho OVAL

sudo goval-dictionary fetch-ubuntu -dbpath=/usr/share/vuls-data/oval.sqlite3 18

4. Cài đặt và chạy gost

Tạo ra thư mục mới để lưu trữ

sudo mkdir -p $GOPATH/src/github.com/knqyf263
cd $GOPATH/src/github.com/knqyf263

Clone nó về từ git

sudo git clone https://github.com/knqyf263/gost.git

Cài đặt gói

cd gost

make install

Copy vào thư mục /usr/local/bin

sudo cp $GOPATH/bin/gost /usr/local/bin

symlink tới thư mục của vuls để nó có thể thấy được

ln -s $GOPATH/src/github.com/knqyf263/gost/gost.sqlite3  /usr/share/vuls-data/gost.sqlite3

Tạo thư mục log cho gost

sudo mkdir /var/log/gost

Cấp quyền cho thư mục

sudo chmod 777 /var/log/gost

Tìm dữ liệu và lưu trong bảo mật của Debian

gost fetch debian

5. Download và cài đặt Vuls

Tạo ra thư mục lưu trữ và di chuyển với thư mục

mkdir -p $GOPATH/src/github.com/future-architect
cd $GOPATH/src/github.com/future-architect

Clone từ github

git clone https://github.com/future-architect/vuls.git

Cài đặt gói

cd vuls

make install

Copy vào thư mục /usr/local/bin

sudo cp $GOPATH/bin/vuls /usr/local/bin

Tạo file cấu hình cho Vuls

cd /usr/share/vuls-data

sudo vi config.toml

với nội dung sau. Mặc định nó sẽ chạy ở chế độ fast

[cveDict]
type = "sqlite3"
SQLite3Path = "/usr/share/vuls-data/cve.sqlite3"

[ovalDict]
type = "sqlite3"
SQLite3Path = "/usr/share/vuls-data/oval.sqlite3"

[gost]
type = "sqlite3"
SQLite3Path = "/usr/share/vuls-data/gost.sqlite3"

[servers]

[servers.localhost]
host = "localhost"
port = "local"
scanMode = [ "fast" ]
#scanMode = ["fast", "fast-root", "deep", "offline"]

Kiểm tra xem cấu hình có đúng hay là không

vuls configtest

6. Chạy local scan

Thực hiện scan trong local nếu không chỉ định rõ ràng sẽ thực hiện ở chế độ fast

vuls scan

output

[Feb 27 19:44:12]  INFO [localhost] Detecting OS of servers...
[Feb 27 19:44:12]  INFO [localhost] (1/1) Detected: localhost: ubuntu 18.04
[Feb 27 19:44:12]  INFO [localhost] Detecting OS of containers...
[Feb 27 19:44:12]  INFO [localhost] Checking Scan Modes...
[Feb 27 19:44:12]  INFO [localhost] Detecting Platforms...
[Feb 27 19:44:12]  INFO [localhost] (1/1) localhost is running on other
[Feb 27 19:44:12]  INFO [localhost] Scanning vulnerabilities...
[Feb 27 19:44:12]  INFO [localhost] Scanning vulnerable OS packages...
[Feb 27 19:44:12]  INFO [localhost] Scanning in fast mode


One Line Summary
================
localhost       ubuntu18.04     537 installed


To view the detail, vuls tui is useful.
To send a report, run vuls report -h.

Nó đã ghi lại những gì làm ở quá trình trên để xem được kết quả

vuls tui
  • Number 1 : Liệt kê các máy mà vuls đã scan
  • Number 2 : Liệt kê danh sách các lỗ hỏng được tìm thấy trong cài đặt
  • Number 3 : Hiển thị thông tin chi tiết về lỗ hỏng được lấy từ DB
  • Number 4 : Các gói bị ảnh hưởng và phiên bản của nó
  • Sử dụng tab hoặc là enter để di chuyển con trỏ sang các bảng.

7. Cấu hình scan nhiều máy

Đăng nhập vào remote server(vuls-client) và cài đặt

sudo apt install debian-goodies -y

Quay về trở về máy cài đặt vuls thêm nội dung vào file /usr/share/vuls-data/config.toml

[servers.target_name]
host = "target_ip"
port = "22"
user = "account_username"
keyPath = "account_rsa_key"
scanMode = [ "deep" ] # "fast", "fast-root" or "deep"

Trong đó:

  • target_name : Tên muốn hiển thị cho remote-server
  • target_ip : IP của remote-server
  • port : port dùng để ssh
  • user : user muốn sử dụng để scan
  • keyPath : đường dẫn tới key ssh. Do vuls không hỗ trợ ssh bằng password
  • scanmode : Chế độ muốn scan

Cấu hình của tôi

[servers.vuls-client]
host = "10.10.34.133"
port = "22"
user = "root"
keyPath = "/root/.ssh/id_rsa"
scanMode = [ "deep" ] # "fast", "fast-root" or "deep"

Chạy thử lệnh scan

8. Cài đặt scan và report cho slack

Để làm được bước này hãy tạo slack và cài đặt Incoming Webhooks

Thêm nội dung vào file /usr/share/vuls-data/config.toml

[slack]
hookURL      = "your_hook_url"
channel      = "#your_channel_name"
authUser     = "your_username"

Trong đó :

  • your_hook_url : là địa chỉ URL của webhook
  • #your_channel_name : Tên kênh mà bạn muốn gửi đến
  • your_username : Tên user tạo ra kênh đó

Kiểm tra xem đã kết nối được tới slack bằng cách gửi tao cáo tới slack.

sudo vuls report -to-slack

Lên kênh của slack để check

Sau đó có thể dùng crontab để có thể chạy được lệnh scan và report theo như lịch trình bạn muốn

0 0 * * * vuls scan -config=/usr/share/vuls-data/config.toml; vuls report -config=/usr/share/vuls-data/config.toml > /dev/null 2>&1

Trong đó :

  • Ví dụ trên chạy 12h hằng ngày
  • Nó sẽ scan; và report tới file config.toml

Ta có thể thực hiện bằng crontab hoặc là chạy bằng lệnh report như trên tôi đã làm để gửi báo cáo tới slack nhé. Chúc các bạn thành công !