NT内核泄露盘点 | Windows10源代码泄露风波始末(下)

百家 作者:程序人生 2017-07-13 09:46:21



张银奎,《软件调试》和《格蠹汇编》作者

 Windows10源代码泄露风波始末



昨日在从合肥回上海的高铁上,写了昨天的内容,晚上修改后,伏在书桌上竟睡着了,朦朦胧胧间,有人轻拍我肩膀,回头一看,竟是多年未见的一位好友,我赶紧请他坐下,倒一杯刚从庐山带回来的云雾茶给他喝。


 一番寒暄后,我问他可否知道近日的源代码泄露风波,他点头称是。我接着追问:“仁兄可知泄露代码到底几何?”他先伸出两根手指,又把整个手掌张开。我说:“250M?”他轻轻点头。


我给他加了茶水后继续询问他可否见过泄露的文件,他从背包中掏出一本小册子,放到桌面,然后推到我面前,我见封面上写着两行字,第一行是WINDOWS 10 SHARED SOURCE KIT(SSK),第二行是MICROSOFT CONFIDENTIAL。


我如获至宝,赶紧翻开,第一页是SSK子目录列表,分别是:


AUDIO

AVCORE

BASE

DRIVERS

MINKERNEL

NETHLK

NETWORK

TESTS

WLANOUTERLOOP


在THE REGISTER的报道中,作者CHRIS用下面这段文字描述泄露源文件的内容:    


“THE LEAKED CODE IS MICROSOFT'S SHARED SOURCE KIT: ACCORDING TO PEOPLE WHO HAVE SEEN ITS CONTENTS, IT INCLUDES THE SOURCE TO THE BASE WINDOWS 10 HARDWARE DRIVERS PLUS REDMOND'S PNP CODE, ITS USB AND WI-FI STACKS, ITS STORAGE DRIVERS, AND ARM-SPECIFIC ONECORE KERNEL CODE.” 


解释和归纳如下:


PNP代码,即PLUG AND PLAY,I/O管理的核心逻辑之一。

USB和WI-FI设备栈。

存储驱动。

ARM处理器相关的内核代码。


结合CHRIS的描述看上面的目录列表,二者基本相合,而且互相补充。


我继续翻看小册子,接下来是使用TREE命令产生的每个目录的详情。我先翻到MINKERNEL部分,它是从WINDOWS 7开始使用内核分支,字面意思是小内核,是为了解决VISTA内核过度膨胀而特别裁剪的版本。从微软的公开调试符号可以看出,WINDOWS 8和WINDOWS 10也都是使用这个分支。因此,MINKERNEL已经成为NT内核的别称。


在MINKERNEL目录下,有两个子目录,分别为:

BOOT

NTOS

浏览BOOT目录下的内容,可以看到著名的BOOTMGR和OSLOADER,后者应该就是著名的WINLOAD的源代码。看到这些内容,我不由得发出惊叹,“这一次确实还是泄露了很重要的内容啊!”在此前泄露的NT4和WINDOWS 2000源代码里根本没有这两部分内容,因为它们是在VISTA时引入的。启动部分一向敏感,BOOT LOADER虽小,但是五脏俱全,里面仿佛一个小的操作系统。微软在这方面一直保持着比较大的领先,单凭支持双机交互式调试就足以让众多开源的BOOT LOADER无地自容。


继续看NTOS部分,里面也是有两个子目录:

IO

KE

第一个是著名的I/O管理器,NT内核中最复杂和最有特色的部分,著名的WDM驱动模型就在其中。第二个是内核(KERNEL),微观意义的内核,内核中的内核。观察这个目录中的文件清单,好多熟悉的名字,IPI(处理器间通信),TRAP(陷阱),CALLOUT(神秘的外调机制),CXTSWAP(线程切换),IDLE(空闲线程),FLUSHTLB(刷新页表缓存)......里面的文件有一半是.ASM后缀,明显是和硬件密切相关的汇编语言部分。


看到如此多承载底层机制的核心文件,我兴奋不已,禁不住猛拍桌子,只听哐当一响,茶杯被我打翻在地,茶水一半洒在地上,一半洒在桌子上,原来刚才做了一个梦。略微定了定神,便听老婆大喊,“把什么打翻了?这么晚了,还不睡觉?”我赶紧说没啥没啥,就来就来。



回顾NT内核的历史,一共有三次规模较大的源代码泄露。


第一次是2004年2月发生的NT 4.0和WINDOWS 2000泄露,我们将其简称为NT4泄露。


第二次是WINDOWS SERVER 2003版本的WINDOWS RESEARCH KERNEL(WRK)泄露,本来的意图是提供给大学和研究机构做学习和研究用途的。但是一旦到了大学后,基本就相当于公开给全世界了。就在老雷写作这篇短文前,搜索了一下,居然发现有位北京邮电大学的同学竟然把WRK的几乎所有代码文件都上传到了GITHUB上,而且留着自己的名字,还有链接到他的主页,主页上有自己发表的论文,论文里有大学名称、姓名和邮件地址,主页上还说他将到美国留学......真让老雷跌破眼镜啊,不禁想起孔夫子的话:“吾党之小子狂简,不知所以裁之?”老雷出于好意已经给他发了邮件提醒......


