web安全浅析

写这篇文章的初衷,主要由于自己所负责的项目有这方面的需求,就简要提一提web安全方面的一些知识

.web安全的兴起

web攻击技术经历几个阶段

a.服务器端动态脚本的安全问题

b.sql注入的出现

c.xss的出现

d.web攻击思路从服务器到客户端

二.安全三要素

机密性(Confidentiality)、完整性(Integrity)、可用性(Availability)。

机密性:要求保护数据内容不能泄露,加密是实现机密性要求的常见手段。

完整性:要求保护数据内容是完整、没有被篡改的,常用方法是数字签名。

可用性:要求保护资源是“随需而得”,DOS破坏了这个规则

三.安全评估的四个阶段

资产等级划分、威胁分析、风险分析、确认解决方案

四.微软提出的威胁建模方法

STRIDE模型

威胁

定义

对应的安全属性

Spoofing(伪装)

冒充他人身份

认证

Tampering(篡改 )

修改数据或者代码

完整性

Repudiation(抵赖)

否认做过的事

不可抵赖性

InformationDisclosure(信息泄露)

机密信息泄露

机密性

Denial of Service(拒绝服务)

拒绝服务

可用性

Elevation of Privilege(提升权限)

未经授权获得许可

授权

五.微软提出的风险衡量模型

DREAD模型

等级

高(3)

中(2)

低(1)

Damage Potential

获取完整验证权限;执行管理员操作;非法上传文件

泄露敏感信息

泄露其他信息

Reproducibility

攻击者可以随意再次攻击

攻击者可以重复攻击,但有时间限制

攻击者很难重复攻击

Exploitability

初学者在短期内能掌握攻击方法

熟练的攻击者才能完成这次攻击

漏洞利用条件非常苛刻

Affected users

所有用户,默认配置,关键用户

部分用户,非默认配置

极少数用户,匿名用户

Discoverability

漏洞很显眼,攻击条件很容易获得

在私有区域,部分人能看到,需要深入挖掘漏洞

发现该漏洞及其困难

六.设计安全方案原则

  • secure by default原则:白名单
  • 纵深原则:不同层面实施安全方案,避免疏漏; 正确的地方做正确的事
  • 数据与代码分离原则(针对各种注入问题)
  • 不可预测性原则:敏感数据不可预测

七.浏览器安全

同源策略:这是浏览器最核心也是最基本的安全功能。其限制来自不同源的“document”或脚本,对当前“document”读取或者设置某些属性。

影响因素有:host、子域名、端口、协议。

<script>|<img>|<iframe>|<link>等标签可以跨域请求资源,不受同源策略的限制。

挂马:在网页中插入一段恶意代码,利用浏览器漏洞执行任意代码的攻击方式。

恶意网址拦截的工作原理:浏览器周期性地从服务器端获取一份最新的恶意网址黑名单,如用户上网时访问的网址存在于此黑名单汇总,浏览器就会弹出一个警告页面。

分为两类:(1)挂马网站,通过浏览器漏洞执行shellcode植入木马;(2)钓鱼类网站,欺骗用户。

八.跨站脚本攻击(XSS)

XSS攻击:黑客通过“HTML注入”篡改页面,插入恶意脚本,从而在用户浏览网页时,控制用户浏览器的攻击方式。

XSS可以分为三类:

1、反射型XSS(非持久型):简单把用户输入的数据“反射”给浏览器。也就是说,需要用户点击一个恶意链接才能攻击成功。

2、 存储型XSS(持久型):把用户输入的数据“存储”在服务器端,其具有很强的稳定性。一个常见的场景是,黑客写一篇包含恶意链接的博客,所有访问这个博客的用户都会执行这个恶意链接。

3、 DOM Based XSS:并非按照“数据是否保存在服务器端”来划分,从效果上来说是反射型XSS,由于其形成原因比较特别,因此单独提出。

XSS Payload:用以完成各种具体功能的恶意脚本。

XSS Payload实际上就是JavaScript脚本。最常见的就是通过读取浏览器的Cookie对象,发起“Cookie劫持”攻击。可以避免在URL的参数里写入大量的JavaScript代码。

XSS所能做的事:

  1. 构造GET和POST请求;
  2. XSS钓鱼;
  3. 识别用户浏览器;
  4. 识别用户安装的软件;
  5. CSS History Back;
  6. 获取用户的真实IP地址。

XSS攻击平台:Attack API;BeEf;XSS-Proxy。

