计算机科学基础_10 - 计算机安全

计算机安全

  • Secrecy, Integrity, Availability 保密性,完整性,可用性。
  • Threat Model 威胁模型
  • 身份验证三种方式:
    What you know 你知道什么
    What you hava 你有什么
    What you are 你是什么
  • 访问控制 Access Control
  • Bell LaPadula Model 不能向上读取,不能向下写入
  • 隔离Isolation,沙盒Sandbox

不是每一个使用网络的人都会规规矩矩,不损害他人利益。就像现实世界中用锁和栅栏保证物理安全。
须要网络安全减小虚拟世界中的犯罪,计算机没有道德观念,只要给计算机写清具体问题,它们很乐意的闪电般算出答案。
破坏医院计算机系统的代码和保持病人心跳的代码对计算机来讲没有区别。
就像“原力”同样,计算机能够被拉到“光明面”或“黑暗面”。网络安全就像绝地武士团给网络世界带来和平与正义。程序员

计算机安全的范围,和计算能力的发展速度同样快,能够把计算机安全,当作是保护系统和数据的:保密性,完整性和可用性。算法

“保密性”是只有有权限的人才能读取计算机系统和数据。
“完整性”是只有有权限的人才能使用和修改系统和数据。
“可用性”是有权限的人应该随时能够访问系统和数据(拒绝服务攻击DDOS,发大量的假请求到服务器,让网站很慢或挂掉)。数据库

威胁模型

实现这“保密性”,“完整性”,“可用性”的目标,安全专家从抽象层想象“敌人”多是谁,这叫“威胁模型分析”。编程

模型会对攻击者大体描述:能力如何,目标多是什么,可能用什么手段,攻击手段又叫“攻击矢量”。安全

“威胁模型分析”能为特定情境作准备,不被可能的攻击手段熟练锁淹没,由于手段是在有太多种了。服务器

假设想确保笔记本计算机的“物理安全”,威胁模型是“好管闲事的室友”。为了保证保密性,完整性和可用性能够藏在脏兮兮的洗衣篮里。换句话说,要怎么保护,具体看对抗谁网络

一般威胁模型分析里,会以能力水平区分,好比“某人能够物理接触到笔记本计算机,并且时间无限”在给定的威胁模型下,安全架构师要提供解决方案,保持系统安全,只要某些假设不被推翻,好比没人会告诉攻击者密码,保护计算机系统,网络和数据的方法有不少。架构

身份验证

不少安全问题能够总结成2个问题:函数

  1. 你是谁?
  2. 你能访问什么?

权限应该给合适的人,拒绝错误的人。因此,为了区分谁是谁,用“身份认证(authentication)”,让计算机得知使用者是谁。性能

身份认证有三种,各有利弊:

  1. 你知道什么。 基于某个秘密,只有用户和计算机知道。好比用户名和密码。这是现在使用最普遍的,由于最容易实现。但若是黑客经过猜想或其余方式,知道了你的密码。能够经过“暴力攻击”,由于只是试遍一切可能。若是错误尝试3词,有些系统会阻止你继续尝试,或让你等一下子。
  2. 你有什么。是基于用户有特定物体,好比钥匙和锁,这避免了被人“猜中”的问题,并且一般须要人在现场,因此远程攻击就更难了。但若是攻击者距离比较近,那么也不安全,钥匙能够被复制,手机可能被偷,锁能够撬开。因此须要“你是什么”这种验证。
  3. 你是什么。是基于你把特征展现给计算机进行验证,生物是被验证器,好比指纹识别器和虹膜扫描仪就是典型但例子。这些很是安全,但最好的识别技术仍然很贵,并且,来自传感器的数据每次会不一样。

