Web安全技术 韩伟力
韩伟力
内容安排 ●安全技术简介 ●数据源层的安全 应用服务层的安全 ●HTTP安全 ●展示层安全 XSS及其防御 CSRF及其防御 钓鱼及其攻击 口令管理 CAPTCHA
内容安排 y 安全技术简介 y 数据源层的安全 y 应用服务层的安全 y HTTP安全 y 展示层安全 y XSS及其防御 y CSRF及其防御 y 钓鱼及其攻击 y 口令管理 y CAPTCHA
内容安排 ①安全技术简介 ②数据源层的安全 ③应用服务层的安全 ④HTTP安全 6展示层安全
内容安排 1 安全技术简介 2 数据源层的安全 3 应用服务层的安全 4 HTTP安全 5 展示层安全
什么是安全 信息安全是一个十分广泛而又复杂的话题 ●美国国家电信和信息安全委员会( NSTISSO 信息安全是对信息、系统以及使用、存储和传输信息的 硬件的保护。但是要保护信息及其相关系统,诸如策略、 认识、培训和教育以及技术手段都是必要的。 ●微软公司 M. Howard,D. Leblance 个安全的产品应该是指在信息所有者或者系统管理员 控制下能够保护客户数据的机密性、完整性和可用性, 能够保护资源处理过程的完整性和有效性。 机密性( Confidentiality)、完整性( Integrity)和 可用性( Availability)的组
什么是安全 y 信息安全是一个十分广泛而又复杂的话题 y 美国国家电信和信息安全委员会 (NSTISSC) y 信息安全是对信息、系统以及使用、存储和传输信息的 硬件的保护。但是要保护信息及其相关系统,诸如策略、 认识、培训和教育以及技术手段都是必要的。 y 微软公司 M. Howard, D. LeBlance y 一个安全的产品应该是指在信息所有者或者系统管理员 控制下能够保护客户数据的机密性、完整性和可用性, 能够保护资源处理过程的完整性和有效性。 y 机密性 (Confidentiality)、完整性 (Integrity) 和 可用性 (A il bilit ) (Availability) 的组合
机密性 机密性是指保证计算机相关的有价值财产(信息)只 能被授权过的用户所访问 ●机密性的保护 认证和访问控制 加密
机密性 y 机密性是指保证计算机相关的有价值财产(信息)只 能被授权过的用户所访问。 y 机密性的保护 y 认证和访问控制 y 加密 5
完整性 完整性是指这些计算机相关的有价值财产(信息)只 能被授权过的用户所修改,或者通过授权过的过程所 修改。 ●完整性的保护 认证和访问控制 加密
完整性 y 完整性是指这些计算机相关的有价值财产 是指这些计算机相关的有价值财产(信息)只 能被授权过的用户所修改,或者通过授权过的过程所 修改。 y 完整性的保护 y 认证和访问控制 y 加密 6
可用性 可用性是指这些有价值的财产(信息)在需要的时候 必须能够被授权的用户访问或者修改。 ●可用性的破坏 DOS: Denial Of Service
可用性 y 可用性是指这些有价值的财产(信息)在需要的时候 必须能够被授权的用户访问或者修改。 y 可用性的破坏 y DOS: Denial Of Service 7
可用性破坏案例 SYN Flood的基本原理 SYN Flood是当前最流行的DoS(拒绝服务攻击)与DDoS(分布 式拒绝服务攻击)的方式之一,这是一种利用TCP协议缺陷,发送 大量伪造的TCP连接请求,从而使得被攻击方资源耗尽(CPU满负 荷或内存不足)的攻击方式。 要明白这种攻击的基本原理,还是要从TCP连接建立的过程开始说 起:TCP与UDP不 它是基于连接的,也就是说:为了在服务 端和客户端之间传送TCP数据,必须先建立一个虚拟电路,也就是 TCP连接,建立TCP连接的标准过程是这样的 先,请求端(客户端)发送一个包含SYN标志的cP报文,SYN即同 °影( Synchronize),同步报文会指明客户端使用的端以及CP连接 的初始序号; 第二步,服务器在收到客户端的SYN报文后,将返回一个SYN+ACK的 报文,表示客卢端的请求被接受,同时TCP序号被加一,ACK即确认 (Acknowledgement) 第三步,客户端也返回一个确认报文ACK给服务器端,同样TCP序列号 被加 到此一个TCP连接完成。 以上的连接过程在TCP协议中被称为三次握手( Three-way Handshake)
可用性破坏案例 y SYN Flood的基本原理 y SYN Flood是当前最流行的DoS(拒绝服务攻击)与DDoS(分布 式拒绝服务攻击)的方式之一,这是一种利用TCP协议缺陷,发送 大量伪 的造 的TCP 连接请求,从而使得被攻击方资源耗尽 从而使得被攻击方资源耗尽 (CPU满负 荷或内存不足)的攻击方式。 y 要明白这种攻击的基本原理,还是要从TCP连接建立的过程开始说 起:TCP 与UDP不同,它是基于连接的,也就是说:为了在服务 端和客户端之间传送TCP数据,必须先建立 个虚拟电路 必须先建立 一个虚拟电路,也就是 TCP连接,建立TCP连接的标准过程是这样的: y 首先,请求端(客户端)发送一个包含SYN标志的TCP报文,SYN即同 步 (Synchronize Synchronize),同步报文会指明客户端使用的端口以及 同步报文会指明客户端使用的端口以及TCP连接 的初始序号; y 第二步,服务器在收到客户端的SYN报文后,将返回一个SYN+ACK 的 报文,表示客户端的请求被接受,同时TCP序号被加一,ACK即确认 (Ak ld t A c know l e dgemen t )。 y 第三步,客户端也返回一个确认报文ACK给服务器端,同样TCP序列号 被加一,到此一个TCP连接完成。 y 以上的连接过程在TCP协议中被称为三次握手 (Three ‐way 8 y 以上的连接过程在TCP协议中被称为三次握手 (Three way Handshake)
可用性破坏案例(续 问题就出在TCP连接的三次握手中,假设一个用户向服务器发送了 SYN报文后突然死机或掉线,那么服务器在发出SYN+ACK应答报 文后是无法收到客户端的ACK报文的(第三次握手无法完成 这种情况下服务器端一般会重试(再次发送SYN+ACK给客户端) 并等待一段时间后丢弃这个未完成的连接,这段时间的长度我们 称为 SYN Timeout,一般来说这个时间是分钟的数量级(大约为 o秒-2分钟);一个用户出现异常导致服务器的一个线程等待1分 钟并不是什么很大的问题,但如果有一个恶意的攻击者大量模拟 这种情况,服务器端将为了维护一个非常大的半连接列表而消耗 非常多的资源-数以万计的半连接,即使是简单的保存并遍历也会 消耗非常多的CPU时间和内存,何况还要不断对这个列表中的IP 进行SYN+ACK的重试。实际上如果服务器的TCP/IP栈不够强大 最后的结果往往是堆栈溢出崩溃-即使服务器端的系统足够强大 服务器端也将忙于处理攻击者伪造的TCP连接请求而无暇理睬客户 的正常请求(毕竟客户端的正常请求比率非常之小),此时从正 常客户的角度看来,服务器失去响应,这种情况我们称作:服务 器端受到了 SYN Flood攻击(SYN洪水攻击)
可用性破坏案例 ( 续 ) y 问题就出在TCP连接的三次握手中 连接的三次握手中,假设 个用户向服务器发送了 一个用户向服务器发送了 SYN报文后突然死机或掉线,那么服务器在发出SYN+ACK应答报 文后是无法收到客户端的ACK报文的(第三次握手无法完成), 这种情况下服务器端 这种情况下服务器端 般会重试 一 (再次发送SYN+ACK给客户端 ) 并等待一段时间后丢弃这个未完成的连接,这段时间的长度我们 称为SYN Timeout,一般来说这个时间是分钟的数量级(大约为 3 0 秒 ‐ 2分钟);一个用户出现异常导致服务器的一个线程等待 1 分 钟并不是什么很大的问题,但如果有一个恶意的攻击者大量模拟 这种情况,服务器端将为了维护一个非常大的半连接列表而消耗 非常多的资源‐‐数以万计的半连接,即使是简单的保存并遍历也会 消耗非常多的CPU时间和内存,何 还要不断对这个列表中的 何 况还要不断对这个列表中的IP 进行SYN+ACK的重试。实际上如果服务器的TCP/IP栈不够强大, 最后的结果往往是堆栈溢出崩溃‐‐即使服务器端的系统足够强大, 服务器端也将忙于处理攻击者伪造的TCP连接请求而无暇理睬客户 的正常请求(毕竟客户端的正常请求比率非常之小),此时从正 常客户的角度看来,服务器失去响应,这种情况我们称作:服务 器端受到了SYN Fl d攻击 (SYN洪水攻击 ) 9 器端受到了SYN Floo d攻击 (SYN洪水攻击 )
可用性破坏案例(续) ●从防御角度来说,有几种简单的解决方法: 第二种是缩短 SYN Timeo吐t时间,由于 SYN Flood攻击的效果取决 于服务器上保持的SYN半连接数,这个值=SYN攻击的频度ⅹSY Timeout,所以通过缩短从接收到SYN报文到确定这个报文无效并 丢弃改连接的时间,例如设置为20秒以下(过低的 SYN Timeout设 置可能会影响客户的正常访问),可以成倍的降低服务器的负荷。 °第二种方法是设置呈Nd0是每个个请球接的地址分 ooKIe 认定是受到了攻击,以后从这个IP地址来的包会被丢弃。 可是上述的两种方法只能对付比较原始的 SYN Flood攻击 缩短 SYN Timeout时间仅在对方攻击频度不高的情况下生 效, SYn Cookie更依赖于对方使用真实的IP地址,如果攻 击者以数万/秒的速度发送SYN报文,同时利用 SOCK RAW随机改写IP报文中的源地址,以上的方法将毫 无用武之地
可用性破坏案例 ( 续 ) y 从防御角度来说,有几种简单的解决方法: y 第一种是缩短SYN Timeout时间,由于SYN Flood攻击的效果取决 于服务器上保持的 于服务器上保持的SYN半连接数,这个值=SYN攻击的频度 x SYN Timeout,所以通过缩短从接收到SYN报文到确定这个报文无效并 丢弃改连接的时间,例如设置为20秒以下(过低的SYN Timeout 设 置可能会影响客户的正常访问),可以成倍的降低服务器的负荷。 y 第二种方法是设置SYN Cookie,就是给每一个请求连接的IP地址分 配一个Cookie,如果短时间内连续受到某个IP的重复SYN报文,就 认定是受到了攻击,以后从这个IP地址来的包会被丢弃。 y 可是上述的两种方法只能对付比较原始的SYN Flood攻击, 缩短SYN Timeout时间仅在对方攻击频度不高的情况下生 效,SYN Cookie更依赖于对方使用真实的IP地址,如果攻 击者以 数 万 /秒的速度发 送SYN报文,同时 利 用 SOCK_RAW随机改写IP报文中的源地址,以上的方法将毫 无用武之地。 10