最近学了点web安全的东西,作为笔记记录一下。
1)关于web应用安全,最好的是一个网站OWASP ,开放web应用安全项目。
这上面货色很多,大家可以尽情享用。我以前也总是想知道XSS,CSRF,SQL injection具体的攻击过程是怎样的的,WebGoat 提供了一个演示项目,里面有30几种常见的攻击演示。
强烈建议大家去试试看。
2)攻击方式分类:
a. 直接的方式。修改进程指令,等于修改内存地址。关于悬挂指针,黑客可以用撞大运的方式,将恶意代码地址写满内存,撞上悬挂指针就赚了。
- 任意四字节内容写到任意地址,这种无悬念的控制整个过程。
- 任意四字节内容写到特殊地址,Stack overflow,heap overflow
- 受限制的四字节写到任意的地址,可以找个memcpy(),在长度检查后,执行前,把len给替换了。
- 受限制的四字节写到受限制的地址,这个就看运气了。
b. 间接的方式。通过提供不同的参数和环境,让程序按自己预想的方式执行。
- SQL Injection
- XSS
- CSRF
- Directory traversal
- HTTP header Injection
- HTTP response splitting
3) 本质原因
a. 冯诺依曼体系结构的原因,数据和代码是不做区分的,这是缓冲区溢出的根本原因。
b. 对同一数据流的处理方式不同,如何应对用户的输入。非法输入会对系统造成损害,一个正常的数据递送过程,经过浏览器,web服务器,应用服务器,数据库服务器。举例:
- 浏览器认为合法的,可能对web服务器造成伤害,比如%bf字符。
- 浏览器认为合法的,web服务器也认为合法的,应用服务器也认为合法的,但对数据库服务器造成伤害,比如SQL Injection。
扩展开去,就是数据流经的各部分存在信任边界:
- 层与层之间存在信任边界。
- 功能组件之间存在信任边界。
- 用户与系统之间存在信任边界。
- 用户与用户之间存在信任边界。
4)威胁模型(STRIDE)
a. S poofing.伪装,冒充他人身份,属认证范畴。
b. T ampering. 篡改,修改数据或代码,属完整性范畴。
c. R epudiation. 抵赖,否认做过的事情,属不可抵赖范畴。
d. I nformation Disclosure. 信息泄露,属机密性范畴。
e. D enial of Service. 拒绝服务,属可用性范畴。
f. E levation of Privilege. 未经授权的许可,属授权范畴。
5)一点思考
以前听说QFD,叫质量功能展开,我想,可不可以借鉴这个概念,对安全也这样分析和展开,我初步做了一下分类:
a. 影响开发的。非法输入,SQL Injection,XSS。
b. 影响运维的。
c. 影响客服的。钓鱼
d. 影响UI的。XSS,CSRF,CSS,Javascript。
e. 影响管理的。专岗专职。
f. 影响决策的。
互联网,充满诱惑和邪恶,行走其中确实要小心,切记,切记!