标签:图片 根据 方便 掌握 算法 综合 是否一致 mmu gen
这一篇博客记录的是服务端安全应用安全的知识,学习内容来自《白帽子讲Web安全》。
? 承接自上一篇客户端安全之后,包括注入攻击、认证与会话管理和访问控制、访问控制、加密算法与随机数、Web框架安全、应用层拒绝服务攻击DDOS、Web Server安全等方面。
@
由于应用违背了“数据与代码分离的原则”。两个条件:1.用户能控制数据的输入;2.代码拼凑了用户输入的数据。
? 在服务器没有错误回显的时候完成注入攻击。验证方法:构造简单的条件语句根据页面是否发生变化来判断SQL语句是否执行。
? 利用数据库中某些特殊的函数,可以有条件地造成延迟。
? 例如在MySQL中,利用BENCHMARK()函数,可以让同一个函数执行若干次,使得返回的结果比平均时间要长,通过时间长短的变化,可以判断出注入语句是否执行成功。这是一种 边信道攻击 。
? eg:
1170 UNION SELECT IF(SUBSTRING(current,1,1) =
CHAR(119),BENCHMARK(5000000,ENCODE(‘MSG‘,‘by
5 seconds‘)),null) FROM (Select Database()
as current) as tbl;
? 这段Payload判断库名的第一个字母是否为CHAR(119),即小写的w。如果判断结果为真,
则会通过BENCHMARK()函数造成较长延时;如果不为真,则该语句将很快执行完。攻击者
遍历所有字母,直到将整个数据库名全部验证完成为止。
? 此外,例如如此的手段还可以获得很多有关数据库的信息。
? SQL注入可以猜解数据库的版本。有自动化工具完成猜解username和password。。(猜解。。暴力),可以获取到当前用户的身份,从而进行进一步的文件操作,通过LOAD_FILE读出,然后INTODUMOFILE写入系统,最后通过LOAD DATA INFILE将文件导入表中。这种技巧可以导出Web-shell,为进一步攻击做好准备。
? 自动化注入工具:sqlmap
? 在MySQL中,除了直接导出Web-shell间接执行命令之外,还可以利用UDF(USER-Defined-Functions)来执行命令。若当前用户是root,则可以直接获取到root权限。
? 存储过程为数据库提供了强大的功能,但必须用CALL或者EXECUTE执行。在注入过程中,存储过后才能为攻击者提供很大便利。例如MS SQL Server中,“xp_cmd-shell”执行系统命令。
? 注入攻击中常常用到的单引号和双引号等特殊字符。当数据集采用了“宽字符集”的时候,就会产生一些漏洞,比如几个编码代表一个字符,例如。
? 0xbf27 or 1=1 经过转义之后 成为 经过转义后,会变成0xbf5c27(“\”的ASCII码为0x5c),但0xbf5c又是一个字符。故原有的转义字符 \ 就会“吃掉”。
? 统一设置为UTF-8是一个很好的办法,也就是,设置页面meta标签的charset属性。
? MySQL数据库中,strict模式不开启会导致重复数据插入或其他非法数据插入,从而有可能获得越权访问。
找到所有SQL注入漏洞
修补这些漏洞
使用预编译语句:最佳方式是使用预编译语句,绑定变量,用户的输入无法改变语句的结构和语义。
使用存储过程:将SQL语句定义在数据库中,避免使用动态的SQL语句。
检查数据类型, 使用安全函数
从数据库角度来说,应该使用最小权限原则。
? 文件上传漏洞指用户上传了一个可执行的脚本文件,并通过这个脚本文件获得了执行服务器端命令的能力。
? 常见安全漏洞
上传文件是Web脚本语言
上传文件是Flash的策略稳健crossdo-main.xml,黑客可以控制Flash在这个域下面的行为
上传文件是病毒,木马文件,诱导用户或者管理员下载执行
上传文件是钓鱼图片或为包含了脚本的图片,用于钓鱼和欺诈
形成条件:1.上传的文件能被Web容器解释执行。2.用户能从Web上访问这个文件。3.用户上传的文件并未被安全检查和格式化
eg:开源富文本编辑器的文件上传功能。
绕过文件上传检查功能 :
1.攻击者手动修改上传过程中的POST包,添加%00字符,可以截断某些函数对文件名的判断。
2.伪造一个合法的文件头,将真实的脚本文件放置在其后。
OWASP:The Open Web Application Security Project (OWASP), an online community, produces freely-available articles, methodologies, documentation, tools, and technologies in the field of web application security.
使用弱口令攻击比暴力破解有效得多。密码的保存不要明文保存,采用不可逆的加密算法或者是单项散列函数算法。
多因素认证:提高攻击门槛
Session与认证:将Session ID加密后保存在Cookie中,Cookie收到浏览器同源策略保护,Session劫持就是Session ID在生命周期内被窃取,相当于账户失窃;如果Session ID 保存在Cookie中,则可以称作Cookie劫持。
Session Fixation攻击: 在用户登录网站的过程中,如果登录前后用户的Session ID没有发生变化,则会存在Session Fixation问题。
Session保持攻击: 用户长时间未活动或者用户点击退出后,服务器将销毁session,如果Session一直未失效,则会导致Session劫持攻击。
有的网站访问量大,则服务端不维护Session,把Session放到Cookie中加密保存,发送时带上Cookie,利用Cookie的Expire标签控制Session的失效时间,这就可以通过XSS攻击客户端Cookie失效时间来劫持Session了。
SSO 单点登录: 用户登录一次就可以访问所有系统。将风险集中了。使用最多的是OpenID,使用URL进行用户认证,同时在验证成功后重定向回网站。
What Can I Do?
授权问题: 权限控制,访问控制。某个主体对某个客体需要实施某种操作,而系统对这种操作的限制就是权限控制。网络请求收到防火墙ACL策略的限制。加上基于页面的访问控制可以解决页面未授权访问的问题。
垂直权限管理
RBAC(Role-Based Access Control):基于角色的访问控制。采用最小权限原则。
水平权限管理
同一种用户相互间的数据不能直接访问,即问题出在同一个角色上,至今仍然是一个难题。
eg:来伊份购物网站没有对用户进行权限控制,通过变化URL中的id参数即可查看对应id的个人
姓名、地址等隐私信息。
OAuth简介
不提供用户名和密码的情况下,授权第三方应用访问Web资源的安全协议。OpenID解决认证问题,OAuth解决授权问题。
有三个角色:
User:用户
Resource Owner:资源提供方,用户访问其他的网页应用需要资源提供方的数据支持
Client:消费方,用户正在访问的网页应用
过程步骤不赘述,理解。
? 加密算法分为 分组加密算法和流密码加密算法。
? 分组加密法: DES、3-DES、Blowfish、IDEA、AES等。
? 流密码加密算法: RC4、ORYX、SEAL。
? 根据攻击者可以获得的信息,可以分为:唯密文攻击、已知明文攻击、选择明文攻击、选择密文攻击。
? 流密码常用的一种加密算法,基于异或操作,每次都只操作一个字节,但是性能非常好。
Reused Key Attack: 使用同一个密钥加密多次,因为基于异或操作,所以只要知道四个数据只要知道三个就可以推导出剩下的一个了。
E(A) = A xor C
E(B) = B xor C
E(A) xor E(B) = A xor B;
Bit-flipping Attack: 在密码学中,攻击者在不知道明文的情况下,通过改变密文,使得明文按其需要的方式发生改变的攻击方式。也就是当知道A、B的明文,A的密文时,就可以推导出B 的密文。
解决Bit-flipping攻击,验证密文的完整性。
弱随机IV问题: 在authcode()函数中,它默认使用了4字节的IV(就是函数中的keyc),使得破解难度增
大。但其实4字节的IV是很脆弱的,它不够随机,我们完全可以通过“暴力破解”的方式找到重复的IV。
? WEP是一种无线加密传输协议,破解了WEP的密钥,就可以连接Access Point。
? 两个关键因素:
Security of the WEP algorithm 提出了破解WEP破解的理论。
? 分组独立加密,调换任意分组的密文,那么解密后的明文也是对调位置的。所以应该使用链式加密。
? 分组加密过程中,不够位数的用padding进行填充。Padding Oracle Attack的关键在于攻击者能够获知解密的结果是否符合padding。在实现和使用CBC模式的分组加密算法时,注意这一点即可。
密码学一个原则:密码系统的安全性应该依赖于密钥的复杂性,而不应该依赖于
算法的保密性。
? 防止密钥从非正常的途径泄露。不要把私钥硬编码在代码中,应该采用公私钥管理或者改善密钥管理。密钥集中管理,降低系统对密钥的耦合性,也利于定期更换密钥。
? 伪随机数不够随机。
MVC框架安全
现代开发中的MVC框架。从数据流入的方向看,数据先后经过了View层、Controller层、Model层,设计安全方案的时候要掌握住数据这个关键因素。在每一层解决相关的问题,不要把不属于该层的问题留给那一层。
模板引擎与XSS防御
? 在View层解决XSS问题。在现在View层用模板引擎对页面进行渲染,模板引擎可能会提供一些编码方法
? eg:Django中auto-escape采用了htmlEncode(),从而可以保证安全,有时关闭则可能导致问题。
Web框架与CSRF防御
可以使用security token来解决CSRF攻击,对读写操作分开,对所有的“写操作”使用POST提交,同时,要保证security token的私密性,自动在POST中增加Token。
1.在Session中绑定Token。
2.在form表单中自动添加token字段。
3.在Ajax请求中自动添加token。
4.在服务端对比POST中提交的Token和Session中绑定的Token是否一致。
HTTP Headers管理
在框架中,对HTTP头进行全局化的处理。eg:针对HTTP头的CSRF攻击。针对30X返回的HTTP Response的跳转——提供统一跳转函数(白名单)。
数据持久层与SQL注入
使用ORM框架对防止SQL注入有好处。
? DDOS:分布式拒绝服务 ,将正常服务放大了若干倍,通过若干个网络节点同时发起攻击,以达规模效应。
? 常见的DDOS攻击:SYN flood, UDP flood, ICMP flood。
在很多对抗DDOS的产品中,一般会综合使用各种算法,结合一些DDOS攻击的特征,对流
量进行清洗。对抗DDOS的网络设备可以串联或者并联在网络出口处。
? 发生在应用层,TCP三次握手已经完成,连接已经建立,发起攻击的IP地址真实。这种攻击是对服务器性能的一种攻击,优化服务器性能的方法能够缓解这种攻击。
? CAPTCHA:全自动区别计算机和人类的图灵测试。
? 可能漏洞: 1. 直接利用图像相关算法识别验证码 2.验证码消耗掉后SessionID未更新,导致使用原有的SessionID可以一直重复提交同一个验证码 3. 提前将所有的验证码图片生成好,以哈希过的字符串作为验证码
图片的文件名——采用枚举的方式即可破解。
? 验证码的核心是识别人与机器。一般情况下,判断HTTP头中的User-Agent字段来识别客户端。
? 另外一种比较可信的办法是让客户端解析一段JS,并给出正确的运行结果,因为大部分自动化过程是直接构造HTTP包来完成的,并没有在浏览器环境中。
? Web Server也可以用来进行防御。
? 当正则表达式写得不好时,就有可能被恶意输入利用,消耗大量资源,从而造成DOS。这种攻击被称为Re-DOS。这是一种代码缺陷上的漏洞。
? eg: ^(a+)+$, 正常时候输入 aaaax 时,16条可能路径,但是输入 aaaaaaaaaaaaaaaaX 时,有65536条路径,极大增加正则引擎解析的速度,用户恶意构造输入的时候,有缺陷的正则表达式效率大大降低。
? 暂时跳过这个章节,等到具体去写POC的时候回过头来再看。
? 此处对互联网公司安全了解为主,此处摘录一些重要观点,不做详细探讨了。
【网络安全】——服务端安全(注入攻击、认证与会话管理和访问控制、访问控制、加密算法与随机数、Web框架安全、应用层拒绝服务攻击DDOS等)
标签:图片 根据 方便 掌握 算法 综合 是否一致 mmu gen
原文地址:https://www.cnblogs.com/veeupup/p/12684889.html