面向下一代远程控制木马的设计| 葉孒.关注网络
*****************************************************************
*? ? 此连载文章,为作者原创
*? ? 所谈论的技术和思路,请大家不要尝试和滥用
*? ? 所谓攻防技术相互促进,互相学习借鉴
*? ? 文中提到诸多思路,应该比较邪恶,若各位从中受到启发,写出什么恶意的新代码并进行恶意行为,与作者无关
****************************************************************
? ? 98年的时候,{dy}次看BO2K代码的时候,体会到远程控制技术将是整个信息安全领域的一个重要支撑技术。再看十几年来
,木马的设计、免杀、功能、查杀、拦截、反制等等技术不断推出又不断演进,伴随着漏洞挖掘和利用,木马脱胎于病毒又不同于病毒。历史的车轮是滚来滚去的,说实话,十年来木马设计本身没有大的突破,无非是各种ROOTKIT加入而已,只要拿到木马完整样本,(即使无源码),反木马技术找木马的命门—SO EASY。所谓你消我长,魔道有异。木马要走出新路,必须在设计理念上有新想法。
? ? 在下抛个破砖,以我十几年来的体会和积累,说说我自己对下一代木马的设计理念。大家一起交流。其实,设计一个下一代木马,也是为安全提供了新的靶子和研究对象,要不然是不是很无聊:)
? ? 言归正传,就此问题,我想讲3-5个方面的考虑。
? ? 今天先说{dy}点:密码,特别是公钥密码,将铸成下一代木马的通信基石。
? ? As we all 知道,早期木马是没有加密的,特别是通信过程都是明文传输。其实,现阶段不少木马也是明文传输的,我做过简单的统计,现在1/3的木马是明文通信,1/3是简单线性加密,1/3是分组密码加密。
? ? 通信是明文,是非常恐怖的,也是非常不安全的。试想,只要在C段内一个交换机下,该木马所有的通信数据一览无余,通过简单的分析即可澄清木马的协议,这样很方便的进行监控、监管,甚至反制(方法很多,可以进行中间人欺骗,也可以直接劫持等,有机会专门再讲),最起码,能够轻松的还原木马的所有行文、上传、下载等。恐怖吗?
? ? 简单的线性加密有很多,最常见的是各种XOR、XOR+FOR循环,也有才用一些替换+置换的早期密码,如凯撒密码等等。这种东西,二战的时候厉害,现在SO EASY,用简单的字符表统计,即可xx。这种简单的线性加密,实现起来简单,代码量很小,貌似加了一道屏障。但是,密码强度太低,破译太简单。
? ? 分组密码,采用的越来越多,现在用的多的是DES、AES、TWOFISH、IDEA等,PI使用的CAMELA,这些分组加密算法有一定的加密强度,密钥从64到256BITE不等。
? ? 用分组密码就好了吗???
? ? 我认为不是。{dy},木马基本上密码是锁死在程序里面的。一个控制端下的所有植入端,都用一样的,当然有些木马做到了不同的植入端采用不同的密钥。但是密码锁死在程序中是肯定的,这样的话,通过逆向,OD足够。密码就无处遁形,于是中间人欺骗的干活。。。。
? ? 第二,密码锁死以后,不能替换,不能更替,没有认证机制。于是谁都可以伪造密码,甚至伪造主控端。这样,你辛辛苦苦的木马资源就成了别的东西了。
? ? 因此,我断言:下一代木马必须考虑让公钥木马加入其中。也就是说,下一代木马本身将是一个自主体系的安全系统,有CA来进行密钥管理和分发,大家都在一个大的公钥体系之内(如4096位的RSA体系),每一个植入端都有自己的私钥。这样所有的数据都可以进行认证,并且不可抵赖。即使得到了一个被控端,也无法xx整个木马系统。
? ? 呵呵,很像银行系统(只是没有U盾)。没错,下一代木马系统本身就应该是这样自主体系的。并且,应加入群签名机制,设立多层体系的管理机制,一次一密的协商通信密钥。
? ? 这样我想还可以实现,多对多的控制。也就是说,在运行的情况下,用同一个木马系统,多个用户可以同时控制所有的木马资源。当然,控制的过程要有权限的设定,对不同的控制者来说是不一样的。
? ? 谈了密码的问题,也就是说木马通信加密的问题,下一代远控应该采用公钥+私钥的体系结构。
第二方面,谈谈下一代木马的特征问题。
? ? 所谓特征,分静态特征和动态特征两种。下一代木马应具备颇高的特征异变机制,静非纯静,动非纯动,静动视变,互相联系。
? ? 木马静态特征,也就是木马本体在非执行态的特征,主要是木马存储的特征,更直白的说,就是木马在计算机中所有存贮信息(包括木马文件本身)的特征的总和。从木马启动来看,包括注册表、服务项、替换的系统文件、修改的系统SYS等。从木马文件来看,包括木马文件的静态隐藏、文件的自动变形等等。
? ?这些年来,木马静态特征的隐藏方面教十年前还是有进步的,这里我想谈几个新的想法:
? ?(1)木马文件体从磁盘体走向芯片内部,木马不依赖注册表、服务项等方式启动。
? ?(2)木马静态体本身是一个多变的壳,拥有对抗沙盒的能力,木马功能实体在静态时不在本机存贮,需要什么功能就从远程有信任的下载何种功能代码。
? ? first,操作系统中可以存贮的地方很多,直观的印象是以文件的形成存在于磁盘中。其实,基于FILE/DISK的ROOTKIT很容易实现驱动层的隐藏。实现的思路有几类:一类是HOOK系统FILE处理函数,过滤掉自己的木马文件,使之“隐藏”。另一类是直接在DISK上创建一个隐蔽的分区,当然这个分区可以是基于标准格式的(如FAT32、NTFS)等,在隐蔽分区中写入木马程序;还可以自定义个分区,且分区的文件格式也是自定义的,这种可以更好的隐蔽,但是需要自己写程序协调DISK镜像和FILE的各类关系,编程方面需要较强的技巧。
??下一代木马,一方面应该在磁盘体内进行好的隐蔽,另一方面要走向芯片。这就是所谓的芯片隐藏,或CHIPKIT。已公布实现的思路有两类,一类是隐藏于BIOS(包括主板BIOS和PCI的BIOS,如PCI显卡、声卡等),另一类是通过VT技术,让一部分HOOK代码跑在CPU的Ring-1层,然后再相应的磁盘或BIOS中写入更底层的程序。值得注意的是,埋藏在芯片中的木马,不需要担心其启动的问题,不需要注册表等简陋的其中方式,无须替换系统文件。
??BIOS级别的恶意代码,在网上其实已经存在,并且被N多人研究过。其实质,是利用WIndows系统的INT13中断,在系统执行前调用刷写在BIOS中的代码,先于系统执行,然后把执行权交给Windows的loader。VT技术也开始逐步成熟,不过真正意义上给予VT的恶意代码发现极少,我想肯定有,但是范围极小。利用CPU支持的VMM指令集,可以设计小型的OS,让这个OS跑在CPU层面,所以说是Ring-1,可以调试、修改任何Windows内部的东西。??BIOS+VT,我想将成为下一步木马隐藏的{dj0}技术。所谓会者不难,主要是思路吧。不晓得我这个想法公布以后,会不会造成一批新型木马的诞生。。。。本人只站在技术的角度进行分析,希望大家别用在邪恶的地方。
? ? 说实话,自动变形的修改木马的静态特征码,十几年前的病毒就具备这样的功能。不过将其应用在木马中,也是近5年的事情。下一代木马,自动变形是需要的,而且更“疯狂”。一般意义上的自动变形,是木马本体维护一个加有随机数发生器的一个加密算法,按照作者的要求,每隔一段时间或其他情况下,将木马静态本体进行一次加密,因为每次的KEY不一样,所以每次本体中的静态特征都变化。
??这种意义层面的自动变形,无法避免沙盒分析,只要木马执行之后,在内存中始终是完整的。
??ANTI-SANBOX技术,其实是一个很好玩的东西,怎么反沙盒?关键还是思路的问题。典型的反沙盒,是增加沙盒的难度,不让木马体有效的执行,但是对于xx内存分析–则无法躲避。难度是要增加的,同时要想办法让木马体在内存中也不断的变化,这才是关键。
??让木马在内存中变异,方法也有很多。提几个思路吧,别拿去邪恶。
??一个典型想法是设计“分段加密解密执行,密钥在畸形的地方存储”。分段加密解密执行,就是木马在执行时,在内存中用到什么内容就解密什么内容,同时将无用的东西去除或加密,始终保持内存中只有当前在用的模块,并且这个模块是不断被加密、解密的。不同的时刻都不一样。并且,密钥特别关键,密钥若得到,就让程序陷入了沙盒分析的汪洋大海中。密钥应该存储在本地畸形的地方,比如沙盒程序无法顺利访问的地方–如自定义的disk空间、BIOS、MBR等。当然,密钥也可以存储在远处,前文提到下一代木马将是公钥体制的,那么木马本体的内容,可以按照插件或内存分段的形式,向远处申请(申请的过程是加密认证的)。这样的话,木马体在内存中始终是不完整的,并且是不断加密的。这样的木马,现有的手段无法分析,—当然用社会工程的方法除外。。。
? ?go on,谈谈木马的通信协作问题。
? ?我们知道,早期的木马是C-S结构的,Client是控制端,Server是被控制端。Server本身开启port,等待client连接,Client需要准确的知晓被控端的IP并发起连接connet, Server于是accept连接。于是通信渠道建立。
? ?之后的木马,普遍采用端口反弹模式。虽然也是C_S结构,但是 Client是被控端,Server是控制端。一般需要在一个公共的资源上面,表面server的IP地址,比如动态域名、网页空间、FTP空间,甚至EMAIL、BLOG、TWITTER内容等等。被控端从中,解析出Server–也就是主控端的IP,进而主动CONNET。这样,被控端即使在内网中,也能成功连接出来。
? ?细而观之,端口反弹木马,被控端的程序体内,必须封装进去serverIP的信息,一般是动态域名等。凡事经不起推敲,在逆向分析面前,ServerIP往往一览无余,尤其是Cilent端容易被获得,通过简单的虚拟执行,即可准确获得控制端的IP信息。这样,控制者无所遁形。
? ?所以,反查部门或人员,很容易即可准确定位木马的控制者。
? ?大家还敢用木马吗?
? ?有人说,可以“多跳”。是的,可以用VPN、虚拟机、跳板肉机,增加主控端被显形的难度。但是,这些,对于专业的分析者而言,形同虚设。
? ?我认为下一代木马,将不再是C_S结构的木马。木马将广泛采用P2P协议,或者自己定义的类似于P2P协议的模式。所有的木马被控者和主控者,在安全算法的支持下,构成一个互相平等,相互依存的大型P2P网络。其中,每一个节点都可以成为控制端,也同时是可以被别人控制,是否被控制,取决于该木马网络的管理协议。这个协议应该很复杂,我觉得可以再SNMP协议基础上进行修改完善。此外,ANYCAST协议也是可以被考虑进来的,这个协议是当前DNS系统实现“不同地域多个主机,实现同一IP”的协议。下一代木马必将充分吸收此协议的精华,通过维护一个较庞大的可信的P2P网络,让IP地址变幻莫测。
? ?还有木马跨平台的问题。
??一般意义的跨平台,比如Windows各个平台之间的垮接,很EASY。基本上标准程序编译后问题不大,有ROOTKIT的部分,通过事先的GetVersionEX函数,即可得到WINDOWS的子版本,于是不同的版本区别对待就是了。
? ?我这里说的跨平台,是指所有木马可能生存平台上的垮接。现实中,一部分网马已经实现了多种系统、多种平台下的垮接,如SPY系列的新PHP网马等。那么,实现一个能垮接“WINDOWS+*NIX+各手机系统+网络设备”的马,是xx可能的。
? ?有两种跨平台的思路:
? ?一种是基于源代码的,利用不同操作系统对同一类源代码的解析支持。比如,基于脚本语言的木马。这种木马容易实现,但是源代码本身难以进行隐藏,即使可以进行诸多变异和加密,但虚拟执行以后也无所遁形。
? ?另一种是“源代码施放”。也就是说在源代码中封装N多不同针对不同系统的木马小体,先技术源代码执行起来,再判断当前系统版本和软件环境,再施放不同的木马执行小体。
? ?说实话,木马本身的话,有执行权限即可。木马的核心,在于通信协议。只要不同的木马小体采用同样的通信协议进行编制,就OK了。
? ?关于下一代木马的设计,说的差不多了。{zh0}总结一下。
? ?整个木马系统由主控端群、被控端群和服务中心三部分组成。每一个主控端都可实现对所有被控端的安全控守,所有主控端、被控端都满足PKI体系,服务中心是PKI体系的密钥管理和安全管理中心,并且所有主控端、被控端一起构成一个互相连通互为依托的僵尸型网络,可达成一体化联合攻防效能。
? ?服务中心:生成并分发所有的公钥、私钥,为所有主控端、被控端管理维护公钥信息供其查询。维护主控端群和被控端群组建的僵尸型木马网络,为被控端回联、信息回传提供解析向导,维护整个网络的控守,也发布各种复杂的联合攻防指令。
? ? 主控端群:每一个主控端都将自己的私钥,每一个主控端都可以控制所有被控端,主控与被控之间的通信采用定期一次一密方式,每次都用RSA算法协商一次通信密钥,然后用分组算法进行分组数据加密传输。主控端控制任一个被控端,都要经过服务中心的许可,在服务中心的调配下进行。
? ? 被控端群:在服务中心的调配下,每一个被控端都可受控于任一主控端,进行直接的控制取情。被控端本身进行自动文件搜集等行为,他们之间也进行必要的信息均衡,一个被控端的信息可以从另一个被控端那取得。从被控端传出的任何文件都经过自身的数字签名。必要时在服务中心管理下可以互相控制,达成连锁控制链条。被控端每隔一段时间向服务中心回报当前被控情况,也接收服务中心的各种联合攻防指令,如DDOS攻击等。

*********************************
*OVer
*欢迎一起讨论
*qszzsq
********************************
原文地址:

欢迎转载,但请注明:转载自

本文链接地址:

没有相关文章!.

郑重声明:资讯 【面向下一代远程控制木马的设计| 葉孒.关注网络】由 发布,版权归原作者及其所在单位,其原创性以及文中陈述文字和内容未经(企业库qiyeku.com)证实,请读者仅作参考,并请自行核实相关内容。若本文有侵犯到您的版权, 请你提供相关证明及申请并与我们联系(qiyeku # qq.com)或【在线投诉】,我们审核后将会尽快处理。
—— 相关资讯 ——