安全基础知识

安全的本质CIA

  • 机密性(Confidentiality)、完整性(Integrity)、可用性(Availability),我们可以简称为 CIA 三元组,是安全的基本原则。

  • 机密性用一句话来说就是,确保数据只被授权的主体访问,不被任何未授权的主体访问。 简单用一个词总结就是“不可见”。

  • 完整性就是确保数据只被授权的主体进行授权的修改,简单来说,就是“不可改”。

  • 可用性就是确保数据能够被授权的主体访问到 ,简单来说,就是“可读”。

  • 通常来说,在互联网企业发展初期,可用性的优先级较高。如果涉及金钱相关的业务,则完整性的优先级更高;而涉及个人隐私相关的业务,则保密性的优先级更高。对于大部分企业而言,可用性在初期受到的挑战更多,则越发展越稳定,后期在可用性上的投入会逐渐降低。而完整性和机密性,会随着业务的发展,重要性越来越高,在企业的安全投入中,占比会越来越大。

安全原则IAAAA

  • 黄金法则主要包含三部分:认证(Authentication)、授权(Authorization)、审计(Audit)。

  • 黄金法则加上问责(Accounting)这一部分,组成“4A 法则”;还有的会加上身份识别(Identification),组成“IAAAA 法则”。不管被划分为几个部分,这些法则的中心内容都是相似的,都是围绕着识别、认证、授权、审计、问责这五个部分展开的。因此,黄金法则其实就是 IAAAA 法则更高一层的概括,它将识别和认证、审计和问责归纳到了一起,更加强调了这两两之间的协同性质。

  • 认证形式可以大致分为三种。按照认证强度由弱到强排序,分别是:你知道什么(密码、密保问题等);你拥有什么(门禁卡、安全令牌等);你是什么(生物特征,指纹、人脸、虹膜等)。

  • 常见的,在登录过程中,很多应用会在输入完账号密码后,让你进行手机验证,这其实就是结合了“你知道什么”和“你拥有什么”的双因素认证。

  • 可信的身份认证是建立安全保障体系的第一步。

  • 认证不仅是帐密登录,也可以是生物特征识别或者证书等形式;授权不只是基于简单规则的访问控制,基于内容或者会话的检测等也是授权的一部分;审计也不只是简单的翻日志,很多机器学习、异常检测的算法,也都能运用到审计中来。针对不同的数据,不同的访问形式,我们能够采用的认证、授权、审计技术都不尽相同。

  • ***大部分情况下,事前防御属于认证,事中防御属于授权,事后防御属于审计。企业安全建设管理***。

  • 安全问题需要自上而下的方式去进行管理和推动。

  • 战略计划是一个较长期的安全目标,它和企业的长期发展目标相结合,保证安全的发展能够符合企业的长期发展方向。

  • 战术计划会基于长期的安全目标,拆解出详细的任务计划,比如:项目列表、安全预算、人员扩张等。

  • 操作计划则是对战术计划的具体实现,包括人员的分配、资源的投入、进度的安排等。

  • IAAAA是用来保证CIA的。

  • 双因子认证,就是通过两种不同的方式来共同认证。比如之前网银交易的时候,既需要支付密码,也要u盾的一次性口令。

密码学基础

  • 密码学是“黄金法则”的基础技术支撑。失去了密码学的保护,任何认证、授权、审计机制都是“可笑”的鸡肋。

  • DEA(国际数据加密算法,International Data Encryption Algorithm)。IDEA 由瑞士研究人员设计,密钥长度为 128 位。对比于其他的密码学算法,IDEA 的优势在于没有专利的限制。相比于 DES 和 AES 的使用受到美国政府的控制,IDEA 的设计人员并没有对其设置太多的限制,这让 IDEA 在全世界范围内得到了广泛地使用和研究。

  • AES 是国际上最认可的密码学算法。在算力没有突破性进展的前提下,AES 在可预期的未来都是安全的。

  • 密算法 SM1 和 SM4 都属于对称加密的范畴。SM1 算法不公开,属于国家机密,只能通过相关安全产品进行使用。而 SM4 属于国家标准,算法公开,可自行实现使用。国密算法的优点显而易见:受到国家的支持和认可。

  • 选取 CBC 和 CTR 这两种推荐使用的模式就可以满足大部分需求了,它们在性能和安全性上都有较好的保证。