“你知道什么”和“你有什么”。这俩中验证是“肯定性”的,要么正确,要么错误。若是知道密码或有钥匙,那么100%能得到访问权限;若是没有,就绝对进不去。但“生物识别”是几率性的,系统有可能认不出你,由于环境外音,光线很差等,更糟糕是把别人错认成对的人,好比双胞胎,在现实世界中的概率很低,但不是零。
生物认证的另一个问题是没法重设,你只有这么多手指,若是攻击者拿到你指纹数据怎么办,还有拍个照都有可能伪造虹膜,因此也不靠谱。全部认证方法都有优缺点。它们均可以被攻破,因此,对于重要帐户,建议用俩种或俩种以上的认证方式。这叫“多因素”或“双因素”认证,攻击者可能猜出你的密码,或偷走你的手机:但俩个都作到,会比较难。

访问控制

“身份验证”后,就是“访问控制”。一旦系统知道你是谁,它须要知道你能访问什么。
所以应该有个规范,说明谁能访问什么,修改什么,使用什么。这能够经过“权限”或“访问控制列表”(ACL)来实现。其中描述了用户对每一个文件,文件夹和程序对访问权限。
“读”权限容许用户查看文件内容;“写”权限容许用户修改内容;“执行”权限容许用户运行文件
,好比程序。

有些组织须要不一样层级对权限,好比间谍机构,“访问控制列表”的正确配置很是重要,以确保保密性,完整性和可用性。

不能向上读取,不能向下写入

假设三个访问级别:公开,机密,顶级机密。

  • 第一个广泛的好作法是,用户不能“读上”,不能读等级更高的信息,若是用户能读“机密”文件,那么不该该有权限读“顶级机密”文件。但能访问“机密”和“公开”文件。
  • 第二个法则是用户不能“写下”,若是用户等级是“顶级机密”,那么能写入或修改”顶级机密“文件,但不能修改”机密“或”公共“文件。

有最高等级也不能改等级更低但文件,但这样确保了”顶级机密“不会意外泄漏到”机密“文件或”公共“文件里。
这个”不能向上读,不能向下写“的方法,叫Bell-LaPadula模型,他是为了美国国防部“多层安全政策”制定的,还有许多其余访问控制模型,好比“中国墙”模型和“比伯”模型。哪一个模型最好,取决于具体状况。

“身份验证”和“访问控制”帮助计算机知道“你是谁”,以及“你能够访问什么”。但作这些事情的软硬件必须是可信的,这个依赖很重要。

若是攻击者给计算机装了恶意软件,控制了计算机的操做系统,怎么确认安全程序没有给攻击者6留后面?短回答是,没法肯定。
仍然没法保证程序或计算机系统的安全,由于安全软件在理论上多是”安全的“,实现时可能会不当心留下漏洞,但有办法减小漏洞出现的可能性,好比已找到就立刻修复,以及当程序被攻破时尽量减小损害,大部分漏洞都是具体实现的时候出错了,为了减小执行错误,减小执行。

系统级安全的圣杯是”安全内核“,或”可信计算基础“:一组尽量少的操做系统软件,安全性都是接近可验证的,构建安全内核的挑战在与决定内容应该有什么,代码越少越好。

在最小化代码数量以后,要是能”保证“代码是安全的,会很是棒,正式验证代码的安全性,是一个活跃的研究领域,如今最好的手段,叫”独立安全检查和质量验证“,让一群安全行业内的软件开发者来审计代码。这就是为何安全型代码基于都是开源的,写原始代码的人一般很难找到错误,但外部开发人员有新鲜的眼光和不一样领域的专业知识,能够发现问题。

隔离Isolation,沙盒Sandbox

即使尽量减小代码,并进行了安全审计,聪明的攻击者仍是会找到方法入侵,优秀的开发人员,应该计划当程序被攻破后,如何限制损害,控制损害的最大程度,而且不让它危害到计算机上其余东西。这叫”隔离“。要实现隔离,能够用”沙盒“程序。只能损毁本身的沙堡,不会影响到其余。
操做系统会把程序放到沙盒里,方法是给每一个程序独有的内存块,其余程序不能动。一台计算机能够运行多个虚拟机,虚拟机模拟计算机,每一个虚拟机都在本身的沙箱里,若是一个程序出错,最糟糕的状况是它本身奔溃或者搞坏它处于的虚拟机,计算机上其余虚拟机是隔离的,不受影响。

