一念Jeff LiWriting · zhipeng.li中文

Issue 0x47, Phile #0x02 of 0x11

At ten he wanted to learn C but had nowhere to study it, so he got his start cracking chess database protections, and in college he ported tools to AIX and HP-UX. BSDaemon talks about how the chessboard trained his patience and perspective, how a single line of rand() from Shay Gueron led to data-only attacks, and about SMM rootkits, the Pwnies, H2HC and the people behind them who truly share knowledge.

Phrack PROPHFILE ON BSDaemon

姓名: Rodrigo Rubira Branco(我归咎于 rcvalle 很久以前说服我公开我的名字——至少在将我的用户名与我的名字关联之前,我已更换了用户名,算是全新开始)

用户名: BSDaemon

**用户名起源:**我最初是 NetBSD 的粉丝。直到后来在 IBM 工作期间,我才开始欣赏 Linux 的优点(也就是:代码可能更杂乱,但对特定硬件特性和功能的支持更深层)。

**别名:**这些都埋藏在遥远的过去了。让 cert.br 为此哭诉抱怨去吧 :)

国家: 巴西

网站:

https://www.kernelhacking.com (不过这个网站很旧、未更新,而且丑陋)https://twitter.com/bsdaemon

**GitHub:**https://github.com/rrbranco/ (理论上我会把所有演讲、论文等发布上去……实际上,我非常没条理,经常忘记在那里备份东西)

