难倒卡巴斯基Duqu病毒真相揭秘 “OO C”而非“C++”

Duqu病毒,即使是Kaspersky这样专业的反病毒公司都无法搞清楚它究竟是用什么语言编写,最终通过在Kaspersky Lab和热心网友的帮助终于水落石出,下文是Kaspersky Lab专家的回应。

在我之前的关于Duqu的博文中,我描述了一个关于Duqu的最大的谜题——C&C通信模块非常奇怪,它竟然和其他部分不是使用同一种语言编写。作为业内技术专家,我们觉得这很有趣但也令人迷惑,于是我们决定在社区中分享它。

我们收到的反馈远远超出预计,总共收到超过200条回复和60多条邮件都是关于可能的语言或框架的建议。我们在这里参与帮助我们鉴别这一“迷之代码”的朋友们说一声“非常感谢!”

先来看看大家所认为最有可能的语言:

  • Variants of LISP
  • Forth
  • Erlang
  • Google Go
  • Delphi
  • OO C
  • 旧的C++和其他语言编译器

非常感谢那些充满智慧的评论,我们现在已经能非常确定正确答案了。下面我引用一下最有用的评论:

igorskSimple Object Orientation (for C)It seems someone over at reddit (http://www.reddit.com/r/ReverseEngineering/) hit the jackpot: the code snippets look _very_ similar to what this would produce: http://daifukkat.su/wiki/index.php/SOO

There are a few other OO frameworks for C, but they don’t match as well: http://ooc-coding.sourceforge.net/ http://sooc.sourceforge.net/

JonwilRe: Other C/C++ compiler?I have seen how GCC works internally and its ABI (for a number of different versions) and I can confirm that the Duqu code is definitely not generated by GCC. I don’t know how other C++ compilers work but the things I see in the ASM (like where the pointers to the functions go, the way the “this” pointer is passed etc) do not suggest C++ to me but something else entirely. (such as the aforementioned “object-oriented” frameworks for C that exist)
igorskRe: Other C/C++ compiler?I’m 99% sure the machine code was generated by MSVC. It’s something you get a feel with experience, but I can point out two things that are quite characteristic of MSVC: 1) it uses esi as the first candidate for temporary storage; 2) “pop ecx” instead of “add esp, 4”.

我们还收到Pascal Bertrand aka bps和一位匿名人士的有趣的邮件,他们认为这是一个定制的面向对象的C语言,被称为”OO C”。

这两条信息非常重要,因为它给我们找到真正的编译器——Microsoft Visual Studio compiler(MSVC)的线索。之后我尝试了不同版本的MSVC和不同的源代码配合不同的编译选项来尝试重制Duqu的二进制代码而且最终成功了。

Duqu原始代码分解:链表类架构

手动反编译C代码

上面的C代码,当用MSVC2008和选项/O1(最小规格)/Ob1(仅内联扩展)[译者注:此处均为大写字母O]产生出来的指令码,和Duqu的完全相同。改变运算顺序和if/else结构产生的代码,MSVC2005也能产生出近乎相同的二进制代码。因此我们能高度确定Duqu是纯C代码用MSVC2008以/O1 /OBb1选项编译出来的结果。

这又意味着什么呢?简单地说,给了我们最开始的问题两个可能的答案:

  1. 这个代码是定制的OO C框架写,基于宏或者是预处理指令。正如你们所想,因为它确实很接近OO C的程序。
  2. 所有代码都是用OO C手动写的,没有使用任何相关扩展。我们不能完全否认这种可能,因为技术角度来讲,完全无法区分宏指令代码和手抄代码的区别。

从各个构造函数以及成员方法的相似性来看,我们可以假定使用了源代码预处理,而且猜想1更有可能。

现在,又有多个开源”OO C”框架可供选择,它们中一些产生的结果和Duqu非常相似,最接近的要数”SOO”(Simple Object Orientation for C),但它是在Duqu问世之后才出现的。

无论以上两个猜想哪一个是正确的,都非常有意义。Playload DLL包含95Kb事件驱动的由OO C这个没有自动内存管理以及安全指针的语言所写的代码。这种编程方式在大型正规程序中非常常见,而不是那样的恶意软件。另外,整个事件驱动架构肯定是作为Duqu代码的一部分或者它的OO C扩展而写的。

