百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

工具推荐:Vuls,一款优秀的Linux漏洞扫描器

cac55 2024-10-01 07:38 63 浏览 0 评论

摘要

对于系统管理员来说,每天进行安全漏洞分析和软件更新是每日必需的基本活动。为了避免生产环境中的故障,对系统管理员来说选择不使用由保管理器提供的自动更新选项并执行手动更新非常常见。但是这会导致以下问题的发生:

1、系统管理员必需不断提防NVD(国际漏洞数据库)中所有新的安全漏洞等。对于系统管理员来说

2、如果在服务器上安装了大量的软件,那么监控所有的软件基本是不可能的。

3、通过执行分析来确定被漏洞影响的服务器需要付出高昂的代价。在分析过程中忽略一两个服务器是很正常的。

Vuls是解决以上问题的工具。它具有以下特征:

1、通知系统相关漏洞的用户。

2、通知受影响服务器的用户。

3、实现漏洞自动化检测以防止检查。

4、在使用CRON等的日常基础上生成报告来管理漏洞。

主要特点

1、在Linux服务器上扫描安全漏洞

1.1、支持Ubuntu,Debian,CentOS,Amazon Linux,RHEL ;

1.2、支持Cloud,on-premise,Docker;

2、系统包管理器中不包括扫描中间设备

2.1、针对漏洞的扫描中间设备、程序语言库和框架;

2.2、在CPE中注册支持软件;

3、无代理架构

要求用户只在一台通过SSH连接到其他目标服务器的机器上进行设置;

4、配置文件模版的自动生成

使用CIDR服务器设置的自动监测,生成配置文件模版;

5、支持电子邮件和Slack通知(支持日本);

6、扫描结果在附件软件、TUI 查看终端中可见。

Vuls不能做什么?

Vuls不能更新漏洞集合包;

Hello Vuls

本教程将使用vuls带领你扫描localhost中的漏洞。

扫描可以通过以下步骤完成:

1、Launch Amazon Linux Launch Amazon Linux

2、Enable to ssh from localhost 允许来自localhost的ssh

3、Install requirements 安装需要的程序

4、Deploy go-cve-dictionary 部署 go-cve-dictionary

5、Deploy Vuls 部署 Vuls

6、Configuration 配置

7、Prepare 准备

8、Scan 扫描

9、TUI(Terminal-Based User Interface) TUI(基于终端的用户交互)

第一步. Launch Amazon Linux

1、我们在这个例子中使用的是旧的AMI(amzn-ami-hvm-2015.09.1.x86_64-gp2 – ami-383c1956)

2、实例大小:t2.medium

2.1、第一次使用时,t2.medium和AMI用于从NVD(大约需要2.3GB容量)fetch数据。

2.2、你可以在之后初始化数据fetch之后转换到t2.nano。

3、把下面内容添加到云的初始化中以避免在第一次launch时自动更新。

Q:我在第一次launch时如何对重要安全更新禁用自动安装?

#cloud-config

repo_upgrade: none

第二步. SSH 设置

需要ssh到自己。

创建一个密钥对,然后对验证密钥追加公钥:

$ ssh-keygen -t rsa

$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

$ chmod 600 ~/.ssh/authorized_keys

第三步. 安装要求

Vuls需要下面的包:

1、sqlite

2、git

3、gcc

4、go v1.6

$ ssh ec2-user@52.100.100.100 -i ~/.ssh/private.pem

$ sudo yum -y install sqlite git gcc

$ wget https://storage.googleapis.com/golang/go1.6.linux-amd64.tar.gz

$ sudo tar -C /usr/local -xzf go1.6.linux-amd64.tar.gz

$ mkdir $HOME/go

在/etc/profile.d/goenv.sh中增加这些行:

export GOROOT=/usr/local/go

export GOPATH=$HOME/go

export PATH=$PATH:$GOROOT/bin:$GOPATH/bin

设置操作系统环境:

$ source /etc/profile.d/goenv.sh

第四步. 部署 go-cve-dictionary

$ sudo mkdir /var/log/vuls

$ sudo chown ec2-user /var/log/vuls

$ sudo chmod 700 /var/log/vuls

$ go get github.com/kotakanbe/go-cve-dictionary

把 go-cve-dictionary 开启为服务模式。

第一次时,go-cve-dictionary fetch 来自 NVD 的漏洞数据。

这样耗时约10分钟(在AWS上)。

$ go-cve-dictionary server

... Fetching ...

$ ls -alh cve.sqlite3

-rw-r--r-- 1 ec2-user ec2-user 7.0M Mar 24 13:20 cve.sqlite3

现在我们成功的收集了漏洞数据,然后再次以服务模式开启它。

$ go-cve-dictionary server