|=—=[ 背景

说起来也真不知道该说些什么。我很早就开始使用计算机,但直到 10 岁时,我才开始认真对待它们。因为我那时太小,没有人愿意让我参加编程课程,而我又非常渴望学习 C 语言(关于这种痴迷为何开始,现在已无从考究)。我妈妈走访了各种培训机构,看看有没有人愿意接纳我,最后有人建议我干脆开始使用 Linux,因为它是开源的,我可以自学。

当时根本没有所谓的“安全产业”,我开始做越来越多的低级操作,主要出于破解的兴趣(我从 4 岁开始下棋,并一直参加国家及国际比赛,至少直到 16 岁。棋局和棋谱数据库太贵,所以我学会了如何破解它们的保护机制,不仅为我自己,也为我的朋友们。当时巴西还没有软件保护法律,因此我的家人实际上为此感到非常自豪)。我可以说,正因为下棋,我培养了耐受“痛苦”(或挫折)的能力、长时间专注的能力,甚至获得了一种以不同视角看待问题的方法(我无法详细解释,但那是一种将事物相互联系以激发新想法的方式)。

这些至今仍是我的优势。同样因棋艺,我得以进入一所非常优秀的小学(否则我的家庭负担不起,而巴西的公立学校又普遍较差),这给了我一个机会进入另一种类型的高中(我们称之为技术高中,本质上是一所高中,除了常规课程之外,还教授一门职业技能——对我来说是信息系统)。这所学校虽然是公立的,但因全日制且属于极少数优秀选项之一,入学考试非常严格,比我们某些大学还难。技术高中非常棒,因为我可以使用大型 Unix 计算机和超高速互联网。

鉴于我对低级编程和 Linux 的熟悉,我先后获邀在学校和大学实习,这使我有更多机会接触这些系统。大学使用 PowerPC(AIX),于是我开始将工具移植到该平台(而且他们还有一堆闲置的 HP-UX 系统,我也开始移植工具到 HP-UX 上)——我想现在大家就能明白,为什么多年后我为那些平台写了那么多漏洞利用代码。也许值得一提的是,我还曾在巴西的空军学院(ITA – Instituto Tecnológico da Aeronáutica)学习。我进入那里的过程很滑稽:他们邀请我做一场关于多态 shellcode 的演讲,那是我早期研究领域之一。演讲结束后,他们邀请我加入一个安全嵌入式操作系统项目,作为交换,他们让我在那里继续学习。我必须说,这对我的人生意义重大。

我学会了正规化知识、理论和数学的重要性,多亏了一些杰出的教授。我至今仍难以相信,当时尽管我惹出了不少麻烦(例如,将酒精饮料走私进基地——因为大学位于空军技术司令部内,基本上就是我们主要的空军基地),却没有人把我赶出去。

|=—=[ 灵感

真正激励我的是这个真实的社区。我之所以说“真实”,是因为当有人为别人做事与为自己做事时,差别极大。我相信真正的社区精神关乎他人,是关于共享知识,超越了职业或个人利益。有时候,这种精神甚至会损害个人利益!

我热爱艰难的挑战,并尽我所能改变世界。我想,随着年龄增长,保持那份激情会越来越难,也很难天真地认为我们能改变一些重大且有影响力的事物。但我总是努力不忘那种情感。我不相信英雄,但我确实钦佩他人的某些行动和选择。下面列举几个例子:

•理查德·费曼:对我来说,他是一个极具代表性的例子(特别是他对“体制”系统性愚蠢的尖锐批评)。

•米哈伊尔·博特维尼克(国际象棋世界冠军):即便三度蝉联世界冠军,他仍会听收音机上的国际象棋课程,以免忘记“基本功”。

•加里·卡斯帕罗夫(在他几乎转型为政治家之前):我仍记得在一次《与世界冠军共度一天》的专访中,记者与他一同下水游泳。游了几个小时后,他问记者:“你就这么放弃了吗?”那种对胜利的执着和对成为最优秀者的痴迷令我深受启发。奇妙的是,这也让我想起电影《盖塔卡》中,一个拥有“劣质”基因的人与一个“优质”个体同游,过了一会儿那个优越者就再也坚持不住。当他疑惑对方为何能做得比自己好时,答案竟然简单地说:“因为我没考虑回报。”我认为,奉献精神正是最大的优势。

•亚历山大·科托夫:他写的《象棋大师的思考方式》详细阐释了下棋时如何考虑多个变化和比较各种可能性,这成为我研究任何课题时的基本方法。仅仅通过说明如何处理琐碎问题,就能产生如此巨大的影响,实在令人印象深刻。

我觉得在我的人生旅程中遇到许多伟大的人,是我莫大的福分(或说幸运)。我仍记得一些老板(他们必须“管理”我,以便让我能保持自我而不惹大麻烦)、那些花时间帮助我重视那些我曾(错误地)认为不重要的事物的教授,以及那些相信疯狂想法并帮助我将其变为现实的朋友们。没有 pirata 和 coideloko,我想我不可能取得那些人眼中的“成功”。

|=—=[ 早期影响

唉,我想在“背景”部分中已经透露了太多了 :)

我确实要说,我的父母和其他普通人一样,有他们的局限,但他们真的非常爱我。我的妈妈不遗余力地支持我。她经常坦言,她不知道“如何做才是对的”,但她会带我去参加国际象棋比赛,在学校为我争取机会,激励并信任我。我还记得,父亲曾带我去圣保罗旅行,教我如何自力更生。他告诉我,能接触大城市的事物对我极其重要,而且我几乎不需要花多少钱(比如,坐夜班巴士以省下住酒店的钱,在巴士站睡觉因为那里“安全”,去“自由区”附近的旧书店等)。尽管我的父母之间交流不多,但他们为我做了很多。

我所在高中的一位校长对我产生了极大的影响。有一阵子,我对计算机产生了厌倦,觉得一切都是愚蠢的,打算转行。那时,当地一所私立高中因国际象棋的原因给了我奖学金,所以我决定放弃那门课程。我的妈妈与那位校长交谈过,他甚至专程到我家来与我谈话。我不记得他说了些什么,但他确实说服我继续坚持。要不是他不惜一切地帮助别人,我的人生可能会截然不同。

有趣的是,在黑客活动中,我的主要灵感来源于大家在网络上交流信息。那个社区和那群朋友让我不断深入探索各种主题,并促使我努力成为一个平等的人。我必须特别感谢 pipacs 和 spender:即使在我还不认识他们(后来我们成为了朋友)之前,我就从他们开发并自由分享的代码中学到了很多东西。比如 pax-future.txt,简直疯狂!仿佛预见了未来。还有那篇关于“malloc maleficarum”的论文,对我也启发颇深(我喜欢其中的一切,连写作风格和标题都令我印象深刻)。w00w00 那篇《论堆溢出》的文章虽然简单,但后果重大(我记得那是我第一次开始考虑数据相邻性以及如何强制数据相邻——为新想法敞开思路)。

最后,我必须说,Shay Gueron 和 Sergey Bratus 也完全改变了我。

向 Shay 求一个挑战

我是在对英特尔感到厌倦、想离开时遇到 Shay Gueron 的。有一次在派对上,一个陌生人告诉我直接给 Shay Gueron 发邮件,向他求个挑战。在那之前我从未见过他,我便按“嘿 Shay,我们素未谋面,但我刚遇到某人,他们建议我向你求个挑战……我在英特尔太无聊了,如果找不到有趣的事,我就走人”这种思路给他发了邮件。他回复说:“好啊,看看这个,告诉我你的看法”,并附上了几行伪 C 代码。代码大概是这样的(可能稍微复杂些,但大体如此):

variable = rand();

 if (variable == <SOME LARGE VALUE>) // 我们能找到一个这种情况能预测发生的例子吗?
 printf("\\nsuccess\\n");

我记得看到代码时,第一个想法是:“哦不,又一个典型的英特尔员工……我得离开这里。”但心里总觉得哪里不对劲,忍不住想:“难道我错过了什么吗?”最糟糕的情况是,有人认为别人愚蠢,而其实愚蠢的是那个这么想的人 :)。毕竟,我查过了 Shay,他在加密领域成就斐然。而在工作中,他还积极编写汇编代码实现算法……肯定有我所忽略的东西。突然之间,我恍然大悟!Shay 无言地告诉我:在内存加密的系统中,任何内存改动对攻击者来说都是随机的(因此,variable = rand() 意味着攻击者拥有任意内存写入能力,但数据是不受控制的)。这个 if 条件基本上是在问:“是否存在任意写入不受控数据到内存中会落在可预测位置从而带来优势的情况?”Shay 虽然没有漏洞利用背景,但他直觉上认为纯数据攻击是可行的。他还觉得我们可以预测到这些位置,即便我们“看不见”实际数据。与他在这一研究领域的合作,真是令我震撼!

我是在慕尼黑参加第一届 Troopers 会议时认识 Sergey Bratus 的。我记得那次晚宴,我坐在他和 djb 的旁边,他们整晚讨论数学和软件安全,而我则默默吸收一切。多年来,我有幸与 Sergey 成为朋友。他将具体问题抽象为一般问题类别的能力令人惊叹,这帮助我转变了看问题的角度。此外,他对整个世界的认识也激励我不仅局限于计算机领域。

|=—=[ 收藏

(以下为我喜欢的事物——书籍、网站、漏洞利用、人物、软件、音乐以及我愿分享的其他东西)

书籍 —— 很难排出前五:

→ 《象棋大师的思考方式》

→ 《软件安全评估的艺术》

→ 《你一定在开玩笑,费曼先生》

→ 《集合论哲学:康托尔的天堂的历史介绍》

→ 《计算机程序设计艺术》

网站 —— phrack.org(以及各篇文章的链接?)

漏洞利用 —— 我的收藏总在变化。不幸的是,公开漏洞利用的质量与过去相比有所下降。Chris Valasek 关于 IIS 的漏洞利用(在 Infiltrate 会议上展示过)仍然令我赞叹(因为我看过那个漏洞,认为根本不可利用)。Mark Dowd 关于用户态程序中空指针解引用的工作也让我印象深刻。最近 Qualys 的工作出色,而 qmail 的漏洞在我心中有着特殊的地位。

人物 —— 我想我在其他部分已提及,但 pirata、coideloko、Shay Gueron、Sergey Bratus 均位列我的首选(还有很多其他人,不包括那些已故者,因为他们无所谓上榜)。

软件 —— 开源软件。当然,我可能会把 IDA 列入非开源软件,因为 Ilfak 实在是个了不起的人。

音乐 —— 我不怎么听音乐。我喜欢巴西乡村音乐和 forro。如果必须在电脑前听点东西(例如在嘈杂的公共场所),那就听 Prodigy(无歌词版)。

其他 —— 我可以分享我最喜欢的枪械和军事车辆 :) 但这些还是喝酒时细聊为好。所以,我最喜欢的饮料是 Jack Daniels(我喝酒是为了喝醉,而 Jack Daniels 无处不在且便宜,这正符合我的标准)。在个人方面,我最珍视的是我的孩子和妻子。谈到个人成就,虽然人们的自豪点会随时间改变,但我永远记得当时那种幸福感:

  1. 我的第一篇 Phrack 文章被接收(题为《论 SMM rootkit》)。我之所以开始研究,是因为英特尔手册中提到 SMM 的用途,结尾写着“以及其他用途”,而我找不到其它公开文档中提到的用途!

  2. 我获得了一个 Pwnie,对我来说,这在那些低调的研究中尤为特别。我不喜欢炒作(那漏洞是个极其复杂的 IOMMU 漏洞,我和 pirata 之所以写出完整漏洞利用代码,仅仅因为英特尔的人都说它“太复杂,根本利用不了”)。结果,竟还有一个完全未参与的人也被归功于此漏洞,但无所谓,依然有趣,功劳是加倍而非分摊!

  3. 最佳进攻性成果:我想这是个不公开的项目。我自豪地说,我做了那些别人之前做不到的事情(有时甚至之后也无人能做),而且是团队协作,充满了健康的竞争(也就是大家玩得开心)。我的唯一原则是大家必须一起开心(如果我们取笑某人,那下一个笑话目标会不会就是我们?只要这种“取笑”的目标和来源不断公平轮换,那就继续游戏)。

  4. 有那么多人告诉我,我在某种程度上帮助了他们,改变了他们的生活。他们不断前行、将影响更多人,而这远超过我个人能做到的。这对我来说,H2HC(稍后会提到)就是我做过的,也许是我最大的贡献。

|=—=[ 难忘经历

我在其他部分已经分享过一些,但也有一些灾难性的经历可以讲讲 :)

我仍记得第一次在阿联酋做演讲时的情景。每次演讲前我都会超级紧张(尽管到现在我经验不少,仍然好几天睡不着觉)。演讲结束后,一个“家伙”走来和我交谈。周围还有几个人,但我专注于那个人。他说:“演讲真棒,我非常喜欢……这是我在会议上最喜欢的演讲之一”(或类似的话)。我当时高兴极了,混合着演讲结束后的平静,我感激地拥抱了他!突然间,其他人把我拉到一旁,说这里气氛紧张。会议组织者走过来道歉,我却不明白自己究竟做错了什么。原来,这个人竟然是阿联酋高层中的一位,而旁边的人都是他的保镖……显然,对权威亲昵是不允许的。

我可能有太多这样的经历,而我依然总是不知不觉地让自己处在尴尬境地,所以我只好接受这就是我的性格,有时反而是一件好事,你懂的。外面太多“专业”、“按规矩办事”、以及本质上“虚伪”的人了。

技术失误的教训

我还记得一些技术上的例子:有一次我报告了一个本地提权漏洞,连同漏洞利用代码一并提交。我在那个系统上以 root 身份测试所有代码,却没发现权限下降的情况。这教会了我不要因兴奋而急于求成,也让我认识到同行评审的重要性。最糟糕的一次,是我将一个 PaX 特性移植到 PowerPC 上。pipacs 和 spender 非常耐心地指导我,审阅了我写的文稿,他们花的时间可能比他们自己移植时还多。我写过一些内核模块进行测试,当时在 Qemu 和一台旧 Powerbook 上运行测试。经过所有这些测试后,还有几个地方需要加上检测,而这些基本上都是同样的指令,所以我只是简单地加上检测,却没有重新运行所有测试。其中一条指令稍有不同,实际上只是在指令中多了一个“o”,用于调用我们所需的溢出追踪,原本微不足道。但结果却搞砸了,而且最糟糕的是,团队里的其他人因此受到责备。这让我感到非常自责。

|=—=[ H2HC 是如何诞生的?最初/当前的挑战是什么,你又如何看待它的未来?

Hackers to Hackers 会议今年迎来了 21 周年。这次会议最初是两个朋友 dum_dum 和 dmr 的主意。他们希望创建一个会议,让那些仅在网上相识的人能有机会见面。当时,大多数安全会议都是以“防御”为主,所以他们希望强调“进攻性”内容(以及真正的研究)。从一开始,他们就邀请了其他朋友(我记得总共大约 8 人),并联系了巴西其他安全研究团队。

正如我之前提到的,我们在圣保罗组织了 2600 聚会。当他们第一次提出在巴西利亚(首都)举办 H2HC 时,我提交了一场关于多态 shellcode 的演讲。到达酒店时,我发现前一天根本没有预订房间。那是深夜,我也没有通过 IRC 或用户名获得任何实际联系。我问前台:“嘿,你见过那些看起来疯狂、全身黑衣、周围带满电脑的人吗?”那人告诉我他们在一个房间里。我让他打电话过去,但因深夜他不愿意打。我打赌他们肯定都醒着在编程。他打了电话,果然如此。我就住进那个房间,与其他 7 个人共用(本来一个房间只住 2 人)。整个活动的组织也大致如此(或许至今依然如此):许多人在演讲时都没有准备幻灯片,大家也不清楚该去哪个房间……因为我在现场帮忙,所以从第一届起我就算是“参与了组织”。他们正式邀请我加入第二届,我也欣然接受了。

事情进展得很顺利,我们依然保持友谊(我称他们为“原始成员”,并持续收集他们对会议进展的反馈和意见,我觉得这是保持我们初衷的关键)。虽然一切都是集体决策,但显然某些事务比其他事务更复杂(比如预先支付费用)。还有关于赞助商是否会“影响”会议方向的担忧(我们如何确保赞助商不会左右会议内容?大批工作需要协调,多人讨论使得效率极低)。到了第五届时,我告诉大家我想退出。他们经过讨论投票,决定让我接手,但承诺保持会议的原有精神。之后,我邀请了 coideloko 来协助,我们一直走到现在(现在 pirata 的职责也越来越多)。我们依然保持非营利性质(现已有一个官方非营利组织支持会议)。我们还有一个技术委员会,对所有演讲稿拥有否决权(即便我想邀请演讲者,也必须将其演讲资料提交委员会审核,好比是一份投稿)。赞助商没有固定的赞助名额(我们确实失去过坚持要插手的赞助商,因为有些赞助商对他们的“高管”演讲未被接受感到不满)。我们相信,真正合适的赞助商会明白这是一个社区活动。

团结各个社区

我们强调社区内部的合作。例如,我们希望赞助商能以有意义的方式互动(去年我们的一位赞助商竟然是一家纹身店——想到有人真的纹上 H2HC 标志真是疯狂!)。我们举办了大量活动和研讨会,试图团结各个社区。我设法联络到了 Slackware 社区(巴西有很多 Slackware 开发者),有一年我们甚至在 H2HC 内部举办了一个 Slackware 分会场。巴西的 BSides 会议最初也作为 H2HC 的一个分会场出现(因为前几年会议很难办起来,没有足够参会者就拿不到赞助,这意味着需要先垫付资金,所以我们就免费提供了场地)。我们竭尽所能地为大家传递知识,就像去年我们免费举办了一个传统 BIOS 工作坊。我们不会向那些想在会议上展出的“书店”收费,我们只要求他们提供“免费书籍”,然后我们再捐赠出去。此外,尽管我们的门票非常便宜(注册刚开始时大约 USD 50),但我们依然为那些买不起票但理应参会的人提供大量免费门票。会议现场还是开放酒吧(提供威士忌、啤酒和汽水),因为我们一直相信这有助于营造氛围(不出所料,虽然偶有因酒精引发的冲突,但大多都平静且积极)。

我认为,主要的挑战其实是我的年龄 :) 你看,要保持社区的联系,不同世代的人需要相互理解、协作。我们为演讲者举办的派对非常出色,但要保持大家处在“合适”的节奏上,真是越来越困难。每个人都以自己的方式享受生活。好在我们获得了越来越多的帮助,我对此充满希望。

安全已经成为主流,安全研究也成为一种职业。但很多人无法区分安全研究与黑客及其社区,它们不是一回事。我们希望社区蓬勃发展,因为我们相信知识应该惠及所有人。这意味着“安全产业”会因有才华的人才而受益,但那绝不是我们的目的。有些赞助商明白这一点,有些则难以接受。举个例子,我们曾经历过著名的“卫生间泄露事件”。我们不知道是谁发起的,也不清楚缘由。我们甚至不知道维持这一现象的人是否是同一人或同一群体。但基本上每年,卫生间都会出现“泄露”(通常是来自安全领域知名人士或公司的账号等)。也许通过适当安装摄像头和监控可以找出真凶,但既然我们既不帮助也不采取任何阻止措施,那也无可奈何。有一年,一个团体寄来印有他们攻破对象名单并公开相关信息的 T 恤。我在会议上收到一箱 T 恤,没人跟我解释原因,也没提前通知,但我们收下后就分发了出去 :)

