实习Day37

2019.8.15

实习第三十七天

继续写OWASP TOP10 防御思路总结

仔细了解了一下DOM-XSS

校验了两条新签名

⑨ 验证应用程序或框架是否使用强大的随机数(抵御CSRF令牌)或具有其他事务处理保护机制。
⑩ 验证系统能抵御对安全功能、资源或数据的持续访问。例如,考虑使用资源治理器来限制每小时编辑的数量,或阻止整个数据库被单个用户独占。
⑪ 验证应用程序是否具有针对较低价值系统的额外授权(例如,升级或自适应认证)或高价值应用程序的职责隔离,以根据应用程序和过去欺诈的风险执行反欺诈控制。
⑫ 验证应用程序是否正确强制执行了上下文相关的授权,以进制通过参数篡改进行未授权的操作。
-----------------个人防御思路分类总结------------------

A6:2017 – 安全配置错误
安全配置错误是最常见的安全问题,这通常是由于不安全的默认配置、不完整的临时配置、开源云 存储、错误的 HTTP 标头配置以及包含敏感信息的详细错误信息所造成的。因此,我们不仅需要对所 有的操作系统、框架、库和应用程序进行安全配置,而且必须及时修补和升级它们。

防御思路:
--------------官方文档防御思路总述---------------
应实施安全的安装过程,包括:
》 一个可以快速且易于部署在另一个锁定环境的可重复的加固过程。开发、质量保证和生产环境都应该进行相同配置,并且,在每个环境中使用不同的密码。这个过程应该是自动化的,以尽量减少安装一个新安全环境的耗费。
》 搭建最小化平台,该平台不包含任何不必要的功能、组件、文档和示例。移除或不安装不适用的功能和框架。
》 检查和修复安全配置项来适应最新的安全说明、更新和补丁,并将其作为更新管理过程的一部分,(参见A9:2017-使用含有已知漏洞的组件)。在检查过程中,应特别注意云存储权限(如:S3桶权限)。
》 一个能在组件和用户间提供有效的分离和安全性的分段应用程序架构,包括:分段、容器化和云安全组。
》 向客户端发送安全指令,如:安全标头。
》 在所有环境中能够进行正确安全配置和设置的自动化过程
--------------官方文档防御思路总述---------------

-----------------个人防御思路分类总结------------------
① 设计一个易于快速部署且可重复的加固过程,所有的开发环境都进行相同的配置,但是使用不同的密码,环境配置应该是自动化的
② 搭建所需要的最小平台,这个平台不包括任何多余的功能,组件,文档等任何其他东西
③ 定期检查,修复安全配置项,及时查看各种安全说明,打上补丁
④ 做好组件,平台与用户的隔离,限制横向移动
-----------------个人防御思路分类总结------------------
A7:2017 – 跨站脚本(XSS)
当应用程序的新网页中包含不受信任的、未经恰当验证或转义的数据时,或者使用可以创建 HTML或 JavaScript 的浏览器 API 更新现有的网页时,就会出现 XSS 缺陷。XSS 让攻击者能够在受害者的浏览器 中执行脚本,并劫持用户会话、破坏网站或将用户重定向到恶意站点。

防御思路:
--------------官方文档防御思路总述---------------
防止XSS需要将不可信数据与动态的浏览器内容区分开。这可以
通过如下步骤实现:
》 使用设计上就会自动编码来解决XSS问题的框架,如:Ruby 3.0或 React JS。了解每个框架的XSS保护的局限性,并适当地处理未覆盖的用例。
》 为了避免反射式或存储式的XSS漏洞,最好的办法是根据HTML输出的上下文(包括:主体、属性、JavaScript、CSS或URL)对所有不可信的HTTP请求数据进行恰当的转义 。
》 更多关于数据转义技术的信息见:《OWASP Cheat Sheet ‘XSS Prevention’》 在客户端修改浏览器文档时,为了避免DOM XSS攻击,最好的选择是实施上下文敏感数据编码。如果这种情况不能避免,可以采用《OWASP Cheat Sheet ‘DOM based XSS Prevention’》描述的类似上下文敏感的转义技术应用于浏览器API。
》 使用内容安全策略(CSP)是对抗XSS的深度防御策略。如果不存在可以通过本地文件放置恶意代码的其他漏洞(例如:路径遍历覆盖和允许在网络中传输的易受攻击的库),则该策略是有效的。
--------------官方文档防御思路总述---------------