黑客与攻击

  • 社会工程学
  • 钓鱼
  • 假托
  • 木马
  • NAND镜像
  • 漏洞利用
  • 缓冲区溢出
  • 边界检查
  • 代码注入
  • 零日漏洞
  • 计算机蠕虫
  • 拒绝服务攻击

有些黑客会寻找并修复软件漏洞,让系统更安全,这些黑客叫“白帽子”。另外一方面,也有“黑帽”黑客,他们窃取,利用和销售计算机漏洞和数据,黑客的动机有不少种,有些是好玩和好奇,而网络犯罪通常是为了钱,还有的叫“黑客行动主义者”,经过黑客手段影响社会或达到政治目的。

入侵原理

黑客入侵最多见的方式,不是经过技术,而是欺骗别人。这叫“社会工程学”,欺骗别人让人泄密信息,或让别人配置电脑系统,变得易于攻击。

最多见的攻击是网络钓鱼,银行发邮件教你点击邮件里的连接,登录帐号,而后你会进入一个像官网的网站,但其实是个假网站,当输入用户名和密码时,信息会发给黑客,而后黑客就能够假扮你登录网站。即便成功率只有1/1000,发一百万封钓鱼邮件,也有一千个帐户中招。

另外一种方法叫 假托,攻击者给某个公司打电话,伪装是IT部门的人,攻击者但第一通电话通常会叫人转接,这样另外一我的接的时候,电话看起来像内部的,而后让别人把电脑配置得容易入侵,或让他们泄漏机密信息,好比密码或网络配置。只要预先作一点研究,攻击者能够装得很像真的,好比关键员工的名字,也许要10通电话才能找到一个受害者,但只要一我的上当就够了。

邮件里带“木马”也是常见手段,木马会假装成无害但东西,好比照片或发票,但其实是恶意软件,恶意软件有不少种,有的会偷数据,好比银行凭证,有的会加密文件,交赎金才解密,也就是“勒索软件”。

若是攻击者没法用木马或电话欺骗,攻击者只能被迫用其余手段,方法之一是暴力尝试,尝试全部可能的密码,知道进入系统,大多数现代系统会加长等待时间,来抵御这种攻击,每次失败就加长等待时间,甚至失败超过必定次数后,彻底锁住。出现一种攻破方法叫“NAND镜像”,若是能物理接触到电脑,能够往内存接上几根线,复制整个内存,复制以后,暴力尝试密码,直到设备让你等待。这时只要把复制的内容覆盖掉内存,本质上重置了内存,就不用等待,能够继续尝试密码了。更新的设备有机制阻止了这种攻击,若是没法物理接触到设备,就必须远程攻击,好比经过互联网。远程攻击通常须要攻击者利用系统漏洞,来得到某些能力或访问权限,这叫“漏洞利用”

一种常见的漏洞利用叫“缓冲区溢出”,缓冲区是一种概称,指预留的一块内存空间。有不少方法阻止缓冲区溢出,最简单的方法是,复制以前先检查长度,这叫“边界检查”,程序也会随机存放变量在内存种的位置,这样黑客就不知道应该覆盖内存的哪里。易致使更容易让程序崩溃,而不是得到访问权限,程序也能够在缓冲区后,留一些不用的空间,让后跟踪里面的值,看是否发生变化。若是发生了变化,说明有攻击者在乱来,这些不用的内存空间叫“金丝雀”。

另外一种经典手段叫“代码注入”,最经常使用于攻击数据库的网站,几乎全部大网站都用数据库。就像缓冲区溢出攻击同样,应该老是假设外部数据,是危险的,应该好好检查,不少用户名和密码表单,不让输入,特殊字符,好比分号或者括号,做为第一道防护,好的服务器也会清理输入,好比修改或删除特殊字符,而后放到数据库查询语句里,管用的漏洞利用通常会在网上贩卖或分享,若是漏洞很流行,或形成的危害很大,价格会越高,或者名气越大,有时甚至政府也会买漏洞利用。