XSS构造技巧:

  1. 利用字符编码;
  2. 绕过长度限制:利用事件(Event),但事件能够缩短的字节数有限,最好方法是使用XSS Payload;利用location.hash,根据HTTP协议,location.hash的内容不会在HTTP包中发送,因此服务器端的Web日志中并不会记录下location.hash的内容;利用注释绕过长度限制。
  3. 使用<Base>标签:作用是定义页面上的所有使用“相对路径”标签的hosting地址。
  4. Window.name的妙用:对当前窗口的window.name赋值,没有特殊字符限制,可以实现跨域、跨页面传递数据。

XSS的防御:

  1. HTTPOnly:在设置Cookie时使用HTTPOnly属性,解决了Cookie劫持问题。
  2. 输入检查:转义或过滤
  3. 输出检查:转义,使用编码方式
  4. 正确的防御XSS:在不同的输出地方使用不同的编码方式。

XSS前端防火墙 九.跨站点请求伪造(CSRF)

CSRF(Cross-Site Request Forgery,跨站点伪造请求)是一种网络攻击方式,该攻击可以在受害者毫不知情的情况下以受害者名义伪造请求发送给受攻击站点,从而在未授权的情况下执行在权限保护之下的操作,具有很大的危害性。具体来讲,可以这样理解CSRF攻击:攻击者盗用了你的身份,以你的名义发送恶意请求,对服务器来说这个请求是完全合法的,但是却完成了攻击者所期望的一个操作,比如以你的名义发送邮件、发消息,盗取你的账号,添加系统管理员,甚至于购买商品、虚拟货币转账等。

本质:重要操作的所有参数都可以被攻击者猜测到。

浏览器的Cookie策略:

攻击者能够在第三方站点操作用户原本网站的内容,是因为用户的浏览器存储了原站点的Cookie,用户产生操作请求时,自动发送了这些Cookie,导致了攻击的形成。

浏览器所持有的Cookie分为两种:一种是“Session Cookie”,又称临时Cookie;另一种是“Third-parth Cookie”,也称本地Cookie。二者区别在于Third-parth Cookie是服务器在Set-Cookie时指定了Expire时间,只有到了Expire时间后Cookie才会失效,其保存在本地,而Session Cookie没有指定Expire时间,浏览器关闭,就失效。

CSRF攻击思想如下:

CSRF过程

CSRF的防御:

  1. 验证码,对抗CSRF攻击最简洁而有效的方法。
  2. Referer Check:在HTTP头中有一个字段叫Referer,它记录了该HTTP请求的来源地址。通过检查Referer是否合法来判断用户是否被CSRF攻击,检查请求是否来自合法的“源”。其缺陷在于,服务器端并不是任何时候都可以获取到Referer。
  3. 使用Token:CSRF本质是所有参数都是被攻击者可以猜测的。出于这个原因把参数加密,或使用随机数,从而让攻击者无法猜测到参数值,这也是“不可预测性原则”的一个应用;但当网站同时存在XSS漏洞时,XSS可以模拟客户端读取token值,再构造合法请求,这过程又被称为XSRF。防御CSRF的Token,是根据“不可预测性原则”设计的方案,所以Token的生成一定要足够随机,需要使用随机的安全函数来生成。

十.点击劫持(ClickJacking)

点击劫持是一种视觉上的欺骗手段。攻击者使用一个透明的、不可见的iframe,覆盖在一个网页上,然后诱使用户在该网页上进行操作,此时用户将在不知情的情况下点击透明的iframe页面。通过调整iframe页面的位置,可以诱使用户恰好点击在iframe页面的一些功能性按钮上。

分类:Flash点击劫持;图片覆盖劫持;拖拽劫持和数据窃取,拖拽不受同源策略的限制,思路是诱使用户从隐藏的不可见iframe中“拖拽”出攻击者希望得到的数据,然后放到攻击者能控制的另外一个页面中,从而窃取数据;触屏劫持。

防御:

1、frame busting,禁止iframe的使用

2、 X-Frame-Options(HTTP头):DENY\SAMEORIGIN\ALLOW-FROM origin

十一.HTML5安全

HTML5新标签的XSS:其定义了许多新标签,可能带来新的XSS攻击。

Iframe的sandbox属性极大增强了iframe的安全性。

Link Types:noreferrer,标签指定了noreferrer后,浏览器在请求该标签指定的地址时将不再发送Referer。从而保护敏感信息和隐私。

十二.注入攻击

