凌晨三点,漏洞我盯着屏幕上那段十六进制代码,漏洞咖啡杯沿积了层褐色垢。漏洞漏洞就在那儿,漏洞像墙缝里一只蟑螂——你看见它,漏洞它看见你,漏洞谁都不动。漏洞
这行的漏洞真相和外面想的不一样。媒体爱写黑客,漏洞黑帽白帽,漏洞攻防大战,漏洞好像我们都是漏洞武侠片里飞檐走壁的角色。扯淡。漏洞我干这行九年,漏洞九成时间在跟编译器吵架,漏洞跟文档较劲,跟那些写代码时脑子进水的同行搏斗。漏洞开发者?说得好听。我们其实是数字世界的验尸官,专门解剖别人留下的尸体,偶尔也解剖自己的。
去年有个案子,某银行的核心系统,防火墙厚得像银行金库的墙。结果呢?漏洞不在防火墙,在某个离职程序员留下的后门注释里。那哥们儿写代码时留了个口子,注释写着“TODO:以后优化”,然后就没以后了。我找到那个入口的时候,差点笑出声——最坚固的堡垒往往从内部塌,这话放在代码里一样成立。
写漏洞的人分两种。一种是无意的,手滑,逻辑漏判,变量命名混乱导致自己都看不懂——这种占八成,他们不是坏人,只是平庸。另一种是故意的,带着明确目的,在代码里埋雷。后一种人我见过几个,眼神都特别干净,说话慢条斯理,像大学里教书的。有次跟一个老兄喝酒,他跟我说,写漏洞就像写诗,讲究留白——你不需要把所有逻辑写满,留个缝隙,让系统自己犯错。我当时后背发凉,这话说得太漂亮了,漂亮得让人害怕。
但我自己最得意的一次,不是攻破什么系统,是给自家产品补了个洞。那是个内存泄漏,不致命,但会慢慢吃掉服务器资源,像慢性病。我花了三周找它,最后发现是某个循环少了break语句。修好那天,我盯着那行代码看了很久。就这么一个词,三周。这行当教会我的第一课就是:破坏永远比建设容易,发现永远比创造难。
现在有人喊我“漏洞猎人”,听着挺威风。但我清楚,真正的高手都在暗处。他们写漏洞,我找漏洞,我们像围棋对弈的双方,只不过棋盘是整个世界。有时候我会想,如果哪天我不干这行了,会不会有人翻出我早年埋的雷?谁说得准呢。代码是永恒的,写错一个字,它就在那儿等着,等某个倒霉蛋踩上去。
窗外的天开始发白了。咖啡已经凉透,我灌了一大口,苦味顺着嗓子滑下去。屏幕上的漏洞还在闪烁,像一颗待拆的炸弹。我活动了下手指,开始敲键盘。这活儿没有终点,永远有下一个洞,永远有下一段代码等着被解剖。挺好,至少不会无聊。