你的网站安全吗?WEB应用安全总结

应用安全越来越重要 —— 互联网上看到的大多数安全事件基本都和应用安全,尤其是 WEB 应用安全有关(随便翻翻 wooyun 之类的就知道了)。最近几年的工作基本都和应用安全有关系,借着这个机会也总结一下自己的一些观点。

WEB 应用安全的常见思路

这篇文章不包含 DDoS 和业务相关的问题 —— DDoS 主要是网络层解决的问题,我没有把放到 WEB 应用安全这个领域讨论;业务相关的安全,特别是业务特性或者业务规则带来的安全问题也不在这个讨论范围之内。

下面只是大概的分类,并不严谨。

通过工具来增强 WEB 应用的安全

工具往往对应用开发过程影响非常小,只需要在部署的时候做些配置通常即可起到防护作用。工具主要以防火墙、WAF 和各类扫描产品为主。这些产品通常基于特征,很难做到深入理解被防护的 WEB 应用,这类产品通常会遇到很多挑战。

由于被保护的 WEB 应用对这些传统工具而言属于“黑盒”,要做到有效防护的代价很高。个人认为目前传统的产品更适合做大范围、简单、一致的控制,作为基础设施提供无差别的防护;也比较适合做应急措施,用来缩短 Heartbleed、Struts2 远程代码执行 这类漏洞的响应时间,为彻底修复赢得足够的时间窗口。

误报率和漏报率:这个大家都懂的,从防病毒软件到 IDS、IPS 到扫描器到 WAF,只要是基于特征库,基本都走在这个“平衡木”上,很难做到既误报低又漏报少。

0day:WEB 应用的 0day 太容易发现,WEB 应用数量又是海量,真正充分考虑到安全的 WEB 应用更是凤毛麟角。因此,无法做到发现 0day 甚至是快速响应 0day,会非常难受,而简单基于规则很难做到发现“未知”。

普适和定制:应用的数量远多于操作系统、数据库这些通用组件,应用层的安全检查或者防护工具无法做到覆盖所有的应用(例如:wordpress 和企业 ERP 就是完全不同的应用)。

难以根除的漏洞:只要不修改代码、不打补丁,这个应用就始终存在安全漏洞。一旦出现盲点,导致攻击者能够直接访问到被保护的 WEB 应用,安全防护措施都失去意义(现在的业务系统都是分布式系统,非常容易出现盲点;尤其是各种 CloudWAF,被绕过的可能性更大)。

通过开发流程控制增强 WEB 应用的安全

SDLC 是 Secure Software Development Life Cycle 的简写,有时候也被称作 SDL 或 SSDLC 。SDLC 的特点是在软件开发的生命周期中都“嵌入”了安全的“基因”,对软件产品的安全性有本质上的提高。业界最成功的案例就是 Microsoft 通过 10 多年持续的实施 SDL 让其 Windows 产品的安全性有了极大地提高。

SDLC 需要安全完全嵌入到软件开发的全部活动中,非常依赖于人员和工具(漏洞扫描、代码审计、……),也遇到了一些挑战。

从某种意义上来说,SDLC 仅仅适用于部分公司,这类公司往往有稳定的开发组织、流程;业务变化没有那么快,相对比较稳定;业务非常依赖于 IT 或者软件开发。扩展阅读:如何在你的组织内采用 SDL。

时间:业务特性本身的发展非常快,业务特性的开发往往是整个开发团队产出的核心度量指标(特别是互联网公司)。新增的安全特性会延缓产品开发进度,因此开发团队会倾向于事后修复;而持续的业务压力又会让历史遗留问题修复很难获得高优先级。本质上是个“技术债”的问题。

专业知识:开发团队的核心能力并不是安全。即使是 SDLC 中的培训,也是仅以解决常见、通用攻击方式为目标,在面临新型攻击或复杂攻击时,需要对安全领域有全面和深入的了解。很难有开发人员在跟上开发领域技术发展的同时,还能补上安全领域知识,并且跟上安全领域的发展。

资源:大型组织所开发使用的应用往往非常庞大,在开发流程中构建完整的 SDLC 无论是在组织还是技术层面会让大多数的组织难以承受。

误报:SDLC 中使用了非常多的工具,这些工具通常都会产生误报,这些误报非常容易形成开发人员抵制 SDLC 的原因。

流程:SDLC 本质上是让开发人员重视安全,越多开发人员有安全意识公司开发出来的产品就越安全。但坏处是,大多数情况下很难有人能评估安全是否已经足够了(甚至做过头了)。特别是在时间压力很大且缺乏专业知识的情况下,SDLC 非常容易流于形式。

通过增强对应用感知和持续监控增强 WEB 应用安全