条件:1、用户能够控制数据输入;2、原本要执行的代码拼接了用户的输入。

正确的防御SQL注入:找到所有的SQL注入漏洞;修补漏洞。

1、使用预编译语句;

2、使用存储过程(避免使用动态SQL);

3、检查数据类型;

4、使用安全的函数。

  • 文件上传漏洞

文件上传漏洞:用户上传了一个可执行的脚本文件并通过此脚本获得了执行服务器端命令的能力。

要完成此攻击,需要满足以下几个条件:

1、上传的文件能够被web容器解释执行。且目录是web容器所覆盖到的路径。

2、用户能从web上访问这个文件。

3、用户上传的文件若被安全检查等改变内容,也可能导致攻击失败。

防御:

1、文件上传目录设置为不可执行。

2、判断文件类型(使用MIME Type和后缀检查),推荐使用白名单

3、使用随机数改写文件名和文件路径

4、单独设置文件服务器域名

十三.认证与会话管理

Session Fixation攻击:没有换“锁”而导致的安全问题。

解决方法:登录完成后,重写sessionID

Session 保持攻击:

1、强制销毁Session

2、当用户客户端发生变化时,要求用户重新登录

3、每个用户只允许拥有一个Session。

十四.访问控制

垂直权限管理:建立用户与权限之间的对应关系,常使用RBAC。

水平权限管理:对同一个角色能否访问不同资源进行授权。

十五.加密算法与随机数

系统中对数据进行加密使用的加密算法和随机数生成算法的安全性和健壮性都直接关系到整个系统的安全性。对称加密、非对称加密的密钥的安全性,随机数算法的随机性都是要考虑的问题。

十六.Web框架安全

在MVC框架中,通过切片、过滤器等方式,能够对数据进行全局处理。 在VIEW层可以解决XSS问题

使用securit token可以解决CSRF攻击问题。

十七.应用层拒绝服务攻击

DDOS:分布式拒绝服务,利用合理的请求造成资源过载,导致服务不可用。

常见的DDOS攻击有:SYN flood,UDP flood,ICMP flood等。

SYN flood利用TCP协议设计中的缺陷。

对抗SYN flood的主要措施有SYN Cookie/SYN Proxy,Safereset等算法

应用层DDOS发生在TCP三次握手已经完成,连接已经建立,所有发起攻击的IP地址都是真实的,针对服务器性能的一种攻击。

CC攻击:对一些消耗资源较大的应用页面不断发起正常请求,以达到消耗服务器资源的目的。

针对应用层DDOS的防御措施:

1、 限制请求频率;2、对应用程序代码进行优化;3、对网络架构进行优化;4、实现一些对抗手段,如限制每个IP的请求频率。

除CC外,还可能利用一些Web Server的漏洞或者设计缺陷,称为资源耗尽攻击:

1、slowloris攻击:以极低的速度向服务器发送HTTP请求,由于Web server对于并发的连接数有一定的上限,恶意占用这些连接数,本质:对有限资源的无限制滥用。

2、HTTP POST DOS:指定非常大的Content-length值,然后以很低的速度发包。可以使用web应用防火墙或者一个定制的Web Server安全模块。

3、Server Limit DOS:由cookie造成的一种拒绝服务,通过XSS攻击将cookie值设置为超长,这样在发起HTTP请求时,由于Web Server对HTTP头有长度限制,导致请求不成功。

4、ReDOS,正则DOS

十八.Web Server配置安全

Web服务器安全即应用部署时的运行环境安全,包括Web Server、脚本语言解释器、中间件等,对其提供一些配置参数,以起到安全保护作用。

Web Server的安全关注两点:1、自身是否安全;2、其是否提供了可使用的安全功能。

十九.互联网业务安全

安全是产品的一个特性。

优秀的安全方案至少具备两个条件:

1、良好的用户体验;

2、优秀的性能。

业务逻辑要安全,即产品在设计时尽可能消除其潜在缺陷。

二十.安全开发流程

由微软提出,SDL(Security Development Lifecycle),大致分为16个阶段:

1、培训:开发团队的所有成员都必须接受适当的安全培训,包括安全设计、威胁建模、安全编码、安全测试、隐私等知识。

2、安全要求:在项目确立前,确定安全的要求和需要做的事情。

3、质量门/bug栏:确定安全和隐私质量的最低可接受级别。

4、安全和隐私风险评估:用于和确定软件中需要评析的功能环节

5、设计要求:仔细考虑安全和隐私问题

