前言
我们是一家普通的 P2P 网贷平台,随着用户量和交易量的上涨,十几个人的研发团队面临了很大的挑战。双十一开始,平台受到了不少黑客的攻击,保证安全的重任也落到了我们研发团队的身上。
看到过一个数字,在2014年,超过160家 P2P 平台由于黑客攻击造成系统瘫痪、数据被恶意篡改、资金被洗劫一空。为了让平台更好的抵御外部侵袭,我们做了很多努力,下面就分享下我们在安全保护方面的一些实践。
成熟的企业主要通过以下几个方面的工作来保障安全:
- 制定代码规范和安全代码规范,培训相关开发人员熟悉代码规范,在源头保障代码质量
- 制定统一开发模板,确保每个人编写 code 格式一致
- 进行严格的功能设计,技术设计,架构设计和代码的评审,确保设计和代码质量
- 在代码提交时用类似 checkstyle 等工具对代码规范进行检查,确保代码规范。
- 使用代码静态、动态分析工具进行扫描,比如 Java 使用 Findbugs,PWD 等工具。
- 最后就是购买商业扫描工具进行漏洞检测。比如 Qualys 是特别好的漏洞扫描工具
不过感觉做了这么多,其实还是不能确保平台的安全。第一、项目中通常会使用大量的第三方软件,包括开源的和商业软件,这些软件漏洞不是自己能掌控的。其次、所有的检查都是有局限性和时效性的,只能确保修复这些软件扫描出来的漏洞,无法保障运行时新出现的漏洞,而通常这些新的攻击也会经常遇到。
而且在我们这种创业公司,这些安全方式很难实践。作为 P2P 的平台,尤其是在创业阶段,要求产品的迭代周期非常的快,实现功能和保障质量是第一优先级。人才招聘也是非常难的一件事情,尤其是找到能书写安全代码的程序员几乎是不可能的事情。如何保障产品安全,让我们一直非常头疼。没有足够的资源和时间,来按照大公司的安全实践来保障产品的安全。但是安全又是互联网金融产品至关重要的事情,一旦受到攻击,进而导致信息泄密或者数据库破坏,后果不堪设想。
于是我们尝试了以下两种方法:
第一种是通过流程和静态、动态扫描工具来确保代码符合安全规范。因为面对功能和上线的压力,再加上程序员的实操能力,都使我们的尝试没办法较好的实施。通过代码质量来保障安全,就是0和1的游戏,减少漏洞是唯一的选择。没有漏洞被发现就是1,发现一个漏洞并被利用就是0。
第二种是通过扫描和渗透工具,感觉应该是一种方便快捷的方式。它从使用者的角度来攻击系统,这样的攻击是非常实时和有针对性的。
我们使用了几种在线的扫描工具:
1.阿里的扫描工具: http://sts.aliyun.com/ ,经过扫描是安全的。
2.百度云测 http://ce.baidu.com/ ,扫描结果同样是安全的。
3.这样的结果让我们非常疑虑,没有经过安全流程考验的代码居然没有任何安全问题,我有点怀疑这些扫描工具的效果了。于是下载了Nessus家庭版安装到本地,对我们的服务平台进行扫描,结果也并不理想,没有发现特别有意义的漏洞。
4.还有一种解决方案就是购买Web应用程序防火墙(WAF)。但通常 WAF 非常昂贵,比较好的 WAF 一般在几十万上下。这对一般的创业企业是一笔很大的开支。我们暂时还下不了这个决心去购买。
使用这些扫描器后没有发现严重的问题,并没有让我们安心。
凭经验感觉,没有经过严格安全流程的代码是不可能没有漏洞的。于是我们就想通过类似 SQL 注入的工具,通过单项渗透测试来检查是否有漏洞。在百度上搜索「sql注入」的关键字,发现了一种实时应用防护的方式 RASP。以前也曾经关注过国外这方面的资讯,没有想到,国内公司现在也有了类似产品 OneRASP,于是赶紧 down 下来试试。
团队经过头脑风暴,决定把 Nessus 和 OneRASP 结合起来。Nessus 作为攻击方,将 OneRASP 放入到应用程序中,作为防御方(只启动监控模式),这样应该能够找到平台的一些漏洞。说干就干,安装过程还是挺简单的。
首先需要注册一个账号,然后下载一个探针,将探针解压到tomcat
目录下。配置catalina.bat:set CATALINA_OPTS="-javaagent:C:\Users\one\Downloads\agent_a3483efc-a4ed-4a86-bde1-910012383309\OneAppDefender\lib\RaspAgent.jar %CATALINA_OPTS%"
。最后重启tomcat
就 ok 了。
好了,万事俱备。看看效果怎么样。启动 Nessus 对加了探针的程序再次进行扫描,毫无疑问,得到的扫描结果没有什么变化。不过我们最关心的还是 OneRASP 抓到什么内容,于是登录官网进入后台页面。心里还真有点小激动,页面虽然非常简单,但是抓到了不少漏洞,没有让我们的努力白费。
所有漏洞一目了然,最有价值的就是可以将漏洞定位到应用程序的代码行。比如SQL注入发生在哪一行代码里面,是哪个 SQL 语句造成的,一目了然。
跨站攻击发生在那个 JSP 页面也非常清楚。
有了这些信息,程序员就可以非常方便的知道,去哪行代码里面修改这个漏洞。然后我们下载了几个比较好的扫描工具,比如 Qualys,ZAP,AppScan 等,分别对我们的程序(绑定 OneRASP 探针)进行扫描,两天时间所有漏洞全部修复完毕。
通过这种组合扫描/修复的方式,对我们产品的安全性信心提高了很多,同时对 RASP 这种方式也充满了兴趣。扫描工具毕竟是只能针对固定的攻击手段,在实际的环境里攻击手段是多种多样的。很多攻击是有针对性的攻击,不是扫描工具能够覆盖的。
既然在监控模式下能检查出这么多的问题,能不能把它放在我们的生产环境呢?任何东西放入生产环节都是有风险的,可能影响我们系统的性能以及稳定性。为了避免这种风险,我们对注入 OneRASP 安全探针的系统进行为其两天的高并发性能和压力测试,结果和官方性能报告出入不大。对内存、CPU 和响应时间的影响在 5% 左右,没有发生系统崩溃和内存泄露问题。系统启动时间增加了 4% 左右,这种性能消耗完全可以接受。以下是性能数据:
内存影响:
CPU 影响(我们这个程序对CPU使用比较高):
我们将 OneRASP 应用到线上环境,为了避免误杀,启用了监控模式运行了大概一个礼拜。结果真是让我们大吃一惊,一个礼拜的时间发现了不少攻击行为,幸好问题都不算太严重。在确认没有误杀的情况,我们开启了保护模式。到现在为止基本没有导致性能和系统问题,防护效果也挺不错。下图是初期监控模式下,半个小时的攻击情况:
经过这么多的尝试,发现将 OneRASP 的产品和扫描工具结合起来,应用在开发和测试阶段,是一种有效的渗透检测手段。目前我们在持续使用,很容易上手,不需要专业的安全管理人员,而且不需要购买额外的服务器和修改任何应用程序代码。
重点是,目前还免费开放使用,这对我们这种创业公司来说,是非常赞的。OneRASP 在非常短的时间里,可以将代码安全等级提升一个档次。不过唯一的代价,就是额外消耗一些系统资源。不足的地方就是,现在支持的保护规则偏少,只有 XSS、SQL 注入、已知漏洞扫描工具检测等6 种。而且页面设计交互性不强,没有自定义规则等。不过对于大多数创业公司来讲,第一阶段的应用防护应该够用了。
【编者按】本文经过作者同意,已经授权 OneAPM 官方技术博客进行转载和发布。