当软件制造者不知道软件有新漏洞被发现了,那么这个漏洞叫“零日漏洞”。黑帽黑客常常赶时间,抢在白帽程序员做出补丁以前,尽量利用漏洞,因此保持系统更新很是重要,不少更新都是安全性补丁,若是有足够的电脑有漏洞,让恶意程序能够在电脑间相互传播,那么叫“蠕虫”。
若是黑客拿下大量电脑,这些电脑能够组成,“僵尸网络”,能够用于不少目的,好比发大量垃圾邮件,用别人电脑的计算能力和电费挖Bitcoin或发起“拒绝服务攻击”简称DDos,攻击服务器。

DDos就是僵尸网络里的全部电脑发一大堆垃圾信息,堵塞服务器,要么迫使别人交钱消灾,或纯粹为了做恶,尽管白帽黑客努力工做,漏洞利用的文档都在网上,编程软件有不少“最佳实践”,网络攻击天天都在发生。每一年损害全球紧急差很少5000亿,而且随着咱们依赖计算机系统,这个数字只会增长。

加密

  • 多层防护
  • 加密,解密
  • 凯撒解密
  • 替换加密
  • 移位加密
  • 列移位加密
  • 德国 Enigma 加密机
  • 1977年“数据加密标准”
  • 2001年“高级加密标准”
  • 密钥交换
  • 用颜色来距离“单向函数”和“密钥加密”的原理
  • 迪菲-郝尔曼密钥交换
  • 非对称加密
  • 非对称加密算法 RSA

世上不存在100%安全的系统,总会有漏洞存在,因此系统架构师会部署“多层防护”,用多层不一样的安全机制来阻碍攻击者。

计算机安全中最多见的防护形式:密码学。

密码学(cryptography)一词来自crypto和graphy,大体翻译成“秘密写做”,为了加密信息,要用加密算法(Cipher)把明文转为密文,除非知道如何解密,否则密文看起来只是一堆乱码,把明文转为密文叫“加密”(encryption),把密文恢复回明文叫“解密”(decryption),加密算法早在计算机出现前就有了。

朱利叶斯.凯撒 用“凯撒解密”的方法,来加密私人信件。会把信件中的字母,向前移动三个位置,因此A会变成D。为了解密,接收者要知道,1.用了什么算法。 2. 要偏移的字母位数。

有一大类算法叫“替换加密”,凯撒密码是其中一种,算法把每一个字母替换成其余字母,但有个巨大的缺点是,字母的出现频率是同样的。例如:E在英语中是最多见的字母,若是把E加密成X,那么密文中X的出现频率会很高,熟练的密码破译者,能够从统计数据中发现规律,进而破译密码。

另外一类加密算法叫“移位加密”,“列移位加密”。网格,能够任意选择列数网格。 选择55,为了加密信息,网格中的信息按照必定规则信息去写,好比从左边开始,从下往上,一次一列。加密后字母的排列不一样。解密的关键是,知道读取方向和网格大小是55。若是接收者知道密文和加密方法,才能解密获得原始信息。

转子,反射器,
反射器,它每一个引脚会连到另外一个引脚,并把信号发回给转子,最后,机器前方有一个插板,能够把输入键盘到字母预先进行替换,又加了一层复杂度。

若是按下"H"键,电流会先经过插板,而后经过转子,到达反射器,而后回来转子,回来插板,并照亮键盘灯板的字母“L”.这样H就加密成L。电路是双向的,因此,若是是按下“L”的话,对应加密也是“H”。换句话说,加密和解密的步骤是同样的。只须要确保,发送机和接受机的初始配置同样就行。

随着计算机的出现,加密从硬件转往软件,早期加密算法中,应用最普遍的是IBM和NSA于1977年开发的“数据加密标准”。
DES最初用的是56bit长度的二进制密钥,意味这有2的56次方,或大约72千万亿个不一样密钥。

