网络安全总结
阅读器 (wqxuetang.com)(前两章出自这本书),区块链不晓得出自哪里
第一章 网络安全概述
小结
信息技术中的信息主要指计算机中用文字、数值、图形、图像、音频和视频等多种类型的数据所表示的内容;
网络安全是指网络环境下的信息系统中分布在主机、链路和转发结点中的信息不受威胁,没有危险、危害和损失,信息系统能够持续正常提供服务;
网络安全就是网络环境下的信息安全;
网络安全内涵主要包括安全理论、安全技术、安全协议和安全标准等;
安全理论包括各种密钥生成算法、加密解密算法和报文摘要算法等,及引申出的鉴别机制和数字签名方法;
每一种传输网络,网际层和应用层都对应的安全协议,这些安全协议构成网络安全协议体系;
主机有着用于实现主机中信息的保密性,完整性和可用性的主机安全技术;
网际层、传输层和应用层都有对应的安全协议,这些安全协议构成网络安全协议体系;
安全模型是以建模的方式清楚地描述网络安全实现过程所涉及的因素及这些因素之间的相互关系。
课后习题
一、1. D 2. B 3. D 4. C 5. B 6. D 7. B 8. A 9. C 10. B 11. D 12. C 13. D 14. C 15. C 16. D 17. B 18. D 19. A 20. C
二、1. AC 2. BD 3. AB 4. AD 5. BC 6. BD 7. BCD 8. BC 9. ABCD 10. ABC 11. AB 12. ABD 13. BCD 14. ACD 15. BCD 16. ABD
第二章 网络攻击
课后习题
一、1. A 2. B 3. C 4. A 5. D 6. C 7. B 8. A 9. A 10. C
二、1. BD 2. ABC 3. ACD 4. AC 5. ABD 6. ABCD 7. BD 8. AB 9. AB
\1. 略。 3. 略。 4. 略。 5. 略。 6. TCP,ICMP,UDP,HTTP/HTTPS、NTP、SSDP、DNS、SNM等协议经常被用来进行风暴性DDoS攻击。主要考虑:没有认证,容易伪造(如无连接特性),协议报文处理能消耗大量资源。反射型DDoS:无连接特性,网上有大量可用作反射源的服务器,响应远大于请求。 7. 万达公司与常州电信签订托管协议时,对DNSPod约定有缓存失效时间为24小时,24小时后随着递归域名服务器中的缓存记录过期被删除,刚开机的用户,其中的暴风影音会试图访问相关服务器,但是由于DNSPod主服务器被断网(IP地址被封禁)无法得到响应而超时,不断重发请求导致攻击爆发。 8. 限制重试次数和时间间隔。 9. 提示:可以用DNS进行反射型拒绝服务攻击或DNS劫持。 10. 略。 11. 流量清洗。 12. 略。 13. 大量分片,耗尽防火墙的处理器资源,导致拒绝服务攻击。 14. 防止被溯源。 15. 短时间内收到大量TCP SYN包。 16. 略。 17. 略。
四、1. 1) 直接风暴型DDoS与反射式风暴型DDoS的主要区别是否用其控制的主机直接向受害主机发送攻击数据包,直接风暴型DDoS是攻击者直接向攻击目标发送大量的网络数据包,而反射型DDoS则是攻击者伪造攻击数据包,其源地址为被攻击主机的IP地址,目的地址为网络上大量网络服务器或某些高速网络服务器,通过这些服务器(作为反射器)的响应实施对目标主机的拒绝服务攻击;2)常见用于风暴型拒绝服务攻击的协议有:ICMP, UDP, TCP, HTTP, NTP, DNS, SSDP, CharGEN, SNMP, Memcache等;3)主要有3点:一是协议具有无连接特性,二是互联网上有很多可探测到的支持该协议的服务器,三是该协议的部分请求报文大小远小于响应报文的大小。 2. 略。
第三章 区块链基础
课后习题
第四章 传输层安全
课后习题
一、1. C 2. B 3. A 4.D 5. A 6. C 7. B 8. B
\1. 利用TCP三次握手过程可以实现网络扫描、TCP连接劫持、拒绝服务攻击。 2. 略。 3. 略。 4. 客户机和服务器在相互发送自己能够支持的加密算法时,是以明文传送的,存在被攻击修改的可能;SSL3.0为了兼容以前的版本,可能会降低安全性;所有的会话密钥中都将生成master key,握手协议的安全完全依赖于对master key的保护,因此通信中要尽可能地减少使用master key。 5. 为了保障SSL传输过程的安全性,SSL协议要求客户端或服务器端每隔一段时间必须改变其加解密参数。当某一方要改变其加解密参数时,就发送一个简单的消息通知对方下一个要传送的数据将采用新的加解密参数,也就是要求对方改变原来的安全参数。因此,无论是从功能上还是从可扩展性来讲,将其独立出来,而不是作为握手协议的一部分更合适。 6. SSL记录协议使用面向连接的TCP协议作为传输协议,不会发生乱序,因此不需要排序。万一收到顺序紊乱的SSL记录块,SSL不能为它们进行排序,因为协议格式中没有序号或偏移量等排序所必须的信息。 7. 因为TLS1.3舍弃了RSA的密钥协商过程,采用了更简单的密码协商模型和一组瘦身后的密钥协商选项(没有RSA,没有很多用户定义的Diffie-Hellman参数)。这样,对于这种有限的选择,客户端可以简单地在第一条消息中就发送Diffie-Hellman密钥共享信息(key_share),而不是等到服务器确认它希望支持哪种密钥共享。 8. 在TLS 1.3中,采用预共享密钥(pre-shared key,PSK)恢复的新模式。其思路是在建立会话之后,客户端和服务器可以得到称为“恢复主密钥”的共享密钥。这可以使用id(类似session_id)存储在服务器上,也可以通过仅为服务器所知的密钥(类似session_ticket)进行加密。此会话ticket将发送到客户端并在恢复连接时进行查验。对于已恢复的连接,双方共享恢复主密钥,因此除了提供前向保密之外,不需要交换密钥。下次客户端连接到服务器时,它可以从上一次会话中获取秘钥并使用它来加密应用数据,并将session_ticket发送到服务器。 9. 略。 10.略。 11. 在网络层实现安全传输(IPsec)的好处是它对终端用户和应用是透明的,因此更具通用性。此外,IPsec具有过滤功能,只对被选中需要进行保护的流量才使用IPsec进行认证和加密保护处理。在传输层实现安全传输(SSL/TLS)的好处可以充分利用传输层TCP协议的可靠性和流量控制功能,简化协议的设计,同时兼具通用性和细粒度的安全需求。在应用层特定应用服务中实现指定的安全服务的好处是可以针对应用的特定需求定制其所需的安全服务。 12.(1)使用128位密钥,而不是40位密钥。使得明文字典必须足够大才行;(2)使用的密钥长度大于40位~160位;(3)使用现时(Nonce);(4)使用公钥证书进行身份认证;(5)使用加密;(6)攻击者必须有私钥和假冒的IP地址才行。 13. 使用RSA密钥交换,以及基于Diffie-Hellman协议的匿名Diffie-Hellman交换和瞬时Diffie-Hellman交换。 14. 略。
第五章 IP与路由安全
课后习题
一、1. B 2. B 3. D 4. C 5. A 6. C 7. A 8. D 9. B 10. A 11. A 12. D 13. A 14. A 15. C 16. A 17. A 18. B 19. C 20. D 21. C 22. A
\1. IPv4协议的无连接、无认证、无加密、无带宽控制等特性,可被攻击者利用来伪造或篡改IP包、监听、拒绝服务等攻击。2. 被AH认证的区域是整个IP包(可变字段除外),包括IP包首部,因此源IP地址和目的IP地址如果被修改就会被检测出来。但是,如果该包在传输过程中经过NAT,其源或目的IP地址将被改变,将造成到达目的地址后的完整性验证失败。因此,AH传输模式和NAT不能同时使用。3. 略。 4.(1)由于序列号105在窗口的左边界之外,忽略该数据包,并产生审核事件;(2)由于序列号440在窗口内,处理过程如下:如果是新的数据包,则验证其消息认证码(MAC),若验证通过,则标记窗口中相应的位置(440);如果验证失败或是一个重传的数据包,则忽略该数据包;(3)由于序列号540超过了窗口的右边界,且是新的数据包,则验证数据包的MAC值。若验证通过,就让窗口前进以使得这个序列号成为窗口的右边界,并标记窗口中的相应位置(540),新的窗口为130-540;如果验证失败,则忽略该数据包。 5. 略,参考RFC 2401(https://www.rfc-editor.org/rfc/pdfrfc/rfc2401.txt.pdf)。 6. 主要是性能上的考虑,由于解密处理需要大量占用CPU和内存,在通过认证(完整性验证)后再进行解密处理会更好一些,如果认证没有通过就不需要执行耗时的解密操作了。 7. 不能。 8. 主要原因在于接收端需要SPI字段加上源IP地址、IPsec协议来唯一确定对应的SA,利用该SA进行验证、解密等后续处理。如果SPI被加密了,就无法找到对应的SA,也就无法进行后续的验证、解密操作。对于序列号字段,主要用于抗重放攻击,不会泄露明文中的任何机密信息;此外,不加密序列号字段也使得一个包无需经过耗时的解密过程就可以判断包是否重复,如果重复则直接丢弃,节省了时间和资源。 9. 略。 10. 略。 11. 略。 12. IPv4网络中,路由协议的安全需要路由协议本身来完成,而IPv6网络中,可以利用IPv6中的IPsec协议提供的认证和加密服务来保证其安全。 13. 略。 14. 序列和滑动窗口机制。15. IKE负责密钥管理,定义了通信实体间进行身份认证、协商加密算法以及生成共享的会话密钥的方法。IKE将密钥协商的结果保留在安全联盟(SA)中,供AH和ESP以后通信时使用。
第六1章 DNS安全
6.1 域名系统(DNS)
域名系统(Domain Name System,缩写:DNS)是互联网的一项服务。它作为将域名和IP地址相互映射的一个分布式数据库,能够使人更方便地访问互联网。DNS使用UDP端口53
域名解析就是域名到IP地址的转换过程。域名的解析工作由DNS服务器完成。
除了域名解析外,现代DNS还具有:
应用层路由:DNS把用户的访问指向离用户最近的那个CDN内容分发网络(Content Delivery Network)服务器节点,实现负载均衡。
作为信任的基础:防伪造邮件、域名作为验证证书申请者身份的信任基础域名也是验证申请者身份的信任基础
作为公钥基础设施。防止CA在未经网站所有者授权的前提下,签发非法的证书,阻止假冒网站和中间人攻击
—.三级域名.二级域名.顶级域名
顶级域名(TLD,也称为一级域名,域名后缀)
现共有三类域名服务器:
本地域名服务器(Local name server)本地域名服务器通常被划分为权威域名服务器和递归域名服务器。
对于一个特定的域名空间,如果一个域名服务器存有这个域名空间的所有的信息,则将这个名称服务器称为这个域名空间的权威域名服务器,否则称为递归域名服务器。
根域名服务器(root name server, RNS)
镜像服务器
为了更加可靠地工作,一个主机最好有至少两个权威域名服务器。DNS采用客户服务器方式
DNS查询有两种方式:递归和迭代
DNS客户端设置使用的DNS服务器一般都是递归服务器,它负责全权处理客户端的DNS查询请求,直到返回最终结果。
以浏览网站为例说明域名解析过程
浏览器导航栏中键入网站的域名或单击 URL 链接后,浏览器将启动 DNS 解析过程来查找这些 IP 地址
浏览器会向“解析器”(resolver)发送一个查询,解析器会在本地保留以前查询过的问题的答案副本(缓存),如果存在直接响应浏览器。如果缓存中没有,则解析器会执行完整的 DNS 解析过程。
向 13 个根服务器中的任意一个根服务器发送包含网站域名的查询,询问该网站对应的 IP 地址。收到查询请求的根服务器会返回一个“引荐”(referral)作为响应,包含网站域名 TLD 的名称服务器的列表
将同一查询发送到引荐响应中收到的其中一个 TLD 的名称服务器。TLD 名称服务器通常也只包含它们负责的域的名称服务器信息。因此,就像发送到根服务器的查询一样,发送到 TLD 名称服务器的查询也会收到引荐响应,提供一个有关所查询的二级域的名称服务器列表。
此解析过程将一直继续,直到将查询发送到符合以下条件之一的域名服务器:拥有答案,即Web 服务器的 IP 地址;或者域名服务器能够发布权威性声明,表示所查询的域名不存在。
以上的查询过程为:①→②→③→④,得到结果后,按照⑤→⑥→⑦→⑧的顺序将回答报文传送给本地域名服务器dns.xyz.com。总共要使用8个UDP报文。这种查询方法被称为“递归查询”。
为了减轻根域名服务器的负担,根域名服务器在收到查询②后,可以直接将下属的权威域名服务器dns.abc.com的IP地址返回给本地域名服务器dns.xyz.com,然后让本地域名服务器直接向权威域名服务器dns.abc.com进行查询。这就是递归与迭代相结合的查询方法。
使用名字的高速缓存可优化查询的开销。每个域名服务器都维护一个高速缓存,存放最近到过的名字映射信息以及从何处获得的记录。
6.2 !DNS面临的安全威胁
6.2.1 协议脆弱性
一 域名欺骗
1. 事务ID欺骗
由于客户端会用该ID作为响应数据报是否与查询数据报匹配的判断依据,因此可以通过伪装DNS服务器提前向客户发送与查询数据报ID相同的响应报文,只要该伪造的响应报文在真正的响应报文之前到达客户端,就可以实现域名欺骗。
对ID是获取主要采用网络监听和序列号猜测两种方法:
网络监听比较简单,由于DNS数据报文都没有加密,因此如果攻击者能够监听到客户的网络流量即可获得事务ID。
攻击者通常使用ARP(Address Resolution Protocol,地址解析协议)欺骗的方法进行监听,但是这种方法要求攻击者必须与客户处于同一网络环境中。
为了突破这种限制,攻击者采用序列号猜测的方法来进行欺骗。由于DNS查询报文的事务ID字段为2个字节,限制了其ID值只能是0~65535,大大降低了猜测成功的难度。
在此过程中,攻击者通常对提供真实报文的名字服务器发动DoS攻击,延缓正确应答报文返回,从而保证虚假的应答报文提前返回给客户端。
2.缓存投毒
缓存投毒是指攻击者将“污染”的缓存记录插入到正常的DNS服务器的缓存记录中,所谓污染的缓存记录指DNS解析服务器中域名所对应的IP地址不是真实的地址,而是由攻击者篡改的地址,这些地址通常对应着由攻击者控制的服务器
攻击者利用DNS协议中缓存机制中对附加区数据不做任何检查的漏洞,诱骗名字服务器缓存具有较大TTL的虚假资源记录从而达到长期欺骗客户端的目的
缓存投毒的特点
攻击具有隐蔽性,不用消耗太多网络资源就可以使性能急剧受损;
采用间接攻击方式使得客户端和服务器都受到攻击;
使用貌似合法的记录来污染缓存,很难检测出来;
目前的缓存设计缺乏相应的反污染机制,对于精心组织的恶意缓存投毒攻击束手无策。
二 网络通信攻击
针对 DNS 的网络通信攻击主要是分布式拒绝服务攻击(DDoS攻击)、恶意网址重定向和中间人(man-in-the-middle, MITM)攻击。
针对DNS的拒绝服务器攻击通常有两种方式:
一种是攻击DNS系统本身,包括对名字服务器和客户端进行攻击
另一种是利用DNS系统作为反射点来攻击其他目标
在针对DNS系统客户端的DoS攻击中,主要通过发送否定回答显示域名不存在,从而制造黑洞效应,对客户端造成事实上的DoS攻击。
在反射式攻击中,攻击者利用域名服务器作为反射点,用DNS应答对目标进行泛洪攻击。虽然攻击目标不是DNS系统本身,但由于DNS承担域名和IP地址映射任务,攻击者通过查询被攻击目标的域名IP地址,使得DNS收到大量的查询请求从而同样间接受到DoS攻击。
DNS域名解析过程劫持
通过对DNS数据包“请求阶段”中的解析路径进行划分,将DNS解析路径分为四类。首先是正常的DNS解析路径,用户的DNS请求只到达指定的公共DNS服务器。此时,权威域名服务器应当只看到一个来自公共服务器的请求。剩下三类均属于DNS解析路径劫持。
第一类劫持方法是请求转发,用户的DNS请求将直接被定向到其他的服务器。此时,权威域名服务器只收到来自这个服务器的请求,用户指定的公共DNS服务器完全被排除在外。
第二类劫持方法是请求复制,用户的DNS请求被网络中间设备复制,一份去往原来的目的地,一份去往劫持者使用的解析服务器,此时,权威域名服务器将收到两个相同的查询。
第三类劫持方法是直接应答,用户发生的请求同样被转发,但解析服务器并未进行后续查询而是直接返回一个响应,此时,权威域名服务器没有收到任何查询,但是客户端却收到解析结果。
6.2.2 实现脆弱性
DNS 软件,BIND 的漏洞和缺陷 缓冲区溢出漏洞
6.2.3 操作脆弱性
由于人为操作或配置错误所带来的安全隐患:域名配置攻击、域名注册攻击和信息泄漏等
6.3 DNSSEC及其部署
依赖于数字签名和公钥系统去保护 DNS 数据的可信性和完整性:权威域名服务器用自身的私钥来签名资源记录,然后解析服务器用权威域名服务器的公钥来认证来自权威域名服务器的数据,如果认证成功,则表明接收到的数据确实来自权威域名服务器,则解析服务器接收数据,如果认证失败,则表明接收到的数据很可能是伪造的,则解析服务器抛弃数据
提供数据来源验证:DNS数据来自正确的域名服务器;
提供数据完整性验证:数据在传输过程中没有任何更改;
提供否定存在验证:对否定应答报文提供验证信息
在 DNSSEC的实践中,权威域的管理员通常用两对密钥配合完成对区数据的签名
第一对密钥用来对区内的DNS资源记录进行签名,称为区签名密钥(Zone Signing Key, ZSK),由权威认证服务器生成、签名。
另一对称为密钥签名密钥(Key Signing Key, KSK)的公私钥对,用来对包含密钥(如 ZSK)的资源记录(DNSKEY)进行签名,并将签名结果放在DNSKEY的RRSIG记录中
DNSSEC并不保证机密性,因为它不对DNS记录进行加密。也解决不了DNS服务器本身的安全问题,如被入侵、存储的Zone数据被篡改、拒绝服务攻击、DNS软件的实现问题等
在DNSSEC完全部署到位之前,会造成“安全孤岛”现象
第8章习题参考答案
一、1. D 2. B 3. A 4. A 5. C 6. A 7. B 8. C 9. D 10. D
二、简答题
\1. 略。2. DNSSEC协议设计时并没有考虑增量式部署的情况;密钥管理复杂;经济上的原因。 3. 略。 4. 略。 5. DNSSEC通过数字签名保证域名信息的真实性和完整性,防止对域名服务信息的伪造、篡改。但是,DNSSEC并不保证机密性,因为它不对DNS记录进行加密,同时它也解决不了DNS服务器本身的安全问题,如被入侵、存储的Zone数据被篡改、拒绝服务攻击、DNS软件的实现问题等。另外,由于DNSSEC的报文长度增加和解析过程繁复,在面临DDoS攻击时,DNS服务器承受的负担更为严重,抵抗攻击所需的资源要成倍增加。 6. 不能,因为DNSSEC虽然通过数字签名保证域名信息的真实性和完整性,防止对域名服务信息的伪造、篡改,但它并不对请求者进行身份认证。2017年Akamai检测到超过400起利用DNSSEC协议的反射DDoS攻击。 7. 提示:业界关于区数据枚举是否属于安全漏洞这一问题有不同的看法,有人认为DNS数据本就应该是公开的,因此也就不存在所谓的区数据枚举问题,但有人认为这会让恶意攻击者获取互联网域名数据及域名注册人信息的困难度大大降低,是个潜在风险。 8. 略。 9. (1)应用层路由;(2)DNS作为信任的基础;(3)DNS作为公钥基础设施。 10. 不正确,伊拉克的国家域名IQ在1997年分配给了一个美国的互联网公司,负责人在2002年因为犯罪被捕,期间这个域名从来没有在伊拉克投入使用。2005年ICANN成立后,伊拉克通信管理局向ICANN申请,ICANN 把这个域名重新分配给了伊拉克。所谓的伊拉克域名的申请与解析工作被停止,根本无从谈起,因为根本没有开始。 11. 提示:可上网查询美国是否有能力将一个国家的域名封掉(让一个国家从网络上消失。
第六章 Web应用安全
6.1 Web应用体系结构脆弱性分析(课后习题1)
客户程序通过HTTP或HTTPS协议向服务器程序发出请求,服务器程序向客户程序返回客户所要的万维网文档。
在一个客户程序主窗口上显示出的万维网文档称为页面
1 Web客户端的脆弱性
负责将网站返回的页面展现给浏览器用户,并将用户输入的数据传输给服务器,浏览器的安全性直接影响到客户端主机的安全,利用浏览器漏洞渗透目标主机已经成为主流的攻击方式。
2 Web服务器的脆弱性
Web服务器的安全直接影响到服务器主机和Web应用程序的安全。
3 Web应用程序的脆弱性
Web应用程序在接收输入、处理和输出过程中存在的安全隐患。Web应用向外部输出脚本及其安全隐患包括以下几种:
输入HTML:可能导致跨站式脚本攻击(“HTML注入)。
输出HTTP消息头:SQL注入攻击
调用Shell命令:操作系统(OS)命令注入攻击
Web应用在处理输入请求的过程中可能存在的安全隐患包括下列几种:
处理文件:如果外界能够通过传入参数的形式来指定Web服务器中的文件名,则可能导致攻击非法访问存储在Web根文件夹之外的文件和目录,即路径(或目录)遍历攻击,也可能调用操作系统命令(OS命令注入击)。
关键处理(用户登录后一旦完成就无法撤销的操作,如从用户的银行账号转账、更改密码):如果在执行关键处理前没有确认,则可能导致跨站点请求伪造攻击。
认证过程:存在会话固定/认证漏洞。
授权过程:授权漏洞。
4 HTTP协议的脆弱性
HTTP协议是一种简单的、无状态的应用层协议
它利用TCP协议作为传输协议,可运行在任何未使用的TCP端口上。一般情况下,它运行在TCP的80端口上。
“无状态”是指协议本身并没有会话状态,不会保留任何会话信息。
攻击者不需要计划多个阶段的攻击来模拟一个会话保持机制,一个简单的HTTP请求就能够攻击Web服务器或应用程序。
HTTP协议是基于ASCII码的协议,无需弄清复杂的二进制编码机制,攻击者就可了解HTTP协议中传输的明文信息。
绝大多数HTTP协议运行在总所周知的端口上,这一点也可被攻击者利用,因为很多防火墙或其他安全设备被配置成允许80端口的内容通过,攻击者可以利用这一点渗透到内网中。
互联网中存在的大量中间盒子,HTTP标准(RFC 2616和RFC 7320)的理解如果不一致,就有可能导致一些新的攻击发生。为了克服HTTP协议上的缺陷,大多数Web应用程序使用HTTPS以及HTTP over QUIC协议。例如:如果一个HTTP GET里面有多个Host字段的情况下,有的CDN会使用第一个Host地址,有的服务器会使用最后一个Host地址,这样混乱的实现,就可能导致缓存投毒(Cache Poisoning)攻击。利用虚假Internet地址替换掉域名系统表中的地址,进而制造破坏。当网络用户在带有该虚假地址的页面中进行搜寻,以访问某链接时,网页浏览器由于受到该虚假条目的影响而打开了不同的网页链接。
当客户端要从服务器中读取文档时,当点击网页上的链接或者通过在浏览器的地址栏输入网址来浏览网页的,使用的都是GET方式
5 !Cookie的脆弱性
为什么需要Cookie?
解决无状态问题:保存客户服务器之间的一些状态信息。Cookie是指网站为了辨别用户身份、进行会话跟踪而储存在用户本地终端上的一些数据(通常经过编码(一般只有服务器的通用网关接口(CGI)处理程序才知道它们的真实意义)))
Cookie的生成与维护?
由服务器端生成,发送给客户端(一般是浏览器),浏览器会将Cookie的值保存到某个目录下的文本文件内,下次请求同一网站时就发送该Cookie给服务器(前提是浏览器设置为启用Cookie)
服务器可以利用Cookie存储信息并经常性地维护这些信息,从而判断在HTTP传输中的状态。
Cookie在生成时就会被指定一个Expire值,这就是Cookie的生存周期。到期自动清除。
Cookie的安全性问题主要有以下几方面:
Cookie被用户非法篡改,如篡改其中的expire项,可将Cookie的有效期延长;篡改path项可使用户能够访问服务器上不被授权的内容;或修改domain项,使用户能够访问不被授权的服务器从而获得合法用户的信息等;
被非法用户非法截获,然后在有限期内重放,则非法用户将享有合法用户的合法权益,可能会损害网站方的利益;
若Cookie被服务器加密,而非法用户通过强力攻击或其他手段获得了相应的加密密钥,则非法用户可以伪造任何合法Cookie,从而可以访问合法用户的所有个性化信息,甚至是账户信息等
保护措施主要有:
加入消息认证码(MAC)以进行完整性校验;
防止非法用户非法截获后的重放,可以让用户对相关信息进行数字签名,加强有效性验证;
对Cookie本身进行随机密钥加密,保证Cookie本身的信息安全;
6 数据库脆弱性
Web应用程序在后台使用数据库来保存数据。
(Web应用程序与数据库之间一般采用标准的数据库访问接口,如ADO、JDBC、ODBC等)
跨站被动攻击。此类攻击恶意利用已经在正规网站登录的用户账号来实施攻击,典型攻击方式包含:跨站请求伪造(CSRF)、跨站脚本攻击(XSS)和HTTP消息头注入攻击等。
6.2 !SQL注入攻击及防范
6.2.1 SQL注入攻击
SQL注入攻击以网站数据库为目标,利用Web应用程序对特殊字符串过滤分完全的缺陷,通过把精心构造的SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串中,欺骗服务器执行恶意的SQL命令,最终达到非法访问网站数据库内容、篡改数据库中的数据、绕过认证(不需要掌握用户名和口令就可登录应用程序)、运行程序、浏览或编辑文件等目的。
如何发现目标网站上是否存在SQL注入漏洞?只要是带有参数的动态网页且此网页访问了数据库,那么该页面就有可能存在SQL注入漏洞。
http://xxx.xxx.xxx/abc.asp?id=YY为例进行分析
1、整型参数时的SQL注入漏洞探测
2、字符串型参数时的SQL注入漏洞探测
3、特殊情况的处理
1、整型参数时的SQL注入漏洞探测
(1)在URL链接中附加一个单引号,即为
http://xxx.xxx.xxx/abc.asp?p=YY’,此时abc.ASP中的SQL语句变成了:select * from 表名 where 字段=YY’
测试结果为abc.asp,运行异常。
(2)在URL链接中附加字符串“and 1=1”,即为
http://xxx.xxx.xxx/abc.asp?p=YY and 1=1, 测试结果为abc.asp,运行正常,而且与http://xxx.xxx.xxx/abc.asp?p=YY运行结果相同。
(3)在URL链接中附加字符串“and 1=2”,即为
http://xxx.xxx.xxx/abc.asp?p=YY and 1=2, 测试结果为abc.asp,运行异常。
2、字符串型参数时的SQL注入漏洞探测
当输入的参数YY为字符串时,通常abc.asp中SQL语句大致如下:
select * from 表名 where 字段 = ‘YY’
所以可以用以下步骤测试SQL注入是否存在。如果以下三种情况全满足,则abs.asp中一定存在SQL注入漏洞:
(1)在URL链接中附加一个单引号,即为
http://xxx.xxx.xxx/abc.asp?p=YY’,此时abc.ASP中的SQL语句变成了:select * from 表名 where 字段=YY’
测试结果为abc.asp,运行异常。
(2)在URL链接中附加字符串“ ’and ’1’=’1”,即为
http://xxx.xxx.xxx/abc.asp?p=YY’ and ’1’=’1, 测试结果为abc.asp,运行正常,而且与http://xxx.xxx.xxx/abc.asp?p=YY运行结果相同。 (3)在URL链接中附加字符串“and 1=2”,即为
http://xxx.xxx.xxx/abc.asp?p=YY’ and ’1’=’2, 测试结果为abc.asp,运行异常。
3、特殊情况的处理
(1)大小写混合法。通常要么全部过滤大写字符串,要么全部过滤小写字符串,而大小写混合法会被忽略。例如:SelecT代替select,SELECT等。
(2)UNICODE法。在IIS中,以UNICODE字符集实现国际化,我们完全可以IE中输入的字符串化成UNICODE字符串进行输入。如+ =%2B,空格=%20 等。
(3)ASCII码法:可以把输入的部分或全部字符全部用ASCII码代替,如U=chr(85),a=chr(97)等
Sqlmap:Sqlmap只是用来检测和利用SQL注入点的,并不能扫描出网站有哪些漏洞,因此使用前一般需要使用漏洞扫面工具或者手工找出SQL注入点
6.2.2 防御SQL注入漏洞
过滤单引号。 防范SQL注入攻击的最有效的方法是对用户的输入进行检查,确保用户输入数据的安全性。在具体检查用户输入或提交变量时,根据参数的类型,可对单引号、双引号、分号、逗号、冒号、连接号等进行转换或过滤,这样就可以防止很多SQL注入攻击。
在构造动态SQL语句时,一定要使用类安全(type-safe)的参数编码机制。
大多数的数据库API,包含ADO和ADO.NET允许用户指定所提供参数的确切类型(如字符串、整数、日期等),这样可以保证这些参数被正确地编码以避免被黑客利用。
禁止将敏感性数据以明文存放在数据库中,这样即使数据库被SQL注入漏洞攻击,也会减少泄密的风险。
遵循最小特权原则。只给访问数据库的Web应用所需的最低权限,撤销不必要的公共许可,使用强大的加密技术来保护敏感数据并维护审查跟踪,并确保数据库打了最新补丁。
尽量不要使用动态拼装的SQL,可以使用参数化的SQL或者直接使用存储过程进行数据查询存取。
应用的异常信息应该给出尽可能少的提示,因为黑客们可以利用这些消息来实现SQL注入攻击。因此,最后使用自定义的错误信息对原始信息进行包装,把异常信息存放在独立的表中
6.3 !跨站脚本攻击
跨站脚本攻击(Cross Site Scripting,XSS)是指攻击者利用Web程序对用户输入过滤不足的缺陷,把恶意代码(包括HTML代码和客户端脚本)注入到其他用户浏览器显示的页面上执行,从而窃取用户敏感信息、伪造用户身份进行恶意行为的一种攻击方式。
进行XSS攻击需要两个前提:Web程序必须接受用户的输入,这显然是必要条件,输入不仅包含URL中的参数和表单字段,还包括HTTP头部和Cookie值;Web程序必须重新显示用户输入的内容,只有用户浏览器将Web程序提供的数据解释为HTML标记时,攻击才会发生。
XSS是最普遍的Web程序安全问题。
XSS主要形式:反射式跨站脚本攻击:非持久化,需要欺骗用户自己去点击链接才能触发XSS代码;
储存式跨站脚本攻击:持久化,代码是存储在服务器中的;
DOM式跨站脚本攻击:DOM-XSS漏洞是基于文档对象模型(Document Objeet Model,DOM)的一种漏洞。
反射式跨站脚本攻击
需要欺骗用户自己去点击链接才能触发XSS代码(服务器中没有这样的页面和内容),一般容易出现在搜索页面。反射型XSS大多数是用来盗取用户的Cookie信息。
(1) Alice经常浏览Bob建立的网站。Bob的站点运行Alice使用用户名/密码进行登录,并存储敏感信息(比如银行帐户信息);
(2) Charly发现Bob的站点包含反射性的XSS漏洞;
(3) Charly编写一个利用漏洞的URL,并将其冒充为来自Bob的邮件发送给Alice;
(4) Alice在登录到Bob的站点后,浏览Charly提供的URL;
(5) 嵌入到URL中的恶意脚本在Alice的浏览器中执行,就像它直接来自Bob的服务器一样。此脚本盗窃敏感信息(授权、信用卡、帐号信息等),然后在Alice完全不知情的情况下将这些信息发送到Charly的Web站点。
储存式跨站脚本攻击
如果Web程序允许存储用户数据,并且存储的输入数据没有经过正确的过滤,就有可能发生这类攻击。在这种攻击模式下,攻击者并不需要利用一个恶意链接,只要用户访问了储存式跨站脚本网页,那么恶意数据就将显示为网站的一部分并以受害者身份执行。
(1) Bob拥有一个Web站点。该站点允许用户发布信息/浏览已发布的信息;
(2) Charly注意到Bob的站点具有储存式跨站脚本漏洞;
(3) Charly发布一个热点信息,吸引其他用户纷纷阅读;
(4) Boy或者其他任何人,如Alice浏览该信息,其会话Cookies或者其他信息将被Charly盗走。
防御XSS攻击
对Web应用程序的所有输入进行过滤,对危险的HTML字符进行编码:
对用户进行培训,告知小心使用电子邮件消息或即时消息中的链接;
防止访问已知的恶意网站;
执行手工或自动化代码扫描,确定并消除潜在的XSS漏洞。
6.4 !Cookie欺骗及防范
客户端状态管理技术,将状态信息保存在客户端,保证网站前后访问的一个状态
Cookie信息保存在用户端,用户可以对Cookie信息进行修改。
伪造Cookie信息,绕过网站的验证过程,不需要输入密码,就可以登录网站,甚至进入网站管理后台。
上面介绍的两个攻击例子之所以成功,是因为在Cookie中保存了用户名、口令以及权限信息而留下了安全隐患。
安全原则:一般情况下,网站会话管理机制仅将会话ID保存至Cookie,而将数据本身保存在Web服务器的内存或文件、数据库中
除了Cookie欺骗,攻击者还可以通过监听Cookie来实现会话劫持。如果Cookie中设置了安全属性“secure”,则Cookie内容在网络中是加密传输的;否则,Cookie内容在网络中用明文传输,攻击者监听到Cookie内容后可以轻松实现会话劫持
6.5 !CSRF攻击及防范
6.5.1 CSRF攻击
跨站请求伪造(Cross Site Request Forgery, CSRF)是指攻击者假冒受信任用户向第三方网站发送恶意请求,如交易转账、发邮件、发布网站、更改邮箱密码或邮箱地址等。
攻击者就能够完成CSRF攻击者:
用户登录受信任的网站A,网站A生成并返回包含有会话ID的Cookie。
用户在没有登录退出网站A(即没有清除登录网站A的Cookie)的情况下,访问了恶意网站B。
CSRF攻击之所以能够成功,主要是因为Web应用存在以下两个特性:
form元素的action属性能够指定任意域名的URL,使得即使是恶意网站也能向攻击目标发送请求。
浏览器会将保存在Cookie中的会话ID自动发送给目标网站,使得即使请求是通过恶意网站发起的,Cookie中的会话ID值也照样会被发送给目标网站,从而导致攻击请求在正常认证状态下被发送。
6.5.2 CSRF攻击防御
嵌入机密信息(令牌)、再次认证(输入密码)、检查Referer
设定短暂的可信用户会话时间,完成任务后记得退出可信会话,删除所有cookie;
每次提出一个可信行为时,对发出请求的用户进行验证;
让网站记住登录用户名和密码时要小心。留在客户端的登录信息可能会攻击者加以利用;
在URL和表单中增加的每个请求,必须提供基本会话令牌以外的每个请求用户验证;
从Web应用程序中删除所有XSS漏洞。
6.6 !目录遍历/操作系统命令注入
6.6.1 目录遍历漏洞
网页中允许外界指定文件名,就有可能存在目录遍历漏洞
一旦Web应用中存在目录遍历漏洞,攻击者能够访问服务器上的任何文件。
一般来说,如果Web应用满足以下3个条件时,就有可能产生目录遍历漏洞:
外界能够指定文件名
能够使用绝对路径或相对路径等形式来指定其它目录的文件名
没有对拼接后的文件名进行校验就允许访问该文件
为了避免出现目录遍历漏洞,具体对策如下:
避免由外界指定文件名
将文件名固定,保存在会话变量中,不直接指定文件名,而是使用编号等方法间接指定
文件名中不允许包含目录名
不同系统中表示目录的字符有所不同,常见的有:/、\、:等
限定文件中仅包含字母或数字
有些攻击使用不同的编码转换进行过滤性的绕过,如通过对参数进行URL编码来绕过检查
6.6.2 操作系统(OS)命令注入
很多Web应用编程语言支持应用通过Shell执行操作系统(OS)命令。通过Shell执行OS命令,或开发中用到的某个方法在其内部使用了Shell,就有可能出现恶意利用Shell提供的功能来任意执行OS命令的情况,这就是OS命令注入
攻击成功的主要原因是:Shell支持连续执行多条命令{UNIX操作系统Shell中使用分号(;)或管道(|)Windows操作系统cmd.exe使用&符号来连接多条命令这些符号一般称为Shell的元字符}
OS命令注入攻击的一般流程为:
从外部下载攻击用软件;
对下载来的软件授予执行权限;
从内部攻击操作系统漏洞以取得管理员权限;
攻击者在Web服务器上执行攻击操作,如:浏览、篡改或删除Web服务器内的文件,对外发送邮件,以此服务器作跳板攻击其他服务器等。
6.7 HTTPS/HTTP over QUIC
6.7.1 HTTP消息头注入
HTTP消息头注入是指在重定向或生成Cookie时,基于外部传入的参数生成HTTP响应头时产生的安全问题。HTTP响应头信息一般以文本格式逐行定义消息头,即消息头之间互相以换行符隔开。
攻击者可以利用这一特点,在指定重定向目标URL或Cookie值的参数中插入换行符且该换行符又被直接作为响应输出
从而在受害者的浏览器上任意添加响应消息头或伪造响应消息体:生成任意Cookie,重定向到任意URL,更改页面显示内容,执行任意JavaScript而造成与XSS同样效果
防御:
不将外部传入参数作为HTTP响应消息头输出,如不直接使用URL指定重定向目标,而是将其固定或通过编号等方式来指定,或使用Web应用开发工具中提供的会话变量来转交URL;
由专门的应用编程接口(API)来进行重定向或生成Cookie,并严格检验生成消息头的参数中的换行符
超文本传输安全协议(Hypertext Transfer Protocol Secure,HTTPS),是一种将HTTP和SSL(或TLS)结合来实现Web浏览器和服务器之间的安全通信协议,也称为HTTP over TLS,HTTP over SSL或HTTP Secure。基于SSL或TLS的HTTP并没有本质区别,都被称为HTTPS
一个标准的HTTP服务使用80端口,而一个标准的HTTPS服务则使用443端口
当使用HTTPS时,通信内容被加密:请求的文件的URL,文件的内容,浏览器表单的内容(由浏览器使用者填写),从浏览器发送到服务器或从服务器发送给浏览器的Cookie,HTTP标题的内容
HTTP
HTTP连接的含义?
在HTTP层面,一个HTTP用户通过向下一层(TCP或SSL/TLS)发送一个连接请求来向服务器请求建立一条连接;
在TLS层面,一个会话建立在一个TLS用户和一个TLS服务器之间,可以在任何时间支持一条或多条TLS连接。
HSTS (HTTP Strict Transport Security)
是一种新的Web安全协议,其目的是强制客户端(如Web浏览器)使用HTTPS与服务器进行通信。
HTTP over QUIC(HTTP/3)
谷歌设计了一个基于 UDP 的低时延传输协议QUIC(Quick UDP Internet Connection),主要功能:
① 0~1 个RTT(往返时间,Round-Trip Time):缓存当前会话的上下文,在下次恢复会话的时候,只需要将之前的缓存传递给服务端验证通过就可以进行传输;
② 多路复用:同一个QUIC连接上可以创建多个stream来发送多个HTTP请求,由于QUIC是基于UDP的,一条连接上的多个stream之间没有依赖,所以不存在HTTP/2中的问题;
③前向纠错:为提高可靠性以及降低重传所带来的开销,QUIC增加了前向纠错机制;
④报文加密认证:QUIC采用Diffie-Hellman密钥交换算法进行双向认证并协商会话密钥,除了个别报文,如PUBLIC_RESET和CHLO,所有报文头部经过认证,报文体都是经过加密。‘
安全HTTP通信
效率更高
6.8 Web应用防火墙
基本原理
WAF主要提供对Web应用层数据的解析,对不同的编码方式做强制多重转换还原为可分析的明文,对转换后的消息进行深度分析。
主要的分析方法主要有两类:
基于规则的分析方法
异常检测方法
基于规则的分析方法
对每一个会话都要经过一系列的安全检查,每一项检查都由一条或多个检测规则组成,
如果检测没通过,请求就会被认为非法并拒绝。
这种方法主要针对的是已知特征的Web攻击
优点:对已知攻击的检测比较准确
缺点:无法检测未知攻击特征的攻击,且检测规则的配置比较复杂。
异常检测方法:
从Web服务自身的业务特征角度,通过一段时间的用户访问,记录常用网页的访问模式,如URL链接参数类型和长度、form参数类型和长度等。
学习完毕,定义出一个网页的正常访问模式,如果有用户突破了这个模式,WAF就会根据预先定义的方式预警或阻断。
此外,WAF还可以利用爬虫技术,主动分析整个Web站点,并建立正常状态模型,或主动去扫描并根据结果生成防护规则。
课后习题
一、1. C 2. B 3. A 4. D 5. C 6. A 7. D 8. B 9. C 10. A 11. A 12. C 13. C 14. A
简答题
从客户端的脆弱性、Web服务器的脆弱性、Web应用程序的脆弱性、HTTP协议的脆弱性、Cookie的脆弱性、数据库脆弱性论述
1 Web客户端的脆弱性:负责将网站返回的页面展现给浏览器用户,并将用户输入的数据传输给服务器,浏览器的安全性直接影响到客户端主机的安全,利用浏览器漏洞渗透目标主机已经成为主流的攻击方式。
2 Web服务器的脆弱性:Web服务器的安全直接影响到服务器主机和Web应用程序的安全。
3 Web应用程序的脆弱性:Web应用程序在接收输入、处理和输出过程中存在的安全隐患。Web应用向外部输出脚本及其安全隐患包括以下几种:
输入HTML:可能导致跨站式脚本攻击(“HTML注入)。
输出HTTP消息头:SQL注入攻击
调用Shell命令:操作系统(OS)命令注入攻击
Web应用在处理输入请求的过程中可能存在的安全隐患包括下列几种:
处理文件:如果外界能够通过传入参数的形式来指定Web服务器中的文件名,则可能导致攻击非法访问存储在Web根文件夹之外的文件和目录,即路径(或目录)遍历攻击,也可能调用操作系统命令(OS命令注入击)。
关键处理(用户登录后一旦完成就无法撤销的操作,如从用户的银行账号转账、更改密码):如果在执行关键处理前没有确认,则可能导致跨站点请求伪造攻击。
认证过程:存在会话固定/认证漏洞。
授权过程:授权漏洞。
4 HTTP协议的脆弱性:
攻击者不需要计划多个阶段的攻击来模拟一个会话保持机制,一个简单的HTTP请求就能够攻击Web服务器或应用程序。
HTTP协议是基于ASCII码的协议,无需弄清复杂的二进制编码机制,攻击者就可了解HTTP协议中传输的明文信息。
绝大多数HTTP协议运行在总所周知的端口上,这一点也可被攻击者利用,因为很多防火墙或其他安全设备被配置成允许80端口的内容通过,攻击者可以利用这一点渗透到内网中。
互联网中存在的大量中间盒子,HTTP标准(RFC 2616和RFC 7320)的理解如果不一致,就有可能导致一些新的攻击发生。为了克服HTTP协议上的缺陷,大多数Web应用程序使用HTTPS以及HTTP over QUIC协议。例如:如果一个HTTP GET里面有多个Host字段的情况下,有的CDN会使用第一个Host地址,有的服务器会使用最后一个Host地址,这样混乱的实现,就可能导致缓存投毒(Cache Poisoning)攻击。利用虚假Internet地址替换掉域名系统表中的地址,进而制造破坏。当网络用户在带有该虚假地址的页面中进行搜寻,以访问某链接时,网页浏览器由于受到该虚假条目的影响而打开了不同的网页链接。
当客户端要从服务器中读取文档时,当点击网页上的链接或者通过在浏览器的地址栏输入网址来浏览网页的,使用的都是GET方式
5 Cookie的脆弱性:
Cookie被用户非法篡改,如篡改其中的expire项,可将Cookie的有效期延长;篡改path项可使用户能够访问服务器上不被授权的内容;或修改domain项,使用户能够访问不被授权的服务器从而获得合法用户的信息等;
被非法用户非法截获,然后在有限期内重放,则非法用户将享有合法用户的合法权益,可能会损害网站方的利益;
若Cookie被服务器加密,而非法用户通过强力攻击或其他手段获得了相应的加密密钥,则非法用户可以伪造任何合法Cookie,从而可以访问合法用户的所有个性化信息,甚至是账户信息等
6 数据库脆弱性:Web应用程序在后台使用数据库来保存数据。
(Web应用程序与数据库之间一般采用标准的数据库访问接口,如ADO、JDBC、ODBC等)
1、整型参数时的SQL注入漏洞探测
(1)在URL链接中附加一个单引号。测试结果为abc.asp,运行异常
(2)在URL链接中附加字符串“and 1=1”。测试结果为abc.asp,运行正常,而且与http://xxx.xxx.xxx/abc.asp?p=YY运行结果相同
(3)在URL链接中附加字符串“and 1=2”。测试结果为abc.asp,运行异常。
2、字符串型参数时的SQL注入漏洞探测(和上方类似)
3、特殊情况的处理
(1)大小写混合法(2)UNICODE法(3)ASCII码法
过滤单引号。 防范SQL注入攻击的最有效的方法是对用户的输入进行检查,确保用户输入数据的安全性。在具体检查用户输入或提交变量时,根据参数的类型,可对单引号、双引号、分号、逗号、冒号、连接号等进行转换或过滤,这样就可以防止很多SQL注入攻击。
在构造动态SQL语句时,一定要使用类安全(type-safe)的参数编码机制。 大多数的数据库API,包含ADO和ADO.NET允许用户指定所提供参数的确切类型(如字符串、整数、日期等),这样可以保证这些参数被正确地编码以避免被黑客利用。
禁止将敏感性数据以明文存放在数据库中,这样即使数据库被SQL注入漏洞攻击,也会减少泄密的风险。
遵循最小特权原则。只给访问数据库的Web应用所需的最低权限,撤销不必要的公共许可,使用强大的加密技术来保护敏感数据并维护审查跟踪,并确保数据库打了最新补丁。
尽量不要使用动态拼装的SQL,可以使用参数化的SQL或者直接使用存储过程进行数据查询存取。
应用的异常信息应该给出尽可能少的提示,因为黑客们可以利用这些消息来实现SQL注入攻击。因此,最后使用自定义的错误信息对原始信息进行包装,把异常信息存放在独立的表中
进行XSS攻击需要两个前提:Web程序必须接受用户的输入,这显然是必要条件,输入不仅包含URL中的参数和表单字段,还包括HTTP头部和Cookie值;Web程序必须重新显示用户输入的内容,只有用户浏览器将Web程序提供的数据解释为HTML标记时,攻击才会发生。
反射式跨站脚本攻击:非持久化,需要欺骗用户自己去点击链接才能触发XSS代码;
储存式跨站脚本攻击:持久化,代码是存储在服务器中的;
DOM式跨站脚本攻击:DOM-XSS漏洞是基于文档对象模型(Document Objeet Model,DOM)的一种漏洞。
查看代码,具体判断方法与XSS漏洞类型相关;用工具测试。
网站中执行关键处理功能的网页中仅使用Cookie进行会话管理或仅依靠HTTP认证、SSL客户端证书、手机的移动ID来识别用户,则该网站就可能存在可被攻击者利用的CSRF漏洞。
cookie欺骗:伪造Cookie信息,绕过网站的验证过程,不需要输入密码,就可以登录网站,甚至进入网站管理后台。
第一步:为了查看和更改Cookie信息,我们在Cookie利用工具“Cookie&Injest”中输入
http://www.abc.com.cn/admin-index.asp
结果返回登录页面:
http://www.abc.com.cn/login.asp
第二步:在登录页面中随便输入一个用户名和口令并提交,返回错误信息(非法登录)。此时在“Cookie&Injest”工具的Cookie信息栏中就可以看到当前登录的Cookie信息,如下所示:
ASPESSIONINSCDTSCRR=KGDFLJJACIOOJJIDNIGJHHKD;path=/
第三步:利用工具中的修改功能,可对Cookie信息进行修改。前面的内容不变(“KGDFLJJACIOOJJIDNIGJHHKD”)为session(会话)信息,将后面的“path=/”替换成以下字符:
lunjilyb=randomid=12&password=wulifa&username=wulifa
即,Cookie信息为ASPESSIONINSCDTSCRR=KGDFLJJACIOOJJIDNIGJHHKD;lunjilyb=randomid=12&password=wulifa&username=wulifa
Cookie信息:用户名和口令不空,且randomid值等于12,
符合验证条件
修改Cookie信息后,再重新访问管理员后台页面
http://www.abc.com.cn/admin-index.asp,
将返回管理员后台页面,而不再是登录页面。
XSS利用的是网站内的信任用户,而CSRF则是通过伪装来自受信任用户的请求来利用受信任的网站。
一般来说,如果Web应用满足以下3个条件时,就有可能产生目录遍历漏洞:
外界能够指定文件名
能够使用绝对路径或相对路径等形式来指定其它目录的文件名
没有对拼接后的文件名进行校验就允许访问该文件
为了避免出现目录遍历漏洞,具体对策如下:
避免由外界指定文件名
将文件名固定,保存在会话变量中,不直接指定文件名,而是使用编号等方法间接指定
文件名中不允许包含目录名
不同系统中表示目录的字符有所不同,常见的有:/、\、:等
限定文件中仅包含字母或数字
有些攻击使用不同的编码转换进行过滤性的绕过,如通过对参数进行URL编码来绕过检查
很多Web应用编程语言支持应用通过Shell执行操作系统(OS)命令。通过Shell执行OS命令,或开发中用到的某个方法在其内部使用了Shell,就有可能出现恶意利用Shell提供的功能来任意执行OS命令的情况,这就是OS命令注入
攻击成功的主要原因是:Shell支持连续执行多条命令
(如UNIX操作系统Shell中使用分号(;)或管道(|)等字符支持连续执行多条命令,Windows操作系统cmd.exe使用&符号来连接多条命令。这些符号一般称为Shell的元字符)
如果OS命令参数中混入了元字符,就会使攻击者添加的操作系统命令被执行,这就是OS注入漏洞产生的原因
OS命令注入攻击防御策略:
选择不调用操作系统命令的实现方法,即不调用Shell功能,而用其它方法实现;
避免使用内部可能会调用Shell的函数;
不将外部输入的字符串作为命令行参数;
使用安全的函数对传递给操作系统的参数进行转义,消除Shell元字符带来的威胁。由于Shell转义规则的复杂性以及其它一些环境相关的原因,这一方法有时很难完全凑效。
(1)不将外部传入参数作为HTTP响应消息头输出,如不直接使用URL指定重定向目标,而是将其固定或通过编号等方式来指定,或使用Web应用开发工具中提供的会话变量来转交URL;(2)由专门的API进行重定向或生成Cookie,并严格检验生成消息头的参数中的换行符。
基本原理
WAF主要提供对Web应用层数据的解析,对不同的编码方式做强制多重转换还原为可分析的明文,对转换后的消息进行深度分析。
主要的分析方法主要有两类:
基于规则的分析方法
异常检测方法
HTTP over QUIC也实现了安全的HTTP通信,与HTTP over TLS不同的是,HTTP over QUIC是基于QUIC和UDP协议,而不是基于TLS和TCP。尽管HTTP/2和TLS1.3为了提高效率进行了大量的改进,但从效果上看,HTTP + QUIC + UDP的方法效率还是要高于传统的HTTP + TLS + TCP方案。
要查看HTTPS流量的明文内容,Fiddler必须解密HTTPS流量。基本原理是:Fiddler被配置为解密HTTPS流量后,会自动生成一个名为DO_NOT_TRUST_FiddlerRoot的CA证书,并使用该CA颁发用户访问的目标网站域名的TLS证书。为了防止浏览器弹出“证书错误”警告,Fiddler要求用户将DO_NOT_TRUST_FiddlerRoot证书手工加入到浏览器或其他软件的信任CA名单内。这样,Fiddler就可以作为中间人分别与浏览器和目标网站进行加密通信了。
最可能的原因是酒店在监听用户的上网,酒店使用自签名证书或浏览器不信任的CA颁发的证书作为中间人分别与浏览器与目标网站进行加密通信,解密、加密用户浏览器与目标网站之间的通信。
HTTPS可通过加密来保证浏览器和网站之间的通信隐秘性,防止互联网服务提供商和政府拦截读取通信内容。网站服务器通过提供由证书颁发机构数字签名的证书来证明其身份,浏览器也有自己默认信任的证书机构。例如,https://facebook.com会向浏览器提供由DigiCert签名的证书,DigiCert是一个全球公认的证书颁发机构,几乎所有浏览器都信任它。浏览器可以通过验证网站所提供的证书确认它的真实身份,确保他们正在与真正的https://facebook.com对话。此外,https://facebook.com提供的证书还包含一个加密密钥,用于保护浏览器和Facebook的后续通信。而在HTTPS拦截攻击(中间人攻击)中,攻击者假装自己是一个知名网站(例如https://facebook.com),并向浏览器提供自己的假证书。通常,攻击者提供的证书并非由权威机构颁发,浏览器并不会信任,会阻断连接。但是,如果攻击者可以说服受害者手动往浏览器中添加虚假的根证书,则浏览器会信任攻击者的服务器发送的虚假证书。此时,攻击者可以假冒成任何网站,受害者会“主动”向其传递敏感信息。
第七章 网络防火墙
7.1防火墙概述
防火墙定义:对经过的数据流进行解析,并实现访问控制及安全防护功能的网络安全产品。
防火墙分为网络型防火墙、Web应用防火墙、数据库防火墙和主机型防火墙等
网络型防火墙(network-based firewall),简称网络防火墙,部署于不同安全域之间(通常是在内部网络和外部网络的边界位置),对经过的数据流进行解析,具备网络层、应用层访问控制及安全防护功能的网络安全产品。
Web应用防火墙(Web Application Firewall),简称WAF,部署于Web服务器前端,对流经的HTTP/HTTPS访问和响应数据进行解析,具备Web应用的访问控制及安全防护功能的网络安全产品。
数据库防火墙(database firewall)部署于数据库服务器前端,对流经的数据库访问和响应数据进行解析,具备数据库的访问控制 及安全防护功能的网络安全产品。
主机防火墙(host-based firewall)部署于计算机(包括个人计算机和服务器)上,也称为个人防火墙,提供网络层访问控制,应用程序访问限制和攻击防护功能的网络安全产品。
个人防火墙就是一个位于用户计算机和它所连接的网络之间的程序。
病毒防火墙:病毒实时检测和清除系统
不是对进出网络的病毒进行监控,而是对所有的系统应用程序进行监控,由此来保障用户系统的“无毒”环境。
防火墙功能
1、网络层控制:在网络层对网络流量进行控制,包括:访问控制和流量管理
2、应用层控制:在应用层对网络流量进行控制,包括:用户管控,基于用户认证的网络访问控制功能;应用类型控制,根据应用特征识别并控制各种应用流量;应用内容控制,基于应用的内容对应用流量进行控制
3、攻击防护:识别并阻止特定网络攻击的流量,例如基于特征库识别并阻止网络扫描、典型拒绝服务攻击流量,拦截典型木马攻击、钓鱼邮件等;与其它安全系统联动
4、安全审计、告警与统计:记录下所有网络访问并进行审计记录,并对事件日志进行管理;对网络使用情况进行统计分析;当检测到网络攻击或不安全事件时,产生告警
7.2防火墙的工作原理
7.2.1 包过滤技术
包过滤防火墙相当于一个具有包过滤功能的路由器
包过滤设备必须存储包过滤规则;
当包到达端口时,分析IP、TCP或UDP报文头中的字段。
包过滤规则的存储顺序与应用顺序相同;
如果一条规则阻止包传输,此包便被丢弃;
如果一条规则允许包传输,此包可正常通过;
如果一个包不满足任何一条规则,则丢弃
包过滤技术的优点:
用一个放置在重要位置上的包过滤路由器即可保护整个网络,这样,不管内部网的站点规模多大,只要在路由器上设置合适的包过滤,各站点均可获得良好的安全保护;
包过滤工作对用户来说是透明的。包过滤不需用户软件支持,也不要对客户机做特殊设置;
包过滤技术是一种有效而通用的控制网络流量的方法,经常作为不可信网络的第一层防卫;可以有效阻塞公开的恶意站点的信息流。
包过滤技术的缺点:
仅依赖网络层和传输层信息,如IP地址、端口号、TCP标志等,只能“就事论事”地进行安全判决。由于缺少信息,一些协议如RPC、UDP难以有效过滤;
支持规则的数量有限,规则过多会降低效率。
正确制定规则并不容易
7.2.2 状态检测技术
状态检测又称动态包过滤,在网络层由一个检查引擎截获数据包,抽取出与应用层状态有关的信息,并以此作为依据决定对该数据包是接受还是拒绝。
检查引擎维护一个动态的状态信息表并对后续的数据包进行检查。一旦发现任何连接的参数有意外变化,该连接就被中止
它在协议底层截取数据包,然后分析这些数据包,并且将当前数据包和状态信息与前一时刻的数据包和状态信息进行比较,从而得到该数据包的控制信息,来达到保护网络安全的目的
7.2.3 应用网关防火墙
新型的自适应代理(Adaptive proxy)防火墙,本质上也属于代理服务技术,但它也结合了动态包过滤(状态检测)技术组成这类防火墙的基本要素有两个:自适应代理服务器与动态包过滤器。自适应代理就可以根据用户的配置信息,决定是使用代理服务器从应用层代理请求,还是使用动态包过滤器从网络层转发包。
7.3防火墙体系结构
堡垒主机(Bastion Host):被网络管理员认定为网络安全核心点的系统,常常充当内部网络或防火墙中应用代理的角色,要求安全性强
中立区或非军事化区域(Demilitarized Zone, DMZ):存在于企业内部网络和外部网络之间的一个小型网络,作为外网和内网的缓冲区以进一步隔离公网和内部私有网络。
7.3.1 过滤路由器或屏蔽路由器结构结构( Packet-filtering Router or Screening Router )
过滤路由器结构是最简单的防火墙结构
没有或有很简单的日志记录功能,网络管理员很难确定网络系统是否正在被攻击或已经被入侵。
规则表随着应用的扩展会变得很大、复杂。
依靠一个单一的部件来保护网络系统,一旦部件出现问题,会失去保护作用,而用户可能还不知道。
7.3.2 双穴主机或双宿主机结构 (Dual Homed Gateway)
定义:用一台装有两块网卡的堡垒主机(称为双穴主机或双宿主主机)做防火墙。两块网卡各自与受保护网和外部网相连,每块网卡都有独立的IP地址。堡垒主机上运行着防火墙软件(应用层网关),可以转发应用程序,也可提供服务等功能。
7.3.3 屏蔽主机或主机过滤结构(Screened Host Gateway)
定义:屏蔽主机体系结构包括:一个分组(包)过滤路由器(或称为屏蔽路由器)连接外部网络,再通过一个堡垒主机与内部网络相连,通常在路由器上设立过滤规则,并使这个堡垒主机成为从外部网络惟一可直接到达的主机,确保内部网络不受未被授权的外部用户的攻击。
7.3.4 过滤子网或屏蔽子网结构(Screened Subnet)
在外界网络和内部网络之间建立一个双方都可以访问的独立网络(过滤子网),用两台分组过滤路由器将这一子网分别与内部网络和外部网络分开
过滤子网不提供外部网络和内部网络之间的通路。
7.4防火墙技术发展趋势
评价指标包括:
连接速率
TCP新建连接速率:百兆、千兆、万兆产品分别是不小于1500条/s,5000条/s,50 000条/s
HTTP请求速率:百兆、千兆、万兆产品分别是不小于800条/s,3 000条/s,5 000条/s
SQL请求速率:百兆、千兆、万兆产品分别是不小于2000条/s, 10 000条/s,50 000条/s
并发连接数
并发连接数是防火墙所能处理的最大会话数量,反映防火墙对多个连接的访问控制能力和连接状态跟踪能力 .并发连接数与连接速率有关
吞吐量
高性能的万兆产品,吞吐量至少达到80Gbit/s
吞吐量是指在保证不丢失数据帧的情况下,设备能够接受的最大速率。
延迟
国际要求:对于64字节短包,512字节中长包,1518字节长包,百兆产品的平均延迟不应超过500 us,千兆、万兆产品不应超过90 us
问题:1518个字节是如何确定的?
以太网的MAC帧有18字节的帧头(6字节目标地址,6字节源地址和2字节的类型)和帧尾(4字节的帧检验序列FCS),MTU是1500字节,数据部分最长就是1500字节,所以数据帧长度应该最长是1518字节,国标应该是考虑的以太网帧的最长的情况
安全性、稳定性
课后习题
一、1. B 2. C 3. C 4. D 5. C 6. D 7. D 8. C 9. A 10. B 11. C 12. D
二、1. AD 2. AB 3. ABCD 4. BCD 5. ABCD 6. BC 7. ABC 8. AB
简答题
\1. 保护内网中脆弱以及存在安全漏洞的网络服务;实施安全策略,对网络通信进行访问控制;防止内网信息暴露;对内外网之间的通信进行监控审计。
差别在于是否对路由的数据包进行安全检测。
包过滤(Packet Filtering)作用在网络层和传输层,根据数据包的包头信息(源和目的IP地址、端口号、标志位等),依据事先设定的过滤规则,决定是否允许数据包通过。包过滤防火墙相当于一个具有包过滤功能的路由器
ppt习题:六项要求:
包过滤设备必须存储包过滤规则;
当包到达端口时,分析IP、TCP或UDP报文头中的字段。
包过滤规则的存储顺序与应用顺序相同;
如果一条规则阻止包传输,此包便被丢弃;
如果一条规则允许包传输,此包可正常通过;
如果一个包不满足任何一条规则,则丢弃。
ppt习题:过滤技术的优点:
用一个放置在重要位置上的包过滤路由器即可保护整个网络,这样,不管内部网的站点规模多大,只要在路由器上设置合适的包过滤,各站点均可获得良好的安全保护;
包过滤工作对用户来说是透明的。包过滤不需用户软件支持,也不要对客户机做特殊设置;
包过滤技术是一种有效而通用的控制网络流量的方法,经常作为不可信网络的第一层防卫;可以有效阻塞公开的恶意站点的信息流。
包过滤技术的缺点:
仅依赖网络层和传输层信息,如IP地址、端口号、TCP标志等,只能“就事论事”地进行安全判决。由于缺少信息,一些协议如RPC、UDP难以有效过滤;
支持规则的数量有限,规则过多会降低效率。
正确制定规则并不容易
状态检测防火墙克服了包过滤防火墙的局限性,能够根据协议、端口及源地址、目的地址的具体情况决定数据包是否可以通过。
对于每个安全策略允许的请求,状态检测防火墙启动相应的进程,可以快速地确认符合授权标准的数据包,这使得本身的运行速度很快。
跟踪通过防火墙的网络连接和包,这样它就可以使用一组附加的标准,以确定是否允许和拒绝通信。
优点:由于代理直接和应用程序交互,它可以根据应用上下文进行决策和判定,而不仅仅依据IP地址和端口号。可以做出更为准确的判定。
以HTTP流量为例:
包过滤技术仅仅知道应该允许或者拒绝HTTP流量;
应用级代理可以配置来过滤具体HTTP流量类型的数据;
防火墙管理员的管理带来极大的伸缩性,可以严格控制什么流量将会被允许,什么流量将被拒绝。
缺点:对每一类应用,都需要专门的代理。大多数代理服务器只能处理相对较少的应用。
应用代理往往比包过滤防火墙性能要差。
应用代理在应用层处理报文,要求应用代理服务器花费更多的时间来处理报文,造成数据传输的延迟。
应用代理服务器比相应的包过滤防火墙更加昂贵。
应用代理服务器对硬件的要求通常较高,升级的成本也较高。
不能使用户免于协议本身缺点的限制
有些服务要求建立直接连接,无法使用代理
比如聊天服务、或者即时消息服务
三层防御来阻止入侵者
如果入侵者仅仅侵入到过滤子网中的的堡垒主机,他只能偷看到过滤子网的信息流而看不到内部网的信息,过滤子网的信息流仅往来于外部网到堡垒主机。没有内部网主机间的信息流(重要和敏感的信息)在过滤子网中流动,所以堡垒主机受到损害也不会破坏内部网的信息流
使用两台包过滤路由器:外部路由器只向Internet通告屏蔽子网的存在(内部网络对Internet是不可见的)
内部路由器只向内部网络通告屏蔽子网的存在(内部网络上的系统无法构造到Internet的直连路由)
防火墙设备内并发连接表的大小;防火墙的CPU处理能力;防火墙的物理链路的承载能力。
防火墙不能防范不经过防火墙的攻击(云计算时代问题更突出)
防火墙不能防止来自网络内部的攻击(从内网攻击内网)和泄密行为。
防火墙不能防止受病毒感染的文件的传输。防火墙本身并不具备查杀病毒的功能,即使集成了第三方的防病毒软件或模块,杀毒能力也有限。
防火墙不能防止策略配置不当或错误配置引起的安全威胁。防火墙是一个被动的安全策略执行设备,就像门卫一样,要根据既定的策略或配置来执行安全检查,一般没有检查配置是否正确的能力
防火墙不能防止利用服务器系统和网络协议漏洞所进行的攻击。防火墙不能防止黑客通过防火墙准许的访问端口对该服务器的漏洞进行攻击。
防火墙不能防止本身的安全漏洞的威胁。防火墙保护别人有时却无法保护自己,目前还没有厂商绝对保证防火墙不会存在安全漏洞。因此对防火墙也必须提供某种安全保护。
由于防火墙的局限性,因此仅在内部网络入口处设置防火墙系统不能有效地保护计算机网络的安全,而入侵检测系统(Intrusion Detection System, IDS)可以弥补防火墙的不足
以太网的MAC帧有18字节的帧头(6字节目标地址,6字节源地址和2字节的类型)和帧尾(4字节的帧检验序列FCS),MTU是1500字节,数据部分最长就是1500字节,所以数据帧长度应该最长是1518字节,国标制定时很可能是考虑以太网帧的最长情况。
第八章 安全多方计算
8.1安全多方计算背景
隐私计算(Privacy computing)是指在保护数据本身不对外泄露的前提下实现数据分析计算的技术集合,达到对数据“可用、不可见”的目的;在充分保护数据和隐私安全的前提下,实现数据价值的转化和释放。
安全多方计算(Secure Multi-Party Computation)的研究主要是针对无可信第三方的情况下,如何安全地计算一个约定函数的问题。
8.2安全多方计算技术
隐私计算技术:不经意传输OT
不经意传输(Oblivious Transfer, OT)是一个密码学协议,在这个协议中,消息发送者从一些待发送的消息中发送一条给接收者,但事后对发送了哪一条消息仍然oblivious(不知道),这个协议也叫茫然传输协议。
零知识证明(Zero knowledge proof, ZKP)
证明者向验证者证明并使其相信自己知道或拥有某一消息,但证明过程不能向验证者泄漏任何关于被证明消息的任何信息。零知识证明可以解决隐私计算过程中的隐私泄露问题,目前主要使用的是非交互式零知识证明(Non-interactive ZKP)
隐私计算技术:秘密分享
1979年由Shamir和Blakey提出秘密共享(Shamir Secret Sharing)的概念。
(t,n)秘密共享方案:设秘密s被分成n个部分,每一部分被称为一个子秘密并由一个持有者持有,并且大于等于t个参与者所持有的子秘密可以重构秘密s,而少于t个参与者所持有的子秘密无法重构秘密并且无法获得秘密s的任何信息。
秘密分享(Secret sharing) 类型包括
算术秘密分享Arithmetic sharing:
布尔秘密分享Boolean sharing:
姚秘密分享Yao sharing:
隐私计算技术:隐私集合求交
隐私集合求交(Private Set Intersection, PSI):允许持有各自集合的多方来共同计算集合的交集,而计算的最后,各参与方只能得到正确的交集,而不会得到交集以外另一方集合中的任何信息。
多功能公钥:代理重加密
代理重加密(Proxy Re-Encryption, PRE)
支持密文转换:可以将用户 A 用自己公钥加密上传的密文转换成另一种形式的密文,使得用户 B 可以用自己私钥对转换后的密文进行解密,并且在整个转换过程中不会泄露任何对应的明文信息。
多功能公钥:条件代理重加密
条件代理重加密(Conditional PRE, CPRE):支持符合某种特定条件表达的密文才可以进行密文转换。
同态加密计算结果缺乏可验证性,需依赖可信第三方保证计算的正确性
8.3安全多方计算应用
略(太多)