很难解释为什么它的作者会使用OO C而不是C++,但我们有过去相似的案例作为参考,一些更倾向这么做人给了我们两个理由:

  1. 他们不相信C++编译器。这只是过去人们首选汇编语言时用来做编程入门的语言。而C是是一项大的革新,并且迅速成为了标准。当C++发布时,很多old school的程序员不愿意接近他,因为不相信内存分配以及其它模糊的会导致间接执行的语言特色,例如:构造函数。
  2. 极度可移植性。过去(10-12年前)C++并没有完全标准化,所以在MSVC上编译通过的程序并不一定能在Watcom上编译。如果你需要极度的可移植性,希望能够在所有平台上都能运行的话,你应该使用C语言。

所有迹象都指明了这必定是个有经验的”old-school”开发者团队的“杰作”!

结论:

  1. Duqu框架是”C”语言代码经由MSVC2008使用/O1 /Ob1特殊选项编译而成。
  2. 代码很有可能由C语言的定制的”OO C”编写
  3. 事件驱动架构是作为Duqu框架的一部分或者是”OO C”的扩展而开发
  4. C&C代码是从已经存在的软件项目重用的,并且集成在了Duqu木马中。

以上所有结论表明是由一个相当专业的开发者团队,他们能够重用陈旧的由顶尖”old school”开发者所写的代码。这样的技术常常在专业软件而不是现在的恶意软件中出现,所以Duqu同Stuxnet(译者注:2010年肆虐全球的超级工厂病毒)一样是在恶意软件中鹤立鸡群般独一无二的存在。

原文出处:securelist.com

jQuery 1.7.2正式版发布!

jQuery 1.7.2正式版发布。该版本在1.7.1的基础上修复了大量的bug,并改进了部分功能。而相比于1.7.2 RC1,只修复了一个bug。

值得注意的是:如果你正在使用jQuery Mobile,请使用最新的jQuery 1.7.2和jQuery Mobile 1.1这两个版本,因为之前的jQuery Mobile版本还基于jQuery core 1.7.1或更早的版本。 更多详情参看jquery。

下载地址:
http://code.jquery.com/jquery-1.7.2.min.js (minified, production)
http://code.jquery.com/jquery-1.7.2.js (unminified, debug)

研究人员发现新型“无文件”恶意软件

研究人员日前发现了一种极其罕见,也可能是独一无二的“无文件”恶意软件,该恶意软件不需要在受感染电脑的硬盘上存储任何文件,完全在内存中运行。这一最新发现是由Kaspersky实验室完成的,该实验室收到了一种恶意软件攻击一个常用Java漏洞(CVE-2011-3544)的报告,这些攻击报告来自俄罗斯的一些网站,但似乎没有像传统特洛伊攻击那样留下任何文件痕迹。

实际上,这次攻击是从一个嵌入受感染网站的iFrame上运行Javascript,然后将加密的.dll负载直接注入Javaw.exe进程。

这个非常寻常的恶意软件的目的看起来是双重的:首先是让Windows的用户账号控制(UAC)失效,其次是像一个“pathfinder”一样设置一个可用命令操控的僵尸,通过它接收指令去控制服务器,期间还包括要在受感染的电脑上安装Lurk数据盗窃木马。

这次攻击的不足之处是,用户只需要重启电脑就可以将其从内存中清除,只是这一过程有可能还会受到新的感染。但是反过来说,正是由于这种不足,所以它也极难被发现。它在目标PC上不会存储文件,首先是不会更改任何文件。如果被攻击目标没有打补丁,那么安全软件很不容易探测到它。

使用Java也让这个病毒可以跨平台运行,可以攻击PC、Mac和Linux电脑,虽然目前记录到的特洛伊攻击只能在Windows电脑上运行。

Kaspersky还提醒我们说,这个新型恶意软件会让我们想起十年前非常有名的红色代码和Slammer病毒,这些病毒的构造都很简单,但传播速度却非常之快,因为它们都是利用缓冲区溢出来攻击特定微软程序的,同样不需要文件传播。