有些人很难理解,黑客社区本质上就是一个社区。黑客就是关于社区的。它会挑战规则,试图掌控反叛,只会扼杀那种精神。最终你会看到,“技术委员会”里几乎没有真正的技术人员;你会看到赞助商不仅控制他们出资的演讲,也试图左右不该出现的演讲。适度的混乱反而有助于整个社区凝聚,从中涌现出大量人才,而其中许多人不会从事那些更“可疑”的行为。如果你不理解真正的社区,若你并非其中一员,请给他们一些宽容,享受其中的好处。不要试图改变你不了解的东西(顺便说一句,这适用于所有事物——在改变之前先了解)。

|=—=[ 你最自豪的成就是什么?

我的孩子。我的婚姻 :)

从职业上讲,我相信我建立了一个出色的团队,他们真正相信自己在做的事,做出了别人之前(甚至之后)无人能及的事,并且能以健康的竞争精神(也就是玩得开心)协同作业。我的唯一原则是,大家都应该一起开心(如果我们取笑某人,难道下一个笑话目标不会变成我们?只要这种“取笑”的对象和来源不断公平转换,那就继续游戏)。我自豪地说,我是一个做自己坚信之事且乐在其中的专业人士,我之所以这么做,是因为这件事本身正确,而不是因为别人告诉我该做;我不是为对我的职业有利,也不是为了外表好看而做。要做到这一点真的非常不易。很多人认为这样做“不专业”,因为我选择反对和争论,而不是“不同意后便草草应付”(注意,这里的“草草应付”非常重要,因为有时通往同一结果的路径有很多,而没有进展的争论同样不好)。

