【转载】互联网巨头里的人肉木马

那我就转载到自己的博客中来呗!

转载自:https://ring0.me/2015/10/hacker-in-large-corporation/

可是原文已经被博主删除,本文内容被我在 inoreader 中订阅博主博客时看见的,觉得文章写的不错,被删除可惜了,便转载于此。

原文如下:


免责声明:本文内容纯属虚构,如有雷同,纯属巧合。

家庭版绿坝

A 君出生于一个程序员家庭,父母都是 996 的工作狂,家里堆满了各种电子玩意。在同龄人还在玩步步高学习机的时候,A 君整天却在死记硬背 dir、copy 之类的命令,以便把游戏从软盘里拷出来——对一个不懂英语的孩子来说,一个一个字母背命令确实蛮锻炼记忆力的。

身为网络工程师的 A 君父亲早就在家里筑起了绿坝,最早的作用是防止 A 君母亲通过网络找外遇,后来增加了保护青少年身心健康的功能。被墙的网站自不用说,各种黄网、游戏和电影下载站也被列入了黑名单,P2P 也不能幸免。最狠的是,这个绿坝像防火长城一样有关键词过滤功能——在那个 https 尚不普及的年代,封了关键词,这个词就像是从世界上消失了。

尽管游戏和电影还是可以从 U 盘拷进来,但毕竟还是自己动手丰衣足食,A 君的很大一部分精力花在了突破绿坝上。他从家里的黑客杂志上知道了 Backtrack 发行版,照猫画虎地学会了网络扫描,还到 CSDN 之类的论坛上提问。他发现,用网页代理就可以访问黑名单里的网站,而用加密网页代理就可以绕过绿坝的关键词过滤。A 君对穿墙的兴趣逐渐超过了对游戏的兴趣。

从穿墙到推墙

为了推倒绿坝,A 君在中考完的那个暑假疯狂翻阅各种黑客杂志,然而杂志上登的经典漏洞要么利用条件过于苛刻,要么早已被 A 君的父亲打上了补丁。月黑风高的一天晚上,A 君利用杂志上登的路由器 XSS 漏洞窃取到他爹的管理 session,然后掉进了 OpenWRT 的大坑。

为了弄懂这些网络名词,他从书架上找到了《CCNA 中文学习指南》《TCP/IP 详解》;为了编译 OpenWRT 程序,他从《RHCE 认证学习指南》里找 Linux 命令,自学了 C 语言。在交叉编译的时候,他发现了百度和中文资料的不靠谱,在 lingoes 的帮助下爱上了 Google 和英文资料。任务驱动的学习比上课真是不知道高效多少倍,一个高中生,在课余时间学到的知识比本科计算机专业学生还扎实。

A 君的父亲只需在扫地时瞥上一眼,就知道他搭建的绿坝已经被推倒或翻越了。A 君和他父亲的攻防战也日渐升级。这比跟防火长城玩有趣多了,自己开发一种网络协议就能翻越长城,而且在达到 shadowsocks 那样的知名度前不会有人找你的麻烦。

为了躲避父亲的追踪,A 君建立了遍布全球的僵尸网络,通过僵尸网络作为代理,用隐写的方法访问那些不存在的网站。按照 A 君的说法,就算防火长城以后搞白名单,他也照样有办法:搞定白名单里的几个网站,把代理流量通过国内的僵尸网络分散、伪装成正常的白名单网页访问,在白名单网站的服务器上再重组成与被封网站间的通信。

误入虎穴

比他爹还厉害的网络技术在高考时并没有什么卵用,A 君落榜了。父亲把他送进了某中部小城的南七技校,指望他学好挖掘机技术改变世界,不要走他的老路,做一辈子网管。父亲事先打听好了,这个南七技校不仅不允许学生带电脑,寝室里根本就没有网络,连手机信号都是时断时续的。父亲心想,这种远离尘嚣的地方一定能给 A 君创造一张安静的书桌。

