统计在线人数...

漫谈Windows、Linux 系统中“可信路径”安全机制

[ 来源:中国站长学院 | 作者:风未起时 | 时间:2005-6-14 上午 10:02:24 | 浏览:统计中... ]

 计算机系统中,用户在一般情况并不直接与内核打交道,中间还有一层应用层作为接口在用户与内核之间相互作用着,但这种设计能够保护内核不会被用户肆意修改窥测,但也随之带来了安全问题,由于应用层并不是能完全信任之的,因此在操作系统安全功能中,往往会提供可信路径这一功能[这也是橘皮书 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,而非木马程序。当你按下这组键时,也就是引发了这一特定事件,那么按照设计的流程,系统陷入核心状态,这时你将可以直接与内核沟通,也就是说,出现在你的“理应”是如假包换的真实登陆提示信息,为什么是理应?我们下文分析:->

    在讨论SAK的脆弱点之前,我们先来看看当你按下SAK时,系统发生了什么事情吧,当系统处在正常状态下时,用户按下键盘时,此事件将进入核心以解释,若其扫描码对应为SAK,则内核将找出引发此SAK的终端,之后为了创建可信路径,则需要杀死所有非核心进程,也就是说在此时,任何此终端上用户建立的进程都将死亡,当然,可能存在的木马进程也被杀死了,系统最后将重新打开登陆进程,使用户获得放心的交互。

注意:
1:事实上这里提到的与内核交互,确切地说应该是与TCB[Trusted Computing Base,可信计算基]的软件部分打交道,包括安全内核与可信系统程序,TCB事实上是个很广泛的概念,包括了安全内核、特权程序、系统命令与相关硬件设备,甚至在逻辑上包括了系统管理员和安全管理员,离题太远,请各位对TCB感兴趣的朋友查询相关手册`:->
2:Q:SAK怎样判断该杀死哪些进程,以免少杀及误杀?
A:这可真是一个好问题,因为编制登陆模拟器木马的的黑客必须深刻理解SAK杀死应用进程的实现方式,已此试图破坏这机制,事实上,SAK命令杀死应用进程是根据进程的PID来执行的,linux系统刚刚启动时是运行在核心状态的,这时只有一个初始化进程,初始化完毕时,初始化进程将启动一个init进程,自己进入 idle循环,init的PID=1,它是一个真正的进程,也将是进程树上的根,之后的所有进程都是init进程的“子子孙孙”,可以使用pstree命令查看系统中当前的进程树图,以此了解进程间的关系。

    刚刚我们已经了解了linux操作系统下的可信路径的相关知识,但是我想已经有不少朋友更想了解在WINDOWS NT/2000/XP下的可信路径的情况,Now,let's go.

    在NT系列windows操作系统中的可信路径的引发方法是把 ctrl+alt+del这三个键同时按下,这称为标准SAS[Secure Attention Sequence],当系统检测到一个标准SAS序列的扫描码时,将由winlogon 进程将系统设置为已注销、已登陆、已锁定三种不同状态,然后切换当前桌面到 Winlogon 桌面。不过要注意到,WINDOWS中的可信路径的实现似乎与linux下大不一样。比如在WIN2000下,按下ctrl+alt+del,切换到winlogon桌面,但是当前用户的进程并没有在这个时候被杀死,比如你可以听着mp3按ctrl+alt+del,这样做你将在winlogon桌面下,照样听mp3,如果其意义是需要注销再登陆,那自然的,注销的时候,当前用户的进程都会被杀死,不过那样的操作从开始菜单中的关机命令有什么区别,并且,我们也可以在winlogon桌面上边改密码边听着mp3,不会有木马在后台偷偷地记录吗?对,用户进程并不是像在 linux 下那样被简单地杀死,事实上,在winlogon 桌面初始化过程中,创建了三个桌面:应用程序桌面(\Windows\WinSta0\default)、Winlogon桌面(\Windows\WinSta0\Winlogon)和屏幕保护桌面(\Windows\WinSta0\ScrenSaver)。而在安全策略上,只有winlogon进程可以访问到winlogon桌面,其它两个桌面才允许用户及其所属进程访问,因此虽然用户进程在SAS激发后并不会被杀死

[1] [2]  下一页

共有0人参与评价,平均得分:0分
评论内容只代表网友观点,与本站立场无关! 查看完整内容
   

当前在线人数
QQ:748838 MSN:allen_xia#msn.com E-mail:allenxia666#126.com QQ群:站长联盟北方区-北京(28200145) 站长联盟南方区-上海(67713522)