后门程序如何隐藏的?
判断题:后门程序是不是程序?是不是具有可执行程序的通性??
答案自然是肯定的。打开后门的端口其实就是木马程序在机器上所开的,为的是方便该程序在不为目标机用户所知的情况下被攻击者访问/控制所用。好了,到了这里,问题被转换成了——后门程序的放置、执行、驻留、开放端口、隐藏自身信息、远远程连接的实现。
首先是放置,与病毒程序类似,后门程序也是通过操作系统漏洞、程序bug、协议安全漏洞传播、社会工程学传播为主,不过相比之下多了一个程序编写者预留。关于这一部分的知识,读者可以参考yesky上关于木马如何传播的介绍,也可参考天缘的另一则文章《安全宝典——病毒及攻击防御手册》。事实上后门程序可以看作是木马程序的一种,其他的木马程序还包括键盘/鼠标记录、隐私文件偷取等等方面的,后门则主要是专注于远程控制/访问这一部分。因此我们通常把后门程序看作是木马程序中的一个分支。从某种程度上来说,后门程序是技术含量相对较高的一类木马程序。
接下来是后门程序的执行,除了普通的木马程序常见的执行方式,后门程序可以通过挂hook的方式加载,也可以通过在某公共程序中预留接口被用户很乐意地主动加载。前者在技术上比较先进,后者则是软件作者的“原罪”。相比其他第三方程序实现的木马而言,这两类木马与系统结合地更加密切,在查找与杀除上更加困难。Hook方式可以通过挂接api,或加载dll,作为其他程序下属的线程的方式来加载;这样要杀这个子进程(线程)的后门程序则需要把主进程停止掉,而如果主进程是默认规定不允许kill掉的话就相当不方便查杀了,当然还有的做法就是运行2个子进程互相监视彼此,如果一个死了则另一个做相应处理,并把死掉的那个重新执行——如果有朋友是做服务器的,可以用类似服务界的ha方式来理解,“高可用”理论和实施真是无处不在啊。而后一类藏在程序中的后门,一般来说如果该程序不是特别重要的话,直接把该程序给删除掉,换一个同类功能的其他程序来用就行了。
不过……曾经有出现过内核级代码中出现后门的情形。遇到这样的情形一般就需要重新编译内核了,而如果内核是不开放源代码的则只能依靠商业公司的良心了。由于后门程序属于木马程序类,所以不具有病毒程序的感染二进制可执行文件的特征(但可能将其替换掉),所以一般来说去除方法都以删除该程序为主。关于后门程序的删除,可以参考各类木马程序删除的书籍文献来举一反三。
然后来看看后门程序的驻留。前面我们说过了,后门程序也是一个二进制程序,想要开启/监听/访问外部端口的时候,它必定是运行状态的。而程序的运行都是加载到系统进程之下,放置到内存中执行的。在这一部分中,随着后门程序的不断发展,目前的后门程序主要分为二大类:被动监听端口类、主动连接类。一般来说,常用的后门程序与我们运行的常规服务程序类似,都是后台运行,监听外部对某个端口的连接进而作出响应,这类后门程序从事实上讲就是一个服务程序,区别只在于不是由目标机合法用户所合法运行的而已。比如我私自在目标机上开一个ssh服务,而且想办法隐藏掉不被该机器的用户发现——那么这个原本用于远程登陆的利器,此刻就成为了我的一匹木马,而这个程序的称谓也变成了“后门软件”。另一类主动连接类的后门程序则是黑客思维的产物(打破常规思考的成果),普通情形下,由于目标机用户处于nat内,或使用了防火墙等软件,导致外部对其某些端口的访问不被允许,那么就达到了禁止该后门的目的。(如下图表示,虚线表示访问未遂)

但犹如天缘以前在简单介绍防火墙一文中所说的,大多数的防火墙因为效率及方便性考虑,一般都被管理员配置为“外紧内松”的模式——从外面发起的访问受防火墙限制,而从内部主动发起的连接请求则不受任何限制。常见的如windows xp sp2中自带的防火墙以及部分对带宽要求比较高,安全性要求不是特别高的娱乐、生活小区网络。因此,如果反向来连接,由受防火墙保护的目标机朝我们的攻击机器发起连接则就可以达到绕过防火墙通信的目的。(如下图,此次的连接目的就达到了)

接下来说说关于端口的事情,大家都知道前1024是系统默认的保护端口,在某些系统上运行这些端口是需要root权限的,而且为了和常见服务不发生冲突,则一般都把后门程序的端口设置得比较靠后一些。至于取什么端口,完全是个人爱好了,在《透视木马开发技术(上)(中)(下) 》中有详细介绍到windows下木马程序的端口自更改的实现,各位可以参考。关于后门程序的自身隐藏及远程连接的实现,我们在下面的一个小例子里面介绍。