核心思路就是在开发过程中引入安全相关的 SDK 或 Plugin。通过这些 Plugin 或 SDK 让应用具备缺省的安全功能,且让安全人员持续的对应用进行监视、响应(可以更深入到应用的运行时)。

这个思路中关键的一项技术目前被 Gartner 定义为 RASP。RASP 是 Runtime Application Self-Protection 的缩写,通过嵌入 Application 的代码让应用程序自身具备一定的威胁感知和防护能力。通常 RASP 天生就可以与其他安全产品集成。Gartner 总结了这个定义,并且在 Hype Cycle for Application Security, 2014 中给把他列入到了 On the Rise 阶段(属于被关注的新技术,但并没有大范围地被验证和接受)。而 Gartner 早在 2012 年就在 Runtime Application Self-Protection: A Must-Have, Emerging Security Technology 介绍过,并预计 2017 年 25% 的应用会具备这个这个能力。目前已经有多家厂商推出了产品,开源社区也有相应的实现。

HP: HP Application Defender

Prevoty: Prevoty Runtime Application Security

waratek: Application Security for Java

OWASP: AppSensor 是一个开源方案。

Shandowd: Shadowd 是一个开源方案。

RASP 相关技术

目前 RASP 还处于一个发展的阶段,尚未像防火墙等常见的安全产品一样有非常明确的功能边界(scope),我个人认为这样的技术甚至非常有可能会和 WAF 形成一定的融合。因此这里介绍主要是记录自己的理解为主,考虑到 AppSensor 和 Shadowd 的思路并不一样,分开记录。

AppSensor

目前 AppSensor 发展到了第二版,OWASP 这个项目目标一方面是给出完整的指南,另一方面也希望能提供一个完整的实现。目前 AppSensor 的 2.0 版以 Application-Specific Real Time Attack Detection & Response 核心。下面是 AppSensor 的一些核心文档可以看看。

OWASP AppSensor Getting Started

OWASP AppSensor Guide v2.0.1 EN

OWASP AppSensor Reference Implementation

AppSensor DetectionPoints 梳理了 AppSensor 集成到应用后提供实现的监测点,安全人员可以利用这些监测点达到实时监测攻击行为。

AppSensor ResponseActions 梳理了 AppSensor 集成到应用后提供实现的监测点,安全人员可以利用这些监测点达到实时响应攻击行为。

构成部分

AppSensor 一开始遵从的设计理念就包括:语言无关、插件式、为“As A Service” 设计。因此,包括 Analysis Engine 在内的各个部分都可以被替换。

AppSensor Core:必选组件。这个是 AppSensor 的核心,对外提供了 AppSensor 的各种接口。

Analysis Engine:必选组件。这是用来判断是否为攻击行为,如何对此行为进行响应的核心组件,目前还仅仅是个示例的实现。

Storage:用来存储数据的组件。

Configuration:用来对客户端和服务端配置的组件。

Access Controller:仅使用 SOAP、REST 的时候为必须。主要用于对接口进行访问控制。

Reporting:可选组件。这是用于对 AppSensor 进行管理很重要的组件,如果需要利用其他的系统获取 AppSensor 的数据,就需要使用 Reporting 组件。目前支持 Simple Logging、WebSockets、REST API 的方式对外提供数据输出。

部署方式

目前支持四种部署方式:

REST Web Service

SOAP Web Service

Thrift

Local (Embedded Java)

Shadow Daemon

Shadow Daemon 还是个非常早期的项目,目前给自己的定位还是 WAF ,通过嵌入到 WEB 应用中的代码来收集信息,通过这些信息来判断某次访问是否为恶意行为并作出判断。

构成部分

Shadow Daemon 目前由三部分构成。

Shadow Daemon Connector:和语言有关,主要是利用语言特性嵌入到 WEB 应用中收集数据,放到 Shadowd 中进行处理。

shadowd:收集 Shadow Daemon Connector 的数据,根据配置和规则进行响应。

shadow_ui: Shadow Daemon 的用户界面。

时间: 2024-10-30 23:18:28

你的网站安全吗?WEB应用安全总结的相关文章

【转】VS2010新建Web网站与新建Web应用程序的区别

在Visual Studio 2010中,除了可以使用"创建Web应用程序"的方式来构建自己的Web项目之外,还可以通过创建"Web网站"的方式来构建Web项其中,Web网站的创建方法:打开Visual Studio 2010主窗体,在菜单栏里选择"文件"|"新建|网站"命令,在弹出的"新建网站"窗体里可以通过"ASP.NET 网站"和"空网站"这两种模板来创建自己的

将网站项目转为 Web form应用程序(转)

