信息来源:邪恶八进制信息安全团队(
www.eviloctal.com )
文章作者:qszzsq(森哥)
************************************************************************************************************************
* 写在前面的话
* 几天前,曾经把一部分想法发表在 暗组论坛了
* 有幸应冰血之约,来这里好好畅谈一下下一代木马的问题
* 文中提到诸多思路,比较邪恶,大家若写出什么恶意的新代码并进行恶意行为,与我无关
* 让我们共同的智慧,一起引领下一代木马的发展
************************************************************************************************************************
98年的时候,第一次看BO2K代码的时候,体会到远程控制技术将是整个信息安全领域的一个重要支撑技术。再看十几年来
,木马的设计、 免杀 、 功能、查杀、拦截、反制等等技术不断推出又不断演进,伴随着漏洞挖掘和利用,木马脱胎于病毒又不同于病毒。历史的车轮是滚来滚去的,说实话,十年来木马设 计本身没有大的突破,无非是各种ROOTKIT加入而已,只要拿到木马完整样本,(即使无源码),反木马技术找木马的命门---SO EASY。所谓你消我长,魔道有异。木马要走出新路,必须在设计理念上有新想法。
在下抛个破砖,以我十几年来的体会和积累,说说我自己对下一代木马的设计理念。大家一起交流。其实,设计一个下一代木马,也是为安全提供了新的靶子和研究对象,要不然是不是很无聊:)
言归正传,就此问题,我想讲3-5个方面的考虑。
文章作者:qszzsq(森哥)
************************************************************************************************************************
* 写在前面的话
* 几天前,曾经把一部分想法发表在 暗组论坛了
* 有幸应冰血之约,来这里好好畅谈一下下一代木马的问题
* 文中提到诸多思路,比较邪恶,大家若写出什么恶意的新代码并进行恶意行为,与我无关
* 让我们共同的智慧,一起引领下一代木马的发展
************************************************************************************************************************
98年的时候,第一次看BO2K代码的时候,体会到远程控制技术将是整个信息安全领域的一个重要支撑技术。再看十几年来
,木马的设计、 免杀 、 功能、查杀、拦截、反制等等技术不断推出又不断演进,伴随着漏洞挖掘和利用,木马脱胎于病毒又不同于病毒。历史的车轮是滚来滚去的,说实话,十年来木马设 计本身没有大的突破,无非是各种ROOTKIT加入而已,只要拿到木马完整样本,(即使无源码),反木马技术找木马的命门---SO EASY。所谓你消我长,魔道有异。木马要走出新路,必须在设计理念上有新想法。
在下抛个破砖,以我十几年来的体会和积累,说说我自己对下一代木马的设计理念。大家一起交流。其实,设计一个下一代木马,也是为安全提供了新的靶子和研究对象,要不然是不是很无聊:)
言归正传,就此问题,我想讲3-5个方面的考虑。
一、密码的问题: 我认为:密码,特别是 公钥密码 ,将铸成下一代木马的通信基石。
As we all 知道,早期木马是没有加密的,特别是通信过程都是明文传输。其实,现阶段不少木马也是明文传输的,我做过简单的统计,现在1/3的木马是明文通信,1/3是简单线性加密,1/3是分组密码加密。
通信是明文,是非常恐怖的,也是非常不安全的。试想,只要在C段内一个交换机下,该木马所有的通信数据一览无余,通过简单的分析即可澄清木马的协议,这样 很方便的进行监控、监管,甚至反制(方法很多,可以进行中间人欺骗,也可以直接劫持等,有机会专门再讲),最起码,能够轻松的还原木马的所有行文、上传、 下载等。恐怖吗?
简单的线性加密有很多,最常见的是各种XOR、XOR+FOR循环,也有才用一些替换+置换的早期密码,如凯撒密码等等。这种东西,二战的时候厉害,现在 SO EASY,用简单的字符表统计,即可破解。这种简单的线性加密,实现起来简单,代码量很小,貌似加了一道屏障。但是,密码强度太低,破译太简单。
分组密码,采用的越来越多,现在用的多的是DES、AES、TWOFISH、IDEA等,PI使用的CAMELA,这些分组加密算法有一定的加密强度,密钥从64到256BITE不等。
用分组密码就好了吗???
我认为不是。第一,木马基本上密码是锁死在程序里面的。一个控制端下的所有植入端,都用一样的,当然有些木马做到了不同的植入端采用不同的密钥。但是密码锁死在程序中是肯定的,这样的话,通过 逆向 ,OD足够。密码就无处遁形,于是中间人欺骗的干活。。。。
第二,密码锁死以后,不能替换,不能更替,没有认证机制。于是谁都可以伪造密码,甚至伪造主控端。这样,你辛辛苦苦的木马 资源 就成了别的东西了。
因此,我断言:下一代木马必须考虑让公钥木马加入其中。也就是说,下一代木马本身将是一个自主体系的安全系统,有CA来进行密钥管理和分发,大家都在一个 大的公钥体系之内(如4096位的RSA体系),每一个植入端都有自己的私钥。这样所有的数据都可以进行认证,并且不可抵赖。即使得到了一个被控端,也无 法破解整个木马系统。
呵呵,很像银行系统(只是没有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,我想将成为下一步木马隐藏的顶级技术。所谓会者不难,主要是思路吧。不晓得我这个想法公布以后,会 不会造成一批新型木马的诞生。。。。本人只站在技术的角度进行分析,希望大家别用在邪恶的地方。
说实话,自动变形的修改木马的静态特征码,十几年前的病毒就具备这样的功能。不过将其应用在木马中,也是近5年的事情。下一代木马,自动变形是需要的,而 且更“疯狂”。一般意义上的自动变形,是木马本体维护一个加有随机数发生器的一个加密算法,按照作者的要求,每隔一段时间或其他情况下,将木马静态本体进 行一次加密,因为每次的KEY不一样,所以每次本体中的静态特征都变化。
这种意义层面的自动变形,无法避免沙盒分析,只要木马执行之后,在内存中始终是完整的。
ANTI-SANBOX技术,其实是一个很好玩的东西,怎么反沙盒?关键还是思路的问题。典型的反沙盒,是增加沙盒的难度,不让木马体有效的执行,但是对于完全内存分析--则无法躲避。难度是要增加的,同时要想办法让木马体在内存中也不断的变化,这才是关键。
让木马在内存中变异,方法也有很多。提几个思路吧,别拿去邪恶。
一 个典型想法是设计“分段加密解密执行,密钥在畸形的地方存储”。分段加密解密执行,就是木马在执行时,在内存中用到什么内容就解密什么内容,同时将无用的 东西去除或加密,始终保持内存中只有当前在用的模块,并且这个模块是不断被加密、解密的。不同的时刻都不一样。并且,密钥特别关键,密钥若得到,就让程序 陷入了沙盒分析的汪洋大海中。密钥应该存储在本地畸形的地方,比如沙盒程序无法顺利访问的地方--如自定义的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+各手机系统+网络设备”的马,是完全可能的。
有两种跨平台的思路:
一种是基于 源代码 的,利用不同操作系统对同一类源代码的解析支持。比如,基于脚本语言的木马。这种木马容易实现,但是源代码本身难以进行隐藏,即使可以进行诸多变异和加密,但虚拟执行以后也无所遁形。
另一种是“源代码施放”。也就是说在源代码中封装N多不同针对不同系统的木马小体,先技术源代码执行起来,再判断当前系统版本和软件环境,再施放不同的木马执行小体。
说实话,木马本身的话,有执行权限即可。木马的核心,在于通信协议。只要不同的木马小体采用同样的通信协议进行编制,就OK了。
稍微总结一下。
我觉得,下一代木马系统由主控端群、被控端群和服务中心三部分组成。每一个主控端都可实现对所有被控端的安全控守,所有主控端、被控端都满足PKI体 系,服务中心是PKI体系的密钥管理和安全管理中心,并且所有主控端、被控端一起构成一个互相连通互为依托的僵尸型网络,可达成一体化联合攻防效能。
服务中心:生成并分发所有的公钥、私钥,为所有主控端、被控端管理维护公钥信息供其查询。维护主控端群和被控端群组建的僵尸型木马网络,为被控端回联、信息回传提供解析向导,维护整个网络的控守,也发布各种复杂的联合攻防指令。
主控端群:每一个主控端都将自己的私钥,每一个主控端都可以控制所有被控端,主控与被控之间的通信采用定期一次一密方式,每次都用RSA算法协商一次通信 密钥,然后用分组算法进行分组数据加密传输。主控端控制任一个被控端,都要经过服务中心的许可,在服务中心的调配下进行。
被控端群:在服务中心的调配下,每一个被控端都可受控于任一主控端,进行直接的控制取情。被控端本身进行自动文件搜集等行为,他们之间也进行必要的信息均衡,一个被控端。
10多年来,大家都木马的看法很单一,也较片面,集中在几个方面
(1)是否免杀,过主防
(2)是否能回联
(3)功能是否够
其实这些话题,很古老,很头疼,也很实际。说实话,我觉得应该从木马是什么、怎么用、怎么好用等角度,重新审视木马。特别,在木马的设计结构上来一次彻底的革新和变化。只有新的理念,才能促进木马迈向新时代,才能推动新的需求,引领新的攻击模式,也促进安全防御技术的跟进。
木马,远远不仅仅是一个简单的原创控制程序。
木马, 早该重新被审视为艺术,这门艺术已经呆滞了很多年了。。。。
(1)是否免杀,过主防
(2)是否能回联
(3)功能是否够
其实这些话题,很古老,很头疼,也很实际。说实话,我觉得应该从木马是什么、怎么用、怎么好用等角度,重新审视木马。特别,在木马的设计结构上来一次彻底的革新和变化。只有新的理念,才能促进木马迈向新时代,才能推动新的需求,引领新的攻击模式,也促进安全防御技术的跟进。
木马,远远不仅仅是一个简单的原创控制程序。
木马, 早该重新被审视为艺术,这门艺术已经呆滞了很多年了。。。。