在1999年,一台25万美圆的计算机能在俩天内把DES的全部可能密钥都试一遍,让DES算法再也不安全。

对称加密

在后面出了:高级加密标准(AES),AES用更长的密钥-128位/192位/256位-让暴力破解更加困难。
128位的密钥,用如今地球上全部的计算机也要上万亿年才能试遍全部组合。
AES将数据切成一块一块,每块16个字节,而后用密钥进行一系列替换加密和移位加密。再加上一些其余操做,进一步加密信息。每一块数据,会重复这个过程10次或以上。
基于性能的权衡,128位较于合适,对于一些加密信息,网站的性能而言都是平衡的。
AES在性能和安全性间取得平衡。

须要某种方法,在公开的互联网上传递密钥给对方,经过的是“密钥交换”。密钥交换是一种不发送密钥,但依然让两台计算机在密钥上达成共识的算法。

经过“单项函数”,单项函数是一种数学操做,很容易算出结果,但想从结果逆向推算出输入很是困难。例如:将颜色混合在一块儿很容易,但想只想混了什么颜色很难。要尝试不少种可能才知道。

首先,有一个公开的颜色,全部人均可以看到,但选择其中俩种颜色,只有本身知道。为了交换密钥,把选中的秘密颜色和公开颜色混在一块儿,发送给对方,收到以后,把选中的秘密颜色加进去,如今三种颜色混合在一块儿,就可以有相同的颜色。外部窥探者能够知道部分信息,但没法知道最终颜色。

Diffie-Hellman中,单向函数是模幂运算,意思是先作幂运算,拿一个数字当底数,拿一个数字当指数。
例如:假设想算3的5次方,模31。先算3的5次方,获得243,而后除以31,取余数,获得26.
若是只是余数和基数,很可贵知指数是多少。若是把数字变长一些,好比几百位长,想找到秘密指数是多少,几乎是不可能的。

用模幂运算,算出双方共享的密钥:

  1. 首先,有公开的值 - 基数和模数
  2. 为了安全向目的电脑发送信息,选择一个秘密指数:X。
  3. 而后算出 B^X mod M 的结果,而后把这个数字发送到目的电脑上。
  4. 目的电脑也同样作,选一个秘密指数:Y,而后把B^Y mod M的结果发送回来。
  5. 为了算出,双方共享的密钥,把目的电脑给的数,用秘密指数X,进行模幂运算。数学上等于B^XY mod M
  6. 目的电脑也是拿着数字,进行模幂运算,最终获得同样的数字。双方有同样的密钥,即便历来没有给对方发过个本身的秘密指数。
RESULT OF
(B^Y mod M)^X

// B^YX mod M

RESULT OF
(B^X mod M)^Y

// BYX mod M

能够用这个大数字看成密钥,用AES之类的加密基数来加密通讯。Diffie-Hellman 密钥交换是创建共享密钥的一种方法。双方用同样的密钥加密和解密消息,这叫“对称加密”,由于密钥同样。

密钥交换

凯撒加密, 英格玛,AES都是“对称加密”。
有两个不一样密钥,称之为“非对称加密”,一个是公开的,另外一个是私有的,用公钥加密信息,只有有私钥的人才能解开。
知道公钥只能加密但不能解密,它是“不对称”的。

公钥密码学

反过来也能够,私钥加密后,用公钥解密。这种作法用于签名,服务器能够用私钥加密,任何人均可以用服务器的公钥解密。就像一个不可伪造的签名。由于只有私钥的持有人,能加密。

这能证实数据来自正确服务器或我的,而不是某个假冒者。

目前最流行的非对称加密技术是RSA

当访问一个安全的网站,好比银行官网,绿色锁图表明了,用了公钥密码学。验证服务器的密钥,而后创建临时密钥。而后用对称加密保证信息通讯安全。

相关文章
相关标签/搜索