常见的4种网络攻击手段
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
常见的4种⽹络攻击⼿段
1.1. 跨站脚本攻击(XSS)
概念
跨站脚本攻击(Cross-Site Scripting, XSS),是⼀种⽹站应⽤程序的安全漏洞攻击,是代码注⼊的⼀种。
它允许恶意⽤户将代码注⼊到⽹页上,其他⽤户在观看⽹页时就会受到影响。
这类攻击通常包含了 HTML 以及⽤户端脚本语⾔。
XSS 攻击⽰例:
假如有下⾯⼀个 textbox
<input type="text" name="address1" value="value1from">
value1from 是来⾃⽤户的输⼊,如果⽤户不是输⼊ value1from,⽽是输⼊"/><script>alert(document.cookie)</script><!-那么就会变成:
<input type="text" name="address1" value=""/><script>alert(document.cookie)</script><!- ">
嵌⼊的 JavaScript 代码将会被执⾏。
攻击的威⼒,取决于⽤户输⼊了什么样的脚本。
攻击⼿段和⽬的
常⽤的 XSS 攻击⼿段和⽬的有:
盗⽤ cookie,获取敏感信息。
利⽤植⼊ Flash,通过 crossdomain 权限设置进⼀步获取更⾼权限;或者利⽤ Java 等得到类似的操作。
利⽤ iframe、frame、XMLHttpRequest 或上述 Flash 等⽅式,以(被攻击)⽤户的⾝份执⾏⼀些管理动作,或执⾏⼀些⼀般的如发微博、加好友、发私信等操作。
利⽤可被攻击的域受到其他域信任的特点,以受信任来源的⾝份请求⼀些平时不允许的操作,如进⾏不当的投票活动。
在访问量极⼤的⼀些页⾯上的 XSS 可以攻击⼀些⼩型⽹站,实现 DDoS 攻击的效果。
应对⼿段
过滤特殊字符 - 将⽤户所提供的内容进⾏过滤,从⽽避免 HTML 和 Jascript 代码的运⾏。
如>转义为>、<转义为<等,就可以防⽌⼤部分攻击。
为了避免对不必要的内容错误转移,如3<5中的<需要进⾏⽂本匹配后再转移,如:<img src=这样的上下⽂中的<才转义。
设置 Cookie 为 HttpOnly - 设置了 HttpOnly 的 Cookie 可以防⽌ JavaScript 脚本调⽤,就⽆法通过 document.cookie 获取⽤户 Cookie 信息。
1.2. 跨站请求伪造(CSRF)
概念
跨站请求伪造(Cross-site request forgery,CSRF),也被称为 one-click attack 或者 session riding,通常缩写为 CSRF 或者 XSRF。
它是⼀种挟制⽤户在当前已登录的 Web 应⽤程序上执⾏⾮本意的操作的攻击⽅法。
和跨站脚本(XSS)相⽐,XSS 利⽤的是⽤户对指定⽹站的信任,CSRF 利⽤的是⽹站对⽤户⽹页浏览器的信任。
攻击⼿段和⽬的
可以如此理解 CSRF:攻击者盗⽤了你的⾝份,以你的名义发送恶意请求。
CSRF 能做的事太多:
以你名义发送邮件,发消息
⽤你的账号购买商品
⽤你的名义完成虚拟货币转账
泄露个⼈隐私
...
应对⼿段
表单 Token - CSRF 是⼀个伪造⽤户请求的操作,所以需要构造⽤户请求的所有参数才可以。
表单 Token 通过在请求参数中添加随机数的办法来阻⽌攻击者获得所有请求参数。
验证码 - 请求提交是,需要⽤户输⼊验证码,以避免⽤户在不知情的情况下被攻击者伪造请求。
Referer check - HTTP 请求头的 Referer 域中记录着请求资源,可通过检查请求来源,验证其是否合法。
1.3. SQL 注⼊攻击
概念
SQL 注⼊攻击(SQL injection),是发⽣于应⽤程序之数据层的安全漏洞。
简⽽⾔之,是在输⼊的字符串之中注⼊ SQL 指令,在设计不良的程序当中忽略了检查,那么这些注⼊进去的指令就会被数据库服务器误认为是正常的 SQL 指令⽽运⾏,因此遭到破坏或是⼊侵。
攻击⽰例:
考虑以下简单的登录表单:
<form action="/login" method="POST">
<p>Username: <input type="text" name="username" /></p>
<p>Password: <input type="password" name="password" /></p>
<p><input type="submit" value="登陆" /></p>
</form>
我们的处理⾥⾯的 SQL 可能是这样的:
username:=r.Form.Get("username")
password:=r.Form.Get("password")
sql:="SELECT * FROM user WHERE username='"+username+"' AND password='"+password+"'"
如果⽤户的输⼊的⽤户名如下,密码任意
myuser' or 'foo' = 'foo' --
那么我们的 SQL 变成了如下所⽰:
SELECT * FROM user WHERE username='myuser' or 'foo' = 'foo' --'' AND password='xxx'
在 SQL ⾥⾯--是注释标记,所以查询语句会在此中断。
这就让攻击者在不知道任何合法⽤户名和密码的情况下成功登录了。
对于 MSSQL 还有更加危险的⼀种 SQL 注⼊,就是控制系统,下⾯这个可怕的例⼦将演⽰如何在某些版本的 MSSQL 数据库上执⾏系统命令。
sql:="SELECT * FROM products WHERE name LIKE '%"+prod+"%'"
Db.Exec(sql)
如果攻击提交a%' exec master..xp_cmdshell 'net user test testpass /ADD' --作为变量 prod 的值,那么 sql 将会变成
sql:="SELECT * FROM products WHERE name LIKE '%a%' exec master..xp_cmdshell 'net user test testpass /ADD'--%'"
MSSQL 服务器会执⾏这条 SQL 语句,包括它后⾯那个⽤于向系统添加新⽤户的命令。
如果这个程序是以 sa 运⾏⽽ MSSQLSERVER 服务⼜有⾜够的权限的话,攻击者就可以获得⼀个系统帐号来访问主机了。
虽然以上的例⼦是针对某⼀特定的数据库系统的,但是这并不代表不能对其它数据库系统实施类似的攻击。
针对这种安全漏洞,只要使⽤不同⽅法,各种数据库都有可能遭殃。
攻击⼿段和⽬的
数据表中的数据外泄,例如个⼈机密数据,账户数据,密码等。
数据结构被⿊客探知,得以做进⼀步攻击(例如SELECT * FROM sys.tables)。
数据库服务器被攻击,系统管理员账户被窜改(例如ALTER LOGIN sa WITH PASSWORD='xxxxxx')。
获取系统较⾼权限后,有可能得以在⽹页加⼊恶意链接、恶意代码以及 XSS 等。
经由数据库服务器提供的操作系统⽀持,让⿊客得以修改或控制操作系统(例如 xp_cmdshell "net stop iisadmin"可停⽌服务器的 IIS 服务)。
破坏硬盘数据,瘫痪全系统(例如 xp_cmdshell "FORMAT C:")。
应对⼿段
使⽤参数化查询 - 建议使⽤数据库提供的参数化查询接⼝,参数化的语句使⽤参数⽽不是将⽤户输⼊变量嵌⼊到 SQL 语句中,即不要直接拼接 SQL 语句。
例如使⽤ database/sql ⾥⾯的查询函数Prepare和Query,或者Exec(query string, args ...interface{})。
单引号转换 - 在组合 SQL 字符串时,先针对所传⼊的参数作字符取代(将单引号字符取代为连续 2 个单引号字符)。
1.4. 拒绝服务攻击(DoS)
拒绝服务攻击(denial-of-service attack, DoS)亦称洪⽔攻击,是⼀种⽹络攻击⼿法,其⽬的在于使⽬标电脑的⽹络或系统资源耗尽,使服务暂时中断或停⽌,导致其正常⽤户⽆法访问。
当⿊客使⽤⽹络上两个或以上被攻陷的电脑作为“僵⼫”向特定的⽬标发动“拒绝服务”式攻击时,称为分布式拒绝服务攻击(distributed denial-of-service attack,缩写:DDoS attack、DDoS)。
攻击⽅式
带宽消耗型攻击
资源消耗型攻击
应对⼿段
防⽕墙 - 允许或拒绝特定通讯协议,端⼝或 IP 地址。
当攻击从少数不正常的 IP 地址发出时,可以简单的使⽤拒绝规则阻⽌⼀切从攻击源 IP 发出的通信。
路由器、交换机 - 具有速度限制和访问控制能⼒。
流量清洗 - 通过采⽤抗 DDoS 软件处理,将正常流量和恶意流量区分开。
2. 加密技术及密钥安全管理
对于⽹站来说,⽤户信息、账户等等敏感数据⼀旦泄漏,后果严重,所以为了保护数据,应对这些信息进⾏加密处理。
信息加密技术⼀般分为:
消息摘要
加密算法
对称加密
⾮对称加密
证书
2.1. 消息摘要
常⽤数字签名算法:MD5、SHA 等。
应⽤场景:将⽤户密码以消息摘要形式保存到数据库中。
2.2. 加密算法
对称加密
对称加密指加密和解密所使⽤的密钥是同⼀个密钥。
常⽤对称加密算法:DES 等。
应⽤场景:Cookie 加密、通信机密等。
⾮对称加密
⾮对称加密指加密和解密所使⽤的不是同⼀个密钥,⽽是⼀个公私钥对。
⽤公钥加密的信息必须⽤私钥才能解开;反之,⽤私钥加密的信息只有⽤公钥才能解开。
常⽤⾮对称加密算法:RSA 等。
应⽤场景:HTTPS 传输中浏览器使⽤的数字证书实质上是经过权威机构认证的⾮对称加密公钥。
2.3. 密钥安全管理
保证密钥安全的⽅法:
1. 把密钥和算法放在⼀个独⽴的服务器上,对外提供加密和解密服务,应⽤系统通过调⽤这个服务,实现数据的加解密。
2. 把加解密算法放在应⽤系统中,密钥则放在独⽴服务器中,为了提⾼密钥的安全性,实际存储时,密钥被切分成数⽚,加密后分别保
存在不同存储介质中。
2.3. 证书
证书可以称为信息安全加密的终极⼿段。
公开密钥认证(英语:Public key certificate),⼜称公开密钥证书、公钥证书、数字证书(digital certificate)、数字认证、⾝份证书(identity certificate)、电⼦证书或安全证书,是⽤于公开密钥基础建设的电⼦⽂件,⽤来证明公开密钥拥有者的⾝份。
此⽂件包含了公钥信息、拥有者⾝份信息(主体)、以及数字证书认证机构(发⾏者)对这份⽂件的数字签名,以保证这个⽂件的整体内容正确⽆误。
透过信任权威数字证书认证机构的根证书、及其使⽤公开密钥加密作数字签名核发的公开密钥认证,形成信任链架构,已在 TLS 实现并在万维⽹的 HTTP 以 HTTPS、在电⼦邮件的 SMTP 以 STARTTLS 引⼊并⼴泛应⽤。
众所周知,常见的应⽤层协议 HTTP、FTP、Telnet 本⾝不保证信息安全。
但是加⼊了 SSL/TLS 加密数据包机制的 HTTPS、FTPS、Telnets 是信息安全的。
概念
传输层安全性协议(Transport Layer Security, TLS),及其前⾝安全套接层(Secure Sockets Layer, SSL)是⼀种安全协议,⽬的是为互联⽹通信,提供安全及数据完整性保障。
证书原理
SSL/TLS 协议的基本思路是采⽤公钥加密法,也就是说,客户端先向服务器端索要公钥,然后⽤公钥加密信息,服务器收到密⽂后,⽤⾃⼰的私钥解密。
这⾥有两个问题:
(1)如何保证公钥不被篡改?
解决⽅法:将公钥放在数字证书中。
只要证书是可信的,公钥就是可信的。
(2)公钥加密计算量太⼤,如何减少耗⽤的时间?
解决⽅法:每⼀次对话(session),客户端和服务器端都⽣成⼀个"对话密钥"(session key),⽤它来加密信息。
由于"对话密钥"是对称加密,所以运算速度⾮常快,⽽服务器公钥只⽤于加密"对话密钥"本⾝,这样就减少了加密运算的消耗时间。
SSL/TLS 协议的基本过程是这样的:
1. 客户端向服务器端索要并验证公钥。
2. 双⽅协商⽣成"对话密钥"。
3. 双⽅采⽤"对话密钥"进⾏加密通信。