第三次便是上个周末发生的WINDOWS 10 SHARED SOURCE KIT(SSK)泄露。SSK本来是提供给ARM、INTEL等硬件合作伙伴的。从文件清单来看,内核和启动部分显然是提供给ARM阵营的公司,叫他们如何学习X86来实现WINDOWS ON ARM(WOA)。图形有关的部分是给显卡厂商的。SD、WIFI和AUDIO分别是给对应设备的开发商的。


比较三次泄露,从源文件数量看,NT4泄露的数量最大,根据国内两位同行发表在《程序员》杂志上的文章,单只WINDOWS 2000部分,就有30915个文件,约有1,350万行代码。SSK泄露次之,大约有5000多个文件。WRK的文件数最少,不到1000。


从可编译度来看,虽然WRK的源文件个数不多,但是因为微软以LIB和DLL形式提供了其它组件,因此是最容易编译和运行起来的。NT4泄露的NT4部分也比较完整,有个开源的OPENNT项目就是使用泄露的NT4代码,已经能够构建出可启动的系统,取名为OPENNT 4.50。


从技术含量的角度来看,老雷认为这一次的SSK泄露不容低估,一是代码很新,是最新的WINDOWS 10代码。二是包含BOOTMGR、WINLOAD以及内核中很多敏感操作的代码,比如中断/异常管理,多CPU通信,另外非常值得注意的是,在BOOT部分中还有一个很多人一直非常关心的NTFS文件系统的引导版本。


MAINSOFT泄露发生在2004年2月12日,微软在2月20日,主要内容摘录如下:


REDMOND, WASH., UPDATED, FEB. 20, 2004 — ON THURSDAY, FEBRUARY 12, MICROSOFT BECAME AWARE THAT PORTIONS OF THE MICROSOFT WINDOWS 2000 AND WINDOWS NT 4.0 SOURCE CODE WERE ILLEGALLY MADE AVAILABLE ON THE INTERNET. SUBSEQUENT INVESTIGATION HAS SHOWN THIS WAS NOT THE RESULT OF ANY BREACH OF MICROSOFTS CORPORATE NETWORK OR INTERNAL SECURITY, NOR IS IT RELATED TO MICROSOFTS SHARED SOURCE INITIATIVE OR ITS GOVERNMENT SECURITY PROGRAM, WHICH ENABLE OUR CUSTOMERS AND PARTNERS, AS WELL AS GOVERNMENTS, TO LEGALLY ACCESS MICROSOFT SOURCE CODE. MICROSOFT REAFFIRMS ITS SUPPORT FOR BOTH THE SHARED SOURCE INITIATIVE AND THE GOVERNMENT SECURITY PROGRAM.


MICROSOFT CONTINUES TO WORK CLOSELY WITH THE U.S. FEDERAL BUREAU OF INVESTIGATION AND OTHER LAW ENFORCEMENT AUTHORITIES ON THIS MATTER. MICROSOFT SOURCE CODE IS BOTH COPYRIGHTED AND PROTECTED AS A TRADE SECRET. AS SUCH, IT IS ILLEGAL TO POST IT, MAKE IT AVAILABLE TO OTHERS, DOWNLOAD IT OR USE IT. MICROSOFT WILL TAKE ALL APPROPRIATE LEGAL ACTIONS TO PROTECT ITS INTELLECTUAL PROPERTY. THESE ACTIONS INCLUDE COMMUNICATING BOTH DIRECTLY AND INDIRECTLY WITH THOSE WHO POSSESS OR SEEK TO POSSESS, POST, DOWNLOAD OR SHARE THE ILLEGALLY DISCLOSED SOURCE CODE.


HTTP://NEWS.MICROSOFT.COM/2004/02/12/STATEMENT-FROM-MICROSOFT-REGARDING-ILLEGAL-POSTING-OF-WINDOWS-2000-SOURCE-CODE/ 


NT4泄露的破案过程非常有意思。说起来还是调试技术做了大贡献。当微软和FBI忙着四处找线索而没有结果的时候。有喜欢调试同行在泄露的众多文件中发现了一个崩溃转储文件(CORE文件),打开分析,显示系统的环境变量,公司名、用户名、用户信箱......所有信息都有了:


PWD=/USR/MS/WIN2K_SP1/PRIVATE/SECURITY/MSV_SSPI 


DOMAIN=MAINSOFT.COM 

REPLYTO=EYALA@MAINSOFT.COM 

ORGANIZATION=MAINSOFT CO. LTD. 

MWBATCH_SERVER=LOD:8000 

MSOFTLM_HOST=@XOR 

MAINSOFTLM_HOST=@XOR 

XAPPLRESDIR=/IL2/USERS/EYALA/APP-DEFAULTS 

EDITOR=VI 

BASE_LIBPATH=/USR/LIB 


