
一、什么是注册表
注册表是windows操作系统、硬件设备以及客户应用程序得以正常运行和保存设置的核心“数据库”,也可以说是一个非常巨大的树状分层结构的数据库系统。
注册表记录了用户安装在计算机上的软件和每个程序的相互关联信息,它包括了计算机的硬件配置,包括自动配置的即插即用的设备和已有的各种设备说明、状态属性以及各种状态信息和数据。利用一个功能强大的注册表数据库来统一集中地管理系统硬件设施、软件配置等信息,从而方便了管理,增强了系统的稳定性。
二、注册表的功能
刚才我们看到了,注册表中记录了用户安装在计算机上的软件和每个程序的相关信息,通过它可以控制硬件、软件、用户环境和操作系统界面的数据信息文件。
相关知识:注册表文件的数据信息保存在system.dat和user.dat中、利用regedit.exe程序能够存取注册表文件
三、编辑器说明:
在运行里键入regedit就可以进入了
结构说明
根键:这个称为HKEY…………,某一项的句柄项:附加的文件夹和一个或多个值
子项:在某一个项(父项)下面出现的项(子项)
值项:带有一个名称和一个值的有序值,每个项都可包括任何数量的值项,值项由三个部分组成:名称、数据类型和数据。
1、名称:不包括反斜线的字符、数字、代表符和空格的任意组合。同一键中不可有相同的名称
2、数据类型:包括字符串、二进制和双字节等
3、数据:值项的具体值,它的大小可以占用64KB
所谓的映像劫持(IFEO)就是Image File Execution Options,它位于注册表的HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows NT/CurrentVersion/Image File Execution Options/键值下。由于这个项主要是用来调试程序用的,对一般用户意义不大,默认是只有管理员和local system有权读写修改。
比如我想运行QQ.exe,结果运行的却是FlashGet.exe,这种情况下,QQ程序被FLASHGET给劫持了,即你想运行的程序被另外一个程序代替了。
2. 注册表自启动项
木马程序和后门程序一般都需要依靠自启动进行,自启动项有两个键:Run和Runonce
Run键是病毒最青睐的自启动之所,该键位置是[HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersionRun]和[HKEY_LOCAL_MACHINESoftwareMicrosoftWindowsCurrentVersionRun],其下的所有程序在每次启动登录时都会按顺序自动执行。
还有一个不被注意的Run键,位于注册表[HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersionPoliciesExplorerRun]和[HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionPoliciesExplorerRun],也要仔细查看。
RunOnce位于[HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersionRunOnce]和[HKEY_LOCAL_MACHINESoftwareMicrosoftWindowsCurrentVersionRunOnce]键,与Run不同的是,RunOnce下的程序仅会被自动执行一次。
RunServicesOnce键位于[HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersionRunServicesOnce]和[HKEY_LOCAL_MACHINESoftwareMicrosoftWindowsCurrentVersionRunServicesOnce]下,其中的程序会在系统加载时自动启动执行一次
Userinit 的作用是用户在进行登陆初始化设置时,WinLogon进程会执行指定的 login scripts,所以我们可以修改它的键值来添加要执行的程序,注册表路径为:HKLMSOFTWAREMicrosoftWindows NTCurrentVersionWinlogonUserinit,添加需要自启动的程序,多个程序用逗号隔开。
Logon Scripts 能够优先于杀毒软件执行,绕过杀毒软件对敏感操作的拦截。其注册表路径为:注册表路径:HKCREnvironment
创建字符串键值: UserInitMprLogonScript
键值设置为 bat 的绝对路径:c:test11.bat
regedit进入注册表
HKEY_CURRENT_USERSoftwarePoliciesMicrosoftWindowsControl PanelDesktop
将ScreenSaveTimeOut的值修改,这个值是屏保的秒钟数。
影子是实际存在的,但是不会在登录时或者用户组中显示,我们可以赋予影子用户管理员权限,可以在某些情况下管理员不可用时使用。
建立影子用户之前,我们先介绍几个概念:
SAM数据库:对用户登录用户名和密码进行验证。
注册表:相当于windows的神经系统,很重要。
策略管理器:它实际是注册表的管理工具,因为直接修改注册表是困难和危险的。
下面我们创建影子用户:
1)影子用户名称必须以 结 尾 , 如 g u o l e i 结尾,如guolei 结尾,如guolei, 那么我们在计算机管理中新建用户guolei$,并设置密码。spacer.gif
2)确定后,注册表中的SAM数据一定有了记录,我们在运行中输入regedit命令打开注册表spacer.gif
看到SAM了吧,但是现在我们看不到里面的任何东西,因为没有权限,我们右击SAM点击权限spacer.gif勾选完全控制,F5刷新一下,看,SAM下面有东西了spacer.gif看users和names里的内容是一一对应的,administator的管理权限在0001F4中,我们点0001F4spacer.gif看到F了吧,点击它,复制里面的内容spacer.gif把这些东西复制到000003E8的F中,这样guolei$就有了管理员权限
那么如何让guolei$不显示在用户列表中呢?就是做到真正的影子。spacer.gif
我们把上面两个文件右键导出到桌面上,然后在用户组中删除guolei$spacer.gif
好了在注册表和用户列表中都没有此用户了,这时我们分别点击我们刚刚备份在桌面的两个文件,将它们导入到注册表。spacer.gif
启用不显示最后用户名,执行gpupdate /force让组策略生效。
设置注册表键值HKEY_CURRENT_USERSoftwareClassesCLSID
cmd下输入:
SET COR_ENABLE_PROFILING=1
SET COR_PROFILER={11111111-1111-1111-1111-111111111111}
1
2
CLR能够劫持当前cmd下所有.Net程序的启动
后门利用思路:
我尝试通过WMI修改环境变量,使CLR作用于全局,就能够劫持所有.Net程序的启动
经实际测试,该方法有效,系统启动后默认会调用.Net程序,加载CLR,后门触发
设置注册表键值HKEY_CURRENT_USERSoftwareClassesCLSID能够指定实例CAccPropServicesClass和MMDeviceEnumerator对应加载的dll
而IE浏览器进程iexplore.exe启动时会调用以上两个实例
所以通过注册表设置CAccPropServicesClass和MMDeviceEnumerator对应加载的dll,能够劫持IE浏览器的启动,实现后门触发
当然,该方法只能算得上是一个被动后门,只有用户启动IE浏览器,才能触发后门
然而,在众多COM对象中,可供利用的劫持对象不唯一,甚至存在能够劫持桌面进程explorer.exe的方法,相当于一个主动后门
注册表中储存文件关联信息的一些位置:
(1) HKEY_CLASSES_ROOT
(2) HKEY_CURRENT_USERSoftwareClasses
(3) HKEY_LOCAL_MACHINESoftwareClasses
(4)HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersionExplorerFileExts
(5)HKEY_LOCAL_MACHINESoftwareMicrosoftWindowsCurrentVersionExplorerFileExts
说明:【前三项】:(1)处存放的是本机文件关联的备份,会自动同步后面两处的信息。但实际操作时有些信息只有(1)处有,所以建议在枚举本机文件关联时以此处为准,以其它两处作补充。以下所说的“Classes目录”指代(1)(2)(3)中的任意一个,(2)是现行用户的,(3)是本地机器的,不建议选(1)。【后两项】:在尝试打开文件时或选择打开方式后会自动生成。
注册表加固的常见配置修改内容:在右边的窗口中创建一个DOWRD值:“DisableRegistryTools”,并将其值设为“1”。
2. 设置对注册表键的访问权限
WIN+R键打开运行;
输入regedit回车打开注册表编辑器;
找到需要修改权限的项,右键选择权限即可:
3. 禁止注册表的远程访问
1、拒绝创建新的局域网连接
大家知道,如果允许非法用户在自己的Windows 2000服务器中,随意创建新的局域网连接的话,那么本地 服务器的安全将受到威胁,因为非法用户就能通过自己创建的局域网连接“通道”,来对本地服务器进行 远程非法***了。为此,你可以通过下面的方法,来阻止普通帐号下的用户,随意在本地服务器中创建新 的局域网连接组件,从而实现拒绝创建新的远程连接通道的目的:
依次单击“开始”/“运行”命令,在打开的系统运行对话框中,输入注册表编辑 命令“Regedit”,单击 “确定”按钮之后,在随后弹出的注册表编辑窗口中,将鼠标定位于注册表分支 HKEY_CURRENT_USERSoftwarePoliciesMicrosoftWindowsNetwork Connections上,在对应Network Connections注册表分支的右边子窗口中,用鼠标右键单击空白区域,从弹出的快捷菜单中 依次执行“新建”/“双字节值”命令,并将新创建的双字节值名称设置为“NC_AddRemoveComponents”, 再用鼠标双击“NC_AddRemoveComponents”项目,在弹出的数值设置窗口中,输入“0”,再单击“确定” 按钮,最后按下F5功能键来刷新一下系统注册表,这样就能使上述设置生效了。
为了防止非法用户随意修改已经创建好的局域网连接组件的属性,导 致已经创建好的局域网连接组件不能 使用,你可以在对应Network Connections注册表分支的右边子窗口中,再分别创建一个名为 “NC_LanChangeProperties”、“NC_RasChangeProperties”的双字节值,并将它们的数值都设置为“0” ,最后单击“确定”按钮,并刷新一下系统注册表。
2、拒绝新用户与服务器连接
依次单击“开始”/“运行”命令,在打开的系统运行对话框中,输入注 册表编辑命令“Regedit”,单击 “确定”按钮之后,在随后弹出的注册表编辑窗口中,将鼠标定位于注册表分支 HKEY_LOCAL_MACHINESOFTWAREPoliciesMicrosoftWindows NTTerminal Services上,在对应Terminal Services注册表分支的右边子窗口中,用鼠标右键单击空白区域,从弹出的快捷菜单中依 次执行“新建”/“DWORD值”命令,并将新创建的双字节值名称设置为“fDenyTSConnetions”,再用鼠标 双击“fDenyTSConnetions”项目,在弹出的数值设置窗口中,输入“1”,再单击“确定”按钮,那么系 统的终端服务器就能在不断开已有连接的前提下,拒绝新的用户与服务器进行连接了,要是你将 “fDenyTSConnetions”项目的数值设置为“0”,那么系统的终端服务器就能允许多个新的用户与之连接 了。
4. 部署审核监视用户对注册表的操作
审核是Windows系统的一项重要功能,就像对文件等其他系统项进行审核一样,我们也可注册表的访问进行审核。据此我们可了解到哪些用户访问了注册表,以及他对注册表进行了哪些操作。不过,启用对注册表的审核后会耗费-定的系统性能。笔者建议,我们只选择自己最关心的、必要的审核对象,以减少被写入安全日志中的数据流,以此减少对系统性能带来的负担。要启用对在注册表的审核,先要启用系统审核。为此,需要通过系统的本地安全策略或相应的组策略对象进行。cmd+secpol.m 运行“本地计算机策略”控制台, 定位到“计算机配置"→"Windows设置"→°安全设置” 一“本地策略”一“审核策略”节点下设置启用系统审核策略。对系统启用了审核后,即可配置希望对注册表进行审核的方式。我们可以设置对需要的注册表键进行监控,此时我们可以利用继承功能,这样我们就不需要对注册表中的每一个键进行设置审核了。当然,如果只需要对一个指定的根键或者子键作为开始的审核的起点,我们可以首先取消上面的继承重新设置。比如,我们要对事关 系统账户安全的HKLMSAM注册表键进行审核,可进行如此操作。(图6)图6依次点击"开始"→“运行”,输入regedit.exe打开注册表编辑器。定位到HKLMSAM注册表键,右键单击该键选择“权限”打开“SAM的权限”对话框。带该对话框中单击“高级”按钮打开“SAM的高级安全设置”对话框,在对话框中打开“审核”选项卡,单击“添加” 按钮进入对话框在此选择要审核的用户或组。审核的用户或者组添加完毕后,单击“确定”进入“SAM的审核项目”对话框。在此,我们可以针对每个权限选择要进行的审核类型。如果希望跟踪权限的成功使用,就选择相应的“成功”选项;如果希望更正权限的失败使用,则选择相应的“失败”选项。设置完毕后单击“确定”关闭该对话框。对于其他用户或者组的审核设置,方法类似。需要说明的是,如果希望将审核应用于所有子键, 需选中“包括可以从该对象的父项继承的审核项目"选项。