安全工程师的核心竞争力不在于他能拥有多少个0day,掌握多少种安全技术,而是在于他对安全理解的深度,以及由此引申的看待安全问题的角度和高度。

0x01 世界观安全

安全三要素

机密性、完整性、可用性

安全评估过程

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

白帽子兵法

Secure by default、最小权限、纵深防御、数据代码分离、不可预测性 五大原则

互联网本来是安全的,自从有了研究安全的人,就变得不安全了。


0x02 浏览器安全

Orign 浏览器同源策略是浏览器安全基础

浏览器沙箱

恶意网址拦截


0x03 跨站脚本攻击(XSS)

Cross Site Script

反射、存储、DOM Based

远程Payload:

var img = document.createElement("img");
img.src = "http://blog.dyboy.cn/index.do?m=delete&id=123";
document.body.appendChild(img);

类似还有表单,XMLHttpRequest

XSS Worm

CSS中 background:url('javascript:alert(1)')

Flash XSS

XSS防御:HttpOnly、浏览器filter


0x04 跨站请求伪造(CSRF)

Cross Site Request Forgery

对于CSRF漏洞的利用,我最初的想法是在因为业务没有验证token,目标网站管理员在浏览黑客精心搭建的网页时,导致CSRF攻击,相当于在第三方网站中执行了管理网站的操作请求。

浏览器持有 Third-party Cookie 是本地Cookie(可设置时效,本地存储),Session Cookie浏览器关闭即失效(内存中)

P3P : 允许跨域访问隐私数据

Flash Csrf

Csrf防御: 验证码、Referer CheckAnit Csrf Token

Token尽量位于表单,敏感操作改为POST提交,XSS做好防护,否则CSRF防御也只是空中楼阁


0x05 点击劫持(ClickJacking)

拖拽劫持 数据窃取 触屏劫持

防御:JavaScript禁止iframe嵌套 HTTP头X-Frame-Options

iframe 可设置 sandbox 参数


0x06 SQL注入

盲注(Blind Injection)

Timing Attack : BENCHMARK(count,expr) 用于延时,当然还有sleep()

命令注入:UDF

xp_cmdshell sysadmin 权限下可开启sp_configure,sp_addextendproc开启此功能

xp_regread 操作注册表等等很多,在SQLMAP下已经集成

宽字节注入

SQL Column Truncation strict模式

防御SQL注入攻击: mysql_real_escape_string()转义 预编译语句,绑定变量 数据类型检查


0x07 XML注入

代入数据,改变了xml结构


0x08 代码注入

eval() assert() system()

防御:禁用此类危险函数


0x09 CRLF注入

Carriage Return, Line Feed -> \r\n

使用CRLF的地方都可能存在此类型注入,如Log和HTTP头(Http Response Spliting)


0x10 文件上传漏洞

解析问题、脚本文件、文件包含

黑名单的检测方式

绕过:0x00、伪造文件头

Apache解析问题:文件名从后往前直到一个认识的文件类型为止

IIS文件解析问题:截断字符 ;/a.asp/路径下所有类型文件当作asp解析,PUT method(上传),MOVE method(改名),DELETE method

使用 OPTIONS /HTTP/1.1 探测服务器信息

PHP CGI 路径解析问题:test.jpg/.php当作php脚本执行

利用上传文件钓鱼

防御:白名单、上传目录不可写不可执行、单独设置文件域名、随机数写文件名白名单类型


0x11 认证与会话管理

Authentication

认证实际上就是一个验证凭证的过程

单/双/多因素认证

OWASP 推荐策略

加salt hash

session

Session Fixation 攻击

Session 保持攻击

SSO(单点登录)


0x12 访问控制

Authorization 读、写、执行

垂直和水平越权

OAuth:授权第三方应用


0x13 加密算法问题

分组加密算法有:DES,3-DES,Blowfish,IDEA,AES等

Reused Key Attack

Bit-flipping Attack

ECB模式缺陷在于 电码薄式的方式 调换明文位置,密文位置调换,如此变动可反向推算

Padding Oracle Attack

MD5 Length Extention Attack

密钥等不要硬编码在程序代码中

不要使用ECB模式

不要使用流密码

使用HMAC-SHA1代替MD5甚至代替SHA-1

不要使用相同的key做不同的事情

saltsIV 要随机产生

不要自己实现加密算法,尽量使用安全专家已实现好的库

不要依赖系统的保密性

使用CBC模式的AES256加密

使用HMAC-SHA512检查完整性

使用带saltSHA-256SHA-512用于Hashing


0x14 伪随机数问题

弱随机问题,纯数字4-6位都是属于弱随机

伪随机因为时间时刻推倒的,php中的 microtime() 由一个微秒数和系统当前秒数组合

PHP中有rand()(范围:32767)和mt_rand()(范围2147483647)的随机数算法。

mt_rand() 函数通过seed来计算出的伪随机数,其值固定,多次计算所得值也固定。当在统一进程中,同一个seed通过mt_rand()所生成的值都是固定的。

WAF丨《白帽子讲web安全》-V站

安全的随机数:random_int(),多种随机算法结合,时间取md5某几位值等方式,openssl_random_pseudo_bytes(int length [, bool &$crypto_strong])


0x15 WEB框架安全

Model-View-Controller

这里其实就是产品的安全讨论,在MVC中变量等地方容易出现XSS等问题,在对的地方做对的事情,针对性的处理安全隐患,做好程序的过滤和拦截,前端拦截只是对正常用户误操作的提示,节省服务器资源,但同时必须做好后端对参数的检查过滤。在常见的漏洞中,每个部分的功能与可能发生的漏洞对应做好检查和防御

Struts2 命令执行漏洞

Spring MVC 命令执行漏洞

Django 命令执行漏洞


0x16 应用层拒绝服务攻击

DDOS 分布式拒绝服务攻击