6、减小攻击面:通过减少攻击者利用潜在弱点或漏洞的机会,来降低风险。

7、威胁建模:明确可能来自的攻击有哪些方面,其提出了STRIDE模型。

8、使用指定工具:编译器、链接器等。

9、弃用不安全的函数。

10、静态分析:由相关工具辅助完成,结果与人工分析相结合。

11、动态程序分析:用户测试环节验证程序的安全性。

12、模糊测试:专门形式的动态分析,通过故意向应用程序引入不良格式或随机数据诱发程序故障。

13、威胁模型和攻击面评价。

14、事件响应计划。

15、最终安全评析:发布之前仔细检查对软件执行的所有安全活动。

16、发布/存档。

SDL实战经验准则:

1、与项目经理进行充分沟通,排出足够时间。

2、规范公司的立项流程,确保所有项目都能通知到安全团队。

3、梳理安全部门的权威,项目必须由安全部门审核后才能发布。

4、将技术方案写入开发、测试的工作手册中。

5、给工程师培训安全方案。

6、记录所有的安全bug,激励程序员编写安全的代码。

二十一.安全运营

从战略层面上来讲有三个:

1、Find and Fix(应用脆弱性扫描,渗透测试 )

2、Defend and Defer(Web应用防火墙),安全监控和警报是有效手段。

3、Secure at the Source(安全软件开发生命周期)

Fix工作分两种:1、扫描漏洞并及时修补;2、安全事件发生或0day漏洞被公布时,紧急响应。

安全运营的重要目标:建立SOC(Secure Operation Center)

小结:互联网安全的核心核心问题是数据安全的问题,而安全问题本质是信任问题,最近比较火热的区块链的本质其实就是信任问题,下章节就简要介绍什么是区块链

原文发布于微信公众号 - Linyb极客之路(gh_c420b2cf6b47)

原文发表时间:2018-01-20

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏大宽宽的碎碎念

实现一个靠谱的Web认证两种认证JWT怎么存储认证信息防止CSRF总是使用https认证信息不应该永久有效总结一下

50410
来自专栏友弟技术工作室

全平台最佳密码管理工具大全:支持 Windows、Linux、Mac、Android、iOS 以及企业应用

原文 当谈到网络安全的防护时,从各种网络威胁的角度来看,仅安装一个防病毒软件或运行一个安全的 Linux 操作系统,并不意味你就是足够安全的。 今天大多数网络...

1.2K11
来自专栏FreeBuf

针对近期“博全球眼球的OAuth漏洞”的分析与防范建议

据Cnet报道,新加坡南洋理工大学一位名叫Wang Jing的博士生,发现了OAuth和OpenID开源登录工具的“隐蔽重定向”漏洞(Covert Redire...

21210
来自专栏北京马哥教育

LVS详解及基于LVS实现web服务器负载均衡

前言 LVS(Linux Virtual Server)Linux虚拟服务器,是一个虚拟的服务器集群系统。本项目在1998年5月由章文嵩博士成立,是中国国内...

4834
来自专栏架构师小秘圈

互联网安全威胁及应对方案

作者:蒋海滔,阿里巴巴国际事业部,高级技术专家,爱好Java/JavaScript,长期关注高性能、并发编程以及Web安全。 来自:高可用架构(ID:ArchN...

3964
来自专栏带你撸出一手好代码

开发了一个小工具

国庆因为有事,没有像朋友圈里的同学一样出去浪。闲暇时间, 为了克服平时使用电脑时的一个坏习惯,我开发了一个小工具来帮助自己。 平时使用电脑时, 我喜欢把所有东...

3018
来自专栏沃趣科技

【Oracle 12c Flex Cluster专题 】— Leaf Node的故障迁移

原文链接 http://allthingsoracle.com/oracle-flex-cluster-leaf-node-failover/ 译者 周天鹏...

3559
来自专栏指尖下的Android

内存和缓存的区别

今天看书的时候又看到了内存和缓存,之所以说又,是因为之前遇到过查过资料,但是现在又忘了(图侵删)。

8702
来自专栏影子

给Ionic写一个cordova(PhoneGap)插件

47910
来自专栏黑白安全

iOS安全基础之钥匙串与哈希

本文最初是由Chris Lowe编写的,后来经过Ryan Ackermann(ios系统开发者)的修改,已经可以针对最新的Xcode 9.2,Swift 4,i...

1062

扫码关注云+社区

领取腾讯云代金券