安全测试的概念
定义:指有关验证应用程序的安全等级和识别潜在安全性缺陷的过程。】
- 应用软件的安全性测试:软件自身设计中存在的安全隐患,并检查软件对非法入侵的防御能力。
- 系统级别的安全性测试:确保只有具备系统平台访问权限的用户才能访问,包括对系统的登录和远程访问。
导致软件出现安全问题的主要原因是:软件的安全漏洞。
安全漏洞概念:
- 定义:硬件、软件或协议在逻辑设计上或具体实现或系统安全策略上存在的缺陷或漏洞。
- 漏洞产生原因:程序员不正确或不安全的编码导致的。
- 危害:攻击者通过漏洞获取系统额外权限,植入病毒、木马,窃取资料。
注意:只有威胁到系统安全的错误才算漏洞。
安全漏洞的危害:
- 系统完整性:非法篡改破坏数据完整性。
- 系统可用性:破坏系统或网络,导致服务不可用。
- 系统机密性:泄露个人或企业隐私信息。
- 系统可靠性:造成系统不能正常提供有效服务。
软件安全测试方法
- 代码安全性测试:对源代码进行安全扫描,根据程序中的数据流、控制流、语义等信息与其特有软件安全规则库进行匹配,从中找出代码中潜在的安全漏洞。
- 渗透测试:主要使用自动化工具或人工模拟黑客输入,对系统进行攻击性测试,从而找出运行时刻说存在的安全漏洞。
- 程序数据扫描:通常是内存测试,可发现例如缓冲区溢出之类的漏洞。
软件安全测试的内容
- 功能验证:对涉及到安全的软件功能进行有效性验证,如:管理模块、权限模块、加密系统、认证系统等。
- 模拟攻击:一种特殊的、极端的测试方法,模拟攻击验证软件系统的安全防护能力。如:渗透测试---比较常用。
- 漏洞扫描:漏洞扫描器。
- 侦听技术:网络监听,获取传输信息,当发现有敏感信息时,存在安全问题。--网络是否被监听。
软件安全测试的过程
基于安全需求,将系统可能面临的安全问题进行分类,画出威胁树,可针对威胁树选择对应的方法和技术,是为需求分析。
- 基于威胁模型,指定计划
- 以口令安全问题威胁树为例,计划就可为口令安全可能存在的各种攻击进行制定。
- 规划最小测试单元
- 不是整个模块都有安全问题,关注有问题的最小模块即可。
- 对系统的可能漏洞进行分级
- 按照不同优先级进行。
- 设计安全测试用例
- 根据漏洞类型,进行准备数据,设计测试用例进行测试。
- 模拟攻击系统
- 模拟攻击,查看系统状态。
- 总结执行结果,提出解决方案
WEB安全测试范围
- web服务器应用安全
- 服务器本身及网络环境安全
- web服务器周边应用安全
- 网站程序安全
WEB安全测试的分类
- 认证与授权
- Session与cookie:cookie校验,敏感数据不存本地
- DDoS拒绝服务攻击
- 文件上传漏洞:缺少必要校验:限制文件格式/大小限制/修改扩展名是否可以绕过限制
- XSS跨站攻击:恶意攻击者往网页中植入恶意的代码,用户执行的时候触发。
- SQL注入:利用网站的sql漏洞,达到恶意的目的。
0day & 1day
0day 又叫零时差攻击,是指被发现后立即被恶意利用的安全漏洞。
- 0day:只有你自己知道
- 1day:刚刚公布的漏洞(没超1天)
- nday:漏洞公布已经n天
白帽子和黑帽子
白帽子:精通安全技术,站在黑客对面的专家。。。。
黑帽子:黑客技术造成破坏,甚至犯罪团伙。。。。
WEB安全测试载体
- 通常是网络协议,常见的是http协议。
网络协议基础
网络模型
- OSI模型
- 网络模型协议对照
- 协议数据的网络传输
- 包括2部分:拆解 和 封装
传输层TCP/UDP协议
- tcp协议:面向连接、可靠,基于字节流。
- 将应用成接收到的数据进行拆分--报文段
三次握手:确保连接的可靠性(全双工,2端确认)
四次挥手:断开双方的连接(双工确认)
报文结构:
端口:用于判断某个应用程序的标识。
网络层IP协议
略。。。
应用层HTTP协议
重要状态码:
200-->请求成功
3xx表示重定向:
- 301--->请求的资源永久的移到了新地址
- 302-->请求的资源临时从不同的url响应请求
- 304-->文档内容自上次请求以来没有发生过改变,从缓存响应请求
4xx表示客户端错误:
- 401 -->unauthorized,当前请求需要用户确认
- 403-->forbidden,服务器已经理解请求,但拒绝执行它
- 404-->not found,请求所希望的到的资源未在服务器上面发现。如路径或资源名错误
5xx表示服务端错误:
500-->服务器遇到了未曾预料的状况,导致他无法完成对请求的处理,如:源码错误
消息摘要技术
消息摘要技术(Message Digest)是一种用于确保消息完整性和安全性的密码学技术。它将输入的任意长度的消息数据转换成固定长度的摘要,通常表示为一串由数字和字母组成的哈希值。
常见的消息摘要算法包括MD5(Message Digest Algorithm 5)和SHA(Secure Hash Algorithm)系列,如SHA-1、SHA-256、SHA-512等。这些算法使用不同的数学函数和运算来计算摘要,并满足以下特点:
- 不可逆性:无法通过摘要反推出原始消息的内容。
- 唯一性:不同的消息很难生成相同的摘要,且即使输入消息的微小变化也会显著改变摘要的值。
- 固定长度:摘要的长度是固定的,不受输入消息长度的影响。
消息摘要技术在数据完整性校验、数字签名、密码存储等场景中广泛应用。以下是一些常见的应用场景:
-
数据完整性校验:通过计算消息的摘要并与预期的摘要进行比对,可以验证消息在传输过程中是否被篡改或损坏。
-
数字签名:发送方可以使用自己的私钥对消息进行摘要计算,并将摘要作为数字签名附加到消息中。接收方可以使用发送方的公钥验证数字签名的有效性,以确保消息的完整性和来源认证。
-
密码存储:在用户账户和密码存储时,通常不会直接存储明文密码,而是将密码经过摘要计算后存储摘要值。当用户登录时,输入的密码通过相同的摘要算法计算摘要,并与保存的摘要进行比对,以验证输入密码的正确性,而无需存储明文密码。
需要注意的是,随着计算能力的提升,一些早期的消息摘要算法(例如MD5)已经被证明存在碰撞攻击等安全漏洞,因此在实际应用中,更推荐使用更安全和强大的SHA-2系列或SHA-3系列的算法。此外,完整性校验仅能确认数据是否被篡改,但无法提供机密性保护,因此在需要同时满足完整性和机密性的场景中,还需要结合其他密码学技术来实现综合的安全保护。
数字签名技术
数字签名技术是一种用于验证数字文件的完整性、源信任和抗否认性的密码学技术。它结合了公钥加密和消息摘要技术,确保消息在传输过程中不被篡改,并提供了对消息发送者身份的认证。
数字签名的工作原理如下:
-
创建签名:发送方使用自己的私钥对要发送的消息进行加密或计算消息摘要。然后,发送方将加密后的消息或摘要与消息一起发送给接收方。
-
验证签名:接收方使用发送方的公钥对接收到的消息进行解密或计算消息的摘要。然后,接收方将得到的结果与发送方发送的签名进行比对。
如果接收方成功验证了签名,并且消息的完整性未被破坏,则可以确认以下事实:
-
消息的完整性:由于私钥只有发送方拥有,因此无法通过伪造签名来修改或篡改消息内容。如果消息被篡改,验证过程将失败,提示消息已被更改。
-
消息的源信任:由于只有发送方拥有与其公钥匹配的私钥,所以只有发送方才能生成有效的签名。接收方可以使用发送方的公钥验证签名的有效性,从而确认消息来自于发送方。
-
抗否认性:由于数字签名是与发送方的身份关联的,发送方无法否认已经使用其私钥生成的签名。这提供了对消息的抗否认特性,即发送方不能否认发送过的消息。
数字签名技术在许多领域广泛应用,例如:
-
数字证书:数字证书是数字签名的一种重要应用。它由证书颁发机构(Certificate Authority)使用自己的私钥对某个实体(如网站、组织或个人)的公钥进行签名,确认公钥的所有权和真实性。这样,其他人可以使用证书颁发机构的公钥验证数字证书的有效性,并信任证书中附带的公钥。
-
数字文档的完整性和身份验证:数字签名可用于保护文件的完整性,确保在传输或存储过程中没有被篡改。同时,接收方可以通过验证签名来验证文件的来源和身份,以确保其真实性和可信度。
-
电子商务:数字签名能够确保在线交易的安全性和可信度。通过对交易数据进行数字签名,买家和卖家可以相互验证对方的身份以及交易的完整性。
需要注意的是,数字签名技术依赖于安全的密钥管理和使用合适的密码学算法。保护私钥的安全性至关重要,以防止私钥泄露和未经授权的签名操作。同时,为了保持对抗量子计算攻击的能力,应选择适用于量子安全的密码学算法,如使用基于椭圆曲线的数字签名算法(ECDSA)或RSA的1024位以上密钥长度。
会话安全管理技术
cookie状态保持:使用cookie技术来保持登录状态。
cookie + session技术 :
session是将数据存储到服务器中,服务器会为每一个用户创建一个session,用户访问服务器的时候需要拿着session去表明身份,session的实现是基于cookie,session需要借助于cookie来存储sessionid 。
使用session技术实现状态保持?
- session是保存在服务器端
- cookie是保存在客户端
token技术:
token在计算机身份认证中是令牌(临时)的意思,主要用于前后端分离、第三端登录项目中。
- token是在服务端产生的
- 前端向服务端请求认证,服务端认证成功,会返回token给客户端。
- 前端在每次请求的时候带上token证明自己的合法地位。
session依赖于cookie(浏览器),token可以不依赖于cookie(非浏览器)。
token技术进行状态保持原理:
token技术---jwt :