转自 http://blog.sina.com.cn/s/blog_53729e4601014ze9.html 本文介绍如何将现有的 Microsoft Visual Studio 2005 网站项目转换为 Microsoft Visual Studio 2005 Web 应用程序项目.Web 应用程序项目模型使用的概念方法与 Visual Studio .NET 2003 中的 Web 项目相同.该概念方法包括一个项目文件,用于将文件和编译包含到单个程序集中,或将它们排除在外. 要完成转换操作

查看某网站用何web

查看一个网站用的什么web服务器 http://uptime.netcraft.com/up/graph?site=www.aa.com 将www.aa.com替换成想查询的网站即可. 查看某网站用何web

创建网站服务(Web Services)

网站服务(Web Services)是基于一些标准的(通常是 SOAP),使应用程序能够通过HTTP 交换数据.网站服务由网站方法(web methods)组成,公开这些方法,可以在网络上运行:某种程度上,可以把它看作是 F# 的函数,因为网站方法有名字,有参数,也返回结果,参数和结果用元数据(metadata)进行描述,网站服务把这些也都公开了,因为客户端可以知道如何调用它. 创建网站服务非常简单.事实上,创建网站服务的主要问题可能是如何通过网站服务器公开代码.网站服务器以URL 的形式接收对

[从零搭网站五]http网站Tomcat配置web.xml和server.xml

点击下面连接查看从零开始搭网站全系列 从零开始搭网站 上一章我们在CentOS下搭建了Tomcat,但是还是没有跑起来...那么这一章就把最后的配置给大家放上去. 有两种方式:一种是用 rm -f 给这两个文件删掉,再用vim建新的出来.另一种是vim编辑,输入:set nu 显示行号,再输入:1,最后一行的行号d 把全文删掉. 然后再复制粘贴我给你们的配置文件就行. web.xml  , 完全不用修改,直接复制就行了: <?xml version="1.0" encoding=

一个无聊的实验:验证网站是否通过web容器还是微服务部署

一般来说一台web服务器会部署多个实例(且共享80端口),举个栗子例如nginx通常部署多个站点,每个站点都有自己的端口 例如 8091,8092之类的. 通过nginx进行代理.(前提微服务直接使用 80端口而 没有通过nginx之类的代理) 那么web容器是如何神器的命中你想要的网站的呢. 其实这个很简单就是通过http协议请求中Host参数 那么逆向思考 是不是如果在模拟请求的不传Host参数是不是可以?如果类似 ok 咱们使用telnet 验证: telnet www.xxx.com 8

ASP.NET网站怎么发布 Web项目程序怎么发布部署(暂时收藏)

Web程序如何发布部署呢.网站项目做好了,需要发布出来,提交给客户,装上服务器.那怎么在ASP.NET开发环境中将网站程序发布出来呢 ^_^ 工具/原料 Visual Studio 2010  ( 其他 VS 开发环境类似 ) 完成的项目程序 方法/步骤 在要发布的项目上右击,选择[发布]   在发布Web对话框中,选择发布方法为文件系统   选择要发布的路径,点击[发布]   在发布路径下,已经生成了发布的文件系统 然后就可以在IIS上发布网站啦  #^_^# END 注意事项 发布好的程序,

如何做一个网站 (C# + MVC Web+ easyUI )

如何做一个网站 小编想做一个网站,采用技术为:C# + MVC Web+ easyUI 小编经过几天的学习,以及指了几位大神指导,初见效果.建立网站的思路:先列举需要用到了几个知识点,然后逐一攻克,然后再组装扩展功能知识点如下:1.登陆页面(A.图片验证码:B.登陆身份验证:C.登陆身份保存与注销)2.主窗体页面布局(A.easyUI layout页面布局:B.easyUI tree 树形菜单:C.easyUI tree tabs 展示子窗体)3.easyUI DataGrid使用,点击查询刷新

python3利用socket查看各大网站所用的WEB服务器程序,看看那个用得最多。

利用python发送haeder /然后,读取返回的头的信息,看看该网站用的是什么WEB服务器程序. 今天早上看到别人用java写了一个这样的程序,我用就python也现实一个, 本来想把nginx不用版本的算在一起,想想没得必要.结果查看了一下,还是nginx的多,其次是apache,然后是IIS了,Tengine这个也比较多哈,应该可以算成nginx的哈.当然,也有许多公司用的自己写的如百度的BWS,google的GWS.还有CWS和QWS等. #!/bin/python import so

LNMP动态网站架构及web应用部署,搭建discuz论坛

1)部署Nginx 实验tar安装包可找本人拿记得点+关注,感谢亲们支持,评论拿包 systemctl stop firewalld iptables -F setenforce 0 1)安装支持软件 yum -y install pcre-devel zlib-devel openssl-devel 2)创建运行用户,组 useradd -M -s /sbin/nologin nginx 3)编译安装nglinx tar xf nglix-1.14.2.tar.gz -C /usr/src 4