在这里插入图片描述

  • RSA 的数学难题是:两个大质数 p、q 相乘的结果 n 很容易计算,但是根据 n 去做质因数分解得到 p、q,则需要很大的计算量。RSA 是比较经典的非对称加密算法,它的主要优势就是性能比较快,但想获得较高的加密强度,需要使用很长的密钥。

  • ECC 是基于椭圆曲线的一个数学难题设计的。目前学术界普遍认为,椭圆曲线的难度高于大质数难题,160 位密钥的 ECC 加密强度,相当于 1088 位密钥的 RSA。因此,ECC 是目前国际上加密强度最高的非对称加密算法。

  • 国密算法 SM2 也是基于椭圆曲线问题设计的,属于国家标准,算法公开,加密强度和国际标准的 ECC 相当。而国密的优势在于国家的支持和认可。

在这里插入图片描述

  • 在 SSH 登录、Git 上传等场景中,我们都可以将自己的公钥上传到服务端,然后由客户端保存私钥。

  • SHA 是美国开发的政府标准散列算法,分为 SHA-1 和 SHA-2 两个版本,SHA-2 细分的版本我们就不介绍了。和 MD5 相同,虽然 SHA 的唯一性也被破解了,但是这也不会构成大的安全问题。目前,SHA-256 普遍被认为是相对安全的散列算法,也是我最推荐你使用的散列算法。

  • 国密算法 SM3 是一种散列算法。其属于国家标准,算法公开,加密强度和国际标准的 SHA-256 相当。和国密 SM2 一样,它的优势也在于国家的支持和认可。

  • 在使用散列算法的时候,有一点需要注意一下,一定要注意加“盐”。所谓“盐”,就是一串随机的字符,是可以公开的。将用户的密码“盐”进行拼接后,再进行散列计算,这样,即使两个用户设置了相同的密码,也会拥有不同的散列值。同时,黑客往往会提前计算一个彩虹表来提升暴力破解散列值的效率,而我们能够通过加“盐”进行对抗。“盐”值越长,安全性就越高。

在这里插入图片描述

  • 对称加密具备较高的安全性和性能,要优先考虑。在一对多的场景中(如多人登录服务器),存在密钥分发难题的时候,我们要使用非对称加密;不需要可逆计算的时候(如存储密码),我们就使用散列算法。

  • 在具体算法的选取上,只需要记住:对称加密用 AES-CTR、非对称加密用 ECC、散列算法用 SHA256 加盐。这些算法就能够满足大部分的使用场景了,并且在未来很长一段时间内,都可以保持一个较高的安全强度。

  • 公私钥的易混点
    加密:公钥加密私钥解密
    签名:私钥加密公钥解密

    国密算法记忆:
    SM1:对称加密 算法不公开
    SM4: 对称加密 算法公开
    SM2:非对称加密
    SM4: 散列算法不可逆

    常用算法:
    AES128+CTR
    ECC
    SHA256+salt

  • 盐值一般和用户名等唯一标识放一块,进行关联,是一个固定不变的。盐值不用考虑保密性,只要完全随机且唯一对应即可。

  • 在https中使用了DH密钥交换算法实现的。

  • 通过私钥加密公钥解密,只能用来做签名,证明发送者拥有私钥。

  • 对称效率高,非对称加密效率太低,所以一般都是非对称加密传递对承加密密钥,用对称加密传输数据,然后有效期后更换对称加密的秘钥。

  • 盗版系统主要两种方式:一种是序列码存在一定的规则,软件在本地只是验证序列码是否符合这个规则。常见的带序列码生成器的,应该都是这种模式。另一种破解就是直接篡改软件的验证流程,跳过验证这个步骤,破解补丁就是用来干这个事情的。

  • 彩虹表攻击是更高效的字典攻击。

身份认证

认证,也就是身份识别与认证(通常来说,识别和认证是一体的,因此后面我会用身份认证来指代识别和认证)。

  • 身份认证不仅仅是一个输入账号密码的登录页面而已,应用的各个部分都需要涉及身份认证。

  • 身份认证可以分为两个部分:对外认证和对内认证。

    对外认证:其实就是应用的登录注册模块,它面向用户进行认证。对外认证的入口比较集中,一个应用通常只有一个登录入口。因此,我们可以在登录这个功能上,实现很多种认证的方式。

    对内认证:除了应用本身需要有登录注册的模块,应用的各种内部系统同样需要涉及登录认证的功能,比如:服务器的登录、数据库的登录、Git 的登录、各种内部管理后台的登录等等。

  • 对外认证是单一场景下的认证,对内认证是多场景下的认证。