自幼叛逆的 A 君自然不想认真学习挖掘机专业,而是整天往学校公共机房里钻。刚军训完不久,就破解了机房的还原卡。A 君从看雪论坛上找了一个磁盘过滤驱动,绕过还原卡的驱动,利用分区间的空隙,给硬盘装上了 grub 引导器。在启动的时候按一个键,就可以进入 grub 的操作系统选择菜单,启动 U 盘里的 Linux 系统了;而别人用这台机器的时候,grub 会引导本地硬盘的 Windows 系统,并没有什么两样。

进校不到一年,A 君在学校里就不用花钱了;对他来说,钱不过是校园卡数据库里的一个字段。好基友们也会以一顿饭的价格请他帮忙人肉,不管是女孩、老师还是情敌。A 君从不关心他的目标是正是邪,在明在暗,有没有危险;在他的眼里,只有技术问题。

常在河边走,哪能不湿鞋。通过学校打印店的 U 盘传播,A 君给某个与 Internet 隔离的神秘实验室种上了木马,收集信息后通过 U 盘和学校打印店,传回了他的僵尸网络。然而他没料想到学校会投入近 PB 的存储空间记录所有网络连接,也不会想到每台公共电脑的每个 Windows 事件都被上传、存档——你以为学校的正版系统仅仅是设置了个 KMS 服务器?

A 君被招安了。不过,被家庭版绿坝毒害了十几年的 A 君坚决拒绝了建墙的任务。

人肉木马

既然不喜欢受,那就攻吧。A 君向国际互联网巨头在中国的分部投出了简历。翻转二叉树难度的题目对 A 来说完全不是问题,然而他南七技校的学历和乏善可陈的项目经历还是把他挡在了大多数巨头门外。毕竟,有些事情是不能在简历上说的。

A 君最终被 X 公司网络组录用为实习生。A 君选择网络组,外人认为是他的技术专长在网络领域。实际的原因,一是因为网络组的工作需要比较高的权限,实习生的权限可能比其他组的正式员工还高;二是该组老板并不 push,每周例会前干一天的活来汇报就行了,这样就有充足的时间在内网里畅游;三是网络运维和网络渗透的工具大多是在 Linux 命令行下,远远看去都是黑乎乎的池塘里跳跃着珍珠似的白沫,在一家大多数人都在 GUI 下开着 IDE 的公司,在网络组用 Linux 命令行是最不容易被看出异常的。

X 公司在中国的分支机构规模庞大,与政府的关系也不错。无数黑客向往的 X 公司源代码并不是此次行动的目标,因为国外公司想要把产品卖给中国政府,就必须交出源代码通过安全审查。此行,A 君的任务是给 X 公司做个人口普查。

权限!权限!

入职几天,A 君就发现了这家互联网巨头的尿性:外紧内松。说是 9 点上班,但 10 点钟也未必能到齐,组会一般是 10:30 开始,A 君所在的组则干脆避开了上午开会;说是禁止安装白名单以外的软件,然而麻花疼家的软件、某某云、远程连接助手之类的还是大行其道;说是员工卡需要佩戴在显著位置,而员工卡是否戴在外面却成了区分新人和老人的一个标志。

实习生一般是在一个低权限的域,基本上除了上网不用翻墙以外,跟在自己家上网并没有什么两样。公司的办公电脑和服务器都会强制推送和安装安全更新,在 Internet 上屡试不爽的经典漏洞,在这里不仅毫无效果,还可能被警觉的网管发现。服务器之间通信是 IPSec,公司内部网站是 https,Wi-Fi 热点也早已部署了 EAP,网络上根本没有中间人插足的地方。A 君开始感叹,要是当初进了那家传说中 95% 代码都对全部员工开放的公司就好了。

然而这里是网络组,低权限的域不能直接访问服务器,时常要借用别人的账号,很影响工作效率啊。A 君很快名正言顺地转移到了一个与正式员工权限相同的域。X 公司里申请权限就像在政府办事,总是要几个工作日的,虽然大家都知道不过是点几下鼠标的事情。几番催促,A 君终于拿到了干活所需的大部分权限。

昼伏夜出

A 君所在的实习生工作区是开放式的大厅,尽管大多数人并不懂黑客技术,但大公司藏龙卧虎,总会有人懂的,要是让看到了就不好了。在摸清巨大内网的底细之前,贸然建立到僵尸网络的隧道以便回家操作,也是非常冒险的。