上面信息中的MAINSOFT是一家软件公司的名字,总部在美国,在以色列设有分支机构。转储信息中的用户全名叫EYAL ALALUF,是分支机构中的一个领导(DIRECTOR)。MAINSOFT当时是微软的合作伙伴,为微软把某些WINDOWS应用移植到UNIX环境上。根据这个转储文件,大家推测出泄露的NT4代码来自EYAL先生使用过的UNIX系统。泄露的过程有以下几种可能:


EYAL本人因为某个原因把自己电脑上的NT4源代码打包,无意之中把一个转储文件也一起打包了,然后这个包通过某种渠道泄露到了互联网。


某个黑客攻破了EYAL的电脑,把NT4源代码打包,复制,然后上传到互联网,无意中包含了一个转储文件。


EYAL得罪了某个同事,那个同事从EYAL的电脑上复制了一个转储文件,然后把它和NT4源代码打包,故意泄露出去。


因为后来的调查结果没有公布,我们不能确定到底是哪一种情况。但是无论如何,微软认定这次泄露和MAINSOFT有关。之后还是否给它合作机会可想而知。今天MAINSOFT的原来域名已经无法访问了,据说公司已经改叫其它名字了。


在泄露事件被公开报道后的第三天,BETAARCHIVE网站在论坛上公布了新的FTP服务器政策,将删除所有源代码包,而且禁止新的上传:


DUE TO RECENT EVENTS IT HAS COME TO ATTENTION TO US THAT CERTAIN KIND OF FILES CARRY A MUCH HIGHER RISK OF BEING MISUSED AND MISINTERPRETED. IT'S ONE THING TO RELEASE BINARIES WHICH REQUIRES EXTENSIVE KNOWLEDGE TO TRACE AND DEBUG, BUT IT'S AN ANOTHER WHEN YOU GOT THE ORIGINAL DEVELOPER CODE IN FRONT OF YOU IN ALL ITS GLORY. EVERY NUANCE, EVERY METHOD, EVERY COMMAND AND CALL JUST AS THE DEVELOPERS INTENDED. THIS CAN, FOR AN EXPERIENCED DEBUGGER, LEAD TO A VERY GOOD UNDERSTANDING OF HOW THE DEVELOPER THOUGHT WHEN MAKING THE CODE, THE METHODOLOGY BEHIND IT, AND FOR A DEBUGGER OR CODER WITH MALICE INTENT ALSO A VERY GOOD WAY OF FINDING EXPLOITS WITHIN THE SOURCE CODE. ...


THEREFORE WE ARE GOING TO REMOVE ALL SOURCE CODE COMPILATIONS FROM THIS SITE. ANY DISTRIBUTION OF SOURCE CODE WILL ALSO BE PROHIBITED


(HTTPS://WWW.BETAARCHIVE.COM/FORUM/VIEWTOPIC.PHP?F=1&T=37300)。


是啊,源代码包含的信息太丰富了,每个方法,每个变量,每次调用,每一条注释,缩进的方式,命名的规则,都可能让人生发出很多联想。尤其是NT这种本来一直不出闺阁的源代码,希望一窥庐山真面目的人会更多一些。


当然不同的人,看源代码的目的不同。对于程序员同行来说,写一手好的代码何其重要?NT内核之父DAVID CUTLER的代码最值得见识一下,当然华人前辈SHIE-LIN TZONG的汇编代码也是经典,就此打住,有些东西不可名言。


本文为连载文章 :不再安全,Windows10源代码泄露风波始末


作者张银奎,《软件调试》和《格蠹汇编》作者,喜爱写书和写代码,常以调试各类软件和分享调试技术为乐(微博:HTTP://WEIBO.COM/DBGGER/)。近来特别喜欢庐山山南,在秀峰景区不定期举办软件调试研习班,如有同好,欢迎到松雪楼秉烛夜谈,在中正行营砥砺调试剑法,闭关修炼,详情请关注格友公众号或者访问HTTP://001001.ORG/GEDU/。


▼  直接点击,查看每日精彩

128篇深度学习论文

全球100款大数据工具汇总 

工作3年的程序员应该具备什么技能

技术生涯有几年 

普通人怎么逆袭  

顶尖程序员的五种思维模式

Stack Overflow 报告深度解析

每日更新,更多好看



直接点击,每日程序人生

1个月只敲1天代码,拿着全额薪资,我错了吗?

毕业3年的程序员,怎么进BAT

刚写了一百万行代码,现在迷之自信

每日更新,更多好看                                                                                   

直接点击,查看每日趣闻

等我干IT发财了,就和你离婚

致准备报考计算机专业的你 

程序员的精彩生活 

设计大PK 

程序员的小船

每日更新,更多好看           


关注CSDN程序人生

程序人生,不止一面

关注公众号:拾黑(shiheibook)了解更多

[广告]赞助链接:

四季很好,只要有你,文娱排行榜:https://www.yaopaiming.com/
让资讯触达的更精准有趣:https://www.0xu.cn/

公众号 关注网络尖刀微信公众号
随时掌握互联网精彩
赞助链接