在这里插入图片描述

  • 身份认证面临的威胁主要包括无认证、弱密码、认证信息泄露。

    没有认证环节是所有应用和公司存在的最普遍的问题。尤其是在对内认证的部分,我们经常会看到,很多公司的数据库、接口、管理后台在使用的时候,并不需要经过认证这个环节。

    弱密码也是一个普遍存在的问题。我常常觉得,安全最大的敌人是人类的惰性。设计一个好记的强密码并不是一件简单的事情,这也是弱密码屡禁不止的原因。

    认证信息泄露,就是指黑客通过各种手段,拿到了用户的密码信息和身份凭证这样的认证信息。常见的手段包括钓鱼、拖库等等。更可怕的是,很多攻击对于用户来说都是无感知的。

  • 除了密码的直接泄露以外,大部分的登录系统都无法应对重放攻击。重放攻击简单来说就是,黑客在窃取到身份凭证(如 Cookie、Session ID)之后,就可以在无密码的情况下完成认证了。

  • 常见解决身份认证问题的方式:

    对密码的强度进行限制(如强制使用字母、数字、特殊字符的组合密码,并达到一定长度),强制用户定期修改密码,对关键操作设置第二密码(如微信、支付宝的支付密码)等等。

    不断地利用新技术去升级验证手段,帮助用户降低被“攻击”的风险。比如,通过手机验证替代密码验证(因为丢失手机的几率比丢失密码的几率低);通过人脸、指纹等生物特征替代密码。

    通过加密信道(如 HTTPS)来防止窃听;也可以通过给下发的凭证设置一个有效期,来限制凭证在外暴露的时间,以此来减少重放攻击带来的影响。

  • 身份认证的最大的问题还是在于身份管理。随着公司业务的不断扩张,当账号体系变得越来越复杂时,如何对这些账号进行统一的管理,是解决身份认证问题的关键。而单点登录就是一个非常有效的解决方案。

  • 单点登录(Single Sign On,SSO):用户只需要进行一次认证,就可以访问所有的网页、应用和其他产品了。随着互联网产品形式的不断发展,单点登录的实现方式也经历了多次的升级革新。下面我为你介绍几种典型的单点登录方式,它们分别是:CAS 流程、JWT、OAuth 和 OpenID。

  • CAS(Central Authentication Service,集中式认证服务)流程。

    CAS 是一个开源的单点登录框架,它不属于某一种单点登录的实现方式,而是提供了一整套完整的落地方案。

在这里插入图片描述

①假如用户现在要访问某个应用App。

②应用需要进行认证,但应用本身不具备认证功能。因此,应用将用户重定向至认证中心的页面。比如,你在登录一个应用的时候,它显示你可以选择微信、QQ、微博账号进行登录,你点击微信登录,就跳转至微信的登录页面了。

③用户在认证中心页面进行认证操作。如果用户之前已经在其他应用进行过认证了,那么认证中心可以直接识别用户身份,免去用户再次认证的过程。

④认证完成后,认证中心将认证的凭据,有时会加上用户的一些信息,一起返回给客户端。也就是你在微信登录完成后,回到了应用 App。

⑤客户端将凭据和其他信息发送给应用,也就是说,应用 App 将微信的登录凭据发送给了应用后端。

⑥应用收到凭据后,可以通过签名的方式,验证凭据的有效性。或者,应用也可以直接和认证中心通信,验证凭据并获取用户信息。这也就是为什么应用App能够拿到你的微信头像了。

⑦用户完成认证。

  • JWT(JSON Web Token)是一种非常轻量级的单点登录流程。它会在客户端保存一个凭证信息,之后在你每一次登录的请求中都带上这个凭证,将其作为登录状态的依据。JWT 的好处在于,不需要应用服务端去额外维护 Cookie 或者 Session 了。但是,正是因为它将登录状态落到了客户端,所以我们无法进行注销等操作了。

  • OAuth(Open Authorization)的主要特点是授权,也是我们通常用 QQ、微信登录其他应用时所采用的协议。通过 OAuth,用户在完成了认证中心的登录之后,应用只能够验证用户确实在第三方登录了。但是,想要维持应用内的登录状态,应用还是得颁发自己的登录凭证。这也就是为什么 QQ 授权后,应用还需要绑定你的手机号码。这也就意味着,应用是基于 QQ 的信息创建了一个自身的账号。

  • OpenID(Open Identity Document)和 OAuth 的功能基本一致。但是,OpenID 不提供授权的功能。最常见的,当我们需要在应用中使用微信支付的时候,应用只需要收集支付相关的信息即可,并不需要获取用户的微信头像。

  • JWT 适用范围广,在单点登录的选取上面,如果想要将用户信息做统一管理,选择它最为简单;如果认证中心只是被用来维护账号密码,由业务去维护用户所绑定的其他手机等信息,那么,采用 OAuth 更合适。

  • kerberos也算是单点登录的一种,不过更多的应用于面向服务的认证。比如分布式集群中,如何认证每一个服务节点都是可信的,通常会使用keerberos。

  • https://haveibeenpwned.com/

