楼主: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)功能是否够
其实这些话题,很古老,很头疼,也很实际
说实话,我觉得应该从木马是什么、怎么用、怎么好用等角度,重新审视木马。
特别,在木马的设计结构上来一次彻底的革新和变化。只有新的理念,才能促进木马迈向新时代,才能推动新的需求,引领新的攻击模式,也促进安全防御技术的跟进。
木马, 远远不仅仅是一个简单的原创控制程序木马,早该重新被审视为艺术,这门艺术已经呆滞了很多年了。。。。
 
二楼:zhuwg发言····
 
膜拜森哥大牛
密码方面,俺不评价,因为俺是认为过分的加密是为了这点安全牺牲了很多效率,再说也没有“真正”靠得住的加密,作为一个木马,用不着向网银看齐 哈哈
不过我对算法和加密不了解,牛人来评判把

木马特征的隐藏,这个有不少成品的了,biosrk和vt的相关产品都有了,至于根植于之上和各种应用就看你自己怎么去用的,都有现成的模型可以使用

多态变形,反虚拟机,虽然俺不懂,不过某牛人说很easy的。。这儿略过不提。。。

木马将广泛采用P2P协议,貌似现在有成品了,只是不知道是不是楼主也搞了搞呵,本人不懂网络协议,细节部分,找老张吧

跨平台之类的,貌似现在需要windows+linux都支持的情形不多,老张很精通的

其实楼主所谓的“10多年来,大家都木马的看法很单一,”,重要原因就是
很多小hacker只关心了抓肉鸡,刷点流量什么的,相应的木马作者也是
迎合着这种需求
楼主的这种真正的木马(高精尖的需要)为数不多,主要目的就是要实现
这种--间谍的功能,,换言之,拿走资料,全身而退,由于没什么需要,
一些产品也就不为人知了,其实还是有不少的呵
 
三楼:张予帅发言····
 
首先要先膜拜一下 森哥 和 猪娃哥 两位大牛!!!
对于"1.密码的问题"我也是个超级大菜鸟,故要等大牛来;
"2. 木马特征的隐藏" 这个问题, 猪娃牛哥和其他一些大牛非常专业, 小弟不敢多言;
那么就"网络协议"和"跨平台"这两个方面,小弟斗胆说几句.

(1) 不管是早期的C/S模式,还是端口反弹模式,协议的本质是一样的,都是以IP协议为基础来设计应用层协议,而"多跳"也无非就是多了几次转发,所以我比较认同森哥的说法,下一代的马将广泛采用P2P或者类似的协议,但是P2P协议是在资源统一的基础上才能达到比较好的效果,对于木马来说,每个点的数据需要传输的数据不一致,所以采用P2P协议还存在一定的问题, 具体的实现也有一定难度, 对于被控者和主控者的选择问题,还要考虑到以后的木马设计的架构;

(2) 对于跨平台来说,我个人认为,可以和芯片隐藏技术联系起来,BIOS中的代码首先获得执行权,然后可以根据boot loader的类型来判断用户的操作系统类型,然后把控制权交给系统的同时,释放该平台上的可执行代码,从而达到跨平台的目的. 当然具体的实现是复杂的,还要对多系统引导做相关的处理,而且被控端还得包含多个平台的可执行代码等许多问题;
呵呵,小弟的见解可能有误,请大牛们指出~~~
 
四楼:mika发言····
 
首先膜拜下,现在高人真是多。楼主几乎把能涉及的面都说到了,而且都说到了点子上,实在是没得说了。其实这种东西无论咋变,无外乎隐蔽性,稳定性,通用性这三个方面。而且这三个方面都是相互关联的,BOOTKIT也好CHIPKIT也罢,涉及到底层越深,稳定性和通用性就越难,vice versa.不过隐蔽性这个东西关系到木马的成活率的高低或者说生命期的长短,说白了,其他的东西做得再好,隐蔽性如果达不到相应的等级,也是一匹脑残马。其实通讯不仅仅要加密,更要隐藏,最起码能躲过本机的sniffer。偶碰到过N会了,MBR马还是BIOS马都照样被发现,不是别的就是人家闲着没事就wireshark一下,虽然数据是加密了,但是人家只要感觉这个东西不对劲了这个马也就死了。因此本机通讯隐藏也是个老长的话题了,呵呵从长计议啊。
看了这个文章,想说点嘛,就找了这么个脑残的话题发表下个人想法,高人路过别扔砖头就好。最后,再次膜拜下!
 
