对网络安全研究之路的一点点思考

写这篇文章是因为发现当自己在做一些取舍时,没有了当初的那种果断,开始犹犹豫豫,这不是一个好兆头。


网络安全研究是一条很长的路,在这个领域里,没有所谓的教科书式的明确知识范围界限,没有成熟或刻板的套路。想要学有所成,必须有着超乎常人的知识储备,在此之上,野蛮生长。网络安全在计算机领域内算是一个涉猎非常广泛的研究方向,所有的能够帮助我们进行安全研究的知识,都值得去学习。

以前总是听人说,黑客是程序员的子集,甚至有程序员把黑客称呼为略懂开发的半吊子程序员。我认为,黑客和程序员的显著区别,是思维上的区别。黑客是一种思考方式,如果人人都有这种思考方式,想必程序员也造不出bug了吧。

在我眼里,优秀的黑客应该具备这些潜质:懂开发、懂安全、会搭建、会维护。当然了,也要懂安全开发,还涉及到计算机原理、计算机网络原理等知识。安全威胁无处不在,我们要学习的也有必要面面俱到。这样一来,程序员、架构师、测试和运维的工作我们都要学着去了解,去熟悉,甚至去精通。知识储备真的非常重要。

那么学这么多,会很累吗?前面说了,安全是一种思考方式。拿程序员来说,入门可能会比较吃力,从面向过程到面向对象可能也会比较吃力,但是一旦有了一门语言的基础,之后学习新的语言就会容易得多。这是因为语言语法和思考方式是相互独立的,中国人也能讲好外语,做安全也是这样。与编程开发相对应的就是代码审计和逆向工程了,道理大同小异。思考方式到位了,搞起研究来不会很累。

前面只是点到了黑客和程序员的差异,我觉得安全研究员都有必要会开发,知己知彼,百战不殆。具备开发者思维和创新思维,才能在安全研究领域内出奇制胜。第一个发现SQL注入(笔者不清楚第一个注入类漏洞是什么类型)的前辈是伟大的,后来的这些命令注入、代码注入、XSS的发现者就没有这么伟大了。他们有点厉害,但并不伟大,因为他们只是安全思维的复刻者,安全思维的创新者才值得敬畏。思维固化和思维惯性无疑是安全研究的牢笼,这世界总是有那么些人,灵光乍现,聪明绝顶,他们解放自己的思维方式,解锁新的姿势,让同胞们震惊、欢呼雀跃。我们都应该去学着成为这类人,攻击与防御是一场有趣的游戏,输赢有时候真的很重要。

如何正确地叩响安全研究之门?
我自认为我是一个纯野生的网络安全学者。在过去的四五年间,也走了很多必要的弯路。兴趣之始是对智能设备的好奇,由自然元素到精密设备,其间经历了物理学家、化学家、数学家、计算机科学家等等的努力。我的学习起点必然建立在前辈的努力之上,如何操作这些有序运转的智能设备,成为了我当时的疑问。当一个用户不甘心自己只是一个用户时,那么他的研究之路,就已经开始了。我第一件不会善罢甘休的研究,就是在我的第一部安卓智能设备上编写我自己做的程序,运行我自己的代码。当然,我后来确实做到了。当然,那个奇奇怪怪的我也不会做出什么善意的程序(这个用小众语言编写的程序,让我窥探了三四百人的QQ账号)。这算是我研究之路的启蒙运动了(在此之前学了一半C语言),在那个启蒙阶段,我迫切想弄懂的无非就是那么几件事:各种移动端应用的权威开发语言是什么?桌面应用的权威开发语言是什么?Web应用呢?最终我选择了Java,因为它三端通吃。
那么安全研究的第一步,就是学着去做一个开发者。去了解这些开发者的产物,给自己的方向定一个位,条条大路通罗马,谁不想走最直的那条。第二部就是学着去做一个脚本小子了,万事开头难,尝试着去做一个合格的脚本小子也不简单。要懂漏洞原理,要会使用工具,在合适的场景使用合适的工具。当然,要学会少吹牛逼,学会对技术的不满足。第三步呢?前两步走完了,自己也就知道了。

那么,结合我自己的认识,罗列一下一位全方位安全研究学者应有的知识储备(精一门就行了,一起抓不现实):

  • 开发技能
    • Web安全——Web应用开发;
    • 二进制安全——桌面应用程序开发、汇编等;
    • 移动应用安全——移动应用开发;
    • 软件架构设计;
    • 代码调试技术;
  • 运维技能
    • 计算机网络的组建与维护;
    • 服务器的搭建与维护;
    • 各种服务端应用的配置与错误排查;
    • 网络架构设计;
    • 应急响应和电子取证能力;
  • 安全技能
    • 黑客的思维方式;
    • 热爱技术且正义的心;
    • 了解各种网络协议;
    • 各类漏洞的原理;
    • 各类工具的使用;
    • 逆向工程与代码审计;
    • 反侦察&反取证,虽然用不上,但是要会;
    • 心理学基础&社会工程;
  • 日常技能
    • 熟悉自己常用的操作系统;
    • 熟悉自己常用的工具;
    • 熟悉可以加快效率的一切;

暂时先想到了这么多,以后会补充。