[Mar 24 15:21:55] INFO Opening DB. datafile: /home/ec2-user/cve.sqlite3

[Mar 24 15:21:55] INFO Migrating DB

[Mar 24 15:21:56] INFO Starting HTTP Sever...

[Mar 24 15:21:56] INFO Listening on 127.0.0.1:1323

第五步. 部署 vuls

Launch一个新的终端,SSH到ec2实例。

$ go get github.com/future-architect/vuls

第六步. 配置

创建一个配置文件(TOML 格式)

$ cat config.toml

[servers]

[servers.172-31-4-82]

host = "172.31.4.82"

port = "22"

user = "ec2-user"

keyPath = "/home/ec2-user/.ssh/id_rsa"

第七步. 为vuls设置目标服务器

$ vuls prepare

第八步. 开始扫描

$ vuls scan

INFO[0000] Begin scanning (config: /home/ec2-user/config.toml)

... snip ...

172-31-4-82 (amazon 2015.09)

============================

CVE-2016-0494 10.0 Unspecified vulnerability in the Java SE and Java SE Embedded components in Oracle

Java SE 6u105, 7u91, and 8u66 and Java SE Embedded 8u65 allows remote attackers to

affect confidentiality, integrity, and availability via unknown vectors related to

2D.

... snip ...

CVE-2016-0494

-------------

Score 10.0 (High)

Vector (AV:N/AC:L/Au:N/C:C/I:C/A:C)

Summary Unspecified vulnerability in the Java SE and Java SE Embedded components in OracleJava SE 6u105,

7u91, and 8u66 and Java SE Embedded 8u65 allows remote attackers to affect confidentiality,

integrity, and availability via unknown vectors related to 2D.

NVD https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2016-0494

MITRE https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2016-0494

CVE Details http://www.cvedetails.com/cve/CVE-2016-0494

CVSS Claculator https://nvd.nist.gov/cvss/v2-calculator?name=CVE-2016-0494&vector=(AV:N/AC:L/Au:N/C:C/I:C/A:C)

RHEL-CVE https://access.redhat.com/security/cve/CVE-2016-0494

ALAS-2016-643 https://alas.aws.amazon.com/ALAS-2016-643.html

Package/CPE java-1.7.0-openjdk-1.7.0.91-2.6.2.2.63.amzn1 -> java-1.7.0-openjdk-1:1.7.0.95-2.6.4.0.65.amzn1

第九步. TUI

Vuls拥有基于终端的用户交互来查看扫描结果。

$ vuls tui

体系架构

go-cve-dictionary

从 NVD,JVN(日本)fetch漏洞信息,然后插入SQLite。

Vuls

1、在服务器上扫描漏洞并创建CVE ID列表;

2、为了获得监测到的CVE更多详细信息,发送HTTP请求到go-cve-dictionary;

3、通过Slack,Email发送报告;

4、系统操作员可以通过终端查看最近的报告;

用例

扫描所有服务器

扫描单个服务器

负载均衡下使用相同配置的 Web/app 服务器

支持操作系统 Distribution Release Ubuntu 12, 14, 16 Debian 7, 8 RHEL 4, 5, 6, 7 CentOS 5, 6, 7 Amazon Linux All 用法:自动发现服务器

发现子命令发现CIDR范围中特定的活跃服务器,然后打印配置文件(TOML格式)到终端。

$ vuls discover -help

discover:

discover 192.168.0.0/24

例如:

$ vuls discover 172.31.4.0/24

# Create config.toml using below and then ./vuls --config=/path/to/config.toml

[slack]

hookURL = "https://hooks.slack.com/services/abc123/defghijklmnopqrstuvwxyz"

channel = "#channel-name"

#channel = "#{servername}"

iconEmoji = ":ghost:"

authUser = "username"

notifyUsers = ["@username"]

[mail]

smtpAddr = "smtp.gmail.com"

smtpPort = 465

user = "username"

password = "password"

from = "from@address.com"

to = ["to@address.com"]

cc = ["cc@address.com"]

subjectPrefix = "[vuls]"

[default]

#port = "22"

#user = "username"

#password = "password"

#keyPath = "/home/username/.ssh/id_rsa"

#keyPassword = "password"

#user = "root"

#cpeNames = [

# "cpe:/a:rubyonrails:ruby_on_rails:4.2.1",

#]

你可以使用此模版进行自定义配置

配置

Slack部分

1、hookURL:进入到webhook的URL

2、通道:通道名称

如果你设置 #{servername} 到通道,该报告将呗发送到 #servername 通道。

在下面的例子中,该报告将被发送到 #server1 和 #server2 中。

确定在扫描前创建这些通道。

[slack]

channel = "#{servername}"

...snip...

[servers]

[servers.server1]

[servers.server2]