不过 X 公司有一点好:不打卡,半夜不关门。组里的会议也都是在下午。正好有几个人总是喜欢在工作区里讨论问题,A 君就以嫌吵为由,中午快吃午饭的时候才来,晚上一两点才回去。中午和下午干公司的活,吃完晚饭之后开始处理这一天来脚本收集的数据,等到八九点人走得差不多了,就开始渗透下一个目标。

红军在大渡河西岸夜行,路遇东岸的国军,国军点起了火把,红军也点起了火把,伪装成国军的番号,找四川人同国军喊话。半夜在公司网络里鬼鬼祟祟地行动,万一路遇网管查岗,也得要有个来头。

A 君想到了 IT 部门。IT 权限极高,对系统的理解却不怎么深入。每当机器出问题的时候,一重启,二重装,三换新机器。IT 部门禁止用 U 盘,他们自己却不怎么遵循这个规定,于是 A 君决定把误入虎穴那场戏再演一遍。

A 君把自己的办公电脑删掉了几个注册表项,无法访问网络驱动器,然后让 IT 的来修。IT 惯常是从网络共享文件夹里找 SysInternals 系列工具的,但这次的问题恰好就是无法访问网络驱动器。IT 觉得这问题没有大到要重装,就从 U 盘里拷了工具来。U 盘一插上去就中招了。

A 君的收获是 IT 部门一位员工的邮件往来记录。从这 100+ MB 的几千封邮件里,A 君知道了 IT 部门办事的流程和行话,也搞清楚了为什么点点鼠标的事情需要几个工作日。 “这样尾大不掉的公司迟早会被埋进历史的坟墓,我帮它抢救出一点遗物,说不定对别人还有用”,A 君想。

暗度陈仓

在官僚主义盛行的地方,糊涂有时反倒是福。一个技术这么强悍的人,怎么会是在技校上学,又怎么会来这里做廉价的实习生?名牌大学计算机科班出身的老板们自然是不能理解。A 君在会议上时常犯一些弱智的错误,比如键盘敲错键啊,网络的二层和三层分不清啊,算错数啊。老板问起话来,就像是老鼠见了猫,犯人见了狱警。

渐渐地,老板们对招 A 君进来的面试官就颇有微词了:招人还是要看出身啊,别看他简历吹得天花乱坠,真正干起活来,还是啥也不会。老板对 A 君放了羊,A 君自然就有更多的自由做自己的事情了。

A 君白天和晚上的工作都是在公司网络里摸来爬去,免不了跟 IT 打交道。时间久了,IT 成了 A 君的朋友,而运维和 IT 是 A 君的同事们最看不起的行当。 “他整天跟修电脑的混在一起,不会有什么大发展”。再加上 A 君经常折腾起网络来就不愿挪窝,同事们一起吃饭的时候也渐渐不叫他了。不过对 A 君来说这是好事,脑子里天天装着不能说的项目,万一吃饭的时候说漏嘴了怎么办。

直捣黄龙

A 君人口普查的任务事实上并不难。入职第一天,一打开 Outlook,就会开始同步几百 M 的一份大通讯录。这份通讯录尽管很有价值,但人肉木马就带回来这么点唾手可得的数据,也太侮辱 A 君的智商了。

更详细的信息,比如每个人的老板是谁、属于哪个组、什么时候入职的,还是要到域控制器里去寻找。域控制器是整个公司权限机制的核心,故喻为黄龙。A 君用 ADExplorer简单看了一下,发现这域控制器可不简单,一个域在世界各地就有几十个备份,每个地区会就近访问自己区域的域控制器。试图监听域控制器之间同步的通信并不可行,因为通信都是 IPSec 加密的。A 君转念一想:如果我把自己伪装成一个备份,是不是主域控制器就会把数据同步过来呢?

A 君在虚拟机里搭建了一个域来实验,发现尝试新加一个备份需要主域控制器的管理员密码,这恐怕不在本部门 IT 的手里。任何域里的人都能下载到域里的大部分信息,也就是 LDAP 目录本来就是允许 “拖库” 的,其中包括了用户帐户信息、域内计算机信息、域控制器信息;然而用户密码等信息是并不能通过 LDAP 协议查询到的。

