在讨论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激发后并不会被杀死,但它们也不能访问winlogon桌面以偷窃用户口令,这就是“Windows特色的可信路径实现道路” :->

等等,你也许会想到GINA木马,它不就是伪造的登陆窗口吗?在登陆到windowsNT时,我们按下ctrl+alt+del这个所谓的可信路径时,怎么没有将它杀掉?事实上,GINA木马并不是直接击败可信路径这一功能,而是破坏了可信路径下层的TCB,改变了TCB中软件结构的一部分!现在我们来回忆一下GINA木马的一些细节,还记得吧?

GINA[GINA: Graphical Identification and Authentication,图形身份验证 ] 在windows中,缺省的GINA就是msgina.dll ,它是运行在winlogon.exe的进程空间中的,由注册表中\HKEY_LOCAL_MACHINE\Softwar

e\Microsoft\Windows NT\CurrentVersion\Winlogon\GinaDLL=yourgina.dll 定义,默认情况下则就是msgina.dll,而GINA木马的实现机理则就是通过修改注册表,将原来的msgina.dll替换为自己的木马GINA,以此实现将截获的用户名和密码保存在某个文件中,供黑帽子读取。严格来说这确实不算是直接击败了SAS可信路径功能,因为必须有administrator权限才能进行操作注册表,完成替换系统文件的工作,而这种方式是微软提供给客户的一种功能,方便客户以自己的方式来进行用户身份验证,比如使用指纹鉴别仪,视网膜扫校仪等非口令验证方式,只要替换msgina.dll为特定的GINA,就可以完成这种衔接工作,因此这只是一种功能,不是缺陷,更不能算是漏洞;并且,在WINDOWS这种操作系统中,若得到了admin权限,则再也没有什么不能做的事。在美国foundstone公司编撰的《黑客大曝光》[Hacking Exposed]一书中,也提到了一个能捕获ctrl + alt + del 三键序列之后的密码操作的工具,Invisible Keylogger Stealth (IKS),它能远程安装,安装后需要重启,之后就能运行在后台,偷偷窃取用户的密码,并将其记录在iks.dat 文件中,且该iks.dat 文件是二进制格式,需专用的datview程序解读,隐蔽性不可谓不好,不过这个程序仍然不是直接击败可信路径,而是破坏了目标机器的TCB,与GINA木马类似的,它也需要管理员权限,因为它是基于编制设备驱动程序来实现其功能的,而在一台WINNT机器上安全设备驱动,自然必须管理员才能完成操作。因此这仍然不能算是一个漏洞,从TCB概念的角度来分析也是如此,是TCB中的一部分改变了另一部分,记得我们前面所说的系统管理员也是TCB的构成部分吗?这里指的系统管理员并非具体的人,而是拥有管理权限的帐户,机器、程序是不会辨别人类的,谁控制了管理帐户,机器就听谁的指挥。

NT系列windows操作系统的启动过程中关于SAS的定义过程是:

初始化时GINA已经收到VOID WlxUseCtrlAltDel(HANDLE hWlx);这个函数它的作用就是通知winlogon.exe,GINA默认使用ctrl+alt+del这个标准SAS.如果要用自己定义SAS序列的话,开发者必须在编制自己的GINA.dll时

自行HOOK热键.并且通过:

WlxSasNotify(hGlobalWlx, dwSasType);

这个函数来报告将使用的SAS。

GINA将提供给winlogon.exe一个函数:

VOID WINAPI WlxDisplaySASNotice(PVOID pContext);

用于显示欢迎画面以及验证是否使用了自定义的SAS序列。

  1. Linux安全访问控制模型应用及方案设计 
  2. Linux安全攻略 如何才能让内存不再/泄漏
  3. Windows与Linux安全性权威比较


相关内容

    暂无相关文章