如何修炼成为安全技术专家

学习与打磨你自身的安全技术

February 10, 2017 - 1 minute read -
web security

1. 技术上的求索之路

  • 教育背景:2003年上大学读的专业是‘电气工程及其自动化’,到2007年毕业的时候与编程没有半毛钱关系,学校所学也都是与电相关的内容,对计算机的了解仅仅上在于怎么用电脑上网(尴尬)。到2008年去读研,也是读了本专业下面对应的‘人工智能与模式识别’。不知怎么阴错阳差的在2009的年下半年的时候,老板的实验室要做一个在线的物质调度系统,于是乎就算初步学习计算机编程了。
  • 编程技术背景:开始学习的第一个编程技术就是随大流的java语言,用来做Web网站开发。逐渐接触到jsp、javascript、css这一套关于web开发的基本技能,其中自然也充斥着对网站开发的三剑客:Struts、Spring、Hibernate的学习与了解。紧随其后的是对关系型数据库Oracle的了解,以及SQL的使用。大约过了一年多的时间,到2010年底的时候已经初步达成对之前的相关技术的熟练使用。在此期间,自己也给别人搭建了一个小型B2B的网站,这里主要要感谢当时一起在实验室干活的一位兄长对我的信任与帮助,与我一起完成了这个网站的搭建。
  • 步入职场的技术背景:2010年底开始到一家世界500年的IT公司实习,做前端开发工程师,使用dojo framework去开发公司的一个系统。渐渐的对计算机编程技术有了更深层次的理解,已经不再将自己对技术理解的眼界停留在对某一种语言或者某一个新的框架的使用,而是把重心转换到如何才能将某种技术用好,或者是用什么样的技术去解决一个特定的产品中的问题从而让产品变得更好上面来。所以应该说到这里自己开始对计算机技术的入门,到这个阶段我们大概已经可以称自己为工程师了😊。

2. 如何走上安全技术发展道路的

大约在2013年底,公司产品中发生了大规模hard code key泄露的问题,从这之后的三年里,security成为了一个最为热门的话题,引文当时分管security的一个director口头禅就是:

Security is top priority !

  • 单点处理产品中安全Bug: 这大概是公司创建20年来最大的安全危机,铺天盖地的Security Bug从第三方审计公司报过来,于是安全部门在中国分公司中应运而生。名字是叫做Web安全部门,其实这个部门里面的大约40号人是做着根据一个一个问题去fix。安全部门里面的结构是:一个小团队的安全专家,一个大团队的Web开发工程师,外加外借的一个大团队的QA工程师。主要解决的问题基本上就是现在在OWASP上的TOP 10的安全问题,集中在:XSS、CSRF、SQL Injection、ACL、Sesentive Info Exposure、Security Misconfiguration。在此期间,开始熟知在Web开发过程中都面临着哪些安全问题,这些安全问题发生的场景,以及解决它们的短期方案。
  • 系统的解决产品中的安全Issues: 公司开始adopt业界比较规范的玩法从系统级别去解决安全Issues,引入了一套Key Management机制;基于Spring Security framework去解决AA的问题;开发了一套基于自身产品业务逻辑的Security Framework去解决XSS、CSRF、Injection、Info Exposure等问题。在此期间,自身对安全问题解决方案有了更多的了解,逐步去研究这些安全问题的原理,以及如何从系统层面解决它们。
  • 开发工具按类别去发现产品中的安全问题: 追随业内的安全专家去开发一套专门用来探测XSS问题的工具,研究市面上流行的XSS探测工具的工作原理,对比它们的优缺点,来开发自己的XSS安全扫描工具。 在过去的三年里,不知道自己算不算的上对Web Security有了初步的认识?如果遇到Web安全问题呢,自己能知道这些问题是什么,如何去解决,但是心里面总是觉得很空洞,我想可能主要的原因是我没有整个互联网安全的Big Picture😣。

3. 未来安全技术上的追索

在Web开发与Web安全方面一共经历了6年的时间,如何才能成为名副其实的专家?我想‘精于一而悟道’是我期望得到的答案,简而言之,就是在某一方面有过人的见识。

  • 安全工具的研究:潜心去研究安全工具,比如:Nmap, Wireshark,Burp Suite, OWASP ZAP,WS-Attacker…
  • 安全代码的研究: 什么样的代码是安全的?什么样的代码可能会带来安全风险?如何能通过类似白盒测试的方式发现安全问题?
  • 威胁建模的研究:如何给一个产品,或者一个系统做威胁建模?

4. 写在最后

每个人的时间和精力都要在现在的工作与未来的职业发展两者之间做出权衡,而最好的方式莫过于把现在的工作内容融入到未来的职业发展中,我现在手头的工作是开发一个Mirco Service, 所以当下对我来说‘安全代码的研究’会是一个不错的选择,敬请期待我的下一篇博文:在代码审查中我们究竟想发现什么?