智取域控

A 君做了一件大胆的事:冒充域控制器!他首先在服务器上搭建了一台网络配置、本地配置和安全描述符与本地域控制器一模一样的虚拟机,然后试图把本地域控制器踢下线。然而公司的交换机对 ARP 欺骗有防御,看来是只能让本地域控制器宕机了。DoS 显然不是上策。

不过公司的服务器都是用 iDRAC 远程管理的,它的背后则是 IPMI。A 君利用 IPMI 2.0 空加密的经典漏洞获取了服务器的远程管理权限(这个漏洞是固件里的,并不容易修补)。然而一个子网的服务器的数量数以千计,IPMI 的 IP 地址跟主机的 IP 又没有简单的对应关系。好在控制台登录界面操作几下就能看到主机名,于是 A 君写了个模拟鼠标键盘和图像识别的程序,对每台机器截取控制台登录界面的主机名,终于找到了本地域控制器的 iDRAC 远程管理地址。

接下来的事情就好办了,通过 IPMI 让本地域控制器断电,把假的域控制器接入网络,它果然就开始从其他域控制器同步数据了。漫长的同步过程,A 君的心是焦虑的,万一哪个域管理员半夜过来检查,就玩完了。不过这是小长假的第一天深夜,公司大楼静得吓人。就算有人,恐怕也是赶 deadline 的苦逼码农和线上出事紧急修复的苦逼运维。清晨,IT 部门大概会收到一封报警邮件,说域控制器电源中断了几个小时,然后等到假期结束,去机房检查一下电源线是不是松了。

逃避网络风控

拿到数据距离使命完成还很远。A 君还年轻,他还想全身而退。从主域控制器流出的几十 G 数据同步流量并不会引起警觉,然而如果从那台虚拟机拷贝到自己的工作电脑则很可能触发报警。

A 君说,公司网络的风控如同金融行业的风控,并不是以流量的绝对值来衡量风险大小的。两个国企账号之间转帐 100 万是毛毛雨,而一个中产家庭的账号给一个新开的异地陌生账号转账 100 万却看起来有些蹊跷。网络风控系统关心的是数据的流向和相对大小,而非数据流量的绝对大小。如果从主域控下载了几十 G 数据到服务器上的虚拟机,再到工作电脑,在风控大脑面前,这跟工作电脑从主域控下载了几十 G 数据没有什么区别。

把上 T 的数据传出去,就像是要把 100 万的钱洗干净,“把每 M 数据想成一块钱就行了”。只有把这些数据打散、用看起来正常的网络访问封装起来,慢慢地传递到公司外面的僵尸网络,才能躲避网络风控的追查。

A 君在跟他父亲的网络攻防战中就用了这一招,当时他的僵尸网络只有几百台肉鸡,下个上 G 的电影还是不成问题;而如今,组织给他分配的僵尸网络他自己也搞不清有多大——因为这些肉鸡不会在同一时间上线——然而 A 君认为传个 1 T 的数据还是足够了,每台机器分到的数据大小,就当是下载系统更新了。

分发木马

然而,这些数据还是不能从源头直接分发给僵尸网络,最好是通过内网的其他机器再分发一次。要在公司内网里面搞木马,用钓鱼邮件之类的显然行不通。A 君想到了网络过滤系统,就让那些防毒系统自己成为病毒的分发者吧。

比绿坝先进 N 倍的过滤系统部署在公司的网络出口上。A 君来公司第一次打开 Wireshark 就知道了网络过滤系统的存在,这是他跟家庭版绿坝的多年斗争中练出来的直觉。A 君拿出珍藏的抓包记录,指着时间一列说,你看 TCP 返回 ACK 的时间这么短,而返回数据的时间这么长,一定是中间的代理服务器首先返回了。

A 君自己的博客有次用了红色调,就被当成 porn 给封杀了。“这个网络过滤系统会判断网页上的颜色”,尽管 A 君没有权限也没有文档,但凭借嗅探工具和漫游内网的经验,他有信心这样说。

