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

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

cac55 2024-10-01 07:38 66 浏览 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

相关推荐

这些端口关闭后,系统会更安全!系统高危端口及其关闭方法?

在这高速发展的网络信息时代,信息安全显得非常重要,病毒、木马、非法侵入等安全事件经常发生。在我们使用电脑过程中,为了确保系统安全,以下高危端口必须关闭,防患于未然。一.Windows系统的445端口...

什么是安全组_什么是安全组件

安全组是一种虚拟防火墙,具备状态检测和数据包过滤功能,用于在云计算环境中设置网络访问控制,保护云服务器(ECS实例)、负载均衡、云数据库等资源。核心特性:虚拟防火墙:安全组控制云资源的出入站流量,决定...

针对单个网站的渗透思路(精)_网站渗透步骤

欢迎搜索公众号:白帽子左一每天分享更多黑客技能,工具及体系化视频教程(免费领首先,当我们拿到一个网站的域名或者IP的时候。最先要做的是信息收集。下面着重介绍一下信息收集模块一、信息收集——端口扫描与分...

风险突出的高危端口汇总 一网打尽 !

高危端口一直是攻击者关注的焦点,了解这些端口的风险、攻击方式及防护策略至关重要。一、文件传输类端口1.TCP20/21:FTP服务端口FTP(文件传输协议)用于文件的上传和下载。其明文传输特性使得...

指定IP地址进行远程访问服务器设置方法(windows系统)

我们有很多服务器经常受到外界网络的干扰,入侵者们通过扫描3389端口爆破密码非法进入我们的服务器,这时,我们可以配置服务器IP安全策略来限制一些IP访问,大大提高了服务器的安全。实验环境:服务端:...

服务器被黑,如何查找入侵、攻击痕迹呢?

本文出自头条号老王谈运维,转载请说明出处。引言:随着网络的越来越普及,使用的越来越频繁,木马病毒也随之侵入进来并且肆无忌惮。如何将病毒拒之门外,已成为我们普通大众必须具备的一项技能。这样,你才能使木马...

win10 telnet命令怎么查看端口是否打开

可能大家也会遇到这个问题,win10telnet命令查看端口是否打开的步骤是什么?具体方法如下:1、键盘输入快捷键WIN+R,打开运行窗口。2、输入cmd,点击确定按钮。3、弹出cmd命令行窗...

Crysis勒索病毒针对政企服务器攻击升级 腾讯安全展开全面防御

近日,腾讯安全御见威胁情报中心监测发现,Crysis勒索病毒在国内传播升级,感染数量呈上升趋势,该病毒主要通过RDP弱口令爆破传播入侵政企机构,加密重要数据,由于该病毒的加密破坏暂无法解密,被攻击后将...

Windows端口详解,这几个端口不能开!

一、血泪警告这7个端口开着电脑秒变公共厕所445端口:勒索病毒专用通道永恒之蓝病毒最爱突破口,文件共享功能成致命漏洞。企业内网还敢用用,个人电脑开着就是作死135-139端口:网络邻居成内鬼,Wind...

网络通讯笔记_网络通讯笔记怎么写

网络通讯一、NIC(网卡)二、CMD命令提示符三、服务、协议与端口常见的计算机服务常见的计算机端口与协议四、DOS命令1、基本DOS命令五、地址一、NIC(网卡)网络接口控制器又叫网络适配器也就是...

服务器远程端口是什么意思?什么是服务器远程端口?

什么是服务器远程端口?如图:IP冒号后面的数字这就是服务器的一个远程端口服务器远程端口是什么意思?服务器远程端口是服务器通信服务中的一个服务端窗口号码,取值范围是1-65535.一个服务器里面包含服务...

服务器节点到底是啥?看完这篇全明白,旧电脑也能派上大用场

不少朋友看了我用旧电脑改服务器节点的文章,后台都在问:“服务器节点到底能干啥?”其实这东西没那么神秘,今天用大白话讲讲,看完你就知道家里的旧设备藏着多大潜力。服务器节点:网络世界的“小工位”简单说...

广东通管局预警:勒索病毒威胁“关键信息基础设施”,应高度警惕

来源:澎湃新闻据广东省通信管理局网站消息,广东省通信管理局5月12日发布了《关于勒索病毒对关键信息基础设施威胁的预警通报》。通报称,5月7日,美国最大燃油运输管道商“科洛尼尔”(ColonialP...

80端口和443端口是什么?服务器端口干什么用的?

80和443端口是最常见的2个端口,都是提供网络WEB浏览服务所需要的端口,一台服务器通过不同的端口,提供不同的服务。80端口服务:HTTP(HyperTextTransportProtocol)...

从单日网络安全风险看当前网络安全状况

一、核心结论(从单日数据看全局风险)通过对2025年8月18日这一天的非法访问数据深度分析,可以清晰看到:网络环境中的安全威胁呈现高频次、多目标、全球化三大特征。单日4557次非法访问尝试,覆盖22、...

取消回复欢迎 发表评论: