文档章节

安全的应用程序开发和应用程序安全防御

OneAPM蓝海讯通
 OneAPM蓝海讯通
发布于 2016/01/08 10:54
字数 2462
阅读 17
收藏 1
摘要

对互联网行业而言,安全总是后知后觉!只有遭受损失时才想办法去弥补。互联网的历史就非常清楚的验证这个理论,早在1969年美国军方就发明了互联网命名为「Arpanet」,1973年 Arpanet 发明了 TCP/IP 协议,随后在1981年发明了一系列的应用协议如「SMTP,POP3,FTP,TELNET 」等等,在1991年,就发明了 HTTP 协议。

这一系列的应用协议都是采用明文传输的,没有进行任何加密措施,在当时如何将世界各地的人联系在一起和增加新的功能才是最高优先级。黑客非常容易就可以截取传输的内容,在经过非常惨痛的损失后才出现了加密传输协议「FTPS,SMTPS,SSH 以及 HTTPS」。假如互联网在在设计之初就对安全进行很好的的设计,就不会出现现在这么多安全问题了。

同样的情况发生在软件开发过程,安全开发的优先级永远低于功能的开发,都是在开发后期才考虑安全问题。本文主要讨论如何开发安全软件以及探讨为什么 SDLC (系统开发生命周期)是开发安全软件的最理想模型。

该模型引出 「安全设计」和「深度防御」的方案,安全开发应该是 SDLC 过程的一个非常重要的组成部分,应该在软件开发和测试的每个过程将安全完整的进去,越早期修复安全漏洞所花费的成本,时间和代价都是最低的。

应用层安全攻击

随着时间的流逝,网络攻击不断沿着 OSI 协议模型往上移动的趋势越来越明显,大多数攻击集中在应用层,在80、90年代的大多数攻击集中在 OSI 模型的1层,2层和3层,​现在网络层的防护已经非常出色了,但是应用层安全仍然是一个很大的挑战。

根据 Gartner 的研究报告,指出今天75%的攻击发生在 OSI 模型的应用层。根据 Trustwave 公司的一项调查显示,82%的 Web 应用程序容易受到 XSS 攻击。根据另一项调查,金融领域80%的安全事故是由于跨网站脚本攻击导致的。因此,应用层的防御是不可或缺的。

应用层防护方案

现在市面主要有两种应用层安全防护方案,一种是应用安全防火墙(WAF),另外一种是运行时应用程序自我保护(RASP)。

WAF 可以做为一种额外应用程序保护层,但是所有 WAF 基本上是基于一个「黑名单」来判断输入是否为攻击,黑名单就是把所有已知的 Web 攻击行为归纳起来形成一个黑名单,但是相对于黑名单来说只允许有限的合法输入的白名单更有效,但是由于应用程序是非常动态的,形成白名单是非常不现实的。但是基于黑名单的保护防护方式效果不是太好,现在有太多的绕过防火墙的方式了。绕过防火墙对一般黑客都不是特别麻烦的事情。极端一点来说 WAF 可以说是形同虚设了。

运行应用程序自我保护(RASP)是防止应用层的攻击一种新方法,在运行时保护应用程序面试攻击。RASP 保护程序位于应用程序等应用程序与数据库、文件系统和网络的连接点上,识别和阻挡任何恶意活动,使应用程序能够保护自己。相对应WAF来说,RASP 熟悉应用程序的上下文,可以非常精确的识别攻击,能关键点保护程序,黑客基本不可以绕过,可以自适应云环境,这些都是 WAF 没法比的。虽然从长远来看 RASP 是应用安全防护领域的趋势,但是目前大部分 RASP 还是基于黑名单保护的基础上,技术上还没有完全成熟,同时和应用程序绑定在一起,保护代码的质量直接影响应用程序,同时在性能上也也有一定的影响。

虽然应用程序保护方案在一定程度上能防护网络攻击,但是作为底线,你不能写一个充满漏洞的程序然后依赖安全保护系统来保护。

安全的 SDLC 流程

上面讲到的安全防护措施的确能起到一定的保护作用,但是绝不是最好的办法,最好的办法就是让应用程序能真正的自己保护自己,尽可能少的漏洞。要做到这一点就需要从程序设计的初始阶段把安全考虑将来并且将安全嵌入到SDLC 即需求收集、设计、开发、测试以及实施的各个阶段。

安全的应用程序开发和应用程序安全防御

下面笔者就详细讨论在 SDLC 各个阶段需要做哪些方面的安全工作。

需求分析

SDLC 的第一阶段是需求分析,在这个阶段确定整个项目的范围和目标,OWASP 组织推荐在需求分析时也应该把安全的需求和目标确定下来,客户的需求也应该依据相应的安全标准比如密码策略,安全网络协议等进行明确,使之符合安全标准。

设计阶段

在设计阶段:设计人员应该树立良好的安全意识,清楚现有的安全模型有哪些,应用程序可能面临哪些安全威胁,攻击途径可能有哪些,实施哪些安全策略和计划会缓解安全攻击的危害性,以及如何去实施这些安全测试。

这段视频非常清楚的介绍了安全模型方面的知识:

https://youtu.be/ZtSrcq7gscE, 能翻墙英文好的同学可以学些一下。

开发阶段

写出安全代码首先需要制定安全代码规范,各种语言都有现成的代码安全规范,企业可以根据自己的情况进行适当修改。同时要对项目中所有的开发人员培训安全编码规范,确保每个人能够完全明白如何编写安全的代码。最重要的一步就是要确保每行代码都符合安全规范,每个开发提交代码前都应该由安全专业人员对代码进行安全审查,确保代码的安全性,审查员非常关键可以是公司内部的资深安全人士,也可以聘请第三方专业人士(这种 Review 可能更客观一些)。

测试阶段

测试阶段应该进行大规模的渗透测试,使用静态 SAST 和动态(DAST)以及 IAST 进行漏洞扫描,验证所有已知的漏洞是否已经在设计和开发过程以及被修复。必须对所有模块进行彻底的扫描,条件允许的话可以使用多个扫描工具进行,因为每个扫描工具范围不完全一致。这样就可以最大限度的将漏洞消除在发布前。

还有特别需要注意的是应用程序本身逻辑的 Bug,程序是多种多样的,每个应用程序的功能逻辑是不一样的,这方面的 Bug 如果在设计和开发阶段做的足够好的话应该不会有太多 bug,同时通过功能和系统测试可以消除这方面的 Bug。

部署

在确保没有漏洞后,将系统部署到生产环境,在部署过程中应该遵守安全部署,不讲新的漏洞带入到生产环境。部署完成后再使用漏洞扫描工具进行扫描,确保没有漏洞发现。同时要确保环境配置和环境是安全的,比如 Tomcat 等容器有相应的安全配置,操作系统,容器以及使用的第三方软件保持最新的状态。

后语:

坦率地讲,这是一个比较理想的开发模式,真正能完全执行的项目很少,各种因素都会导致重功能而轻安全的情况比如:开发周期快,上线压力大,人员素质无法满足,安全资源缺乏等等。但是在这里我还是呼吁所有的软件提供商重视安全,早期安全投资一块钱,收获将是100块。

在的确没有能力去实施 SDLC 的企业,上面提到的 RASP 技术是退而求其次的选择,它在一定程度充当一个虚拟补丁的作用,可以暂时修复应用程序和第三方程序的漏洞,使用 RASP 可以让企业可以将不安全的程序上线后大幅度缓解安全攻击,具备一定自我保护的能力。

本文系 OneRASP 安全总监刘再耀原创文章。如今,多样化的攻击手段层出不穷,传统安全解决方案越来越难以应对网络安全攻击。OneRASP 实时应用自我保护技术,可以为软件产品提供精准的实时保护,使其免受漏洞所累。想阅读更多技术文章,请访问 OneAPM 官方技术博客 本文转自 OneAPM 官方博客

© 著作权归作者所有

OneAPM蓝海讯通
粉丝 94
博文 631
码字总数 1266889
作品 0
海淀
私信 提问
加载中

评论(1)

G
Geekguy
大型应用程序开发
AngularJS 是否能满足企业应用的安全需求

AndularJS开发团体最瞩目的内容是关注于所谓待开发内容(greenfield)的开发--不依赖于空数据库或新概念的新应用。然而这却是开发新的Angular应用程序的常规方法,忽视了很多将已存在应用迁移...

oschina
2015/01/21
8.1K
31
web应用程序安全与风险

(1)为什么写这个笔记 刚刚初步入门完毕,想仔细的学习web安全,但是看书和记笔记实在太让人头疼,所以把握自己的学习的笔记和心得记录一下。 web安全越来越让被重视,近年来不断频发的安全...

灰仓鼠
2017/11/13
0
0
Web安全趋势与核心防御机制

Web安全趋势与核心防御机制 孟飞阳 2012年1月16日 一. WEB安全技术产生原因 早期:万维网(World Wide Web)仅有Web站点构成,这些站点基本上是包含静态文档的信息库。这种信息流仅由服务器...

孟飞阳
2016/07/10
3.1K
9
Gartner 如何看 RASP 和 WAF?

在这个计算机网络飞速发展的网络时代里,新兴的网络威胁正在不断「侵蚀」着的应用程序和核心数据的安全,各种繁杂的防护手段也随之接踵而来。众所周知,Gartner 是全球最具权威的 IT 研究与顾...

OneAPM蓝海讯通
2015/12/21
59
0
贯彻10项原则,构建Linux系统安全体系

通过大量的实践经验,我们总结出 10 个最关键且有效的安全原则,分别是纵深防御、运用 PDCA 模型、最小权限法则、白名单机制、安全的失败、避免通过隐藏来实现安全、入侵检测、不要信任基础设...

新钛云服
08/23
0
0

没有更多内容

加载失败,请刷新页面

加载更多

会用python把linux命令写一遍的人,进大厂有多容易?

看过这篇《2000字谏言,给那些想学Python的人,建议收藏后细看!》的读者应该都对一个命令有点印象吧?没错,就是 linux 中经常会用到的 ls 命令。 文章中我就提到如何提升自己的 python 能力...

上海小胖
27分钟前
6
0
HashMap的特性

一、hashmap数据结构:哈希表结构:数组+链表 hashmap调用默认构造方法会产生一个默认底层是长度为16的Entry数组,首先调用key的hasCode()方法来得到一个整数, int hash = hash(key.hashCode...

GGbird
27分钟前
16
0
第五章 spring-connet之Imports注解来龙去脉

前言 imports是一个在spring体系里非常重要的注解,基本每个Enable开头的注解必然有一个import注解。接下来我们深入研究下import的作用。看小节的同学建议先取看PostProcessorRegistrationDe...

鸟菜啊
31分钟前
4
0
CentOS部署Harbor镜像仓库

关于Harbor Harbor是用于存储和分发Docker镜像的镜像仓库服务,相比Docker Registry,Harbor在安全、标识、管理等方面做了增强,更适合企业使用; 官方网站:https://goharbor.io/ 官方开源:...

程序员欣宸
35分钟前
5
0
JavaScript调试必会的8个console方法

每个JavaScript开发者都用过console.log()来调试程序,但实际上Console对象还提供了很多其他方法可以提高调试效率。本文将介绍8个有趣的Console方法,即使JavaScript老手也不一定知道! 1、c...

汇智网教程
57分钟前
9
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部