如果出现文件上传漏洞和命令执行类漏洞(包括命令注入、缓冲区溢出、反序列化等)都会让人担心,系统是否系统已被上传webshell甚至植入木马程序。如果依靠人工排查,一是工作量大二是需要一定程度的技术知识和业务知识才能判断什么是正常什么是异常。工作量大决定排查工作不可能由个别具有技术知识和业务知识的人来完成工作而需要其他人员参与,而如果这些没有“一定程度的技术知识和业务知识”的人员参与基本必然后导致大量的误报和漏报(主要是漏报)。总而言之,在大量设备场景中人工排查后门是很难切实有效推行的排查手段。
所谓服务器后门,其本质其与桌面系统的病毒、木马并没有很大区别。在桌面系统中我们可以轻松使用360点击查杀完成病毒木马的查杀,在服务器我们也可以使用类似工具完成后门的查杀。至于漏报误报必然还是有的但会比人工排查少,至于效率则会高得多。
WebShellKiller是深信服发布的一款webshell查杀工具,支持jsp、asp、aspx、php等脚本的检查。
下载及更详细说明见链接:http://edr.sangfor.com.cn/backdoor_detection.html
由于不是商用产品也不是开源产品,所以不能保证其后续是否持续维护更新,但基于以下两点就算不再更新该产品还是比较可靠的。
首先,从当前效果看使用https://github.com/tennc/webshell.git webshell进行测试绝大部分都是能正确判断。
其次,身为webshell注定其最终必定要生成代码调用那些固定的危险函数,所以webshell的变形是有限制的,也就是所谓的“免杀”其实有比较高的门槛。
WebShellKiller支持windows和linux,我们这里只讲linux,windows直接解压双击运行没有什么操作性就不多讲了。
另外windows平台的webshell查杀还可以使用d盾WebShellKill:http://www.d99net.net/down/WebShellKill_V2.0.9.zip
在线查杀可使用百度webdir+:https://scanner.baidu.com/#/pages/intro
我在本机操作过程如下,本机不能连接什么的只要做等效操作去替代即可
# 下载WebShellKiller wget http://edr.sangfor.com.cn/tool/WebShellKillerForLinux.tar.gz # 解压到当前目录 tar -zxf WebShellKillerForLinux.tar.gz # 查看解压结果,可以看到多出centos_32、centos_64、linux_64三个文件夹 # 如果是centos 32/redhat 32那就使用centos_32,如果是centos 64/redhat 64那就使用centos_64,如果是其他linux 64那就使用linux_64 ls # 查看当前操作系统 cat /etc/system-release # 查看当前操作系统是32位还是64位;x86是32位,x86_64或x64是64位;一般都是64位 uname -m # 我这里是centos 64所以进入centos_64 cd centos_64/wscan_app/ # 查看当前目录文件,wscan是主程序 ls # wscan默认没有可执行权限,需要加上 chmod u+x wscan # wscan从LD_LIBRARY_PATH加载so文件,需要将当前路径加到LD_LIBRARY_PATH以使wscan能找到当前目录下的so export LD_LIBRARY_PATH=`pwd`:$LD_LIBRARY_PATH # 执行扫描,../../webshell/jsp是我这里要扫描的路径,改成自己要扫描的即可 # 被列出的文件即是被认为可疑的文件,人工识别是否为web应用自己所用文件即可 ./wscan -hrf ../../webshell/jsp
操作截图如下:
clamav是开源木马病毒查杀软件,clamav依靠其数据库clamav-db进行查杀,clamav-db是持续更新的。其他安装可参考官方文档:http://www.clamav.net/documents/installing-clamav
# 配置软件仓库,centos仓库没有clamav yum install -y epel-release # 安装clamav依赖,其实如果是yum会自动安装依赖,写出来只是强调一下 yum install gcc openssl zlib -y # 安装clamav yum install -y clamav # 卸载clamav yum remove clamav*
不可联网系统可在可联网的同版本操作系统上下载好rpm包后再上传上去安装,如果gcc、openssl、zlib没安装用类似的方法安装上即可(如果有深层次依赖这操作可能有点痛苦)。
可联网机下载clamav(32位和64位都会下载根据自己操作系统选择使用即可;.i686是32位,.x86_64是64位):
# 这两个命令有时不好使,不行就换着用 # 使用yumdownloader下载clamav及其数据库clamav-db # yumdownloader可以是非root用户执行 yumdownloader clamav clamav-db # 使用yum下载clamav及其数据库clamav-db # yum 必须是root用户才能执行 yum install --downloadonly --downloaddir=. clamav clamav-db -y
不可联网机安装和卸载clamav:
# 上传后进入上传到的目录下,使用root执行安装 rpm -Uvh clamav-db*.rpm rpm -Uvh clamav*.rpm # 卸载 clamav rpm -e clamav clamav-db
前两种安装方式虽然比较方便但安装需要root且文件会散部到各系统文件夹中去,如果同期系统服务出现问题业务说是你装这个东西动了某些文件造成的,虽然这根本是无稽之谈但如果对系统不够了解你难免没有底气。手动编译一可以不使用root二可以安装到指定目录,所以可能比较麻烦(编译时没有报错也就两条命令但这基本是理想状态,首先gcc/openssl/zlib三个依赖不太可能都已装好其次还可能有其他问题)但反而是一种比较稳妥的方式。
不过由于下载病毒库需要联网所以这种方式并不能用于不能连接外网的环境中。
源码下载地址:http://www.clamav.net/downloads
# 编译,--prefix=指定安装位置必须是绝对路径形式,我这里是/usr/myapp/clamav,改成自己的 # --disable-clamav检测是否创建了clamav,直接禁用掉 ./configure --prefix=/usr/myapp/clamav --disable-clamav # 当没有error时使用make进行编译,需要几分钟 # 如果是要重新编译,make前先用make clean清空之前编译出来的文件 make # 完成后使用make install进行安装 make install # 卸载,文件夹不会删除但其下文件已全删除 make uninstall
这里以手动安装时为例,如果是yum或rpm形式安装那么默认配置和数据库都装好了,clamscan也已在环境变量中不需要此步。
# 创建存放日志和病毒库的文件夹 mkdir /usr/myapp/clamav/logs mkdir /usr/myapp/clamav/db # clamav日志文件不存在时不会自动创建只会报错退出所以先把稍后要用的日志文件创建出来 touch /usr/myapp/clamav/logs/clamd.log touch /usr/myapp/clamav/logs/freshclam.log # 如是root用户运行那么clamav会强制切换到clamav用户运行 # 也就是说如果是root用户那么clamav用户必须存在 # 如果本来就是以普通用户运行,因为编译时使用了--disable-clamav所以可以不用创建 # shell设置为/bin/false用户不能用于登录所以不会降低系统安全性 # groupadd clamav # useradd -g clamav -s /bin/false -c "Clam AntiVirus" clamav # 如果以root运行,由于系统切换到clamav用户,所以需要将日志赋给clamav用户其才能写日志 # chown clamav:clamav /usr/myapp/clamav/logs/clamd.log # chown clamav:clamav /usr/myapp/clamav/logs/freshclam.log # 启用配置文件 cd etc cp clamd.conf.sample clamd.conf cp freshclam.conf.sample freshclam.conf
编缉clamd.conf,修改以下四项(# Example表示将Example那项给注释掉,其余各项具体值根据自己路径修改):
# Example LogFile /usr/myapp/clamav/logs/clamd.log PidFile /usr/myapp/clamav/logs/clamd.pid DatabaseDirectory /usr/myapp/clamav/db
编缉freshclam.conf,修改以下四项(# Example表示将Example那项给注释掉,其余各项具体值根据自己路径修改):
# Example DatabaseDirectory /usr/myapp/clamav/db UpdateLogFile /usr/myapp/clamav/logs/freshclam.log PidFile /usr/myapp/clamav/logs/freshclam.pid
完成后最后进入bin目录使用freshclam下载/更新病毒库(如果不挂vpn,会比较慢甚至直接失败原因你懂得):
cd ../bin ./freshclam
# 进行查杀,-r表示遍历子文件夹,-l表示将发现的可疑文件记录到文件中 ./clamscan -r -l scan.log ../../webshell/jsp # 查看扫描结果 cat scan.log
记录其中的文件都是可疑文件,clamav主要是针对系统木马病毒的,我电脑没现成病毒以webshell代替,clamav只将少数webshell认为有问题。
一般杀毒软件运行于ring3级别只能查杀ring3级别的木马,rookit是运行于ring0级别的木马,所以查杀rootkit也需要ring0级杀毒程序。Rootkit Hunter正是一款专门查杀rootkit的软件。
项目官网:http://rkhunter.sourceforge.net/
离线rpm包安装类似clamav的3.1.2那样操作即可,这里只介绍yum和手动编译。
# 配置epel仓库 yum install epel-release # 安装 yum install rkhunter -y # 卸载 yum erase rkhunter -y
# 创建安装目录 mkdir rkhunter # 下载,替换成此时最新文件链接 wget https://nchc.dl.sourceforge.net/project/rkhunter/rkhunter/1.4.6/rkhunter-1.4.6.tar.gz # 解压到当前文件夹 tar -zxf rkhunter-1.4.6.tar.gz # 建入解压出的文件夹 cd rkhunter-1.4.6 # 使用installer.sh文件进行安装,--layout custom用于自定义安装路径 ./installer.sh --layout custom /usr/myapp/rkhunter --install # 卸载 ./installer.sh --layout custom /usr/myapp/rkhunter --remove
前边安装可以使用普通用户,但查杀一定要root才能执行(要想在ring0运行这是必须的)。
# 进入可执行文件所在目录 cd ../rkhunter/bin/ # 执行查杀,前面的命行都可用非root用户执行但查杀必须使用root才行 # 查杀会分几部分进行,以下命令完成一部分后需要回车才进行下一部分 ./rkhunter -c # 可以使用--skip-keypress参数跳过回车 ./rkhunter -c --skip-keypress
查杀输出六部分分别如下:
第一部分,Checking system commands,进行系统命令的检查,主要是检测系统的二进制文件,因为这些文件最容易被rootkit。显示OK字样表示正常,显示Warning表示有异常,需要引起注意,而显示“Not found”字样,一般无需理会。
第二部分,Checking for rootkits,主要检测常见的rootkit程序,显示绿色的“Not found”表示系统未感染此rootkit。
第三部分,Performing additional rootkit checks,主要是一些特殊或附加的检测,例如对rootkit文件或目录检测、对恶意软件检测以及对指定的内核模块检测。
第四部分,Checking the network/Checking the local host,主要对网络、系统端口、系统启动文件、系统用户和组配置、SSH配置、文件系统等进行检测。
第五部分,主要是对应用程序版本进行检测。(我用时好像没有这部分?)
第六部分,System checks summary,其实是上面输出的一个总结,通过这个总结,可以大概了解服务器目录的安全状态。
实际操作看第一部分误报概率比较大,主要关注第六部分输出中Rootkit checks结果即可。
参考: