前言html
咱们是一家普通的 P2P 网贷平台,随着用户量和交易量的上涨,十几我的的研发团队面临了很大的挑战。双十一开始,平台受到了很多黑客的攻击,保证安全的重任也落到了咱们研发团队的身上。
看到过一个数字,在2014年,超过160家 P2P 平台因为黑客攻击形成系统瘫痪、数据被恶意篡改、资金被洗劫一空。为了让平台更好的抵御外部侵袭,咱们作了不少努力,下面就分享下咱们在安全保护方面的一些实践。java
成熟的企业主要经过如下几个方面的工做来保障安全:程序员
制定代码规范和安全代码规范,培训相关开发人员熟悉代码规范,在源头保障代码质量sql
制定统一开发模板,确保每一个人编写 code 格式一致数据库
进行严格的功能设计,技术设计,架构设计和代码的评审,确保设计和代码质量tomcat
在代码提交时用相似 checkstyle 等工具对代码规范进行检查,确保代码规范。安全
使用代码静态、动态分析工具进行扫描,好比 Java 使用 Findbugs,PWD 等工具。服务器
最后就是购买商业扫描工具进行漏洞检测。好比 Qualys 是特别好的漏洞扫描工具架构
不过感受作了这么多,其实仍是不能确保平台的安全。第1、项目中一般会使用大量的第三方软件,包括开源的和商业软件,这些软件漏洞不是本身能掌控的。其次、全部的检查都是有局限性和时效性的,只能确保修复这些软件扫描出来的漏洞,没法保障运行时新出现的漏洞,而一般这些新的攻击也会常常遇到。
并且在咱们这种创业公司,这些安全方式很难实践。做为 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 官方技术博客进行转载和发布。