host = "172.31.4.83"

...snip...

3、iconEmoji:emoji

4、authUser:slack团队的用户名

5、notifyUsers:Slack 用户名列表以发送 Slack 通知。如果你设置["@foo", "@bar"]称notifyUsers,@foo @bar将被纳入文本中。

所以 @foo,@bar 可以在手机上接受到推送到通知。

邮件部分

from = "from@address.com"

默认部分

如果没有特别指定,则使用默认部分。

服务器部分

你可以在默认部分覆盖默认值。

Vuls支持多种SSH身份验证方法:

1、SSH 代理

2、SSH 公钥验证(使用密码、空密码)

3、密码验证

使用:准备

准备在每台服务器上安装包需要的子命令。

Distribution Release Requirements Ubuntu 12, 14, 16 - Debian 7, 8 apptitude CentOS 5 yum-plugin-security, yum-changelog CentOS 6, 7 yum-plugin-security, yum-plugin-changelog Amazon All - RHEL 4, 5, 6, 7 -

$ vuls prepare -help

prepare:

prepare [-config=/path/to/config.toml] [-debug]

-config string

/path/to/toml (default "$PWD/config.toml")

-debug

debug mode

-use-unattended-upgrades

[Deprecated] For Ubuntu, install unattended-upgrades

使用:扫描

$ vuls scan -help

scan:

scan

[-lang=en|ja]

[-config=/path/to/config.toml]

[-dbpath=/path/to/vuls.sqlite3]

