网络安全

Windows操作系统在服务器上安装非常广泛,企业或个人经常安装的操作系统有VhndowsServer2000、2003和2008等,这些操作系统的本身漏洞我们无法控制,但我们可以通过系统安全加固手段有效降低自己服务器被黑客入侵的几率。日前常见的加固手段主要包括账户设置、组策略设置、注册表设置、IPSec、服务设置等,本文主要讲如何通过编程方式操控组策略从而实现Windows操作系统的安全加固,下表为在组策略巾需要进行的相关配置。密码复杂性要求:启用最短密码长度:8位帐户策略密码最长使用期限:0天密码最短使用期限:0天强制密码历史:0个记住的密码复位帐户锁定计数器:5分钟帐户锁定时间:30分钟帐户锁定策略“复位帐户锁定阐值”5次成功,失败:审核帐户登录事件、审核帐户管理、审核日录服务访问、审核登录事件、审核特权使用审核策略失败:审核对象访问成功:审核策略更改、审核系统事件无审核:审核过程追踪通过终端服务拒绝登录:无用户权限指派通过终端服务允许登录:Administrators组和remotedesktopusers组交互式登录:不显示上次的用户名启用网络访问:不允许SAM帐户和共享的匿名枚举启用网络访问:不允许为网络身份验证储存凭证启用安全选项网络访问:可匿名访问的共享全部删除网络访问:可匿名访问的命名管道全部删除网络访问:可远程访问的注册表路径全部删除帐户:重命名系统管理员帐户重命名一个帐户组策略与注册表的关系非常紧密,许多组策略中的设置可以通过修改注册表,然后用RefreshPolicy函数强制刷新组策略来实现(其实有些组策略修改的实质也正是修改注册表相关配置),例如上表巾的“不显示上次的用户名”和“不允许SAM帐户和共享的匿名枚举”等。但是有些组策略的设置无法通过注册表进行修改,例如上表巾的账户策略、账户锁定策略、审核策略和用户权限指派等。所以本文通过Kindows白带的secedit这个命令对组策略进行设置,主要用到的命令是secedit/configure/dbFileName/cfgFileName/quiet.其巾/db后的文件名可任意取,一股以.sdb为后缀名,/cfg后的文件为我们需要配置的文件。该命令的其他语法和具体使用方法网上可以查到,这里不再赘述。如何将表巾的组策略设置对应到配置文件巾,账户策略、账户锁定策略在配置文件巾的配置命令格式如何,这些我们可以参考Windows自带的配置文件模板,模板位于C:WINDOWS\Security\templates下。通常为inf格式文件。在配置文件中,分号代表注释符,其后可跟注释语句.....:头部一些声明[SystemAccess]blinimumPassvrordAge=0:密码最短使用期限MaximumPassvrordAge=-1:密码最长使用期限,此处一1代表0.若写0则会出错blinimumPassrrordLength=8:最短密码长度PassvrordCoruplexity=1:密码复杂性要求PassvrordHistorySize:0:强制密码历史NerrAdministratorName=’testAdministrator’:重命名系统管理员账户,名字可自己设定LockoutBadCount=5:账户锁定阀值ResetLockoutCount=5:复位账户锁定计数器LockoutDuration=30:账户锁定时间[EventAudit]:事件审计,0代表不审汁,1代表成功审计,2代表失败审计,3代表成功失败均审计AuditSystemEvents=1:系统事件成功AuditObjectAccess:2:对象访问失败AuditPrivilegeUse=3:特权使用成功失败AuditPolicyChange=1:策略改变成功AuditAccountllanage=3:账户管理成功失败AuditProcessTracking=0:过程追踪无审核AuditDSAccess=3:目录服务访问成功失败AuditAccountLogon=3;账户登录成功失败AuditLogonEvents=3:登录事件成功失败[RegistryValues]:这里的设置格式为path=Type,Value.其中常用的Type有:1代表REG-SZ.2代表REGEXPAND_SZ,3代表REG_BINARY,4代表REG_DWORD.7代表REGHULTI_SZMACHINE\Softvrare\XicrosoftVVindoWs\CurrentVersion\Policies\System\DontDisplayLastUserName=4,1:显示上次的用户名lIACHINE\System\CurrentControlSet\Control\Lsa\DisableDomainCreds=4,1:小允许为刚络身份验证储存凭证MACHINE\System\CurrentControlSet\Control\Lsa\RestrictAnonymous=4,1:小允许SAM帐户和共享的匿名枚举HACHINE\System\CurrentControlSet\Control\SecurePipeServers\Winreg\AllorredExactPaths\Uachine=7,,可远挫访问的注册表路径MACHINE\System\CurrentControlSet\Services\LanllanServer\Parameters\NullSessionPipes=7,.可匿名访问的命名管道MACHINE\System\CurrentControlSet\Services\LanManServer\Parameters\NullSessionShares=7,.可匿名访问共享.PrivilegeRights]SeRemoteInteractiveLogonRight=:*S-1-o-32-550,:*S-1-5-32-544:通过终端服务允许登录SeDenyRemoteInteractiveLogonRight=:通过终端服务拒绝登录如果需要对其他的组策略进行设置,但是又不知道对应的修改项和值,可以采用以下的方法:首先,打开注册表,选择相应的项右击,点击“导出策略”,保存为1.inf,如图1所示:然后手工修改需要设置的项和值,再次选择“导出策略”,保存为2.inf:最后使用文本比较软件(如ucl.exe).将两者进行比对,不同之处就是刚才设置的值,找到之后就可以在配置文件中进行相应的设置。图1下面我们编程实现组策略的设置,具体的思路是通过用户的选择设置组策略的配置文件,然后通过secedit命令将配置文件导入到组策略巾生效,最后清除产生的中间文件,核心代码如下:CFileinf;inf.Open(_T("c:\\czbankinf"),CFile::modeCreateCFile::modeWrite)://创建配置文件char*str=":Unicode]\r\nLnicode3res\r\n-----------”://具体配置信息此处略过inf.Write(str,strlen(str))://写入配置信息if(用户的选择)(char*str:-blinimumPasssrordAge:0\r\n……”:inf.wrrite(str,strlen(str))://根据用户选择写入配置信息)//重命名系统管理员用户名需要特殊处理LpdateData(TRUE)://用户填写的用户名输入if(adminName.Compare(_T(~))f_0){//用户名为空则小处理CStringstrName=_T(-NevrAdministratorName2\""):strName+:adminName+_T(’\’\r\n’)::intlen2strName.GetLength():char~str=newchar[len+l];//CString类型的字符串无法调用\rrite函数写入文本,需要转变成charnt~型;在Unicode编码下(VisualStduio环境),无法直接通过强制转换柬将CString变成char*,需要调用WideCharToblultiByte函数转换,该函数的具体格式可查阅USDNJideCharTo~lultiByte(CPACP,0,strName,strName.GetLength(),str,len,NULL,NULL):str[len]='\O’://最后一位加入字符串结柬符inf.TVrite(str,strlen(str)):delete:lstr;}//其他一些配置信息q入inf.Close()://关闭配置文件//创建进程调用secedit,将配置文件导入到组簧略中PROCESS_INFOIOIATIONpi;STARTUPINFOsi;si.cb=sizeof(STARllPINFO)~..//进程启动的一些参数配置,略过//执行的命令rCw\Rcorrmand:]2_TCsecedit/configure/dbc:\\czbank.sdb/cfgc:\\czbank.inf/quiet’):BOOLret=CreateProcess(NULL,cormand,NLLL,NLLL,FALSE,NOR11AL-PRIORITYCLASS,NULL,NULL,ksi,&pi)://创建进程执行命令if(ret){CloseHandle(pi.hThread)://关闭线程句柄/fraitForSingleObject(pi.hProcess,INFINITE)://等待进程结束GetExitCodeProcess(pi.hProcess,&cbrExitCode):CloseHandle(pi.hProcess)://关闭进程句柄,退出}CFile::Remove(_T("c:\\czbank.inf”))://删除临时产生的文件CFile::Remove(_T("c:\\czbanksdb")):以上代码在VisualStudi02008中测试通过,加同的操作系统是WindowsServer2003。在MSDN中说对组策略的操作可以通过IGroupPolicyObject接口实现,对应的说明可以在巾找到,但是关于这个接口的实际用例以及操作流程网上资料实在太少,我研究了,但未能搞清楚,如果有朋友研究过这个接口的相关编程。选自黑防

2011-3-23 6406 0