第三章:服务的架构一定有漏洞(上)
相较前两章,这一章的内容就相对温和许多了。服务的架构一定会有漏洞,这都是大家心知肚明的事。
反而没什么好吃惊的。
这一部分我会拆成几个章节写。这一章主要是在讲「暴露在外的部分」
状况一:扫描攻击
关于网站的部分,最常见的攻击有几种:
XSS 攻击:盗取用户 cookie
SQL Injection:存取数据库,捞取资料,窜改数据
Directory Traversal Attack:摸清机器档案目录,甚至获取机器权限 等等....
诸如此类的攻击手法,我在这本书里面就不讲得太详细了。
关于此类的内容,在 OWASP 里面有非常非常多的内容。如果你对于这些常见扫描攻击陌生,建议去读读 OWASP 出的一些指南。
http://www.owasp.org.cn/owasp-project/secure-coding
这本书我想讲的是解法、防御。
解法:
这些基础漏洞,主要出自于语言、框架,或者是低阶程序员的疏失。有几个方向你可以进行。
安装代码扫描工具
我自己擅长的是 Rails 框架上的项目开发,Rails 的开发观念以及第三方生态相对于完善。框架自带 XSS 防御、 SQL Injection 防御、XSRF 防御。如果硬要在里面写出不安全的代码,得程序员硬干 override 才能办到。
至于 Rails 界有一套服务叫 codeclimate,除了扫描代码质量,也可以扫描可能可能出现漏洞的代码。
另外,也有一套服务叫 sqreen,这套服务能充当 WAF,自动阻拦可疑扫描,并且追踪所有 rubygems 的更新与 security patch,当架构上的第三方库太老旧或是有安全疑虑,系统会自动通知开发者需要更新。
雇用白帽黑客、 资安谘询公司
安装代码扫描工具,可以很大程度防御与过滤一般的「机械式攻击」。
但「机械式」攻击,不是一般互联网服务最大的威胁。而是黑客的「手工攻击」。
机器是死的,人是活的。
如果你的服务非常重要,保卫著许多人的资产。我建议还是雇用正统资安谘询公司,人工灰盒审计(等于是请资安顾问对自己的公司实施各种攻击,找到所有可能性的攻击与脆弱点,出具报告修复)一次。而且这个灰盒审计得定期执行。
状况二:后台攻击
第二种状况,是针对「后台合法攻击」。
什么是针对后台合法攻击呢?我在这里揭露一个事实吧:
许多服务的架构都是这样设计的,后台只可能在两个地方:
example.com/admin
admin.example.com
命中率高达 99%。
而且呢,在外网就能够存取。
也就是如果你的其中一位客服或员工被猜到密码,这套服务马上就沦陷。而且因为是正常操作,不会触发任何警报。
解法:
首先,这个架构有几个地方需要改变。当然有时候你的财力物力不一定马上可以做到。但起码可以降低相当大的风险。
改名,换网域
绝对不能叫
example.com/admin
admin.example.com
你可以叫
example.cc/admin
或者
a.example.cc
至少不那么好猜,以及防御黑客盗到员工 c