网络安全等保加固之Linux服务器恶意代码防范

作者:Sender Su  来源:原创内容  发布日期:2022-09-27  最后修改日期:2022-10-04

笔者最近更新放缓了,原因是各种折腾等保加固,各种应对攻防演练,各种过程记录和复盘(画外音:你单兵作战复个什么)......

言归正传。等保测评要求必须在服务器上部署恶意代码防范措施,简单说就是要安装防病毒软件。

笔者:国际认证信息系统审计师、软考系统分析师

笔者的工作环境一直是Linux和Windows混合的环境,实际主力都在Linux环境,所以首先就要考虑如何在Linux环境下实现恶意代码防范。

如果上网搜索,基本都可以找到关于如何在Linux环境下安装ClamAV这个免费杀毒软件的教程。

安装确实简单,只需要两条命令,首先安装EPEL仓库,然后安装ClamAV即可,以下以Rocky Linux 8为例:

[root@rocky-vm /]# dnf install epel-release
[root@rocky-vm /]# dnf install clamav clamav-update clamd

总共会安装:clamav clamav-data clamav-filesystem clamav-lib libprelude clamav-update clamd等7个软件包。安装软件包后,如果操作系统启用了SELinux,需要设置允许扫描的参数,否则SELinux会拦截ClamAV的执行:

[root@rocky-vm /]# setsebool -P antivirus_can_scan_system on

顺带一提,可以通过getsebool命令查看设置,比如:

[root@rocky-vm /]# getsebool -a | grep scan
antivirus_can_scan_system --> on

然后就可以对指定目录进行扫描,并输出扫描结果:

[root@rocky-vm /]# clamscan /home
LibClamAV Warning: **************************************************
LibClamAV Warning: *** The virus database is older than 7 days! ***
LibClamAV Warning: *** Please update it as soon as possible. ***
LibClamAV Warning: **************************************************
----------- SCAN SUMMARY -----------
Known viruses: 8624196
Engine version: 0.103.7
Scanned directories: 1
Scanned files: 0
Infected files: 0
Data scanned: 0.00 MB
Data read: 0.00 MB (ratio 0.00:1)
Time: 43.047 sec (0 m 43 s)
Start Date: 2022:09:26 23:01:32
End Date: 2022:09:26 23:02:15

从上面的输出会发现需要更新病毒数据库。很显然,ClamAV作为一个传统的基于特征扫描的杀毒软件,需要更新病毒数据库才能应对新出现的病毒。该命令是freshclam:

[root@rocky-vm /]# freshclam --show-progress
ClamAV update process started at Mon Sep 26 23:38:08 2022
daily database available for update (local version: 26614, remote version: 26670)
Current database is 56 versions behind.
Downloading database patch # 26615...
Time:    2.8s, ETA:    0.0s [========================>]   26.34KiB/26.34KiB
Downloading database patch # 26616...
Update process terminated [==============>          ]   20.93KiB/34.53KiB

这也太慢了,毅然一个^C停掉。这个更新操作,显然不应该靠手工去进行。因此,我们设置一个定时更新任务,在/etc/cron.d下面创建定时每天早上4点执行的任务项目clamav-update:

[root@rocky-vm /]# cat /etc/cron.d/clamav-update
# Run the clamav daily update job
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
00 04 * * * root /usr/bin/freshclam > /dev/null

不过,在实践中发现,由于ClamAV的特征库升级服务器实在是慢,升级进程还会在后台挂起,进而导致新一天的定时升级任务无法正常启动,特征库升级持续失败。因此,在定时更新的任务项目运行之前,还要先杀掉可能已经存在的升级进程,于是在/etc/cron.d下面创建定时每天早上3点55分执行的任务项目clamav-kill:

[root@rocky-vm /]# cat /etc/cron.d/clamav-kill
# KILL the freshclam program
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
55 03 * * * root /opt/clamav-kill.sh

然后创建杀升级进程的脚本/opt/clamav-kill.sh:

[root@rocky-vm /]# cat /opt/clamav-kill.sh
#!/bin/sh
/bin/ps ax | /bin/grep freshclam | /bin/grep -v grep | /bin/awk '{print $1}' | /bin/xargs /bin/kill -9

注意要设置运行属性:

[root@rocky-vm /]# chmod u+x /opt/clamav-kill.sh 

3点55分杀掉挂起的更新进程,4点开始新的一次更新,就这样。

回到扫描杀毒这件事本身。和特征库升级一样的是,仅靠手工运行扫描杀毒是没有意义的。那么,如果要相对有效地发挥ClamAV的作用,那就要设置它每天定时进行一次全盘扫描。

于是,我们需要设置定时任务,在/etc/cron.d目录中加入定时任务项目clamav-dailyscan,定义每日的凌晨2点进行扫描,文件内容如下:

[root@rocky-vm /]# cat /etc/cron.d/clamav-dailyscan
# Run the clamav daily scan jobs
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
00 02 * * * root /opt/dailyscan.sh

预估2个小时内能扫描完指定的文件夹,4点开始的特征库更新任务不会对扫描产生影响。

编写扫描脚本,这个脚本会把扫描发现有问题的文件情况记录到日志,并通过邮件发送给管理员ROOT用户方便查阅。注意脚本中的指定扫描位置参数定义了 /home /var /opt /tmp 四个笔者认为会比较频繁被修改的目录或者是外来程序、文件会存放的目录,如有需要也可以自行修改。脚本存放在/opt目录就可以了:

[root@rocky-vm /]# cat /opt/clamav-dailyscan.sh
#!/bin/bash
CLAMSCANTMP=`mktemp`
/usr/bin/clamscan --infected -r -l /var/log/clamav/clamscan.log /home /var /opt /tmp>$CLAMSCANTMP
[ ! -z "$(/usr/bin/grep FOUND $CLAMSCANTMP)" ] && /usr/bin/grep FOUND $CLAMSCANTMP | /usr/bin/mail -s "Virus Found !" root&&
/usr/bin/rm -f $CLAMSCANTMP

也是不忘记设置运行属性:

[root@rocky-vm /]# chmod a+x /opt/clamav-dailyscan.sh 

这样就实现了每天定时扫描了。

ClamAV也提供了后台扫描功能,可以通过systemctl启用clamd@scan服务,并以clamdscan程序去调用运行查杀任务。但该程序作为守护进程运行的目的只是可以随时调用进行查杀,节省启动加载特征库的时间而已,并不是实时对系统的读写进行监控检查,对于专用于中间件或数据库运行的Linux服务器而言并无启动这个服务的必要。需要时可通过clamonacc命令实现。

最后小结一下,我们总共创建了三个定时任务项目:

[root@rocky-vm /]# ll /etc/cron.d/clam*
总用量 20
-rw-r--r--. 1 root root 142 9月  26 23:46 clamav-dailyscan
-rw-r--r--. 1 root root 130 9月  27 00:41 clamav-kill
-rw-r--r--. 1 root root 146 9月  27 00:40 clamav-update

两个脚本:

[root@rocky-vm /]# ll /opt/clam*
总用量 8
-rwxr-xr-x. 1 root root 286 9月  27 00:44 clamav-dailyscan.sh
-rwxr--r--. 1 root root 115 9月  27 00:42 clamav-kill.sh
本栏目相关
  •  2024-11-13 挖深网络安全的兔子洞:CPU 微码补丁管理
  •  2024-11-10 安全加固基准搅合国产操作系统上下游关系
  •  2022-05-11 CIS-CAT 配置评估工具介绍及操作实践
  •  2022-03-16 Windows 系统安全基线及软件工具介绍
  •  2022-08-28 网络攻防中的色彩象征
  •  2022-03-11 安装RHEL/CentOS时如何选择配置安全策略?
  •  2023-02-27 注意:TightVNC 2.8.75 释出,修补 zlib 漏洞 CVE-2022-37434
  •  2022-03-25 从甲方角度介绍“CIS互联网安全中心”
  •  2022-03-17 详细了解微软安全合规工具包(SCT)
  • 本站微信订阅号:

    微信订阅号二维码

    本页网址二维码: