Web安全学习系列(3)

《白帽子讲Web安全》笔记11-17章

从头学起=》Web安全学习系列(1)
一步一步=》Web安全学习系列(2)
转载请注明出处:http://blog.csdn.net/cym492224103

    • 第11章 加密算法与随机数
      • 针对加密攻击
      • Stream Cipher Attack
      • ECB模式的缺陷
      • 密钥管理
      • 建议
    • 第12章 Web框架安全
    • 第13章 应用层拒绝服务攻击
      • 本质
      • 防御措施
      • Slowloris攻击
    • 第14章 PHP安全
      • 文件包含漏洞
      • 变量覆盖漏洞
      • 代码执行漏洞
      • 定制安全的PHP环境
    • 第15章 WebServer配置安全
      • WebServer的安全
      • Apache安全
      • Nginx安全
      • JBoss远程命令执行
      • Tomcat远程命令执行
    • 第16章 互联网业务安全
      • 安全是一个产品的特性
      • 账号被盗途径
    • 第17章 安全开发流程SDL
      • 微软的安全开发流程
      • SDL实战经验

第11章 加密算法与随机数


针对加密攻击

唯密文攻击
攻击者有一些密文,他们是使用同一加密算法和同一密钥加密的。这种攻击是最难的。
已知明文攻击
知道对应密文的明文。
选择明文攻击
不仅知道一些密文和明文,还能选择用于加密的明文。
选择密文攻击
攻击者选择不同的密文来解密。

Stream Cipher Attack

流密码的加密基于异或(XOR)操作进行的,每次都只操作一个字节。性能非常好。
常见的流加密算法:RC4\ORYX\SEAL等。
破解攻击:Reused Key Attack

假设密钥C,明文A,明文B,那么XOR加密可表示
E(A)= A xor C
E(B)= B xor C
密文是公之于众,因此很容易可计算:
E(A)xor E(B)
因此两个相同的数进行XOR运算结果为0,有此可得:
E(A)xor E(B)=(A xor C)xor(B xor C)=A xor B xor C xor C = A xor B
从而得到
E(A)xor E(B) = A xor B
通过规则破解加密

ECB模式的缺陷

对于ECB模式来说,改变分组密文的顺序,将改变解密后的明文顺序,替换某个分组密文,解密后该对应分组的明文也会被替换,而其他分组不收影响。
当需要加密的明文多于一个分组长度时,应该避免使用ECB模式。

密钥管理

在密码学里有个基本的原则:密码系统的安全性应该依赖于秘钥的复杂性,而不应该依赖于算法保密性。
密钥管理中最常见的错误,就是将密钥码在代码里。
硬编码的密钥存在的问题
1.代码被传播,可能被逆向。
2.软件开发人员都能查看代码,可能会由人员泄露代码。
常见做法将密钥保存在配置文件或者数据库。(定时更换密钥)

顺序增长有可能被预测,可以使用随机数。
在重要和敏感的系统中我们要使用安全的随机数生成算法。在java中,我们可以使用
java.security.SecureRandom

建议

在加密算法的选择和使用上:
1.不要使用ECB模式
2.不要使用流密码(比如:RC4)
3.使用HMAC-SHA1代替MD5(甚至代替SHA1)
4.不要使用相同的key做不同的事情
5.salts与IV需要随机生成
6.不要自己实现加密算法,尽量使用安全专家已经实现好的库
7.不要依赖系统的保密性
当你不知道如何选择时有一下建议:
1.使用CBC模式的AES256用于加密
2.使用HMAC-SHA512用于完整性检查
3.使用带salt的SHA-256或SHA-512用于Hashing

第12章 Web框架安全


优秀的安全方案:在正确的地方,做正常的事。
XSS:过滤文本。
CSRF:所有写操作所要使用POST,每次操作请求都需要插入token的HTTP头。
HTTP Response:web框架设置跳转函数的白名单。
Cookie劫持:添加HttpOnly
SQL注入:预编译函数。

第13章 应用层拒绝服务攻击


DDOS又称分布式拒绝服务,全称Distributed Denial of Service.
DDOS本是利用合理的请求造成资源过载,导致服务不可用。

本质

分布式拒绝服务攻击,将正常请求放大若干倍,通过若过个网络节点同时发起攻击,以达成规模效应。这些网络节点往往是黑客们所控制的“肉鸡”,数量达到一定规模后,就形成了一个“僵尸网络”。大型的僵尸网络,甚至达到了数万、数十万台的规模。如此规模的僵尸网络发起的DDOS攻击,几乎是不可阻挡的。

防御措施

1.限制请求频率
在应用中针对每个“客户端”做一个请求频率的限制。
2.验证码
阻止自动化重放行为
3.服务器配置
Apache配置:调小Timeout、KeepAliveTimeout值、增加MaxClients值。
Apache提供的模块接口为我们扩展Apache、设计防御措施提供了可能。目前已经有一些开源的Module实现了针对应用层DDOS保护攻击。
mod_qos是Apache的一个Module,它开源帮助缓解应用层的DDOS攻击。
思路:限制IP访问频率。

如果攻击者使用代理服务器,傀儡机进行攻击,该如何有效的保护网站呢?
Yahoo提供解决思路:跟进IP地址和Cookie等信息,可以计算客服端的请求频率并进行拦截。

Slowloris攻击

