快捷搜索:

Windows、Linux中“可信路径”安全机制

谋略机系统中,用户在一样平常环境并不直接与内核打交道,中心还有一层利用层作为接口在用户与内核之间互相感化着,但这种设计能够保护内核不会被用户肆意改动窥探,但也随之带来了安然问题,因为利用层并不是能完全相信之的,是以在操作系统安然功能中,每每会供给可托路径这一功能[这也是橘皮书 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引发后并不会被杀逝世,但它们也不能造访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序列。

击败可托路径的措施:在linux等类似UNIX操作系统下,进击者必须改变系统核心,因为核心是绝对相信自身的,而可托路径激发时,内核将无前提地杀逝世整个用户进程,是以逻辑上不存在能够不停匿伏在系统

您可能还会对下面的文章感兴趣: