注册表安全知多少?
一、注册表概述:
注册表是windows操作系统、硬件设备以及客户应用程序得以正常运行和保存设置的核心“数据库”,也可以说是一个非常巨大的树状图分层的数据库系统。映射了程序和配置相关信息。
1.打开注册表编辑器的方法:
Win+R,输入regedit、regedit.exe、regedt32、regedt32.exe,其中之一皆可,常用为regedit。
打开注册表编辑器,则可以看到五大根键:
2.根键及常见的子项含义解释如下:
根键(括号为简写):
HKEY_CLASSES_ROOT(HKCR)
该根键包括启动应用程序所需的全部信息,包括扩展名,应用程序与文档之间的关系,驱动程序名,DDE和OLE信息,编号和应用程序与文档的图标。
常见子项的解释:
以AVIFILE为例:
CLSID:分类标识,系统可以用这个类标识来识别相同类型的文件。
Compressors :
Auds:用于设置音频数据压缩程序的类标识。
Vids:用于设置视频数据压缩程序的类标识。
Riffhandlers :
AVI:用于设置AVI 文件的类标识。
WAVE:用于设置WAVE文件的类标识。
其他子项:
DefaultIcon:用于设置默认图标。
Protocol:包括了执行程序和编辑程序的路径和文件名。
Stdexecute\server:用于指定编辑程序。
stdfileEditing\verb:用于设置编辑时的工作状态,其中有0、1、2等状态。
HKEY_CURRENT_USER(HKCU)
该根键包括当前登录用户的配置信息,包括环境变量,个人程序以及桌面设置。
此根键中保存的信息与HKUD下面的一模一样。任何对HKCU根键中信息的修改,都会导致HKUD中子项的修改。
HKEY_LOCAL_MACHINE(HKLM)
该根键包括本地计算机的系统信息,包括硬件和操作系统,安全数据,各类软件的系统设置信息。
常见子项的解释:
HARDWARE:该子项包括了系统系统使用的浮点处理器及串口的信息。
ACPI:存放高级电源管理接口数据。
DEVICEMAP:用于存放设备映射。
DESCRIPTION:存放有关系统信息。
RESOURCEMAP:用于存放资源列表。
SAM:未获得管理员权限,无法查看。
SECURITY:该子项只是为将来的高级功能而预留的。
SOFTWARE:该子项中保留的是已安装的32位应用程序的信息。
SYSTEM:该子项是启动时,所需的信息和修复系统是所需要的的信息。
HKEY_USERS(HKUSER、HKUD)
常见子项得解释:
Appevents:它包括了各种应用事件的列表
Eventlabels:按字母顺序列表。
Schemes:按事件分类列表。
Control Panel:它包括的内容与桌面、光标、键盘和鼠标等设置有关。
Keyboard layout:用于键盘的布局。
Preload:语言的加载顺序。
Substitutes:设置可替换的键盘语言布局。
该根键包括所有用户的信息,当前登录的用户,会映射到HKCU上。
HKEY_CURRENT_CONFIG(HKCC)
该根键包括当前硬件的配置信息,是从HKLM中映射过过来的。
综上:五大根键中,其实HKLM与HKUD这两个才是真正的注册表键,其他都是从其中映射出来的,相当于快捷方式。
二、注册表中存在的危险
注:若要进行注册表的添加、修改和删除前,请先进行注册表的备份,请先进行注册表的备份,请先进行注册表的备份,
重要的事情说三遍。
1.注册表备份:
右键选择导出,保存。若注册表在增删改中出现问题,双击备份的注册表即可还原。
(若你的打开方式默认为记事本,则右键点击打开方式,选择注册表编辑器打开,即可还原。)
2.注册表中存在的危险
(1).映像劫持:是为一些在默认系统环境中运行时可能引发错误的程序执行体提供特殊的环境设定。简单的来说,就是当目标程序被映像劫持时,当我们启动目标程序时,启动的时劫持后的程序而不是原来的程序。
例:
在注册表HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Option
下添加一个项sethc.exe,并在这个项中添加一个二进制字符串,将其命名为debugger,将其值设定为c:\windows\system32\cmd.exe
如此一来,连按五次启动粘滞键,则被替换为CMD命令窗口了。
(2).注册表自启动项:
木马程序和后门程序一般都需要依靠自启动进行,自启动项有两个键,区别如下:
Run:该项下的键值为开机自启动项,每一次都会随着开机自动启动。
RunOnce:该项下的键值只作用一次,执行完毕后会自动删除。
注册表自启动项位置如下:
用户级:
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunOnce
系统级:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Run
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\RunOnce
(3).用户登录初始化:
Userinit的作用是用户在进行登录初始化设置时,WinLogon进程会执行指定的Login scripts,所以我们可以修改它的键值来添加要执行的程序,注册表的路径为:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon
(4).影子用户:
影子用户,顾名思义就是一个隐藏用户,只能通过注册表查看到这个用户,其他方式找不到这个用户的信息。
例:
通过cmd命令
net user test$ /add
Net localgroup administrators test$ /add
建立一个test$用户,并将其添加到administrator的组中
通过修改注册表,将HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Account\Users下,将administrator对应的000001F4中对应的F值,复制给test$所对应的000003F0中的F值。此时锁屏时,改换test$用户登录,登录界面为administrator的桌面,即test$拥有与administrator相同的用户权限。
我们将
HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Account\Users\000003F0
HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Account\Users\Names\test$这两个注册表导出
并通过CMD命令,net user test$ /del ,将test$用户删除。
此时,我们通过账户管理以及命令net user,都无法查询到test$用户。
但是,如果我们通过net user test$命令,依然可以查看到test$用户确实存在。
此时的test$用户即为影子用户,并与administrator拥有相同的权限,使用
net user test$ /del 仍无法删除该公户。若该test$为其他人,侵入个人电脑创建,为相当危险的情况。只能通过注册表进行删除。
三、注册表安全配置
1.设置对注册表编辑器(regedit.exe)的运行限制。为了防止未经授权的访问注册表编辑器,最好的方式就是让恶意用户访问注册表。我们可以通过,对regedit.exe进行访问限制,可以通过右键,属性,安全选项卡,
将多余的用户进行删除或者对其权限进行修改,以防止未经授权的人对注册表进行编辑。
我们还可以对regedit.exe存在的文件夹进行权限限制。c:\windows中,用鼠标右键该文件夹,在属性对话框中打开“安全”选项卡,默认情况下该文件夹可以被一般用户管理员使用,我们可以根据需要在该界面中进行用户授权和权限设置。
2.其次也要加强物理防护,添加较强的开机密码,以及离开时进行锁屏操作。
3.对注册表的恶意修改,一般来自远端,若是没有远程操作的需求,可以关闭远程端口。
笔者对注册表安全配置,还处于学习阶段,大家有各种好的建议和意见,也请大家留言。