“根据我们对Lurk用来跟命令服务器进行通信的协议的分析,我们已可以确定,在过去数月时间内,这些服务器已经处理了来自多达30万台受感染电脑的请求,”Kaspersky研究人员Sergey Golovanov说。

文/网界网

当当冻结全网账户:误判危机促使李国庆做出决定

3月23日,当当网运营高级总监梁健鹏很意外地发现,从19日晚22点到22日24点这74个小时里,当当网所有被冻结了账户的用户中只有6位致电当当网反映自己的账户异常。

另一个数据令梁健鹏更感蹊跷。19日当当网给大约50万账户上有余额和礼品卡的用户发出了短信、邮件。按照他们自己的设想,至少要有80%的客户会去修改自己的密码。但实际上这三天的数据显示,只有不到5%的用户更改了自己的密码。

当当网冒着商誉受损的巨大风险作出全网冻结账户的决策,却得到这个令人大跌眼镜的结果,这是一次被误判的危机吗?又是什么原因促使当当网CEO李国庆紧急作出这个决定,之后的74个小时中又发生了什么?

端倪

当当网用户账户异常的现象早在一个月前就已经出现端倪。

据当当网客户服务中心负责人梁健鹏回忆,2月份里有几起零星的用户投诉,称自己的密码失效或者登录不进去。

当当网临时制定了几个针对性的措施帮助用户恢复正常使用。但由于距离CSDN账户被盗已经过去了两个月,两家网站的大部分用户重合度不高,且 CSDN是用户大规模泄密,而当时当当网仅仅是几个用户出现了异常,因此当当网并不敢断定用户的账户异常就一定与CSDN事件有关。

当时当当网分析推断,有可能是用户自己平时不够谨慎泄露了自己的账户信息例如在公共场合上网,或者是泄露给了自己的亲友,泄露了账号和密码。因此只采取了在首页上公告提醒用户,由于CS-DN事件,请用户更改登陆密码确保自己账户安全。

此后相当“安静”,3月的第一个星期里几乎没有什么事情发生。

但到了3月的第二个星期,突然开始有很多用户向当当投诉,反映自己的账户异常,无法登录、金额不对,或者是出现了陌生的订单,有的时候一天多达二三十个投诉电话。当当网的客服和技术人员都已经意识到事情并不那么简单,情况比想象中的要严重得多。

他们在加紧研究对策方案的同时第一时间向当当网的大当家CEO李国庆汇报了此事。

冻结所有用户账户中的余额和礼品卡,是19日早上当当网CEO李国庆召集的一次多部门会议上做出的决定这次由客服中心、技术部、法务部和运作部 各部门责任者共七人参与的紧急会议事实上在当天上午和下午召开了两次,上午的会议由李国庆亲自拍板,决定冻结所有有礼品卡和余额的账户,通过短信和邮件的 方式通知所有用户上网改密码,所有用户损失当当来补偿,以及向公安机关报警。

19日下午,李国庆再次召开会议,汇总了各项决定执行的情况,并且立刻着手布置付款流程的改进付款前要用手机接收验证码。李国庆看到的数据是, 从2月中旬到3月19日冻结用户账户前,报告上来的账户异常共197例,损失账户的金额从几十到数百不等,只有极个别账户金额较高。

当当网随后发布公开声明承认部分用户账户被盗的事实。李国庆指示,要通过短信、邮件等一切方式通知所有用户赶紧到当当网上来更改密码,并检查自 己的账户是否有被盗用,以减少用户和当当自己的损失尽管法务部认为当当可能不需要负担完全责任,但李国庆坚持损失的账户要全额、分批补偿,计划时间期限是 两个星期,当然,要在核实该用户确实受到了损失之后。

这个时候李国庆和他的团队面对的首要棘手问题是,究竟有多少用户账号被盗,损失究竟有多少?对于这家互联网公司来讲,只能通过自家网站公告、短 信和邮件的方式提醒用户登录自己的账号,更改新密码并检查礼品卡、账户余额是否有异常。事实上,他们最担心的是用户被盗但是还未曾察觉。

而另一个棘手的问题是,这些被盗的钱和损失怎么办如果是已经发生的订单,当当网不仅损失了货品,还要补偿给用户,相当于双倍的损失。