五楼:jo_dy发言····
 
仰望森哥大牛和zhuwg大哥
一下纯属于,俺这个成年小屁孩乱说的。
下一代木马应具备颇高的特征异变机制,静非纯静,动非纯动,静动视变,互相联系。我可以认为是“双向”互调法吗?.。。。
Zhuwg大哥说加密的方面,如果采用加密的话,那么木马的安全性或者,大大折扣是吧。(我是说“如果”啊),按照这样说法,木马不加密,和谈,新一代的木马,我坚信着,木马采用加密方式,是新一代的木马一个特点,至于加密方面,(先加后解吧个人乱想的,可以54)我想的,只是很多人不愿公考罢了。木马采用P2P协议,是有成品的。至于跨平台之类的,我个人认为,随着不同的系统推出,新一代的木马,必须要跨平台,甚至跨更多的平台。森哥和zhuwg大哥说的“10多年来,大家都木马的看法很单一”我个人理解了一下,如果说,10年前的木马小孩的话,那么新一代的木马就是,小孩的爸爸了,Zhuwg大哥词疑“重要原因就是很多小hacker只关心了抓肉鸡,刷点流量什么的,相应的木马作者也是迎合着这种需求”那么那些“很多小hacker”随着时间成长的话,那他们的需要是不是也随着时间跟着成长呢?就像10年前的木马跟着小孩一起随着时间的移动,10年的后,新一代木马是不是也要提升呢?。
如果老是停留在10年前的木马,就应该绝种了。。
 
六楼:qszzsq发言····
 
大家讨论的很好:)看得出,都是写马、用马、御马之能人啊。
  诚如大家所言,把之上的想法毕其功于一役,用一个木马实现之,工程量很大,调试量绝非一日之功。
  我觉得,在程序开发方面,只要有决心,还是有希望实现的,就如同PI木马出现之前,很难想象有人会用SHELLCODE模式写综合性的木马,结果PI达到了,而且很成功,自PI之后,模仿PI者甚多,基于SHELLCODE的木马代码开发也成为当今木马开发者不得不学习和掌握的技术。
 记得05年BLACKHAT会议上的一篇BIOS-PCIkit的论文,引起轩然大波。不过,在众多质疑声中,即3个月,我就有幸从国外朋友那看到了当时最强大的ROOTKIT,如今想来,依然赞叹。
  甚至于,我想,下一代木马会成为一个具有 智能自动化模块的东西-----类似于metasploit的架子,重要的功能模块,插件化、SHELLCOED化。。。。。
  越想越是一个庞大的系统工程啊------------
  数年前,曾仿照metasploit做过一个简单的小型恶意代码生成软件,其中之艰辛,N多夜晚啊。。。不过,现在想起来,那也不算什么,只是验证了一个想法而已
  做这样的东西,一个人肯定不行。需要用软件工程的办法,集大家之能,汇百家之长。
 
十楼:asm发言····
 
首先膜拜一下大牛

在通信方面,下一代木马不管怎么样,只要往外发送数据包,sniffer一下是可以看得出来的~因此说哪怕加密再牛B,还不如直接设置木马的回连时间~~加密只是一个形式罢了~

隐蔽性方面,越往底边,越是脱离系统,通用性实用性越差~~所以什么MBR马还是BIOS马都根本没必要搞那么深,只需要pass目前流行的ark工具即可~目前的危险始终来自这些ark工具是否被管理员使用进而发现木马~

好的木马应该被这样定义:具有阶段性的回连,跟管理员玩几率,我一个礼拜当中就只有礼拜天的下午5点回连,而下一次回连时间又在礼拜二晚上8点~管理员也是要有假期的~;具有绕过流行ark的扫描~

具备以上两点足以~~我土鸡,只能发表一些幼稚看法~~~
 
本文来源:http://forum.eviloctal.com/thread-41069-1-1.html
本文来源于Evil的博客http://www.evilhk.com/ , 原文地址:http://www.evilhk.com/cat_7/319/