详解Windows、Linux中“可信路径”安全机制(1)


计算机系统中,用户在一般情况并不直接与内核打交道,中间还有一层应用层作为接口在用户与内核之间相互作用着,但这种设计能够保护内核不会被用户肆意修改窥测,但也随之带来了安全问题,由于应用层并不是能完全信任之的,因此在操作系统安全功能中,往往会提供可信路径这一功能[这也是橘皮书 B2 级的安全要求]。

可信路径[trusted path]是怎么样的概念?顾名思义,它就是这么一种功能的实现:避过应用层,在用户与内核之间开辟一条直接的可信任的交互通道。真的有必要那么麻烦,不得不在进行高风险操作时使用可信路径与内核互动吗?遗憾地告诉你:确实是!有经验的系统管理员普遍都很清楚来自网络的威胁有多么严重。黑帽子们能使用特洛伊木马[Trojan horse],记录你在登陆及其它敏感操作时的行动,从而窃取你的宝贵口令。

你一定对"ctrl + alt + del"三键序列极有印象,在DOS年代,我们用它快速重启机器,并称之为"热启动",而在WINDOWS 9X时代,我们则用它查看进程,不过也许你没有注意到,在WINDOWS9X 向WINNT过渡后,我们的PC也运行着NT内核的WIN2000/XP时,事实上"ctrl + alt + del"三键的职能已经有了些微改变,微软在它的官方文档中,称"ctrl + alt + del"为SAS[Secure Attention Sequence],并且将之列为安全功能-可信路径的构成部分,而在linux下,也有着类似的按键序列可用。

Linux 环境下的安全留意键—— SAK[Secure Attention Key],这个SAK是一组键, 在我们常见的X86平台下,它是"alt+sysrq+k",而在SPARC下,SAK则是"alt+STOP+k", SAK默认不打开,需要用 echo "1" > /proc/sys/kernel/sysrq 这条命令激活,当然,你也可以将它写进登录脚本中,这样就不必每次麻烦了。对SAK实现有兴趣的朋友,可以参考参考 linux/drivers/char/sysrq.c和 linux/drivers/char/tty_io.c::do_SAK

SAK序列键其实是被称做"magic sysrq key" 中的一组,"magic sysrq key" 还有一些特殊键,与SAK一样,它们都是使用"alt + sysrq + ..."格式,其中的...可换为某些特殊的字母比如"i",在《MAGIC SYSRQ KEY DOCUMENTATION v1.32》手册上,"alt + sysrq +i" 所代表的行为是"Send a SIGKILL to all processes, except for init." 意思就是向除了 init 外的所有进程发送一条kill 信号;现在我们看看在《MAGIC SYSRQ KEY DOCUMENTATION v1.32》手册中对"alt + sysrq +k"的解释吧:

"sa'K' (Secure Access Key) is usefull when you want to be

sure there are no trojan program is running at console and

which could grab your password when you would try to login.

It will kill all programs on given console and thus

letting you make sure that the login prompt you see is

actually the one from init, not some trojan program. "

这段话正是SAK的功能写照:SAK对你确定在登陆时没有试图窃取密码的特洛伊木马程序运行在当前控制台上,它能杀死当前控制台上的全部应用程序,以此令你确信看到的登陆画面来自init,而非木马程序。当你按下这组键时,也就是引发了这一特定事件,那么按照设计的流程,系统陷入核心状态,这时你将可以直接与内核沟通,也就是说,出现在你的“理应”是如假包换的真实登陆提示信息,为什么是理应?我们下文分析:->


相关内容

    暂无相关文章