-----------------个人防御思路分类总结------------------
一般XSS:
① 不要将不可信的数据插入到指定位置之外
不要放在<script>标签内,不要放在HTML注释内,不要放在属性名、标签名内,不要放在CSS中。不要执行任何不可信数据的JS代码。
② 将不可信数据插入HTML元素内容前进行HTML转义
插入到普通标签例如div, p, b, td等等
示例:& 转义为 &
< 转义为&lt;
> 转义为&gt;
" 转义为&quot;
’ 转义为&#x27;
/ 转义为&#x2F;
③ 将不可信数据插入HTML常规属性前将属性进行转义
插入到常见属性如width, name, value等等
除了字母以外,转义所有ASCII值小于256的字符为&#xHH; 形式(或者命名实体形式)来防止值逃逸出属性

④ 将不可信数据插入JavaScript数据值时对JavaScript转义
唯一安全的位置放置不可信数据是被引号包含的“数据值”(参考SQL参数化)

–注意有一些JavaScript函数永远不可能安全的使用不可信数据作为输入-即使JavaScript已经转义!如window.setInterval(‘…即使转义也会存在XSS…’)

–注意HTML解析器在JavaScript解析器前运行,不要二次转义造成“转义逃逸”
除了字母以外,转义所有ASCII值小于256的字符为\xHH的形式来防止数据值进入脚本内容或者其他属性

⑤ 将不可信数据插入HTML样式属性前对CSS进行转义和严格验证

–严格对结构进行验证
–除了字母以外,转义所有ASCII值小于256的字符为\HH形式

⑥ 将不可信数据插入HTML URL参数值前对URL进行转义
–除了字母以外,转义所有ASCII值小于256的字符为%HH形式

–如果不可信的数据是指被放置在href, src或其它基于URL的属性时,需要进行验证确保它不会被指向其它的协议,尤其是JavaScript链接

–只允许白名单内http和https

⑦ 使用专门设计的库来过滤HTML Markup

DOM-XSS:
注:HTML,HTML属性,URL,CSS上下文都视作HTML上下文
rule1: 在执行上下文中将不受信任的数据插入HTML子上下文之前,HTML转义然后JavaScript转义
rule2: 在执行上下文中将不受信任的数据插入HTML属性子上下文之前的JavaScript转义
rule3: 在将不受信任的数据插入执行上下文中的CSS属性子上下文之前的JavaScript转义
rule4: 在执行上下文中将不受信任的数据插入URL属性子上下文之前,URL转义然后JavaScript转义
rule5: 使用安全的JavaScript函数或属性填充DOM
rule6: 修复DOM跨站点脚本漏洞

可以参考OWASP 官方给出的DOM-XSS防御: https://cheatsheetseries.owasp.org/cheatsheets/DOM_based_XSS_Prevention_Cheat_Sheet.html

其他方式:①使用HTTPOnly ②使用内容安全策略 ③使用Web框架提供的自动转义功能 ④使用X-XSS-Protection响应头

对于输出:
输出编码(与跨站脚本有关)的目的是在用户输入作为数据显示的时候,转换不可信的输入为安全形式,以避免被浏览器当做代码执行。下面的表格列出了阻止跨站脚本的关键输出编码方法。
编码类型 编码规则
HTML实体转义 转换 & 为 & 转换 < 为 < 转换 > 为 > 转换 ” 为 " 转换 ‘ 为 ' 转换 / 为 /
HTML属性编码 除了字母,转换所有字符为&#xHH;形式,包括空格(HH = Hex数值)
URL编码 标准的编码请参考http://www.w3schools.com/tags/ref_urlencode.asp。URL编码应该只用于参数部分,而不是整个URL或URL路径部分。
JavaScript编码 除了字母,转换所有字符为\uXXXX的unicode转义形式(X=整数)
CSS Hex编码 CSS转义支持\XX和\XXXXXX的形式。如果下一个字符会继续转义序列,那使用两个字符的转义形式可能会出现问题。有两种解决办法(a)在CSS转义后添加一个空格(会被CSS解析器忽略)(b)使用0填充以实现完整的CSS转义格式。

XSS内容部分参考:https://www.freebuf.com/articles/web/156622.html

-----------------个人防御思路分类总结------------------

A8:2017 – 不安全的反序列化
不安全的反序列化会导致远程代码执行。即使反序列化缺陷不会导致远程代码执行,攻击者也可以 利用它们来执行攻击,包括:重播攻击、注入攻击和特权升级攻击。

