前言
在上周做的变种DDG挖矿木马-watchdogs应急响应中,攻击者使用了预加载来劫持ps
、top
等系统命令,没有提及具体的排查手段,借着这篇文章来详细解释下,并总结下Linux、Windows下权限维持中被常用的后门技术,借此来学习下。
PS: 所有技术细节都来源于网上文章,如有错误,还望大佬不吝指正!
0x01 Linux
常见的bash、脚本语言、计划任务、公钥、msf以及rootkit等就不详细介绍了,有些像suid、inetd比较久远的,虽然不常用,但是学习下也没啥坏处。
1. 预加载型动态链接库后门
linux操作系统的动态链接库在加载过程中,动态链接器会先读取LD_PRELOAD
环境变量和默认配置文件/etc/ld.so.preload
,并将读取到的动态链接库文件进行预加载,即使程序不依赖这些动态链接库,LD_PRELOAD
环境变量和/etc/ld.so.preload
配置文件中指定的动态链接库依然会被装载,因为它们的优先级比LD_LIBRARY_PATH
环境变量所定义的链接库查找路径的文件优先级要高,所以能够提前于用户调用的动态库载入。这就是为什么在watchdogs
挖矿木马中使用top
、ps
等命令无法发现挖矿进程的原因,这种后门推荐使用静态编译的ls
、ps
等命令或者busybox
进行查找。
利用LD_PRELOAD
检测
|
|
清除
|
|
利用/etc/ld.so.preload
检测
|
|
清除
|
|
2. strace后门
上面提到使用strace检测预加载型动态链接库后门,它可以跟踪任何进程的系统调用和数据,所以strace同样可以作为后门,比如用来记录ssh,su,sudo的数据。
首先找到sshd的进程PID
|
|
然后写入文件
|
|
同样的,可以通过配置用户目录下.login
配置获取ssh明文密码
|
|
检测
|
|
3. SSH 后门
OpenSSH后门
通过在openssh源码中插入恶意代码并进行重新编译来替换原有sshd文件。插入的恶意代码可以是将登录成功的用户密码发送到远程服务器或者记录到某个log文件中。在openssh目录中找到includes.h
文件。
|
|
PS: 如果记录日志放在web下,记得清理掉访问日志。
|
|
检测
|
|
清除
|
|
sshd软链接后门
在sshd服务配置运行PAM认证的前提下,PAM配置文件中控制标志为sufficient
时只要pam_rootok
模块检测uid为0即root权限即可成功认证登陆。通过软连接的方式,实质上PAM认证是通过软连接的文件名(如: /tmp/su
,/home/su
)在/etc/pam.d/
目录下寻找对应的PAM配置文件(如: /etc/pam.d/su
),任意密码登陆的核心是auth sufficient pam_rootok.so
,所以只要PAM配置文件中包含此配置即可SSH任意密码登陆,除了su中之外还有chsh、chfn同样可以。
1、服务端执行
|
|
2、客户端执行
|
|
检测
|
|
清除
|
|
wrapper后门
首先启动的是/usr/sbin/sshd,脚本执行到getpeername这里的时候,正则匹配会失败,于是执行下一句,启动/usr/bin/sshd,这是原始sshd。原始的sshd监听端口建立了tcp连接后,会fork一个子进程处理具体工作。这个子进程,没有什么检验,而是直接执行系统默认的位置的/usr/sbin/sshd,这样子控制权又回到脚本了。此时子进程标准输入输出已被重定向到套接字,getpeername能真的获取到客户端的TCP源端口,如果是19526就执行sh给个shell。
简单点就是从sshd fork出一个子进程,输入输出重定向到套接字,并对连过来的客户端端口进行了判断。
|
|
检测
|
|
清除
|
|
4. SUID后门
当一个文件所属主的x标志位s(set uid简称suid)时,且所属主为root时,当执行该文件时,其实是以root身份执行的。必要条件:
|
|
可以利用webshell进行利用
|
|
检测
|
|
清除
|
|
5. inetd服务后门
inetd是一个监听外部网络请求(就是一个socket)的系统守护进程,其实有很多比较古老的服务都是基于此守护进程的。当inetd接收到一个外部请求后,它会根据这个请求到自己的配置文件中去找到实际处理它的程序,然后再把接收到的这个socket交给那个程序去处理。所以,如果我们已经在目标系统的inetd配置文件中配置好,那么来自外部的某个socket是要执行一个可交互的shell,就获取了一个后门。
|
|
检测
|
|
清理
|
|
6. 协议后门
在一些访问控制做的比较严格的环境中,由内到外的TCP流量会被阻断掉。但是对于UDP(DNS、ICMP)相关流量通常不会拦截。
ICMP
主要原理就是利用ICMP中可控的data字段进行数据传输,具体原理请参考: 小白必看!ICMP隐蔽隧道从入门到精通
开源工具:
ICMP后门项目地址https://github.com/andreafabrizi/prism
|
|
DNS
在大多数的网络里环境中IPS/IDS或者硬件防火墙都不会监控和过滤DNS流量。主要原理就是将后门载荷隐藏在拥有PTR记录和A记录的DNS域中(也可以利用AAAA记录和IPv6地址传输后门),具体请参考:【技术分享】通过DNS传输后门来绕过杀软
开源工具:
DNS后门项目地址https://github.com/DamonMohammadbagher/NativePayload_DNS
|
|
协议后门检测
|
|
清理
|
|
7. vim后门
适用于安装了vim且安装了python扩展(绝大版本默认安装)的linux系统。
|
|
具体详情请参考:Weapons of Text Destruction
恶意脚本dir.py
的内容可以是任何功能的后门,比如:
|
|
检测
|
|
清除
|
|
8. PAM后门
PAM使用配置 /etc/pam.d/
下的文件来管理认证方式,应用程序调用相应的配置文件,以加载动态库的形式调用 /lib/security
下的模块。PAM配置可分为四个参数: 模块类型、控制标记、模块路径、模块参数,例如: session required pam_selinux.so open
上面提到的sshd软链接后门利用的PAM机制达到任意密码登录,还有一种方式是键盘记录。原理主要是通过pam_unix_auth.c
打补丁的方式潜入到正常的pam模块中,以此来记录管理员的帐号密码。
利用步骤:
复制patch到源代码目录 >>> 打patch >>> 编译 >>> 将生成的pam_uninx.so文件覆盖到/lib/secruity/pam_unix.so下 >>> 修改文件属性 >>> 建立密码保存文件,并设置好相关的权限 >>> 清理日志 >>> ok
|
|
检测
|
|
清除
|
|
9. 进程注入
从技术上说,获取其它的进程并修改它一般是通过操作系统提供的调试接口来实现的,在linux中具有调试功能的工具有ptrace、Gdb、radare2、strace等,这些工具都是使用ptrace这个系统调用来提供服务的。ptrace系统调用允许一个进程去调试另外一个进程。
具体原理参考:
GitHub存在大量开源工具,比如: linux-inject,主要原理是使用ptrace向进程中注入恶意so文件
|
|
检测
|
|
清除
|
|
10. Rootkit
rootkit分为内核级和应用级两种。(这方面不太了解,后续详细学习下,就不做详细介绍了…)
内核级的rootkit很多,比如:Diamorphine
应用级的rootkit也很多,比如:Mafix
Mafix是一款常用的轻量应用级别Rootkits,是通过伪造ssh协议漏洞实现远程登陆的特点是配置简单并可以自定义验证密码和端口号。应用级rookit,主要替换ls、ps、netstat命令来隐藏文件(利用/proc?)
检测
|
|
PS: 事件排查结束后,能重装就重装吧,别折腾清理什么后门了。说不定就被你没留意的一个小细节或者不知道的一个特性给坑了。
篇幅有点长,下一篇继续学习下Windows相关的。
参考文章
https://www.secpulse.com/archives/69093.html
https://www.freebuf.com/column/162604.html
https://linuxtools-rst.readthedocs.io/zh_CN/latest/tool/strace.html
http://hu3sky.ooo/2018/09/06/%E5%90%8E%E9%97%A8/
http://blackwolfsec.cc/2017/03/24/Linux_ssh_backdoor/
https://pythonpig.github.io/2018/06/26/suid%E5%90%8E%E9%97%A8(suid-shell)/
https://www.secpulse.com/archives/59674.html
https://zhuanlan.zhihu.com/p/41154036
https://www.anquanke.com/post/id/85431
https://kevien.github.io/2018/01/28/linux%E8%BF%9B%E7%A8%8B%E6%B3%A8%E5%85%A5/
https://phyb0x.github.io/2018/10/23/linux%E6%9D%83%E9%99%90%E7%BB%B4%E6%8C%81-%E5%90%8E%E9%97%A8/