安全—主要是数据
- 增删改查权限的控制,授权谁,哪个role能干哪些事这个要能控制。
- 谁什么时间做了什么,要有记录
- 密码加密。人家得到了也没用
数据加密 - 存储密码 ,密码加了盐值,彩虹表就对不出来原始密码,存储时通常哈希和盐值一块存储或者分别存储。这样就能判断输入密码是否正确
哈希函数的一个基本性质是单向性,即很难从哈希值反推出原始输入数据 - 强制用户设置强密码,定期修改密码。通过加密信道( HTTPS )来防止窃听。也可以给下发的凭证设置一个有效期来限制凭证暴露时间,以此来减少重放攻击
- 单点登录 (Single Sign On, SSO)
允许用户使用一个单一的登陆凭证访问多个相关但独立的应用。
微软账号登录微软的邮箱,office,teams就是单点登录;各大网站都用可以使用qq登录,也是 - 通过防火墙控制
一、安全是什么?就是三个基础原则
安全就是保护数据
1. 机密性
对未授权的主体不可见
开发人员不能拥有敏感数据的访问权限
密钥要复杂
显示器伤的数据被别有用心的人窥探
2. 完整性
没授权的人不可修改数据
3. 可用性
被授权的主体可读
二、如何解决安全问题
解决方案:先登录,再操作,最后留下记录
审计不仅是看日志,还有机器学习、异常检测的算法也能运用进来
三、How to make your password “invisible”?你懂加密嘛?
了解这些加密算法的概念和优缺点,就足够你选取合适的了
对称加密,一把钥匙
常见的对称加密算法
数据加密后,即使物理硬盘被盗,也不会导致信息外泄。
对称加密的密钥被盗就很麻烦。非对称密钥就解决了这个问题
非对称加密算法
除了加密功能,大部分非对称算法还提供签名功能。就是我用私钥加密,你用公钥解密,你就知道这段话是我说的。
大部分的认证和签名场景,其实使用的都是非对称加密算法。比如SSH,Git上传等,私钥留本地,公钥放服务端
散列算法
利用它可以对任意长度的输入,计算出一个定长的id。
其价值还体现在不可逆性。明文密码通过散列算法计算后,存储最终的散列值。后续登录过程中,计算出的散列值一样。登录成功
同样的消息生成同样的摘要;
不存在不同的输入,输出相同
使用散列算法的时候,记得加 盐(一串随机字符)。用户密码和盐拼接后,再进行散列计算。这样即使两个用户设置了相同的密码,也会有不同的散列值。此举还能对抗黑客
彩虹表通过预先计算和存储大量的密码及其对应的哈希值,在实际破解时通过查找表中的匹配项来减少计算时间。
黑客往往会提前计算一个彩虹表来提升暴力破解散列值的效率。
使用盐(salt)增加了破解难度。盐是一个随机值,与密码组合后再进行哈希,从而使彩虹表无效。
总结
对称加密具备较高的安全性和性能 (通常比非对称加密快,资源消耗低),要优先考虑; 首选 AES-CTR
一对多的场景(如多人登录服务器),存在密钥分发难题的时候,用非对称加密; ECC
不需要可逆计算的时候(如存储密码),使用散列算法。 SHA256 加盐
四、除了账号密码,对于身份认证还有什么选择?
强制用户设置强密码,定期修改密码。通过加密信道( HTTPS )来防止窃听。也可以给下发的凭证设置一个有效期来限制凭证暴露时间,以此来减少重放攻击
对于身份认证,单点登录是一种集大成的解决方案。基于CAS流程,衍生出了很多成熟的单点登录流程,可以供你使用
单点登录 (Single Sign On, SSO)
允许用户使用一个单一的登陆凭证访问多个相关但独立的应用。
微软账号登录微软的邮箱,office,teams就是单点登录;各大网站都用可以使用qq登录,也是
下面是几种典型的SSO 方式
CAS (Central Authentication Service, 集中式认证服务)
JWT (JSON Web Token)
它会在客户端保存一个凭证信息,之后你每一次登录的请求中都带上这个凭证
OAuth (Open Authorization) 授权
我们使用qq、微信登录其他应用所用的协议。
想要维持应用内的登录状态,应用还得颁发自己的登录凭证。这也就是为什么QQ授权后,应用还需要绑定你的手机号码
要求额外信息:为了增强安全性和提供更好的服务,MyApp 可能要求用户绑定手机号码。这样做有几个目的:
安全性:通过手机号码验证可以防止账号被盗,提供双重认证等安全功能。
联系用户:便于在需要时与用户联系,如密码重置、重要通知等。
应用特定功能:一些功能可能需要手机号码,例如社交功能、支付功能等。
当你在第三方应用中选择“通过微信登录”或“通过微博分享”,实际上就是通过OAuth授权。过程包括同意应用访问你的部分微信或微博信息。你被导向微信或微博进行登录,然后会被询问是否允许该应用访问你的某些数据(如头像、昵称、发布内容等)。一旦同意,应用就会收到一个访问令牌,它可以用这个令牌在限定范围内代表你执行操作,比如读取或写入数据,而无需获取你的密码。
OpenID (Open Identity Document) 认证
你会被重定向到你选择的OpenID提供商(如Google账号)进行登录,输入你的凭证后,提供商确认你的身份,并告知网站“这个人是该OpenID的合法拥有者”。之后,你可能就直接登录进了那个网站,无需再创建或记住新的用户名和密码。
你可能先通过类似OpenID Connect的方式认证身份,随后通过OAuth授权给第三方应用访问你的某些社交网络资料或功能。
五、数据保护方案:访问控制(就是授权,允许干什么)
通过身份认证,只能确认用户的身份,而对用户的操作和访问行为的把控,需要授权和审计
常见的访问控制机制:
DAC
你想从图书馆里借本书,管理员说:“你经过这本书的所有者同意了嘛?” 这个过程就是DAC
安全性完全取决于所有者的个人安全意识。
Linux中采用的就是DAC,用户可以控制自己的文件能被谁访问
role-BAC(role based Access Control, 基于角色的访问控制)
将主体划分为不同的role,对每个role的权限进行定义
当你想借书的时候,管理员问:“你是学生嘛?”。管理员来进行所有权限的分配和变更。
运维人员给开发、产品、运维划分不同的机器操作权限
rule-BAC(rule Based Access Control, 基于规则的访问控制)
当你借书的时候,管理员说:根据规定,持有阅览证就可以借书
针对请求本身制定的访问控制策略
典型的例子就是防火墙
MAC(Mandatory Access Control, 强制访问控制)
管理员说:初中生不能借阅高中生的书籍
MAC是安全性最高的访问控制策略,要求对所有数据进行标记来进行全面的把控。
MAC仅仅出现在政府系统中。
在实际工作中会对这4中访问控制机制组合使用。比如Linux中,我们除了对文件进行了DAC访问控制,也利用了role-BAC定义了 group的概念。这样,管理员可以把用户分配到不同的组中。DAC也会按照组去定义相应的权限了。
威胁评估
安全方案落地过程中,首先要考虑的是:目前存在哪些安全威胁。
步骤:
1. 识别数据
数据被攻击后,会造成多大的损失
2. 识别攻击
什么样的数据有价值被攻击
3. 识别漏洞
它会怎么攻击?
六、XSS (Cross-Site Scripting, 跨站脚本攻击)
黑客在你的浏览器中,插入一段 Javascript 脚本,从而窃取你的隐私信息或者仿冒你进行操作
1. 反射型 XSS
点击链接,就会执行一段黑客定义的Javascript 脚本。所以不要点击任何未知的链接
它主要产生在前后端一体的网页应用中。
2. 基于 DOM 的 XSS
3. 持久型 XSS
总结
七、SQL注入:设置了强密码还是被别人登录
八、CSRF/SSRF
CSRF (Cross-Site Request Forgery,跨站请求伪造)
绕过身份验证,进行未授权的操作
我没有浏览银行网站,却突然发起了一笔转账
平常登录一个网站,一段时间不用再次登录。被黑客利用cookie,然后让你打开一个网页。背后执行代码
SSRF (Server Side Request Forgery,服务端请求伪造)
就是俗话说的内网穿透:由于大多数私有网络中的计算机都位于防火墙或路由器之后,它们通常无法直接从互联网接收数据。内网穿透技术可以使这些计算机看起来像是在公网上,从而实现从外网直接访问内网资源。
九、反序列化漏洞
序列化是将数据或对象转换为一种可以传输或者存储的格式的过程(比如转换成字节流,字符串)。
反序列化就是还原的过程
流程
- 黑客构造一个 调用链,并将其序列化成数据,然后发送给应用
- 应用接收到数据。大部分应用都有接收外部输入的地方,比如各种HTTP接口,而这个输入的数据就有可能是序列化数据
- 应用进行反序列化。收到数据后,将数据构造成对象
- 反序列化过程中,会调用黑客的调用链,使得应用会执行黑客的任意命令
防护方法
RASP适用于不是高并发的场景
十、信息泄漏
黑客根据错误信息”聚沙成塔“还原出整个代码原貌。
注释信息泄漏
通过.svn文件夹还原整套代码
员工私自公开代码到GitHub
白盒测试测试的源代码,黑盒测试的是软件的功能
十一、安全实操教程地址
模拟 XSS(跨站脚本攻击)攻击的网站实例通常是专门设计用于安全教育和培训的环境。这些环境提供了一个安全的、可控的地方来学习和测试各种安全漏洞,包括 XSS。以下是一些广泛使用的用于模拟 XSS 攻击的在线资源和平台:
1. OWASP WebGoat
OWASP WebGoat 是一个开源的、故意不安全的应用程序,用于安全培训和学习。它包含多种漏洞,包括 XSS。
- 官网:OWASP WebGoat
- 特点:提供了详细的教程和演练,适合初学者和有经验的安全研究人员。
2. Google Gruyere
Google Gruyere 是一个小型的、不安全的 web 应用程序,用于演示和教育各种安全漏洞,包括 XSS。
- 官网:Google Gruyere
- 特点:通过逐步教程教用户如何找到和利用漏洞。
3. Damn Vulnerable Web Application (DVWA)
DVWA 是一个非常不安全的 web 应用程序,提供了一个安全的环境来学习和测试各种 web 漏洞,包括 XSS。
- 官网:DVWA
- 特点:包含低、中、高、和极高四个安全级别,帮助用户理解和防御不同复杂程度的攻击。
4. bWAPP (Buggy Web Application)
bWAPP 是一个具有多种漏洞的 web 应用程序,用于安全教育。它覆盖了 SQL 注入、XSS、CSRF 等多种漏洞。
- 官网:bWAPP
- 特点:支持多种平台,提供了全面的漏洞练习环境。
5. Hack This Site
Hack This Site 是一个免费的在线平台,提供了多种挑战,包括 web 应用安全挑战,帮助用户学习和测试他们的黑客技能。
- 官网:Hack This Site
- 特点:提供不同难度级别的挑战和社区支持。
实际使用示例
以下是如何使用其中一个平台进行 XSS 攻击练习的简要步骤:
在 DVWA 上模拟 XSS 攻击
- 下载并安装 DVWA:可以通过 GitHub 下载 DVWA 并在本地或虚拟机上设置。
- 设置安全级别:登录 DVWA 后,设置 XSS 挑战的安全级别为“低”。
- 查找 XSS 漏洞页面:导航到 XSS(Reflected)页面。
- 输入恶意脚本:在输入框中输入简单的 XSS payload,例如
<script>alert('XSS');</script>
。 - 执行攻击:提交表单,观察页面是否弹出警告框,确认 XSS 攻击是否成功。
重要提示
- 合法性:务必在获得明确许可的环境中进行测试,切勿在未授权的真实网站上进行任何攻击。
- 安全性:这些平台和工具应仅用于教育目的,不得用于恶意用途。
通过这些安全教育平台,你可以安全地模拟和学习 XSS 攻击的原理和防御方法。