对于社区,我相信我最自豪的成就包括 H2HC、我对其他会议(OffensiveCon、LangSec 及过去其他会议)的贡献,以及我对后辈的指导。

|=—=[ 你有什么令你不自豪的事情?

我想,在试图做一些我坚信对公司生存至关重要的事情时,我烧毁了许多桥梁(尤其是关于英特尔和旁路攻击的部分)。多次,多位高级副总裁和执行副总裁告诉我,旁路攻击关系到英特尔的生死存亡,是过去十年计算机行业面临的最大问题。

英特尔是一家步调缓慢但极富人情味的公司(除了裁员,几乎没人会被过度透支或陷入真正的麻烦)。我们不得不学习许多我们原本不懂的东西,测试许多我们无法接触的内容,在前所未有的环境中进行大量测试,同时为许多我们无法主导的用例设计缓解措施。所有这一切都要在缓慢、官僚的体系中进行,而且牵涉到律师(比如,我给老板发邮件之前必须先经过法律审查)。

我的想法是:我会让这件事发生,即使我必须绕过许多人。理由很简单:如果我不这么做,而公司最终因诉讼破产,那么那个人也会失业。依我看,被我冒犯的那个人总比成千上万失业的人(再加上数百万受影响的用户)要好得多。这简直是不二选择。用《盖塔卡》式的思维,我从未考虑过回报(也就是说:这一切结束后会发生什么?你会被看作那个不得已为之的人还是别的?)。我对这一点充满信心,以至于完全不考虑自己(尽管包括我妻子在内的许多人都曾警告我)。我坚信那是正确的选择。

两年半的拼命与代价

因此,我连续工作了两年半,每天至少 14 小时,包括假期和周末。我为了在英特尔工作推迟了蜜月;圣诞、新年等节日我都在公司。我记得有时凌晨 3 点回家,凌晨 5 点起床向同事汇报当天成果,好让他再向 CEO 汇报。虽然一些管理层对此表示赞赏,但也有些人毫不在意(他们只是等待退休并拿到丰厚的退休奖金)。由于我没有“回报”计划,一旦大部分事情结束(而且很明显诉讼将逐渐平息,一切“都已控制”——虽然问题并未完全解决,但已不再构成风险),以这种节奏工作的人只有我一人。所有那些“烧毁的桥梁”开始波及我的团队(有趣的是,在大公司里,人们总太害怕直接攻击我,所以他们选择破坏我团队中的其他人以牵制我)。这让我决定离开,试图帮助团队,结果又引发了另一波问题,因为大多数人选择和我一起离开(这又是一个意外的后果)。真是一团糟。

|=—=[ 你最希望在 Phrack 上发表什么?

(你的 2010 年 VDT 文章真的很棒。)

几年前,我与 Sergey Bratus 和当时他的学生 James Oakley 合作撰写了一篇文章,该文章被 Phrack 接受发表,但后来因“新技术”而被拒——因为我们没有一个真正的漏洞能证明这种技术的“优势”。James 和 Sergey 的研究涉及 dwarf 内部机制,而该论文则进一步解释了 gcc 如何调用 dwarf 区域的指针,因此我们可以利用他们的“dwarf 编译器”创造一种可注入的 shellcode。即使这种技术能让某个真实漏洞更易利用,编译器最终还是会将其设为只读(就像 relro 缓解措施那样,而编译器最后也这么做了)。但这项研究深入探讨了其内部工作原理,我相信这正体现了 Phrack 的精神。

那篇 VDT 文章有点遗憾。工作本身很出色,而 VDT 的主要开发者 Julio Auto 本该成为作者。我写了文章并发给他审阅,但他从未回复。最终我加上了致谢,他成为工具中列出的第一个名字,但很多人只看文章作者,而忽视了其他所有贡献者。我了解时间线的情况,也不愿在对方连审阅都没做时,就把某人列为作者(因为那样可能会说错很多东西,谁知道呢)。

从崩溃文件到 DPTrace

合作研究的起点远在 VDT 之外。我们曾在阿联酋的一家公司从事漏洞开发工作,coideloko 也在团队中。他曾在一家大公司进行某种取证工作,拥有大量导致 Office 崩溃的文件,但这些文件不同于 fuzzing 过程中生成的,我们不知道为何这些文件会导致崩溃。有些崩溃看起来有希望,于是我们开始集思广益地尝试分析。当文件格式不完全清楚(而我们也没有代码来分解各部分时),二分法查找并不十分有效。所以我们突发奇想,通过追踪崩溃时文件在内存中的映射位置来逆推出输入数据。我们在那里取得了一些进展,但不久后 coideloko 和我都离开了(不久后 Julio 也离开,各自分道扬镳)。几年后,我在另一场会议上遇到 Julio,还曾在他公寓住下,与他交换进展笔记(当时他在做基于 Windows 的工具,而我则在基于 Valgrind 的 Linux 工具上工作)。在那篇文章之后的几年,我和 Rohit Mothe 对这个想法做了一些改进,展示了它如何发展(我们称之为 DPTrace——名字含有双重寓意),其中追踪既可以向前也可以向后,而在正向路径上则会根据反向路径所知的信息进行内存分配和在崩溃瞬间改变状态。我们的概念验证(PoC)成功且实用(我们曾在真实软件上展示,并在文中展示了一些结果),但整体工作依然有很长的路要走。这是一个我热爱的课题,并希望其他人能接手推进。

|=—=[ 你最喜欢的漏洞/漏洞利用是什么?

这部分之前已经谈过了。

|=—=[ 缓解措施最终会让漏洞利用变得不可能吗?

我不这么认为。但它们确实使漏洞利用更为困难,可能会迫使漏洞利用从“个人行为”转为“团队行为”。就目前而言,我认为最难的目标已经需要如此程度的协作。我一直告诉人们,我已经看到大多数顶尖漏洞利用者为政府(或其承包商)工作,而非纯粹为业界工作。这令人遗憾,我想这也是有人说“社区已死”的原因之一。但我不认为社区已死。实际上,仍有很多活动在进行,只是形式不同,且更加隐蔽。可能真正消失的是曾经在这些社区中活跃并拥有高可见度的人。

|=—=[ 你会建议新人参与开源项目吗?

会。开源与黑客精神密切相关。夺回知识对少数人的控制权,分享的理念,以及寻找主流体系之外替代方案的思想,正是两者共有的理念。讽刺的是,尽管开源和黑客最终变成了主流(也因此受到污染),但这正是它们共有的现象。

|=—=[ H2HC 多年来如何演变?你喜欢组织会议的哪些方面?

我认为我们并没有实质上的演变,而是保持了原有的精神和理念,只不过规模扩大了。不知怎的,我们在面对许多现代压力(那些压力通常会摧毁或改变此类活动)时依然存活下来。比如在社交媒体上的存在:我们有,只是方式不同。有点混乱,但我们往往能从中找到乐趣(比如有人会搞出疯狂的举措——如将经典马里奥游戏修改成融入 H2HC 元素的版本,或者将会议场地做成地图的超级男孩修改版 ROM)。

我最享受的,是能够结识那些原本可能永远不会遇到的杰出人物。能见到最优秀的人,并与他们平等交流(尽管他们显然比我更出色)。最后,能获得那种因我们的努力而让某人的生活发生改变的简单反馈(即使我的贡献仅仅是促成这一切,让合适的人闪耀并展示他们的成果)。举个例子,去年有一次,我在电梯里准备去取东西,一个人走进电梯,看着我问:“你是 Rodrigo,会议的组织者吗?”我回答是,他笑着说,几年前我给过他一张参会票。当时他在建筑工地工作,但业余时间学计算机……会议激励了他迈出那一步,现在他有了一份极好的工作,彻底改变了他的生活。

|=—=[ 你如何看待现在与过去的信息安全领域?

不幸的是,信息安全如今简直成了一个马戏团。这也是今年 H2HC 主题定为“赛博朋克马戏团”的原因,这多少是在向那些因信息时代疯狂而投身其中的人致敬。同时也在反映一个现实:不幸的是,职业人士正在逐渐取代那些充满热情的人。过去情况也没好多少(我最初从事编程时,安全不过是安装防火墙)。我觉得,在信息安全领域,比其他任何领域都更容易看到不道德的行为,尽管这个领域本应建立在信任之上。

|=—=[ 你对会议有什么看法?是太大、太多了吗?是否还能找到那种边工作边狂欢的旧时氛围?

我认为会议太多了。这意味着,作为会议主办方,要在正确的原则下办好会议变得更困难,而作为参会者也更难做出选择。考虑到商业利益也在其中搅局,一切变得混乱。如果你想展示研究成果,Black Hat 的曝光度很高,尽管过去几年其质量大幅下降(有人调侃说,Black Hat 变成了 RSA,而 Defcon 则变成了 Black Hat——这一切都是向着更差而非更好的转变)。

似乎你必须参加大型会议,因为大家都在那里;同时你又需要参加一些小众会议,因为那里的好内容才是真正的精华;再者,你还要参加一些新兴会议,以支持它们的存在;同时也要参加一些保持旧时氛围的老会议,因为你希望它们继续存在。真的太多了。我非常怀念 PH-Neutral,也很遗憾目前无法参加俄罗斯的会议,可能也不适合参加中国的会议。

我们有 OffensiveCon,其技术内容非常出色,人员也很优秀,但价格昂贵(而且门票难以获得)。SummerCon 也仍在举行。但我只希望 Phrack 能重现昔日风采,并以更稳定的节奏举办,让优秀的研究再次有归宿。

|=—=[ 推荐

技术书籍:

[有哪些技术书籍你认为能帮助学习某些技能?]

非技术书籍:

[有哪些非技术书籍你认为每个人都应该读?]

我想大体上还是之前提到的那些,再加上英特尔和 ARM 的手册。

研究者:

[有没有哪些年轻一代研究者令你印象深刻?他们的工作我们应该关注谁?]

目前 Project Zero、Qualys、Quarkslab 正在发表非常顶尖的工作,也要关注 OffensiveCon 的演讲者,以及像往常一样的 Phrack 作者。

|=—=[ 反思

黑客精神:

[什么能促进黑客精神的延续?]

我始终相信,真正的黑客活动是一种亚文化。它不是主流展示的那种,也不仅仅等同于研究工作,尽管研究工作包含了黑客的许多(甚至全部)技术方面。黑客精神更多在于挑战现状、追求知识与自由,这种精神不是轻易能被摧毁的。夺取某个术语或方法并不能让某事变成黑客的一部分。

漏洞产业:

[你如何看待黑客-军工-产业复合体(漏洞产业)?]

不幸的是,目前大多数漏洞开发能力都集中在那个复合体中。该复合体中仍有一些人信奉黑客与社区。我依然认为,无论是作为职业,还是与黑客行为接近,黑客精神都是独一无二的。

早期编程:

[你是什么时候开始编程的?有哪些早期影响让你走上“黑暗面”?]

我大约 10 岁时开始写 C 语言。在那之前,我已经开始做一些简单的脚本和逻辑编程。我想,破坏东西纯粹源于天生的好奇心(如果把破解也看作一种破坏)。

职业倦怠:

[你是如何坚持在安全领域工作而不变得冷漠或心灰意冷的?]

老实说,到目前为止,我觉得自己是被祝福的(或者说幸运的)。在我人生中那些关键时刻,总有某个人挺身而出帮助我。比如在英特尔,在所有混乱之前,我记得一次会议上有人称我为“孩子”。第二天,我穿着以漫威超级英雄为主题的短裤出席了后续会议。显然,多年来我因此与人力资源进行了不少讨论,因为这种反应让我吃了不少苦头,但总有某人陪伴我度过难关。比如有一次,我告诉一位同事,我可以教他一些东西,但我不能替他去学(因为他拒绝阅读我建议的论文,以致在讨论时信息不足)。人力资源对我的沟通方式并不满意,但他们也理解,当某人公开拒绝阅读而只想开会时,很难去传授知识。我不建议别人模仿我的风格,但我确实认为:如果你足够深入问题,真心付出,总会有人理解并尽力帮助你。尤其是当你明显不是对每个人都摆架子,而只是对某些行为不能接受时。

|=—=[ 洞见

黑客里程碑:

[每个黑客在 25 岁之前应该做什么?40 岁呢?]

阅读你所偏好的架构手册(希望是英特尔或 ARM,不过 RISC-V/MIPS 也可以接受)。阅读 Knuth 的《计算机程序设计艺术》(不必担心是否能完全理解,只需意识到其中蕴含着许多你根本不知道的知识)。阅读《软件安全评估的艺术》,并记住它写作的年代(既令人谦卑又富有学习价值)。最后,去研究那些已公开的漏洞,动手实践。编写漏洞利用代码,理解漏洞本质,留意细节,提出新想法。如果遇到困难,不要只看现成的漏洞利用代码,而是自己亲自试一试。所有这些对学习都非常有益,而且我认为根本没有年龄限制。不要让借口阻碍你追求热爱。如果你不热爱,那就诚实面对自己……别因为“酷”或“赚钱”而去做(那样既不酷也赚不到钱,因为你做不好)。

非传统黑客:

[你最喜欢的非传统黑客形式是什么?不涉及计算机安全的那些活动?]

最近,我想到了那些速度竞技游戏社区。这完全是个意外(朋友的儿子有一套老旧设备,我好奇地问原因,他向我详细讲解,连我的朋友也大为惊讶)。这真是疯狂,因为这完全可以看作是一种黑客行为(也有点像作弊,但又完全不是)——突破安全边界或假设,仅仅为了乐趣。这里还有一些规定(严格限制你可以“作弊”的程度)。人们编写模拟器、修改游戏,各种各样的改动,真是美妙极了!我其实一点也不玩电脑游戏,但我有一整套设备(那是朋友的儿子给我的),我试了试旧版的《塞尔达传说》。我认为这可能是教会人们漏洞开发的最佳方式,因为你可以看到游戏在你修改内存中对象时的变化。这是一种有趣的方式来教授内存分配及其他知识。

黑客的“艺术”:

[你认为黑客真正的“艺术”是什么?]

事实是,黑客涉及应对挫折。你永远不知道什么是可能的(虽然漏洞利用证明了漏洞的可利用性,但即使很多漏洞看起来明显可利用,细微差别可能仍会阻碍其利用)。黑客还在于修改和探索:做一些原本并未预料到的事。所有这些都需要灵感,而艺术性正是帮助我们在挫折之外继续获得灵感的源泉。我可以想象,一个画家心中有一幅清晰的画面,但无法将其表现出来,于是就抹去重新开始,一次又一次。这就是黑客,而这只有真正的艺术家才能做到。

当然,漏洞开发不仅适用于艺术家。许多技术过程可以转化为纯粹的工程行为,但实验的构思和灵感,我相信仍将作为一种艺术形式存在。我见过那些顶尖漏洞开发团队中,虽然很多人产出很多成果,但总有那么一个人,让所有人都觉得他是“那个野兽”。正是这些人才对整个团队产生了巨大影响,我想他们就是指那些艺术家般的黑客。

|=—=[ 个人

其他兴趣:

[如果你不打算成为安全领域的专业人士,还有哪些其他兴趣激励着你?]

或许,我依然会当个程序员;如果不,那我大概会沦为一个某个角落喝酒的失败者吧。

哲学:

[Carpe Diem or Carpe Noctem抓住白天还是抓住夜晚] (Carpe Diem这个短语出自罗马诗人贺拉斯(Horace)的诗作《颂歌》,全句为 “Carpe diem, quam minimum credula postero”,意为“抓住今天,别太指望明天”。在电影《死亡诗社》中的引用使其更加著名。它鼓励人们珍惜当下,不要把机会寄托于未来:把握今朝,抓住现在,年轻人,去创造不同凡响的人生! Jeff注)

我做事完全凭借灵感,而且我相信人是习惯的动物,所以我努力养成好习惯(尽管我做得很糟糕,这一直是我内心的挣扎)。我不怎么睡觉,而且更喜欢在夜间工作。

小刊物:

[在博客和会议信息泛滥的时代,你认为小刊物还有什么价值?]

博客和会议的问题在于,它们往往缺乏严格的同行评审流程(我的意思是,我曾指出一些拥有优秀同行评审机制的博客,但总体而言,情况并不理想)。虽然学术会议声称有良好的评审,但实际上它们往往过于注重格式而忽略了实质内容。两者都过分强调所谓的“影响力”,使得人们难以从表面上看出真实价值。

我期望一个好的小刊物能带来的价值是:可运行的 PoC、有实质意义的内容。不需要夸大其词的炒作。“嘿,这是个漏洞,它有效。它影响了 A 和 B,成功率 90%,但仍有 10% 失败率,我们认为通过 Z 可以改进,但我们从未真正实现过。”

|=—=[ 引用

你希望我们引用哪些语录?

有的,下面是几句:

“我不知道人们到底怎么了。他们不是通过理解来学习,而是通过其他方式——比如死记硬背之类。他们的知识如此脆弱。”

— R. 费曼

“让我困扰的是,我以为他肯定做了计算。后来我才意识到,像 Wheeler 这样的人,一旦给他问题,他就能立即看出所有答案。而我却必须自己计算。”

— R. 费曼

“我记得,当我再次看到这篇文章时,看着那曲线心想,那根本证明不了什么!……从那以后,我再也不去注意专家们说的任何东西。我所有的东西,都自己计算。”

— R. 费曼

“他们做不到。这就像是一种争高低,没人真正知道发生了什么,他们只会贬低别人,好像他们确实了解情况似的。大家都假装自己知道,而如果有学生一时因疑惑而提出问题,其余人就会以高高在上的态度,仿佛根本就不存在疑惑。”

|=—=[ 结束语

如果有人告诉你黑客已经死了,那是因为他们并未真正参与黑客活动。他们可能曾经参与过,可能也曾渴望参与过。但这与他们的技术知识或能力无关,就是这样。如果有人试图替所有黑客或所有黑客行为发言,他们是做不到的。

包括我在内,这些结束语和整个访谈都是我的心声 :)

Originally published on the WeChat account 网安志异, 2025-03-07 · original

Comments

    No sign-in needed; comments appear right away.