防御思路:
--------------官方文档防御思路总述---------------
唯一安全的架构模式是不接受来自不受信源的序列化对象,或使用只允许原始数据类型的序列化媒体。如果上述不可能的话,考虑使用下述方法:
》 执行完整性检查,如:任何序列化对象的数字签名,以防止恶意对象创建或数据篡改。
》 在创建对象之前强制执行严格的类型约束,因为代码通常被期望成一组可定义的类。绕过这种技术的方法已经被证明,所以完全依赖于它是不可取的。
》 如果可能,隔离运行那些在低特权环境中反序列化的代码。
》 记录反序列化的例外情况和失败信息,如:传入的类型不是预期的类型,或者反序列处理引发的例外情况。
》 限制或监视来自于容器或服务器传入和传出的反序列化网络连接。
》 监控反序列化,当用户持续进行反序列化时,对用户进行警告。
--------------官方文档防御思路总述---------------

-----------------个人防御思路分类总结------------------
PHP: (魔术方法)
① 在文件系统函数的参数可控时,对参数进行严格的过滤。
② 严格检查上传文件的内容,而不是只检查文件头。
③ 在条件允许的情况下禁用可执行系统命令、代码的危险函数。
④ 参考官方防御思路

JAVA: (readObject)Apache Commons Collections 这个库使用太广泛
通过重写ObjectInputStream对象的resolveClass方法即可实现对反序列化类的校验。通过此方法,可灵活的设置允许反序列化类的白名单,也可设置不允许反序列化类的黑名单。但反序列化漏洞利用方法一直在不断的被发现,黑名单需要一直更新维护,且未公开的利用方法无法覆盖。
感觉目前JAVA这块的主要防御方式就是黑/白名单策略。也没有其他办法。

Python: (pickle)
① 不要再不守信任的通道中传递 pcikle 序列化对象
② 在传递序列化对象前请进行签名或者加密,防止篡改和重播
③ 如果序列化数据存储在磁盘上,请确保不受信任的第三方不能修改、覆盖或者重新创 建自己的序列化数据
④ 将 pickle 加载的数据列入白名单

-----------------个人防御思路分类总结------------------

A9:2017 – 使用含有已知漏洞的组件
组件(例如:库、框架和其他软件模块)拥有和应用程序相同的权限。如果应用程序中含有已知漏 洞的组件被攻击者利用,可能会造成严重的数据丢失或服务器接管。同时,使用含有已知漏洞的组 件的应用程序和API可能会破坏应用程序防御、造成各种攻击并产生严重影响。

防御思路:
--------------官方文档防御思路总述---------------
应该制定一个补丁管理流程:
》 移除不使用的依赖、不需要的功能、组件、文件和文档。
》 利用如 versions、DependencyCheck 、retire.js等工具来持续的记录客户端和服务器端以及它们的依赖库的版本信息。持续监控如CVE 和 NVD等是否发布已使用组件的漏洞信息,可以使用软件分析工具来自动完成此功能。订阅关于使用组件安全漏洞的警
告邮件。
》 仅从官方渠道安全的获取组件,并使用签名机制来降低组件被篡改或加入恶意漏洞的风险
》 监控那些不再维护或者不发布安全补丁的库和组件。如果不能打补丁,可以考虑部署虚拟补丁来监控、检测或保护。每个组织都应该制定相应的计划,对整个软件生命周期进行监控、评审、升级或更改配置。
--------------官方文档防御思路总述---------------

-----------------个人防御思路分类总结------------------

参考官方文档的防御思路总述即可

-----------------个人防御思路分类总结------------------

A10:2017 – 不足的日志记录和监控
不足的日志记录和监控,以及事件响应缺失或无效的集成,使攻击者能够进一步攻击系统、保持持 续性或转向更多系统,以及篡改、提取或销毁数据。大多数缺陷研究显示,缺陷被检测出的时间超 过200天,且通常通过外部检测方检测,而不是通过内部流程或监控检测。

防御思路:
--------------官方文档防御思路总述---------------
根据应用程序存储或处理的数据的风险::
》 确保所有登录、访问控制失败、输入验证失败能够被记录到日志中去,并保留足够的用户上下文信息,以识别可疑或恶意帐户,并为后期取证预留足够时间。
》 确保日志以一种能被集中日志管理解决方案使用的形式生成
》 确保高额交易有完整性控制的审计信息,以防止篡改或删除,例如审计信息保存在只能进行记录增加的数据库表中。
》 建立有效的监控和告警机制,使可疑活动在可接受的时间内被发现和应对。
》 建立或采取一个应急响应机制和恢复计划,例如:NIST 800-61 rev 2或更新版本。
目前已有商业的和开源的应用程序防护框架(例如:OWASP
AppSensor)、Web应用防火墙(例如 :Modsecurity with the
OWASP Core Rule Set)、带有自定义仪表盘和告警功能的日志
关联软件。
--------------官方文档防御思路总述---------------

-----------------个人防御思路分类总结------------------

参考官方文档的防御思路总述即可

-----------------个人防御思路分类总结------------------

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值