31.计算机安全
基本定义
计算机安全,看成是保护系统和数据的保密性secrecy,完整性integrity 和可用性availability
保密性
保密性”是只有有权限的人,才能读取计算机系统和数据
例子:黑客泄露别人的信用卡信息,就是攻击保密性
完整性
有权限的人才能使用和修改系统和数据
例子:黑客知道你的邮箱密码,假冒你发邮件就是攻击”完整性”
可用性
有权限的人应该随时可以访问系统和数据
例子:拒绝服务攻击(DDOS) 就是黑客发大量的假请求到服务器,让网站很慢或者挂掉
威胁模型分析
了实现这三个目标,安全专家会从抽象层面想象”敌人”可能是谁
模型会对攻击者有个大致描述:能力如何,目标可能是什么,可能用什么手段(攻击矢量 attack vector)
“威胁模型分析”让你能为特定情境做准备,不被可能的攻击手段数量所淹没因为手段实在有太多种了
安全问题分类
你是谁authentication
身份认证有三种
对于重要账户,安全专家建议用两种或两种以上的认证方式
你知道什么
你有什么
你是什么
把特征展示给计算机进行验证,不确定性,无法重设
生物识别验证器:指纹识别器和虹膜扫描仪
你能访问什么Access Control
一旦系统知道你是谁,它需要知道你能访问什么,<br />这可以通过"**权限**"或"**访问控制列表**"(ACL)来实现,其中描述了用户对每个文件,文件夹和程序的访问权限
- “读”权限允许用户查看文件内容,
- “写”权限允许用户修改内容,
- “执行”权限允许用户运行文件,比如程序
有些组织需要不同层级的权限,”访问控制列表”的正确配置非常重要,以确保保密性,完整性和可用性
美国国防部”多层安全政策”Bell LaPadula model
假设我们有三个访问级别:公开,机密,顶级机密
规则:
- 用户不能”读上”, 不能读等级更高的信息
- 用户不能”写下”
确保了”顶级机密” 不会意外泄露到”机密”文件或”公共”文件里
还有许多其他的访问控制模型 - 比如”中国墙”模型和”比伯”模型
中国墙模型和比伯模型
RBAC模型
总结
“身份验证”和”访问控制”帮助计算机知道”你是谁”,以及”你可以访问什么”
还有一个条件!做这些事情的软硬件必须是可信的!!
如果攻击者给计算机装了恶意软件,控制了计算机的操作系统,无法保证程序或计算机系统的安全
系统级安全的圣杯之一是”安全内核”或”可信计算基础”:一组尽可能少的操作系统软件
独立安全检查和质量验证
让一群安全行业内的软件开发者来审计代码
应该计划当程序被攻破后,如何限制损害,控制损害的最大程度
隔离 Isolation
操作系统会把程序放到沙盒里,方法是给每个程序独有的内存块,其他程序不能动
一台计算机可以运行多个虚拟机,虚拟机模拟计算机,每个虚拟机都在自己的沙箱里
如果一个程序出错,最糟糕的情况是它自己崩溃,或者搞坏它处于的虚拟机,计算机上其他虚拟机是隔离的,不受影响
沙盒 Sandbox
To achieve isolation, we can “sandbox” applications.
要实现隔离,我们可以”沙盒”程序
32.黑客和攻击
黑客入侵最常见的方式:不是通过技术,而是欺骗别人,不是通过技术,而是欺骗别人
- 最常见的攻击是网络钓鱼:银行发邮件叫你点邮件里的
- 链接,登陆账号
- 假托(Pretexting),攻击者给某个公司打电话,修改电脑配置,让他们泄露机密信息,比如密码或网络配置
- 邮件里带”木马”也是常见手段
- 暴力尝试密码
- 攻破方法叫 “NAND镜像”
- 往内存上接几根线,复制内存,暴力尝试密码
- 攻击系统漏洞
- 缓冲区溢出,具备修改内存的能力,解决办法:边界检查
- 代码注入-sql注入 解决思路:检查参数特殊字符之类
- 保持系统更新(不保持)
- DDoS拒绝服务攻击,阻塞服务器
33.加密
定义
多层防御
世上不存在100%安全的系统,总会有漏洞存在,而且安全专家知道这一点,所以系统架构师会部署”多层防御”加密解密
为了加密信息,要用加密算法(Cipher) 把明文转为密文,除非你知道如何解密,不然密文看起来只是一堆乱码
把明文转成密文叫”加密”(encryption)
把密文恢复回明文叫”解密”(decryption)加密算法(共同保存密钥)
替换加密 Substitution cipher
凯撒加密 Caesar cipher
信件中的字母 向前移动三个位置
为了解密,接收者要知道:1. 用了什么算法 2. 要偏移的字母位数
缺点:E在英语中是最常见的字母,如果把E加密成X,那么密文中 X 的出现频率会很高
熟练的密码破译师可以从统计数据中发现规律,进而破译密码移位加密 Permutation cipher
列移位加密
Columnar transposition cipher
我们把明文填入网格,网格大小我们这里选择 5x5,为了加密信息,我们换个顺序来读,比如从左边开始,从下往上,一次一列。加密后字母的排列不同了,解密的关键是,知道读取方向和网格大小是5x5
德国 Enigma 加密机
到了1900年代,人们用密码学做了加密机器
多次字母替换映射,电路是双向(加密和解密的步骤是一样)的
升级功能:每输入一个字母,转子会转一格,有点像汽车里程表,nazi每天要同步加密方和解密方的配置表
DES
早期加密算法中,应用最广泛的是 IBM 和 NSA 于1977年开发的”数据加密标准”,DES最初用的是56 bit长度的二进制密钥,意味着有2的56次方,或大约72千万亿个不同密钥
04:54 1977年”数据加密标准” - Data Encryption Standard (DES)
AES
Advanced Encryption Standard
由于计算机计算能力增强,原先的DES很容易被破解
因此 2001 年出了:高级加密标准(AES),AES 用更长的密钥 - 128位/192位/256位 - 让暴力破解更加困难
AES将数据切成一块一块,每块16个字节,然后用密钥进行一系列替换加密和移位加密,再加上一些其他操作,进一步加密信息,每一块数据,会重复这个过程10次或以上
为什么只重复10次?不是20次?为什么用128位密钥,而不是10000位?
这其实是基于性能的权衡,AES 在性能和安全性间取得平衡
- 如今AES被广泛使用,比如iPhone上加密文件
- 用 WPA2 协议在 WiFi 中访问 HTTPS 网站
小结
上面的算法共同点:加密技术依赖于发送者和接收者都知道密钥
下面讨论一下 密钥交换加密算法(交换密钥)
密钥交换是一种不发送密钥 Key exchange,但依然让两台计算机在密钥上达成共识的算法
我们可以用”单向函数“来做
单项函数是一种数学操作,很容易算出结果,但想从结果逆向推算出输入非常困难
举两个简单的例子颜色混合
首先,有一个公开的颜色,所有人都可以看到
为了交换密钥,我把我的 秘密颜色A 和 公开颜色P 混在一起,然后发给约翰
约翰也这样做,把他的秘密颜色B和公开颜色P混在一起,然后发我
我收到约翰的颜色之后,把我的秘密颜色加进去->最终APB
约翰一样的操作->最终BPA
结果:我们有了一样的颜色,说明是安全的迪菲-赫尔曼密钥交换
Diffie-Hellman Key Exchange
单向函数是模幂运算
模幂运算
先做幂运算,拿一个数字A当底数,拿一个数字B当指数,然后除以第三个数字C,最后拿到我们想要的余数D
举例:
双方基于共同的A比如10086,共同的余数886进行加密
甲选取密钥x,计算出B的X次方模M t1
乙选取密钥y,计算出B的Y次方模M t2
甲将t2用x进行横幂运算=B的XY次方 模M
乙将t1用y进行横幂运算=B的XY次方 模M
相等就说明,双方是安全的
用密钥的话,结果就是好算的,根据中间参数t1,t2去反推x,y是很难的!加密算法(非对称加密)
凯撒加密,英格玛,AES 都是”对称加密”
双方用一样的密钥加密和解密消息,这叫”对称加密”, 因为密钥一样
还有”非对称加密”,有两个不同的密钥,一个是公开的,另一个是私有的
人们用公钥加密消息,只有有私钥的人能解密
反过来也是可以的:私钥加密后 用公钥解密
这种做法用于签名,服务器可以用私钥加密,任何人都可以用服务器的公钥解密
就像一个不可伪造的签名,因为只有私钥的持有人能加密,这能证明数据来自正确的服务器或个人,而不是某个假冒者
使用案例:当你访问一个安全的网站,比如银行官网,绿色锁图标代表 用了公钥密码学
非对称加密算法 RSA