[-cve-dictionary-url=http://127.0.0.1:1323]

[-cvss-over=7]

[-report-slack]

[-report-mail]

[-http-proxy=http://192.168.0.1:8080]

[-debug]

[-debug-sql]

-cve-dictionary-url string

http://CVE.Dictionary (default "http://127.0.0.1:1323")

-cvss-over float

-cvss-over=6.5 means reporting CVSS Score 6.5 and over (default: 0 (means report all))

-dbpath string

/path/to/sqlite3 (default "$PWD/vuls.sqlite3")

-debug-sql

SQL debug mode

-http-proxy string

http://proxy-url:port (default: empty)

-lang string

[en|ja] (default "en")

-report-mail

Email report

-report-slack

Slack report

-use-unattended-upgrades

[Deprecated] For Ubuntu. Scan by unattended-upgrades or not (use apt-get upgrade --dry-run by default)

-use-yum-plugin-security

[Deprecated] For CentOS 5. Scan by yum-plugin-security or not (use yum check-update by default)

例子

在扫描前运行 go-cve-dictionary作为服务模式:

$ go-cve-dictionary server

扫描配置文件中定义的所有服务器:

$ vuls scan --report-slack --report-mail --cvss-over=7

使用这条样本命令可以:

1、扫描配置文件中定义的所有服务器;

2、向 slack 和 email 中发送扫描结果;

3、只报告CVSS分数超过7的CVE;

4、向终端打印扫描结果;

扫描特定的服务器

$ vuls scan server1 server2

使用这条命令可以:

1、只扫描2个服务器(sever1,sever2);

2、向终端打印扫描结果;

使用:扫描非系统包的漏洞

你自己监测你编译的漏洞是可能的,比如在CPE中注册的语言库盒框架等。

1、如何通过软件名搜索CPE名

NVD:搜索 Common Platform Emumerations(CPE)

检查CPE命名结构:2.2

2、配置

为检测Rails v4.2.1上的Ruby漏洞,cpeNames需要在服务器部分中被设置:

keyPath = "/home/username/.ssh/id_rsa"

cpeNames = [

"cpe:/a:rubyonrails:ruby_on_rails:4.2.1",

]

使用:更新NVD数据

$ go-cve-dictionary fetchnvd -h

fetchnvd:

fetchnvd

[-last2y]

[-dbpath=/path/to/cve.sqlite3]

/path/to/sqlite3 (default "$PWD/cve.sqlite3")

-last2y

Refresh NVD data in the last two years.

在整个时期fetch数据:

$ go-cve-dictionary fetchnvd -entire

在最后两年fetch数据:

$ go-cve-dictionary fetchnvd -last2y

Misc

1、HTTP代理支持

如果你的系统使用了HTTP代理,你必须指定 –http-proxy选项。

2、如何守护进程 go-cve-dictionary

使用 Systemd,Upstart 或 supervisord,daemontools…

3、如何西东更新漏洞数据。使用作业调度器 Cron(带 -last2y 选项)。

4、如何交叉编译

$ cd /path/to/your/local-git-reporsitory/vuls

$ GOOS=linux GOARCH=amd64 go build -o vuls.amd64

5、日志

日志写在 /var/log/vuls/下。

6、调试

运行 –debug, –sql-debug选项进行调试。

7、调整打开文件限制

Riak文档是很棒的选择。

Windows

使用微软Baseline安全分析器。MBSA

相关推荐

Mac电脑强制删除任何软件方法-含自启动应用

对于打工者来说,进入企业上班使用的电脑大概率是会被监控起来,比如各种流行的数据防泄漏DLP,奇安信天擎,甚至360安全卫士,这些安全软件你想卸载是非常困难的,甚至卸载后它自己又安装回来了,并且还在你不...

Linux基础知识 | 文件与目录大全讲解

1.linux文件权限与目录配置1.文件属性Linux一般将文件可存取的身份分为三个类别,分别是owner/group/others,且三种身份各read/write/execute等权限文...

文件保护不妥协:2025 年 10 款顶级加密工具推荐

数据安全无小事,2025年这10款加密工具凭借独特功能脱颖而出,从个人到企业场景全覆盖,第一款为Ping32,其余为国外英文软件。1.Ping32企业级加密核心工具,支持200+文件格...

省心省力 一个软件搞定系统维护_省心安装在哪里能找到

◆系统类似于我们居住的房间,需要经常打理才能保持清洁、高效。虽然它本身也自带一些清理和优化的工具,但借助于好用的第三方工具来执行这方面的任务,会更让人省心省力。下面笔者就为大家介绍一款集多项功能于一身...

JAVA程序员常用的几个工具类_java程序员一般用什么软件写程序

好的工具做起事来常常事半功倍,下面介绍几个开发中常用到的工具类,收藏一下,也许后面真的会用到。字符串处理:org.apache.commons.lang.StringUtilsisBlank(Char...

手工解决Windows10的若干难题_windows10系统卡顿怎么解决

【电脑报在线】很多朋友已经开始使用Win10,估计还只是测试版本的原因,使用过程中难免会出现一些问题,这里介绍解决一些解决难题的技巧。技巧1:让ProjectSpartan“重归正途”从10074...

System32文件夹千万不能删除,看完这篇你就知道为什么了

C:\Windows\System32目录是Windows操作系统的关键部分,重要的系统文件存储在该目录中。网上的一些恶作剧者可能会告诉你删除它,但你不应该尝试去操作,如果你尝试的话,我们会告诉你会发...

Windows.old 文件夹:系统备份的解析与安全删除指南

Windows.old是Windows系统升级(如Win10升Win11)或重装时,系统自动在C盘创建的备份文件夹,其核心作用是保留旧系统的文件、程序与配置,为“回退旧系统”提供保...

遇到疑难杂症?Windows 10回收站问题巧解决

回收站是Windows10的一个重要组件。然而,我们在使用过程中,可能会遇到一些问题。例如,不论回收站里有没有文件,都显示同一个图标,让人无法判别回收站的空和满的真实情况;没有了像Windows7...

卸载软件怎么彻底删掉?简单几个步骤彻底卸载,电脑小白看过来

日常工作学习生活中,我们需要在安装一些软件程序,但随着软件的更新迭代速度,很多时候我们需要重新下载安装新的程序,这时就需要将旧的一些软件程序进行卸载。但是卸载软件虽然很简单,但是很多小伙伴们表示卸载不...

用不上就删!如何完全卸载OneDrive?

作为Windows10自带的云盘,OneDrive为资料的自动备份和同步提供了方便。然而,从隐私或其他方面考虑,有些人不愿意使用OneDrive。但Windows10本身不提供直接卸载OneDri...

【Linux知识】Linux下快速删除大量文件/文件夹方法

在Linux下,如果需要快速删除大量文件或文件夹,可以使用如下方法:使用rm命令删除文件:可以使用rm命令删除文件,例如:rm-rf/path/to/directory/*这个命令会递...

清理系统不用第三方工具_清理系统垃圾用什么软件

清理优化系统一定要借助于优化工具吗?其实,手动优化系统也没有那么神秘,掌握了方法和技巧,系统清理也是一件简单和随心的事。一方面要为每一个可能产生累赘的文件找到清理的方法,另一方面要寻找能够提高工作效率...

系统小技巧:软件卸载不了?这里办法多

在正常情况下,我们都是通过软件程序组中的卸载图标,或利用控制面板中的“程序和功能”模块来卸载软件的。但有时,我们也会发现利用卸载图标无法卸载软件或者卸载图标干脆丢失找不到了,甚至控制面板中卸载软件的功...

麒麟系统无法删除文件夹_麒麟系统删除文件权限不够

删除文件夹方法例:sudorm-rf文件夹名称。删除文件方法例:sudorm-r文件名包括扩展名。如果没有权限,给文件夹加一下权限再删。加最高权限chmod775文件名加可执行权限...

取消回复欢迎 发表评论: