[音乐]
[音乐]
我们知道在计算机系统里面 有这些安全,就是我们要关注的是这个计算机的安全
那么在计算机的安全里面,其实我们这门课更关注的是什么 呢?更关注的就是要建立一个安全的一个操作系统
或者说建立一个安全的基础软件,因为我们还会讲到虚拟化的安全,对吧 那么为什么需要一个安全的操作系统呢?那么因为这个
大家知道在目前很多这样的安全事件的根本,其实可能不是网络的问题
也不是因为用户的问题,可能就是因为你这个底层的这个基础软件 它们出现了,有很多的这个脆弱点。
比如说我们知道 很多系统都是利用你的这个操作系统的一些特殊的一些的网络端口
那么这种端口一旦你可以进入,其实你可以拿到很高的一个权限,比如说你是超级用户的权限
那么你就可以进入这个系统,为所欲为。
这是我们所说的这个操作系统的脆弱性 我们来举两个实际的例子看一下。
第一个就是关于Windows NT它的安全漏洞 在Windows
NT里面,包括现在我们很多的这种Windows XP,Win 7,Win 8,对吧,我们用的这个操作系统都是NTFS文件系统
那么在NTFS文件系统里面,它有一个很重要的缺陷就是说,这个读,就是我们知道每个文- 件它有一个
权限的划分,你是允许A用户读呢,还是写还是执行,对吧,我们对权限会有这样一个读、 写、
执行的一个划分 那么在NTFS里面,它这个读的权限的划分,它事实上是蕴含了两个权限
一个是读,另外一个是执行,那么按照这样一个概念的话 那么假设恶意用户他
去替代一个文本文件,用一段恶意代码去替代 一个文本文件,那么这个文本文件里面植入了他的恶意代码,对吧
那么因为这个用户对这个文件本身是可以去读的,他可以打开它
但是打开同时他也运行了它,那么一旦运行,这个恶意代码就可以 做它一些,产生一些恶意的后果
第二类,第二个例子呢是关于这个,我们现在可能
服务器端,或者是目前包括我们的安卓操作系统上面会经常 用到的一个操作系统,就是UNIX或是Linux类的这样一个操作系统
在这样的操作系统里面,其实也有很多的安全问题 我们举一个例子看一下。
就是在这个 Linux系统里面,大家可能都用过,有一个叫ping的这样一个命令
这个ping命令其实它的主要功能就是说去跟远端 的这个,主要是来检测一下这个网络是否通,对吧
它来测试一下这个网络是否,连接是否通 那么这个ping命令呢事实上它在执行的时候,它有一个,这个ping命令本身
在运行的时候,它会执行一个,它本身是一个setuid的一个root程序
也就是说它在运行的时候,会有一段时间会把自己的身份转换成一个超级用户
那么早期的版本里面,对于这个超级用户 呢是在执行功能的时候,它是有这个超级功能的权限
那么在执行完功能的时候,它本身应该把这个权限放弃掉,然后恢复到这个普通用户的权限
但事实上早期版本的这个ping命令,并没有 丢弃这个root的权限,也就是说执行完这个连接之后
在结束之后,它并没有把这个权限放弃掉,那么 导致呢它的这个权限一直在,所以恶意用户一旦去
一旦,恶意用户一旦去成功的植入这个,或者说成功的去
攻破这个ping命令以后,他就可以拿到root用户的权限
当然ping命令另外还有一些其他的问题,比如说它有一些缓冲区 溢出的问题,那么恶意用户也可以利用缓冲区溢出的这样一个情况
来获得root用户的权限 所以从这两个例子,其实我们可以发现这样的
一些安全问题其实很多都是源于操作系统本身 在它的一些机制上有一些缺陷
所以我们现在可以来得出这样一个结论,就是说
如果我们在一个系统里面去做安全,仅仅是从 上层,或者说从应用,application这一层去做这样一些安全的话
事实上是不够的,因为我们知道目前在任何一个计算机系统里面,应用
会越来越多,那么每一个应用其实你都要保证它是安全的 否则的话,只要有一个应用出了问题,那么可能它就会把这个安全问题会
成为这个整个系统的一个,相当于一个木桶原理嘛,它就会导致整个系统不安全,不安全
所以我们说仅仅在用户层做安全是不够的,我们需要在这个内核级也要做安全
那么原来的这个操作系统,原来计算机系统的这个基本假设是底层硬件是安全的
还有一个基本假设是说,操作系统也是安全的,然后它来做这个 整个系统的安全性。
但是事实上这样一种基本假设是并不合理的
那么我们的所谓的安全性应该是要一层一层的做,每一层都要做安全,就是我们要硬件上- 要做安全
然后是操作系统要做安全,然后再往上应用层也要做安全,这样才能保证整个计算机系统- 的安全性
我们来举一个例子啊,在 这张图上大家可以看到,有两个
有几块甜饼,对吧,这个甜饼很诱人,但是它 放在一个房子里面,现在我们想保护这个甜饼,不要被
老鼠来偷吃,对吧,被老鼠偷吃 那么这样一种简单的一个问题,大家来思考一下
就是我们应该来保护,怎么样保护这些甜饼呢? 通常我们有两种解决方案,同学们可能自己
也能够去想到很多一些解决方案,那么大家可以去思考一下 我们这里说一下,两种大家经常会,归纳一下,经常会考虑的两种方案
第一类呢就很多人会去想,okay,我要保护这个房子那我就把整个,保护这些甜饼,我就- 把整个房子给保护起来
不让老鼠进来,对吧,把我的房子做的很牢固 没有让老鼠进来的这个机会,机会 这是一种保护方案。
第二种呢就是说,okay,我保护甜饼那我就 把甜饼装在一个盒子里面,当然这个盒子一定要是个金属盒子,对吧
让老鼠啃不动,那么这两种方案我们来比较一下,哪一个 我们觉得可以更安全,或者说我们觉得更可靠一点呢?
当然我们从现在来看,保护整所房子 首先成本就很高,对吧,我们要做的事情也非常的多
比如说我们有很多东西要去处理,你首先要保护这个房子 不如老鼠进来,那么可能,比如说你的窗户是不是关好了
你的这个下水道有一些可以让老鼠进来的一些机会,对吧?
等等这些很多因素都要进行处理,有一个地方遗漏的话,那可能老鼠就会钻空子进来
另外就是我们可能没有办法去在 没有办法去处理所有应该封锁的洞口
就是说我不知道我的房子里面还有哪些地方没有处理到,没有处理到,比如说空调的一个
洞口,对吧,那么可能老鼠它也可以钻进来,那你可能当时做考虑的时候并没有考虑到
第三个问题就是说,在你确定 封锁洞口之前,或者确定解决方案之前,可能老鼠已经进来了
这个时候呢其实你做这些封锁的 这个方法对老鼠已经没有意义了,没有意义了
所以这种方案我们就是说它是不是太可行,对吧,不太可行 那么针对这种方案其实我们是跟什么样的一些安全做比较呢?其实
主要是现在目前很好行业里面做安全可能主要做的是应用程序的安全 那么应用程序在一个计算机系统里面,它主要去做应用程序的安全
那么我们知道应用程序是越来越多,我们不可能把所有 我们不可能保证每一个应用程序它都是安全的,就跟我们不能够保证
所有的洞口你都封好了,对吧,都封好了 那么第二种方案呢,就是将甜点放入这个金属盒子里面
金属盒子里,那放到金属盒子里,我们认为这个方案它其实抓住了这个问题的一个本质
那么我们为什么要去觉得这个方案是比较可靠的呢?首先我们要相信这个盒子是金属的,对吧
它是金属的,它是很牢固的,就牢固到这个老鼠是啃不破,进不来的
另外第二,第三呢我们就觉得这个甜点现在
用这样一个盒子装住以后,不用担心老鼠会进入这个房子,进入房子,也就是说
你装在盒子里,老鼠即使进入房子,我也不用担心了,因为我的这个甜点保护好了,对吧,- 保护好了
就相当于我们在做这个计算机系统安全的时候,如果我们能够把这个操作系统这块环节做好
因为所有的资源都是由操作系统来管理的,所以的话呢,即使你通过应用程序进入到
你的平台,但是他拿不到你的核心资源,他也没有办法去达到真正的破坏目的 所以我们认为这个保护才是真正值得信赖的
总结一下,就是关于这个操作系统安全它的重要性,其实在很早的时候
这个美国的安全局,就是NSA,我们说National Security
Agency 曾经就是做了一个这样的一个报告,在它的这个报告里面曾经提到,就是
之前大家在做安全的时候,可能更多的考虑的是应用层的安全 而且做了一个基本假设是底层的操作系统是安全的
这篇报告指出,就是说认为底层操作系统是安全的这个假设是不成立的,而且是完全
不可靠的,因为这就好比你在沙滩上建一个城堡一样 你对一个沙滩信赖
认为这个城堡很牢固,是不可以,不现实的,只有这个
你建立在一个坚实的基石之上,然后这个房子才是可靠的,就相当于我们的操作系统
应该是一个,不是沙子,而应该是一个牢固的这样的一个基石,基石
这是我们所说的这个操作系统安全,那么在早些年的时候有这样一个 概念。
呃,这是我们 所说的这个操作系统安全的这个重要性的一些解释