内网风控系统、内网过滤系统往往是第三方公司做的,公司里面就算首席大网管也未必知道这里面的猫腻。各种复杂的防火墙、加速器、缓存、监控、QoS 设备已经使网络变成了一个气象万千的混沌系统。 “小的软件也许作者是最清楚的,而大的系统就非跳出来看不可;身在庐山中的程序员、QA 乃至产品经理,都是难识系统真面目的”,A 君悠悠地说。

缓存投毒

X 公司的网络过滤系统除了封杀 “不当内容”,还能做缓存。也就是下载一个看起来像是静态的文件,就会被缓存在网络出口上。以后公司内的人从同一个网址(URL)下载文件,就不用再去下载一遍原始文件,而是公司内直接给返回了。天朝的小区缓存竟然大公司也在用,A 君刚发现的时候着实被恶心到了。

A 君找了一些程序员常用工具的 URL,通过代理下载下来,植入木马,放到僵尸网络上,然后篡改本地 hosts 文件把域名解析到肉鸡,从公司内访问这些 URL。如果下载下来的工具是不带马的,说明是已经被缓存了,这个 URL 不能利用;如果下载下来的是带马的,很可能已经缓存了,A 君稍后再确认一下就行。

一想到整个园区数千开发人员从官网上直接下载的工具竟然暗藏机关,A 君就掩饰不住干了一件大事的激动。就这样,A 君让公司里数以百计的计算机成为了肉鸡,每台机器去数据仓库下载几 G 资料,再伪装成 HTTP 请求,分散在一周的工作时间内慢慢发送到僵尸网络里。半年的精耕细作,A 君迎来了最后的丰收。

X 公司封锁了公司外的 UDP 53 端口,大概就是为了防止使用公共 DNS 导致 DNS 投毒;然而他们似乎忘记了公司内部自我投毒的可能性。对开发人员用的软件实行白名单制度,看似不近人情,也少有人严格遵守,仔细想来还是颇有安全意识的。

请神容易送神难

A 君早已离职,他在 X 公司的大部分足迹也在临走的时候擦干净了,然而他与 X 公司内网的联系远未终结。被投毒的缓存几天就会过期,感染了木马的系统下次重装时就会干净,然而 A 君希望他的后门能够经受住时间的考验。

A 君最后的足迹留在了网络启动服务器上。X 公司不论桌面电脑还是服务器,装机的时候都是从 PXE 网络启动进入自动部署系统。每位新员工入职时,这个自动部署系统就会把硬盘擦除、重新分区,并用类似 Ghost 还原的方法装上 IT 定制的系统。A 君注意到,尽管 IT 定制的系统镜像会升级,有 Windows 也有 Linux,pxelinux 系统引导器的第一行字Copyright (C) 1994-2009 H. Peter Anvin et al 却定格在了 2009 年。

这个 PXE 系统引导器大概不会经常升级吧。A 君给 pxelinux 做了一些手脚,每当网络启动的时候,它就会往本地硬盘里写入一些恶意代码。在 UEFI 有内核签名的今天,引导区病毒还有藏身的余地?A 君不肯透露细节,只说,硬件的水是最深的,硬件里面的调试模式是潘多拉魔盒。

后记

作为搞过交换机芯片的人,我的确觉得硬件的水蛮深的……交换机这么多家厂商,不同型号的价格差这么多,其实里面的芯片很多都一样,只不过装上了不同的系统,套上了不同的外壳。一旦进入芯片的调试 shell,就解锁了交换机的所有强大功能,只是这个 shell 的入口并不好找,调试 shell 既没有文档也不好用。硬盘、内存乃至 CPU,大概也有这样的神秘后花园吧。

当我们这种凡人日复一日地重复着老板布置的任务时,A 君这样的人却在完成一个人挑战一个巨大组织的战斗。A 君在隐私方面的观点一直颇为偏执:一个人没做什么见不得人的事,就没必要有什么隐私。我们在拼命修补漏洞、保护隐私的时候,在 A 君看来,也许就像是孩子把写着小心思的笔记本藏在家里的某个角落,肤浅、幼稚而又不希望被人说破。

最后重申,本文纯属虚构,不要问我 A 君是谁,也不要问我 X 公司是哪个公司。

Tag:repost Published under (CC) BY-NC-SA
comments powered by Disqus