李国庆认为,尽管在法理上也许当当网不需要全部责任,但在情理上当当网却不能辜负用户的信任,必须全额补偿即使是几百万元。

李国庆希望能在三天的时间里,让大部分用户把自己的密码更新完。他下如此大的决心和成本冻结所有有资金、礼品卡账户的原因,也许是由于中国用户对密码的安全性的重视程度犹如A4纸的颜色一样浅。

祸起弱密码

根据当当网的判断,是一些不法分子盗取了用户的账户和密码进行操作。事实上对一些稍微懂技术的人来讲这很容易,现在很多用户在不同的网站上使用了相同的账户名和密码,给犯罪分子留下了盗取的机会。

国内最大的网络安全厂商360安全中心在2011年年底曾发布过一次《密码安全指南》,根据国内流行的密码破解字典软件破解列表,整理总结出中国网民最常用的25个“弱密码”。

根据360安全专家给本报提供的资料,中国网民常用的TOP25“弱密码”中,有9个与国外网民使用习惯完全相同。其中,除password、abc123、iloveyou、qwerty等全球网民通用“弱密码”外,其余均为数字组合。

而简单的数字组合,似乎更是中国网民最爱,占了榜单近半数。比如“666666”和“888888”这样的吉利数,几乎是所有中国黑客密码字典中的必备项,而“5201314”(我爱你一生一世)显然被国人寄予了浓厚的感情色彩,为中国特色“弱密码”。

网民常用的“弱密码”主要包括简单数字组合、顺序字符组合、临近字符组合以及特殊含义组合等四大类别。而从中国版“弱密码”榜单来看,国内网民 更习惯设置6位字符密码。TOP25中竟有18个是6位字符,所占比例高达72%。此外,“a1b2c3”和“p@ssword”这类组合型密码看似复 杂,其实也在黑客重点关注的密码列表中。

如果系统账号或其他网络账号采用上述“弱密码”,很容易被黑客利用密码字典自动“蒙中”,从而造成个人隐私信息泄漏甚至财产损失。

李国庆试图通过这三天的账户冻结让80%的当当网用户都来为自己的账户设置一个高强度的密码。然而三天下来,6个用户报告账户异常和仅有不到5%的用户更改密码这个事实却令人大跌眼镜。

究竟是什么原因让客户不去关心自己账户中的财产?

也许是因为账户中的钱款数额比较少,也许是因为一些用户还没收到当当网账户可能被盗的消息,也许是因为礼品卡得来全不费工夫,也许他们不在乎的 原因,恰恰是一个令当当网员工不愿意相信的、但可能性很高的一个原因李国庆的“全额补偿”承诺。如果丢了也跟没丢一样,为什么要费事再去改个密码?

【科普】Key-Value 存储

key-value分布式存储系统查询速度快、存放数据量大、支持高并发,非常适合通过主键进行查询,但不能进行复杂的条件查询。如果辅以 Real- Time Search Engine(实时搜索引擎)进行复杂条件检索、全文检索,就可以替代并发性能较低的MySQL等关系型数据库,达到高并发、高性能,节省几十倍服务器数 量的目的。以MemcacheDBTokyo Tyrant为代表的key-value分布式存储,在上万并发连接下,轻松地完成高速查询。而MySQL,在几百个并发连接下,就基本上崩溃了。

相关:

1. Apache Cassandra 是一套开源分布式 Key-Value 存储系统。它最初由 Facebook 开发,用于储存特别大的数据。 Cassandra 不是一个数据库,它是一个混合型的非关系的数据库,类似于 Google 的 BigTable。

2. Redis 是一个高性能的key-value数据库。 redis的出现,很大程度补偿了memcached这类keyvalue存储的不足,在部 分场合可以对关系数据库起到很好的补充作用。它提供了Python,Ruby,Erlang,PHP客户端,使用很方便。

性能测试结果:

SET操作每秒钟 110000 次,GET操作每秒钟 81000 次,服务器配置如下:

Linux 2.6, Xeon X3320 2.5Ghz.

stackoverflow 网站使用 Redis 做为缓存服务器。