访问控制

  • 授权”和“访问控制”其实是同一个概念,都是允许或者禁止某个用户做某件事情。现在行业内普遍用“访问控制”这个术语来讨论相关问题。因此,后续我们都会用“访问控制”来替代“授权”。如果你看到了这两种说法,知道它们是一个意思就可以了。

在这里插入图片描述

①主体:请求的发起者。主体可以是用户,也可以是进程、应用、设备等任何发起访问请求的来源。

②客体:请求的接收方,一般是某种资源。比如某个文件、数据库,也可以是进程、设备等接受指令的实体。

③请求:主体对客体进行的操作。常规的是读、写和执行,也可以进一步细分为删除、追加等粒度更细的操作。

  • 访问机制是否对请求进行授权,决定着这个操作能否顺利执行下去。常见的访问控制机制有 4 种:DAC、role-BAC、rule-BAC、MAC。

  • DAC(Discretionary Access Control,自主访问控制):DAC 就是让客体的所有者来定义访问控制规则。

    ①在 DAC 中,访问控制的规则维护完全下发到了所有者手上,管理员在理论上不需要对访问控制规则进行维护。因此,DAC 具备很高的灵活性,维护成本也很低。相对地,尽管 DAC 降低了管理员的工作难度,但是会增加整体访问控制监管的难度,以至于安全性完全取决于所有者的个人安全意识。

    ②DAC 的特性其实就是将安全交到了用户手中,因此,DAC 适合在面向用户的时候进行使用。当用户需要掌控自己的资源时,我们通常会采取 DAC,来完成访问控制。比方说,Linux 中采用的就是 DAC,用户可以控制自己的文件能够被谁访问

  • role-BAC(role Based Access Control,基于角色的访问控制):role-BAC 就是将主体划分为不同的角色,然后对每个角色的权限进行定义。管理员只需要定义好每一个角色所具备的功能权限,然后将用户划分到不同的角色中去,就完成了访问控制配置的过程。

    ①role-BAC 是防止权限泛滥,实现最小特权原则的经典解决方案。

    ②role-BAC 更适合在管理员集中管理的时候进行使用。在这种情况下,所有的权限都由管理员进行分配和变更,所以,使用 role-BAC 可以大大降低管理员的工作难度,提高他们的工作效率。同样的原理也适用于应用,应用可以对不同的角色限定不同的操作权限,比如:运维人员给开发、产品、运维划分不同的机器操作权限。

  • rule-BAC(rule Based Access Control,基于规则的访问控制):rule-BAC 就是制定某种规则,将主体、请求和客体的信息结合起来进行判定。

  • DAC 是所有者对客体制定的访问控制策略,role-BAC 是管理员对主体制定的访问控制策略,而 rule-BAC 可以说是针对请求本身制定的访问控制策略。

  • 防火墙通过将请求的源 IP 和端口、目标 IP 和端口、协议等特征获取到后,根据定义好的规则,来判定是否允许主体访问。比如,限制 22 端口,以拒绝 SSH 的访问。同样地,应用也往往会采取风控系统,对用户异常行为进行判定。

  • MAC(Mandatory Access Control,强制访问控制):MAC 是一种基于安全级别标签的访问控制策略。

    ①为了保证机密性,MAC 不允许低级别的主体读取高级别的客体、不允许高级别的主体写入低级别的客体;为了保证完整性,MAC 不允许高级别的主体读取低级别的客体,不允许低级别的主体写入高级别的客体。这么说有些难以理解,我们可以这样来记:机密性不能低读、高写;完整性不能高读、低写。

    ②BLP:向下读,向上写。

    ③MAC 是安全性最高的访问控制策略。

  • 威胁评估主要有三个步骤:识别数据、识别攻击、识别漏洞。

    ①安全保护的核心资产就是数据。

    ②识别攻击的核心就是,明确什么样的数据有价值被攻击。

  • DAC、role-BAC、rule-BAC 和 MAC。它们的特点分别是:自主访问控制、基于角色的访问控制、基于规则的访问控制和基于标签的访问控制。

  • DAC 适合面向用户;role-BAC 适合集中管理使用;rule-BAC 适合复杂场景;MAC 安全性最高,一般只出现在政府系统中。在实际的工作中,我们往往需要把它们进行组合使用。

  • SSO/WAF/UPS/LDAP/RADIUS/零信任/双因子认证/RBAC/IDEA/接口鉴权/彩虹表攻击/

该文档是我学习整理的安全基础知识,如有不对的地方,欢迎大家批评指正~(内容若有侵权,请联系我删除,谢谢)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值