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-mail và slack
- 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 | RAM | DISK | CPU |
vuls | 10.10.34.131 | 2G | 30G | 1 |
vuls-client | 10.10.34.133 | 2G | 20G | 1 |
Mô hình
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ế độ fas
t
[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 đã scanNumber 2
: Liệt kê danh sách các lỗ hỏng được tìm thấy trong cài đặtNumber 3
: Hiển thị thông tin chi tiết về lỗ hỏng được lấy từ DBNumber 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-servertarget_ip
: IP của remote-serverport
: port dùng để sshuser
: user muốn sử dụng để scankeyPath
: đường dẫn tới key ssh. Dovuls
không hỗ trợ ssh bằng passwordscanmode
: 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 đếnyour_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 !