《白帽子讲Web安全 》 随手记(三)

第九章 认证与会话管理
        最常用的认证方式就是用户名和密码。
            1.Who am I?
                认证和授权是两码事,认证目的是认出用户,授权是决定用户能干什么。
                认证实际就是验证凭证的过程。 如何授权取决于认证出来的结果。
            2.密码的那些事
                密码必须以不可逆的加密算法,或是单向散列函数算法加密后存于数据库。
                同时避免拖库后彩虹表查询,应增加salt字符串,目的是增加密码复杂度。
            3.多因素认证
                提高了认证的门槛
            4.Session与认证
                认证后需要替换一个对用户透明的凭证。这个凭证就是SessionID,
                Session含义是会话,SessionID用于会话保持,一旦生命周期内被盗取,等同于账户失窃。若ID存于Cookie,
                这种盗取又叫Cookie劫持,常见的劫持手段有,XSS攻击,网络Sniff,本地木马窃取。
            5.Session Fixation攻击
                如果登录前后,SessionID没发生变化,则存在Session Fixation攻击。
                正确做法是,登录后重新生成SessionID.
            6.Session 保存攻击
                通过修改Cookie过期时间,让其永久存活。防御方法可以每隔一段时间强制注销Session或只允许拥有一个Session
            7.单点登录(SSO)
                英文全称(Single Sign On),通过风险集中化,只需要保护好一个登录点,即可处处使用认证后的身份。
                缺点是登录点被破解后,损失很大, 减低风险的方法是在一些敏刚操作时要求用户再次输入密码。
                目前SSO仅是登录的辅助手段。   

    第十章 访问控制
        权限控制问题可以归结为访问控制的问题。
        访问控制与业务需求息息相关,并非一个单纯的安全问题。
        设计安全方案时需要满足业务需求,同时牢记最小特权的黄金法则。
            1.What Can I Do?
                认证与授权不同,授权是建立在认证做好的基础上。
                抽象的说,某个主体对某个客体需要实施某种操作,而系统对这种操作的限制就是权限控制。
                例如,主体是 浏览器的一个get请求, 客体是 服务器上一个文件, 这个限制是 防火墙ACL策略。
                ACL中文名是 访问控制表,里面的内容是 主体、客体、操作这三者之间的对应关系。
                一般来说,基于URL的访问控制是最常见的。缺点是 任意用户只要构造出正确的URL即可访问页面。
                通过把页面藏起来不是解决问题的方法,我们进一步还要“基于页面的访问控制”。
            2.垂直权限管理
                RBAC中文名是 基于角色的访问控制,验证权限时只需验证用户所属的角色。
                常用的开发框架 Spring Security,提供两种权限管理方式,基于URL,基于method的访问控制。
                很多时候我们得自己写权限管理,我们可以RABC作为依据。
            3.水平权限管理
                可以考虑引入 组 ,一个用户对应一个组,只有组内成员可以访问组内资源。
            4.OAuth简介
                OAuth和 OpenID 都致力于让互联网变得更加开放。OpenID解决的是认证问题,OAuth则更注重授权。
            

    第十一章 加密算法与随机数
        加密算法的专业性很强,本章我们的重点不是学习它们如何实现的。
        相反我们重点是学习,如何正确使用它们,通常有哪些雷区。
            1.概述
                加密算法分为两大类:分组加密和流加密.
                分组加密算法基于分组进行操作,每个分组长度可能不同。
                流加密算法 基于 字节进行操作,每次处理一个字节。秘钥独立于消息,通过异或实现加密解密。
                分组加密有 DES、Blowfish、IDEA、AES。
                流加密有 RC4、ORYX、SEAL。

                针对加密算法的攻击分4种
                唯密文攻击:攻击者手上只有密文,它们是使用同一加密算法和秘钥加密的。如果算法不存在缺陷,只能穷举各密文的意义。
                已知明文攻击:攻击者除了得到密文外,还知道这些密文对应的明文。
                选择明文攻击:攻击者有访问加密机的权利,可构造任意明文对应的密文,但现代加密算法通常会混淆各位内容,故通常用不上。
                选择密文攻击:攻击者有访问加密机的权利,可构造任意密文对应的明文,这种攻击最难防范。
                
            2.Stream Clipher Attack
                本节讲解流加密算法,流加密是基于异或操作进行的,每次都只操作一个字节。但性能非常好,很受开发者欢迎。
                Re_used Key Attack:使用流密码的常见错误是 使用同一个秘钥进行多次加解密。
                Bit-flipping Attack:通过改变密文影响明文的阅读。解决方法是增加带有KEY的MAC(消息验证码)
                    通过哈希算法来实现的MAC,称为HMAC,HMAC性能较好,被广泛使用。                
                
            3.WEP 破解
                最著名的针对流密码的攻击可能就是WEP秘钥的破解。
                WEP采用RC4算法,上一节所讲的两种攻击方法,可用于WEP加密算法。
                
            4.ECB 模式的缺陷
                ECB模式 中文名 是 电码簿模式,最大的问题是分组独立性,未完全混淆分组间的关系,
                当需要加密的明文多于一个分组的长度时,应该避免使用ECB模式。
                对于ECB模式,替换某个分组密文,解密后该对应分组的明文也会被替换,其他分组不受影响。
                
            5.Padding Oracle Attack
                CBC模式被破解的案例
                
            6.密钥管理
                密码学基本原则:安全性应依赖于密钥的复杂度而不是算法的保密性
                在安全领域,选择一个足够安全的算法不难,难的是密钥管理。
                直接攻击加密算法的案例不多,密钥泄露的事件很多。
                密钥管理中最常见的错误是,把密钥、salt等“key” 硬编码在代码中。
                
                硬编码不符合规范,如果代码被广泛传播,或者被反编译,会导致密钥泄露。
                其他开发人员可以看到代码获得密钥,如果人员流动性大,会泄露密钥。

                正确做法是,把密钥保存在配置文件或者数据库中,每次环境变更或正式发布时使用新的密钥和密码。
                虽然当黑客入侵后,密钥管理系统也会不安全,但密钥系统主要目的是防止密钥从非正常途径泄露。
                
            7.伪随机数问题
                在重要系统中一定要使用足够强壮的随机数生成算法
                伪随机数是通过数学算法生成的随机数,真随机数是通过物理方法生成的随机数比如电压波动。
                不要将时间作为随机数使用,可以将时间作为生成随机数的种子,注意随机数种子一旦确定后,随机数序列也固定了。
                如果对随机数种子不够放心,可以通过随机数使用MD5算法后再连接一个随机字符串再次MD5.
                
            8.小结
                重点是秘钥管理,以及生成强壮的随机数。
                加密算法的选择和使用上注意
                1.不要使用ECB模式
                2.不要使用流密码
                3.使用HMAC-SHA 代替 MD5
                4.不要用同一KEY 做不同的事情
                5. salt 与 IV(起始偏移) 需要随机生成
                6. 不要自己实现加密算法,使用安全专家实现好的库。
                7. 不要依赖系统的保密性。
                选择困难时:
                1.使用CBC模式的AES256用于加密
                2.使用HMAC-SHA512 用于散列完整性检查
                3.使用带salt的SHA-256 或 SHA-512 用于 Hashing

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值