Cvechecker
![]() 在此通知移除之前,请勿遵循此处的说明。 |
cvechecker 是一个有用的工具,可以帮助比较您的发行版中安装的软件包与通用漏洞披露 (CVE)。它不是一个万无一失的方法,您很可能会遇到许多误报(漏洞已通过修订版本修复,但该工具无法检测到修订版本本身),但它仍然胜过没有。其想法是自动化安全检查。但是,显然,这不应该(也绝不能)是检查安全的唯一方法。通过适当的报告机制,当发布可能与您的系统匹配的新 CVE 时,您会立即收到警告。然后,您可以采取适当的步骤(确认报告、验证事件、修复软件包或标记为误报)。以下是步骤
- 拉取最新的 CVE 条目以及软件/版本检测规则(仅限管理任务)
- 生成要扫描的文件列表
- 收集已安装的软件/版本信息
- 输出可能影响您系统的 CVE 条目
- 生成报告,告知您有关 CVE 条目的信息
安装
cvechecker 在 edge main 仓库中可用。如果您正在运行 Alpine 的稳定版本,您可以按以下方式从 edge 添加软件包
apk install cvechecker
使用 sqlite 进行配置
CVEChecker 的安装脚本会创建一个用户和一个组,都名为 “cvechecker”,以便拥有一个具有最低权限的用户来运行 cvechecker。在此文件夹中,cvechecker 将根据 cvechecker.conf 创建数据库(我们使用 sqlite3)。但也支持 mysql。如果您想与运行 Alpine 的多个路由器/服务器共享一个 DB,这将非常有用)
在使用 cvechecker 之前,您应该配置 cvechecker 以使用 sqlite,然后使用 cve 条目填充 DB。根据我们的设置,/etc/cvechecker.conf 看起来像
# Generic settings # dbtype = "sqlite"; #dbtype="mysql"; cvecache = "/var/cvechecker/cache"; datadir = "/usr/share/cvechecker"; stringcmd = "/usr/bin/strings -n 3 '@file@'"; version_url = "https://raw.github.com/sjvermeu/cvechecker/master/versions.dat"; #userkey = "servertag"; # # For Sqlite3 # sqlite3: { localdb = "/var/cvechecker/local"; globaldb = "/var/cvechecker/global.db"; }; # # For MySQL # mysql: { dbname = "cvechecker"; dbuser = "cvechecker"; dbpass = "cvecheckpass"; dbhost = "$IPADDRESS_OF_MYSQL_SERVER"; };
现在,您可以使用以下命令初始化 DB
cvechecker -i
DB 已准备就绪。现在,我们应该配置 cvechecker 以使用 mysql,然后使用 cve 条目填充 DB。
使用 MySQL 进行配置
MySQL 是 cvechecker 能够使用的另一个后端。如果您在网络中安装了多个 cvechecker,这将非常有用。这样,您就只有一个需要更新的 CVE “存储库”。
apk add mysql mysql-client rc-service mysql setup rc-service mysql start && rc-update add mysql default /usr/bin/mysqladmin -u root password 'new-password'
为 cvechecker 创建一个数据库用户
mysql -u root -p mysql>CREATE DATABASE cvechecker; mysql>CREATE USER 'cvechecker'@'%' IDENTIFIED BY 'cvecheckpass'; mysql>GRANT ALL ON cvechecker.* TO 'cvechecker'@'localhost'; mysql>GRANT ALL ON cvechecker.* TO 'cvechecker'@'%'; mysql>FLUSH PRIVILEGES;
我设置了 %,因为 DB 和用户应该允许来自其他主机的访问。您可以限制此设置,仅允许您的域。
您有两种在 DB 中创建表的方法
通过 .sql 脚本
以 cvechecker 身份登录 mysql
mysql -D cvechecker -u cvechecker -p mysql>source /usr/share/cvechecker/mysql_cvechecker.sql;
DB 已准备就绪。现在,我们应该配置 cvechecker 以使用 mysql,然后使用 cve 条目填充 DB。
通过 cvechecker
在您配置 DB 后,您可以使用以下命令创建表
cvechecker -i
但是为了使其工作,您必须在 cvechecker.conf 中配置 DB 设置。根据我们的设置,/etc/cvechecker.conf 看起来像
# Generic settings # #dbtype = "sqlite"; dbtype="mysql"; cvecache = "/var/cvechecker/cache"; datadir = "/usr/share/cvechecker"; stringcmd = "/usr/bin/strings -n 3 '@file@'"; version_url = "https://raw.github.com/sjvermeu/cvechecker/master/versions.dat"; #userkey = "servertag"; # # For Sqlite3 # sqlite3: { localdb = "/var/cvechecker/local"; globaldb = "/var/cvechecker/global.db"; }; # # For MySQL # mysql: { dbname = "cvechecker"; dbuser = "cvechecker"; dbpass = "cvecheckpass"; dbhost = "$IPADDRESS_OF_MYSQL_SERVER"; };
注意: 运行 cvechecker -i(初始化数据库)会删除 DB 中的所有条目。
使用 CVEChecker
在创建数据库后,您必须从互联网上拉取必要的数据
pullcves pull
根据手册,“这将花费很长时间,请耐心等待(将超过 50 万个 CVE 条目加载到数据库中是一项耗时的活动 - 但只需一次)。未来的拉取不会花费这么多时间,因为它们不会重新下载所有往年的 CVE 条目(除非您要求这样做)。”
(如果您位于代理服务器后面,您应该从环境变量或使用 wget.rc 设置它)
将此任务添加到 crontab 中可能很有用,也许每天一次。成为 cvecheker 用户并运行 “crontab -e”。插入以下内容以每天凌晨 5:00 运行 pullcves
* 5 * * * /usr/bin/pullcves pull
现在,创建一个可执行文件列表以及 /proc/version,并允许 cvechecker 验证您的 Linux 内核和已安装软件是否存在内核相关的 CVE 条目。
find / -type f -perm -o+x > /tmp/cvecheck.tmp cat /proc/version >> /tmp/cvecheck.tmp
现在,在 /tmp/cvecheck.tmp 中,您将拥有系统所有二进制文件及其版本。使用以下命令检查是否存在 cve
cvechecker -b /tmp/cvecheck.tmp
如果需要,您可以创建包含条目的报告(如果找到它们)
cvechecker -r
简单的脚本,可帮助自动执行此操作。复制并粘贴它,将其另存为 run_cvecheck.sh 并授予其执行权限。
#!/bin/sh tempfile=/tmp/cvecheck.tmp EMAILADMIN=<%EMAIL ADDRESS USED FOR THIS TASK%> find / -type f -perm -o+x > $tempfile cat /proc/version >> $tempfile cvechecker -b $tempfile > /dev/null 2>&1 # Run cvechecker against the software list cvechecker -r > $tempfile > /dev/null 2>&1 # Create a report if [ -s "$tempfile" ] ; then # If exists and non-zero, send it via email mail $EMAILADMIN -s "CVE Checker" < $tempfile fi ; rm $tempfile
为了通过电子邮件发送最后几行,您应该配置一个 smtp 服务器。ssmtp 是广泛使用的。将此脚本作为 cronjob 运行可能是一个好主意。
所以,您可以像对 pullcves 所做的那样:成为 cvecheker 用户并运行 “crontab -e”。
* 6 * * * /var/cvechecker/run_cvecheck.sh
创建报告
CVEChecker 以 CSV 格式生成报告。从这个 CSV 生成 html 可能会很好。
这是一个示例脚本,它使用 csv2xml 和 cvereport.xsl(cvechecker 附带的两个脚本),允许从 csv 开始生成 html 文件。
#!/bin/sh tempfile=/tmp/cvecheck.tmp EMAILADMIN=root@localhost WEBDIR=/var/www/localhost/htdocs/cvechecker/ CONFFILE=/etc/cvechecker.conf DATADIR=$(awk -F'=' '/^datadir/ {print $2}' ${CONFFILE} | awk -F'"' '{print $2}'); find / -type f -perm -o+x > $tempfile cat /proc/version >> $tempfile cvechecker -b $tempfile > /dev/null 2>&1 # Run cvechecker against the software list if [ -s "$tempfile" ] ; then # If exists and non-zero, send it via email mail $EMAILADMIN -s "CVE Checker" < $tempfile fi ; # Create Report. # FYI: acknowledgements.xml is an hard-coded file name. cvechecker -rC > $WEBDIR/report.csv awk -F, -f ${DATADIR}/csv2xml.awk $WEBDIR/report.csv > ${DATADIR}/acknowledgements.xml xsltproc ${DATADIR}/cvereport.xsl $DATADIR/acknowledgements.xml > ${WEBDIR}/report.html printf "done\n".
注意:生成的 html 非常难看,因为 cvereport.xsl 硬编码了 css 文件,该文件存储在 /usr/share/cvechecker 目录中。文件名为 report.css。您可以将 report.css 文件复制到 $WEBDIR 中,以便获得更美观的 html 文件。