文章目录
1.安全是什么——安全模型
OSI安全模型包括安全攻击,安全机制和安全服务。公司安全出了问题,你也许会意识到业务出现了漏洞,但其实,
数据安全保护机制
也同样产生了问题。
2.安全原则——CIA三要素
机密性confidentiality,完整性integrity,可用性available
作为评价标准,最基础最重要的原则。
-
机密性,
不可见
,在明确的授权规则下,
确保数据只被授权主体访问
。如微信朋友圈3天可见。如何实现:运用安全模型和访问控制机制将数据和访问主体打标签或分类,并根据访问控制规则自动授权。如何防范:签名校验,防范弱秘钥,权限滥用 -
完整性,
不可改
,在明确的授权规则下,
确保数据只被授权主体进行授权地修改
。如个人档案只能追加不可更改。如何实现:授权也是运用访问控制机制,用加密签名对数据完整性验证,对于修改用日志记录并监督审计。如何防范:对操作做完整记录并保护日志等审计信息 -
可用性,
可读
,
确保数据能够被授权的主体访问到
。Dos,拒绝服务攻击会使可用性受到损坏。
3.安全保障——黄金法则IAAAA
识别Identification,
认证Authentication,授权Authorization,审计Audit
,问责Accounting。全方位的概括了你是谁?你能做什么?你做了什么?
事前防御属于认证,事中防御属于授权,事后防御属于审计
。
识别认证,帐密登录或生物认证与证书;密码,手机验证,指纹验证结合了
你知道什么,你拥有什么,你是什么
的三因素认证。可信的身份认证是建立安全保障体系的第一步。
授权,访问控制或基于内容或者会话的检测。对你能做什么做多少作限制。最原始的授权机制很慢,我们会定义
自动化的授权机制提高效率
。
审计问责,
保证日志的完整性和日志的不可否认性
。审计对于发现安全问题,回溯产生的攻击,完善安全保护体系来说,十分重要。问责,受到攻击时提供证据。不只是简单的翻日志,机器学习异常检测算法也运用其中。
我们必须注意到,安全没有银弹,很多时候一个小场景没做到位,造成的后果等于什么都没做。
4.密码学-对称加密算法
一句话就是,你懂加解密吗?(笑)密码学是”黄金法则“的
基础技术支撑
。
经典对称加密算法,DES,IDEA,AES,国密SM1和SM4。
DES,最早的算法,密钥长度为56位速度快,现在24小时可以破解。DES包含一个关键模块S盒,其设计一直没有公开,很多人相信,美国政府可能掌握S盒的后门去随意破解任何密文。
IDEA,128位密钥速度中,国际数据加密算法,
被广泛的研究的原因在于没有专利的限制
。现在由于速度的原因被弃用,有了更快更好的AES了。
AES,128位密钥速度快,是目前上
国际最认可的算法
。
SM1和SM4都是国密算法。
受到国家的支持和认可
。
一般来说选取AES128进行加解密运算,就能获得足够高的安全性和性能。另外,在选取加密算法的时候,存在不同的分组计算模式。需要知道的是,选取CBC和CTR这两种推荐的模式就可以满足大部分需求了。
在通信加密中,如HTTPS,通信双方会协商出一个加密算法和密钥,以防止信息被窃取。发送方的信息通过密钥加密,送到收信方的手中。在类似数据库加密这种存储加密技术中,通信双方也是将存储空间中的数据进行加密,这样即使硬盘被物理窃取,也不会导致信息丢失。在公司内部,为了避免用户的 Cookie 和隐私信息发生泄漏,也需要对它们进行加密存储。
5.密码学-非对称加密算法
非对称加密算法,加密和解密使用不同的密钥。公钥常常是公开透明的,
非对称加密主要解决了密钥分发的难题
。非对称加密在SSH,Git上传领域起到作用,可以将自己的公钥上传到服务端,客户端保存私钥。也出现在多对一认证的场景中(如多人登录服务器)。
除了加密,非对称加密还提供签名的功能。私钥加密,如果接收者可以用公钥解密,就证实了对方拥有私钥的身份,因为发送者发送的密文只有用私钥产生,是独一无二不可否认的。因此私钥加密就是签名。
经典的非对称加密算法包括RSA算法,ECC算法,国密SM2。
RSA的数学难题是:两个大质数p,q相乘的n很容易计算,但是根据n去做质因数分解,则需要很大的计算量。优点是加解密性能较快,缺点是如果要加密到很高的强度,需要很长的密钥,密钥生成慢。
ECC是基于椭圆曲线的数学难题设计的。学术界认为椭圆曲线的难度高于大质数难题。因此ECC是国际上加密强度最高的非对称加密算法。
国密SM2也是基于椭圆曲线问题设计的,加密强度和标准和ECC相当,属于国标。
当使用对称加密算法的时候,你不仅要跟每一个通信方协定一个密钥,还要担心协商过程中密钥泄露的可能性。比如,我当面告诉了你一个密码,怎么保证不被偷听呢?而在非对称加密算法中,公钥是公开信息,不需要保密,我们可以简单地将一个公钥分发给全部的通信方。因此,现在大部分的认证和签名场景,其实使用的都是非对称加密算法。比如,在 SSH 登录、Git 上传等场景中,我们都可以将自己的公钥上传到服务端,然后由客户端保存私钥。一般来说选取ECC算法作为非对称加密算法。
6.密码学-散列算法
计算唯一的不可逆的定长id。Git的提交记录,文件的完整性校验,接口签名鉴权。数据库存储密码的散列值。要求算法具有不可逆性,鲁棒性(同样消息生成同样摘要),唯一性。
经典散列算法,MD5,SHA,SM3。
MD5,消息摘要算法,可以生成128位的消息摘要。广泛被用于文件下载的唯一性,但目前王小云教授破解了其唯一性,如果不是长度受限(小于32个字符),不推荐使用MD5.
SHA,安全散列算法。和MD5相同,虽然SHA的唯一性也被破解了,但问题不大。目前,SHA-256普遍被认为是相对安全的散列算法,是推荐的。
SM3,国密散列算法。
在使用散列算法时,一定要注意加盐。盐是随机的可以公开的一串字符,一般与用户名等唯一标识放一块,用户密码盐进行拼接后,再进行散列计算,这样即使有两个用户密码相同,也会拥有不同的散列值。盐值越长,彩虹表暴力破解散列值的效率越低。
7.密码学-总结
对称加密具备较高的安全性和性能,要优先考虑。在一对多的场景,存在密钥分发难题,使用非对称加密。不需要可逆计算,如存储密码,使用散列算法。
在具体算法的选取上,
高效安全的对称加密算法
选取AES-CTR,
解决密钥分发难题算法的非对称加密
使用ECC,
提供单向加密的散列算法
用SHA256加盐。这些算法满足绝大部分安全场景,并可以在未来一段时间都保持较高的安全强度。
另外也有一些特殊场景,对称密钥也可以用在非可信的环境中安全传输,比如在https使用DH密钥交换算法实现,一边出一半的密钥,然后拼成一个完整的密钥。协商之前是非对称的,密钥协商之后是对称的。
8.安全落地细节——身份认证
身份认证可以分为:对外认证和对内认证。对外认证是
应用的登录注册模块
,是单一场景的认证,我们可以实现多种认证:你知道什么,你拥有什么,你是什么。对内认证是指,应用内部需要登录认证的功能,如服务器,数据库,git,内部管理后台的登录,是
多场景下的认证
。
认证的威胁:无认证,弱密码,认证信息泄露,身份管理杂乱。解决无认证,需要培养员工安全意识。解决弱密码,尤其是用户弱密码,需要升级密码验证手段和密码强度。认证信息泄露,可以通过加密信道(HTTPS)防止窃听,也可以通过给认证的凭证设置过期时间,降低风险。而身份管理,业界的方案是单点登录SSO(Single Sign On)解决。
典型的单点登陆方式:CAS流程,JWT,OAuth,OpenID。核心思想,用统一的认证中心管理账号,并管理员工内部权限。用户登录会重定向到认证中心,在认证中心处认证(如QQ/微信),认证中心发放认证凭据,返回给应用,通常只能允许应用在一段时间内提供认证服务,时长是安全可控的。区别于传统的登录方式,将账号密码提供给应用,应用中账号密码泄露的风险要远比成熟的单点登录体系来的授时机制来的高。因此推荐接入这些成熟的单点登录体系。
在单点登录方式选取方面,如果只是将用户信息统一管理,那么将用户登录状态保存在客户端的JWT最为简单;如果认证中心只是用来维护账号密码,由业务区维护用户绑定的手机等其他信息,那么OAuth更合适。
9.授权/访问控制机制
访问控制机制可以抽象成模型:
一个主体请求一个客体,这个请求的授权通过访问控制机制
。主体一般是用户,客体是数据/资源,请求一般是读,写,执行。常见的访问控制机制分为4类:
DAC
(discretionary access control),
Role-BAC
(Role-based),
Rule-BAC
(Rule-based),
MAC
(Mandatory)。下面我们逐步阐释。
DAC,自主访问控制机制。含义是,
一切面向用户,用户自己控制资源的访问控制权限,自行维护访问控制规则
。优点是,将安全交给用户,免去管理者的负担,更加灵活。常用场景是,各种C端应用,比如Linux系统采用的就是DAC,用户可以自行控制文件被谁访问。
Role-BAC,基于角色的访问控制机制。含义是,
一切面向管理员,将主体分为好多个角色,每个角色赋予一定的规则,再将特定的主体划分到角色中
。优点是,可以有效防止权限泛滥,实现最小特权原则。常用场景是,管理员给开发,产品,运维划分不同的机器操作权限。
Rule-BAC,基于规则的访问控制机制。**含义是,一切面向请求的属性,针对请求本身制定访问控制策略。**优点是,综合考虑了主体客体请求,适合更复杂的环境。常用场景是,
无法对主体客体清晰划分角色的场景
,防火墙查明请求的源IP,目的IP,端口,协议等,根据设定的规则,判定是否允许主体访问。没有命中任何规则的,我们需要根据系统的安全性,人工添加默认通过,默认拒绝。
MAC,强制访问控制机制。含义是,一切面向请求的标签。优点,MAC 是安全性最高的访问控制策略。但它对实施的要求也很高,需要对系统中的所有数据都进行标记。常用的使用环境是,
能够对全部数据打上标签
,政府系统,
每一份数据和每一个人都要有明确的机密等级
。
在实际的工作中,我们常常需要将它们进行组合使用。比如,在 Linux 中,我们除了对文件进行 DAC 访问控制,也利用了 role-BAC 定义了用户组(group)的概念。这样,管理员就可以将用户分配到不同的组中,DAC 也会按照分组去定义相应的权限了。所以,使用访问控制机制的时候,我们要学会灵活应用。
10.识别威胁
我们描述了如何去衡量安全以及如何去做安全。但是,在安全方案实际落地的过程中,我们首先要考虑的是:
目前存在哪些安全威胁
。威胁评估主要有三个步骤:
识别数据、识别攻击、识别漏洞。
识别数据的最终目的是,当发生攻击,
某一份数据的 CIA 受到影响时,会对公司造成多大的损失
。这也是我们衡量安全投入高低的一个主要指标。
一般情况下,在识别完数据之后,我们就能推测出黑客会采取哪些方式进行攻击,这也就到了第二个步骤:识别攻击。识别攻击的核心就是,
明确什么样的数据有价值被攻击
。比如,对于公开的数据,没有被窃取的意义,所以黑客只会通过爬虫来抓站,而不会花费更大的成本去盗号。
在识别了数据和攻击之后,我们就需要根据应用去识别可能的漏洞了。这也就是第三个步骤:识别漏洞。比如,对于 Web 应用,它可能出现诸如 XSS、SQL 注入等 Web 漏洞。关于这一点,业内将常见的攻击和漏洞进行了总结。
通过对数据、攻击、漏洞的识别,你就能够知道,公司当前面临了哪些潜在的威胁,从而可以去思考解决方案,并推动它的落地。
(完,不过该系列未完待续…)