微信订阅号二维码

本页内容二维码:

本栏目热门内容
  • Windows 系统安全基线及软...
  • CIS-CAT 配置评估工具介绍...
  • 修改audispd.conf解决审计...
  • 详细了解微软安全合规工具...
  • 从甲方角度介绍“CIS互联...
  • 2022年甲方个人网络安全运...
  • 业务导向安全策略#5员工培...
  • CIS关键安全控制措施#1总...
  • 微软安全合规工具包(SCT...
  • 安装RHEL/CentOS时如何选...
  • CIS关键安全控制措施#16应...
  • SELINUX介绍连载#3:什么...
  • CIS关键安全控制措施#17突...
  • CIS RAM风险评估方法5篇目...
  • 网络安全日志收集甲方基础...
  • SELINUX介绍连载#1:基础...
  • CIS关键安全控制措施#6访...
  • SELINUX介绍连载#2:模式...
  • 关于OpenSCAP/SCAP安全策...
  • CIS RAM#4实施防护措施、...
  • 什么是网络行为异常检测(...
  • CIS关键安全控制措施集18...
  • CIS关键安全控制措施#14安...
  • 网络攻防中的色彩象征
  • DNS子域名发掘工具两项
  • CIS RAM#1风险评估方法核...
  • 内网DNS服务器安全性能基...
  • 业务导向安全策略#1数据管...
  • CIS关键安全控制措施#8审...
  • 更多...

    Linux服务器恶意代码防范轻量级手段

    作者:Sender  来源:WaveCN.com  发布日期:2022-10-10  最后修改日期:2022-10-10

     

    在上一篇《网络安全等保加固之Linux服务器恶意代码防范》文章,笔者介绍了在Linux环境下应用ClamAV进行恶意代码防范的方法。

    但是,ClamAV始终显得有点过重,即使是每天运行一次,它在运行期间也容易和其它服务争夺内存资源。

    而如果进一步考虑到应用服务器如果不对普通用户开放使用,不存储用户通过信息系统上传的文件,那么基本上可以认为ClamAV即使只是每天扫描一次,意义也不大。

    这种情况下,我们可以考虑使用其它一些轻量级的恶意代码防范方法,比如chkrootkit和rkhunter。

    在开始介绍之前,先补充一句(包括在上一篇讲述ClamAV的文章中也忘记提及的):

    如果认为服务器已经被恶意软件侵入,要实现有效检查,至少都要切换到单用户模式启动,更好的做法是从光盘等外部介质启动。否则恶意软件有很大可能会干扰这些检测防范手段。

    首先还是简单解释一下rootkit。所谓rootkit,是指一系列的特殊的恶意程序,专门设计为尽可能长期维持潜伏在系统内,操纵主机和收集数据。

    rootkit的设计目的使得检测rootkit是否存在是相当困难的,而且如果系统被控制,要想清除rootkit就更加困难。

    大多数网管在发现服务器被安装rootkit后,都是采取格式化重装系统的方法,随后从确保是干净的备份中恢复还原数据。

    当然,并不是所有的场合都能简单地格式化重装然后数据还原。因为从备份中还原就意味着必然要丢失一些数据,这就要取决于企业组织是否能承受这些数据丢失的痛苦----这很大程度上是能免则免的。

    而且,恢复过程也不一定顺利,尤其是老旧信息系统,可能存在一些未被文档化也没有被适当备份的配置,导致数据恢复后无法正常使用。进一步地,还可能碰上老旧硬件不稳定因素使得恢复过程磕磕碰碰。

    尽量避免(因从备份恢复而产生的)大量数据写入是老旧硬件能可靠使用的其中一条规律;更不说有些软件会基于硬盘分区信息生成许可秘钥,格式化重装后这秘钥就很可能成了废物。

    啰嗦这么多,其实就是能避免重装系统还是要尽量避免。因此,我们可以尝试使用chkrootkit或者rkhunter这两个有针对性的软件,对主机的文件、系统日志进行检查,找出哪些系统文件被rootkit控制破坏了,然后对这些文件进行修复,使主机尽快恢复相对可靠的正常运行状态,然后再通过ClamAV或其它软件进行深入和全面的检查。

    首先我们来看看 chkrootkit :

    http://www.chkrootkit.org/

     

     

    chkrootkit 是一个有相当历史的恶意代码防范工具。和常规反恶意代码软件不同的是,chkrootkit只检查最重要的若干可执行文件,判断是否存在rootkit的情况。

    chkrootkit当前版本是0.55版,2021年6月11日(巴西情人节)发布。

    注意0.49及以下版本存在本地提权漏洞,不要使用。参考:

    https://www.exploit-db.com/exploits/33899

     

    chkrootkit的程序源码包括以下组成:

    • chkrootkit: BASH脚本,检查系统程序是否存在被rootkit修改的痕迹

    • ifpromisc.c: 检查网络界面是否处于“杂听”模式(该模式用于从网络上抓包)

    • chklastlog.c: 检查是否存在lastlog被删除的情况 

    • chkwtmp.c: 检查是否存在wtmp被删除的情况

    • check_wtmpx.c: 检查是否存在wtmpx被删除的情况(仅适用于Solaris操作系统)

    • chkproc.c: 检查是否存在LKM木马的痕迹

    • chkdirs.c: 检查是否存在LKM木马的痕迹

    • strings.c: 快速简单的字符串替换

    • chkutmp.c: 检查是否存在utmp被删除的情况

     

    在功能上,chkrootkit每次更新都是有针对性地加入若干比较“关键”的rootkit或后门的检查,比如0.55版本新增检测包括:

    • Umbreon Linux Rootkit

    • Kinsing.A Backdoor

    • RotaJakito Backdoor

     

    chkrootkit支持的操作系统包括Linux,Solaris,FreeBSD等。更详细的rootkit等恶意代码或后门程序的检测清单(共72类)可以到chkrootkit的网站查看。

    本文章使用的是Rocky Linux 8,但chkrootkit并不包含发行版内,也没有包含在EPEL软件仓库内。因此,需要从源代码安装。

    注意可靠的做法并不是在生产环境服务器上进行源代码编译过程,而是把源代码编译过程放在专门的开发机器上进行。完成编译后,把产生的执行文件复制到生产环境服务器上运行。

    源代码编译过程如下(需要root用户):

    首先安装C++编译环境,相关要安装的包大约如下:

    [root@rocky-vm ~]# dnf -y install gcc-c++ libstdc++-devel glibc-static glibc-devel make
    

    然后下载chkrootkit源代码安装。但写稿时发现官方下载站(pangeia.com.br)可能域名没续费,下载不了,真是大跌眼镜。

    于是转而从Fedora发行版那边找到了源代码的RPM包,通过rpmbuild来编译安装。

    [root@rocky-vm ~]# wget https://download-ib01.fedoraproject.org/pub/fedora/linux/development/rawhide/Everything/source/tree/Packages/c/chkrootkit-0.55-5.fc37.src.rpm
    [root@rocky-vm ~]# rpmbuild --rebuild chkrootkit-0.55-5.fc37.src.rpm
    

    中间一大堆编译信息忽略掉。然后安装编译后的RPM包:

    [root@rocky-vm ~]# rpm -ivh ./rpmbuild/RPMS/x86_64/chkrootkit-0.55-5.el8.x86_64.rpm 
    错误:依赖检测失败:
        /usr/bin/consolehelper 被 chkrootkit-0.55-5.el8.x86_64 需要
    

    居然还需要一个依赖,这个consolehelper程序在usermode包里面,安装即可解决依赖问题:

    [root@rocky-vm ~]# dnf install usermode
    

    完成安装后,运行检查。chkrootkit程序在很短时间内即可完成扫描和报告的过程,占用资源是少得不可能再少。

    [root@rocky-vm ~]# chkrootkit
    ROOTDIR is `/'
    Checking `amd'... not found
    Checking `basename'... not infected
    Checking `biff'... not found
    Checking `chfn'... not infected
    Checking `chsh'... not infected
    Checking `cron'... not infected
    Checking `crontab'... not infected
    

    各种输出略掉。由于输出内容有一定篇幅,可以通过输出管道,通过grep命令过滤出 INFECTED(被感染)关键字,直接查看是否存在问题。

    就如我在介绍ClamAV那篇文章那样,chkrootkit也可以放在cron作业中定时运行,并把输出重定向到特定的日志比如/var/log/chkrootkit.log。

    还可以通过系统内部邮件方式,把输出结果发送给root用户再转发给专门的审计员账户,这样就可以很方便地在系统外通过接收邮件的方式查看扫描结果,不需要登入系统。

    更具体的时候用方法,网上已经有大量的介绍,我这里就不做文抄公了。

    第二个工具是rkhunter,网址:

    http://rkhunter.sourceforge.net/

     

    rkhunter logo

     

    RootKit Hunter,即“Rootkit 猎人”,功能和chkrootkit相似,但检测的内容更多,并且会默认向/var/log/rkhunter/rkhunter.log输出日志。

    rkhunter的安装过程比chkrootkit要方便,因为rkhunter在EPEL仓库中存在。我们首先确认已经安装EPEL仓库:

    [root@rocky-vm ~]# dnf -y install epel-release
    [root@rocky-vm ~]# dnf -y install rkhunter
    

    运行检测:

    [root@rocky-vm ~]# rkhunter -c
    [ Rootkit Hunter version 1.4.6 ]
    
    
    Checking system commands...
    
    
      Performing 'strings' command checks
        Checking 'strings' command                               [ OK ]
    
    
      Performing 'shared libraries' checks
        Checking for preloading variables                        [ None found ]
        Checking for preloaded libraries                         [ None found ]
        Checking LD_LIBRARY_PATH variable                        [ Not found ]
    
    
      Performing file properties checks
        Checking for prerequisites                               [ Warning ]
        /usr/bin/awk                                             [ OK ]
        /usr/bin/basename                                        [ OK ]
        /usr/bin/bash                                            [ OK ]
        /usr/bin/cat                                             [ OK ]
        /usr/bin/chattr                                          [ OK ]
        /usr/bin/chmod                                           [ OK ]
        /usr/bin/chown                                           [ OK ]
        /usr/bin/cp                                              [ OK ]
        /usr/bin/curl                                            [ OK ]
        /usr/bin/cut                                             [ OK ]
        /usr/bin/date                                            [ OK ]
        /usr/bin/df                                              [ OK ]
        /usr/bin/diff                                            [ OK ]
        /usr/bin/dirname                                         [ OK ]
        /usr/bin/dmesg                                           [ OK ]
        /usr/bin/du                                              [ OK ]
        /usr/bin/echo                                            [ OK ]
        /usr/bin/ed                                              [ OK ]
        /usr/bin/egrep                                           [ Warning ]
        /usr/bin/env                                             [ OK ]
        /usr/bin/fgrep                                           [ Warning ]
    

    省略大量输出,最后会给出检查汇总结果:

    System checks summary
    =====================
    
    
    File properties checks...
        Required commands check failed
        Files checked: 133
        Suspect files: 2
    
    
    Rootkit checks...
        Rootkits checked : 498
        Possible rootkits: 0
    
    
    Applications checks...
        All checks skipped
    
    
    The system checks took: 2 minutes and 21 seconds
    
    
    All results have been written to the log file: /var/log/rkhunter/rkhunter.log
    
    
    One or more warnings have been found while checking the system.
    Please check the log file (/var/log/rkhunter/rkhunter.log)
    

    对于给出的2个可疑文件(WARNING),可以在日志中看到详细的说明,比如:

    [13:41:25] Warning: The command '/usr/bin/egrep' has been replaced by a script: /usr/bin/egrep: POSIX shell script, ASCII text executable
    

    这并不是被rootkit控制,而是操作系统发行版不断变化,rkhunter还要跟上变化的问题。

    另外,rkhunter的判断逻辑会对管理员手工修改过的文件标记为可疑,比如手工修改passwd或者group文件的情况,对于熟手管理员来说是很直接有效的操作,但这种操作没有产生对应命令(比如chgrp之类)的运行日志,所以有可能会被rkhunter的判断逻辑标记为可疑。

    还有是对于一些变化得稍为频繁的系统脚本,尤其是网络界面控制脚本,rkhunter有可能会跟不上发行版的变化而误判为可疑情况。

    但即使可能是误判,作为管理员也还是必须进行必要的检查。

    继续还是最后的总结:

    chkrootkit和rkhunter实际都还是被动防御手段,但由于轻量化的特点,对系统资源占用少,通过cron定时任务一天内多次运行也不会耗费多少资源,至于有无必要则取决于信息系统的具体运行使用情况。

    另外,每次更新软件后(即使是从官方补丁镜像站获得更新),也应该马上运行一次chkrootkit或者rkhunter,或者两个都运行。

    始终,要做好网络安全工作需要有偏执狂的态度,要假设所有的系统都可能存在恶意软件,没有任何一个系统是例外的。

    欢迎关注微信公众号后私信讨论文章内容!
    本栏目相关
  •  2022-03-16 Windows 系统安全基线及软件工具介绍
  •  2022-05-11 CIS-CAT 配置评估工具介绍及操作实践
  •  2022-03-17 详细了解微软安全合规工具包(SCT)
  •  2022-03-25 从甲方角度介绍“CIS互联网安全中心”
  •  2022-05-10 2022年甲方个人网络安全运维基础工具
  •  2022-06-06 业务导向甲方网络安全策略设计#5员工培训及系列总结
  •  2022-03-28 如何应用CIS互联网安全中心发布的《CIS关键安全控制措施集》之一:总览
  •  2022-03-18 微软安全合规工具包(SCT)操作实战
  •  2022-03-11 安装RHEL/CentOS时如何选择配置安全策略?
  • 返回页首