原理:极低的速度往服务器发送HTTP请求,占用请求连接数不释放,无法接受新的请求,导致拒绝服务。
要保持住这个连接,RSnake构造了一个畸形的HTTP请求,准确地说,是一个不完整的HTTP请求。
在正常的HTTP包头中,以两个CLRF表示HTTP Headers部分结束。
正常的 Content-Length:42\r\n\r\n 处理后的 42\r\n
由于web service只收到一个\r\n,所以认为还没结束,并保持此连接。
此类拒绝服务攻击本质,实际上是对有限的资源的无限制滥用。

HTTP Request Header长度最大8192字节。
HTTP Request Body默认限制大小2GB。

正则写不好可能被恶意输入利用,消耗大量资源,从而导致DOS。这种攻击叫做ReDos。

第14章 PHP安全


文件包含漏洞

include()
require()
include_once()
require_once()
当使用这四个函数包含一个新的文件时,该文件将作为PHP代码执行,PHP内核并不会在意该被包含文件是什么类型。
利用漏洞需要两个条件:
1.包含文件为动态变量
2.用户能够控制该变量

要解决文件包含漏洞,避免包含动态的变量,尤其是用户可以控制的变量。
一种变通方式,使用枚举:


switch($file)
    case ‘main’:
        include ‘xxxxxx’;
    break;
    case ‘xxx’:
        include ‘xxxxxx’;
    break;
    default:
        include ‘xxxxxx’;
?>

远程文件包含漏洞( RFI:Remote File Inclusion)
PHP配置allow_url_include为ON的话,则include/require函数可以加载远程文件。

变量覆盖漏洞

当register_globals为ON时,提交请求URL:hit://www.a.com/test.php?auth=1变量$auth将自动得到赋值。
安全建议:
首先,确保register_globals=OFF.若不能自定义php.ini,则应该在代码中控制。
其次,熟悉可能造成变量覆盖的函数和方法,检查用户是否能够控制变量的来源。
最后,养成初始化变量的好习惯。

代码执行漏洞

挖掘漏洞的过程,通常需要先找到危险函数,然后回溯函数的调用过程,最终看在整个调动过程中用户是否有可能控制输入。
PHP有很多函数可以直接执行代码的函数:比如:eval()、assert()、system()、exec()、shell_exec()、passthru()、escapeshellcmd()、pcntl_exec()等。
一般来说最好禁用这些函数。

定制安全的PHP环境

register_globals = OFF(防止变量覆盖)
allow_url_include = OFF(加载远程文件)
allow_url_open = OFF(打开远程文件)
display_errors = OFF(错误回显)
log_errors= OFF(错误日志)
cgi.fix_pathinfo = 0(避免文件解析问题)
session.cookie_httponly = 1(开启HttpOnly,包含cookie)
session.cookie_secure = 1(若是全站HTTPS则请开启)

第15章 WebServer配置安全


WebServer的安全:

1.本身是否安全。
2.是否提供安全功能。

Apache安全:

1.检查Module的安装情况,根据最小权限原则,应该尽可能的减少不必要的Module,对于要使用的Module,则检查其对应的版本是否存在已知的安全漏洞。
2.Apache以root身份或者admin身份运行是一个非常糟糕的决定,最好使用只有运行web应用的权限用户身份运行。
3.Apache还提供了一些配置参数优化服务器的性能,提高对抗DDOS攻击能力。详细请看“《web安全》第13章 应用层拒绝服务攻击”

Nginx安全:

1.Nginx与Apache最大的区别在于,检查Apache安全时需要更多的要关注Module的安全,而Nginx则需要关注软件本身,及时升级软件版本。
2.Nginx的配置非常灵活,可以做一些简单的条件判断,比如客服端的User-Agent具有什么特征。

JBoss远程命令执行

1.默认安装时访问JMX-Console是没有任何认证的。
2.通过DeploymentScanner远程加载一个war包。

Tomcat远程命令执行

和Boss一样,可以直接访问控制页面,管理员可以通过控制页面部署war包。

第16章 互联网业务安全


安全是一个产品的特性

如果我们的产品能够潜移默化的培养用户的安全习惯,将用户往更安全的行为上引导,那么这样的安全就是最理想的产品安全。

提高注册门槛,防止垃圾注册。

账号被盗途径:

1、网站登录过程中无HTTPS,密码在网络中嗅探。
2、用户电脑中了木马,密码被键盘记录软件所获取。
3、用户被钓鱼网站所迷惑,密码被钓鱼网站所骗取。
4、网站某登录入口可以被暴力破解。
5、网站密码取回流程存在逻辑漏洞。
6、网站存在XSS等客服端脚本漏洞,用户账户被间接窃取。
7、网站存在SQL注入等服务器漏洞,网站被黑客入侵导致用户账户信息泄露。

第17章 安全开发流程(SDL)


微软的安全开发流程:

1.培训
2.安全要求
3.bug栏
4.安全和隐私风险评估
5.设计要求
6.减小攻击面
7.威胁建模
8.使用指定的工具
9.弃用不安全函数
10.静态分析
11.动态程序分析
12.模糊测试
13.威胁模型和攻击面评价
14.事件响应计划
15.最终安全评析
16.发布/存档

SDL实战经验

1、与项目经理进行充分沟通,排出足够事件。
2、规范公司的立项流程,确保所有项目都能通知到安全团队,避免遗漏。
3、梳理安全的部门的权威,项目必须由安全部门审核完成后才能发布。
4、将技术方案写入开发、测试工作手册中。
5、给工程师培训安全方案。
6、记录所有安全BUG,激励程序员编写安全的代码。

你可能感兴趣的:(Web安全,Web安全)