操作系统的可信路径

即使操作系统拥有再强壮的内核和再安全的用户应用,如果一开始没有把好关,那造成的损失要比一个不安全的内核更大,试想,国家安全局肯定是再安全不过了,但是如果一个反动组织控制了国家安全局,那么国安局将变成一个十分危险的地方,它将会给人民带来灾难。

在操作系统的意义上就是要提供一条所谓安全的路径,该路径的一端是用户,另一端是绝对可信的可信计算基(TCB),而安全原则促使这个可信路径实现成为一个可以保证不会有任何实体监控和篡改信息的机制。任何需要安全的机构都需要这么做,操作系统当然需要安全,之所以提供一条安全路径是因为内核不能保证每个用户都是好人或者即使都是好人也不能保证用户对安全很在意,这样其实可以卸下用户的很多负担。操作系统原理上说只有内核在系统中是可信软件,对于在intel的保护模式上运行的系统来说就是在0环运行的程序是可信,其实就是内核,而所有的用户空间的程序都是不能保证安全的,也就是不可信的,如此一来,即使经销商宣称再安全的用户应用,操作系统也不会认为就是安全的,操作系统为了提供给用户一个单点进入的钥匙,就利用了可信路径,注意单点进入很重要,这样对于验证更加有效,大厦是安全的,安保十分不错,但是必须在嘉宾进入大厦的时候进行单点监测,但是必须保证执行监测的人员是可信的,这好像进入了一个无限死循环,但是事实上没有多少次重要会议会死循环在那或者大厦爆炸,这就是可信路径的约定。操作系统既然不能保证用户程序安全,那就要对用户程序进行检测,但是又不能每个都检测,于是在将权力转交给一个计算机用户的时候,必须保证转交过程绝对安全,接下来转交完毕以后用户的安全策略就可以发挥效用了,转交过程就是在可信路径中进行的,转交在可信路径下执行可以给操作系统一个安全的单点验证环境,保证执行单点验证的执法程序是可信的而不是冒充的,这是进入一个系统最基本的。

各大操作系统都实现了可信路径,比如windows的可信路径实现为ctrl/alt/del三键组合,运行于可信的0环的驱动随后开启一个专用的登录桌面,而只有winlogon程序可以访问这个登录桌面,从而保证没有别的恶意程序可以监控登录过程。windows启动后有三个桌面,一个是我们使用的这个,一个是专用于登录的,一个是屏保的,windows靠桌面的隔离实现了可信路径,其实是shell的隔离;linux的实现更加简单易于理解,linux是基于统一的资源保护实现安全的,因此它没有必要存在一些太过“策略”性的复杂的东西,感觉可能会遇到安全问题的地方直接将访问控制映射到经典的unix访问控制上就可以(想象一下,linux中就没有全局钩子),unix/linux的安全主要作用于被保护的对象而windows的安全主要作用于发起访问的对象,这个区别导致了linux的可信路径实现比windows简单不少,由于linux启动的时候就是root根用户,因此它所启动的getty程序是绝对可信的,再者,此时刚刚从内核过来,刚开始/sbin/init进程,只要init进程可信那么迄今为止一切就是可信的,而/sbin/init是否被替换掉就是另外一个问题了,既然init启动的getty是可信的,那么当你输入用户名后它启动的login以及以后的登录过程也是可信的,但是仅仅保证这些程序本身是可信的还不够,因为你不能保证没有恶意的程序在探测我们的密码输入动作,比如在getty启动之前可能启动了一个木马,这虽然不是安全本身的内容但是这里有问题,因此还得防着一些,再者,getty本身如果被替换,那就真的不好办了。要想做到登录时没有别的恶意进程监听,此时可信路径派上了用场,当你的alt/sysrq/k组合键被按下时,可信路径就被打通了,它的打通靠的是杀死一切此终端的别的进程来实现的,虽然linux的做法有点粗暴,但是十分安全,如果本终端有恶意进程,那么这个组合键一下去,一切就都被杀死了,可是linux的可信路径看起来没有windows安全,因为你再杀进程也会有漏网之鱼,比如守护进程就没有在任何终端,而且运行在同一个用户但是不同终端下的恶意进程仍然可以检测登录,于是linux必须加大可信路径中杀死进程的约束强度,比如只要有进程打开了当前终端,那么也一并杀死,如此一来就安全了,因为linux中,一切都是文件,于是一个进程是否打开了当前终端只需要检测一下进程的打开文件就可以了,一切都统一的进行,并且只要要监控终端,必然要先打开这个终端,linux又没有windows中的全局钩子之类的东西(linux不是消息驱动的),因此就相应的少了很多事。

你可能感兴趣的:(操作系统的可信路径)