|
|
51CTO旗下网站
|
|
移动端

一些Windows服务器系统登录安全与NTFS技巧

影响windows系统安全的要素很多:安全模型、文件系统、域和工作组、注册表、进程和用户等等。 [安全的五类服务:身份认证、访问控制、数据保密性、数据完整性、不可否认性。]

作者:某瀚来源:AD攻防工作室|2018-10-29 10:45

 windows服务器系统登录安全与NTFS技巧

影响windows系统安全的要素很多:安全模型、文件系统、域和工作组、注册表、进程和用户等等。 [安全的五类服务:身份认证、访问控制、数据保密性、数据完整性、不可否认性。]

帐号安全策略设置:

账号介绍:

用户帐户(Account)

所谓用户帐户,是计算机使用者的身份标识。每一个使用计算机的人,必须凭借他的用户帐户才能进入计算机,进而访问计算机中的资源。用户帐户有两种基本类型:本地用户账户和全局用户账户(与用户账户): (1)本地用户创建于网络客户机,作用范围仅限于创建它的计算机,用于控制用户对该计算机上资源的访问。 (2)全局用户账户创建于服务器(域控制器),可以在网络中任何计算机上登录,适用范围是整个网络。

Windows系统常用的内置用户:

(1)Guest:来宾用户。

(2)Administrator:系统管理员账户,具有最高权限。

组(Group):

组是一组相关帐号的集合,即用户帐户的一种容器,提供了为一组用户同时设定权利和权限的可能。目的:简化对系统的管理,通过组可以一次性地为一批用户授予一定的权利和权限。 [Windows NT内置的用户和组帐号:内置用户账号: --Administrator和Guest --可以改名,不能删除。内置用户组账号: --Administrators --Users --Guests --Backup Operators --Replicator --Operators(Print,Account,Sever) --Domain(Administrators,Users,Guests) --特殊组(Network,Interative,Everyone……) ]

组介绍:

  • 本地组: (工作组网络环境的组)用于创建网络客户机,控制对所创建的计算机资源的访问。它的成员是用户帐户和全局组,它在一个本地的系统或者域中进行维护。本地组只有在创建它的本地系统或者域中才能实现对许可权和权限的管理。 全局组(域环境中的组): 用于创建服务器(域控制器),控制对域资源的访问。系统管理员可以利用全局组有效地将用户按他们的需要进行安排。 windows系统提供了三类全局组: (1)管理员组(Domain Admins) (2)用户组(Domain Users) (3)域客人组(Domain Guests)
  • 特别组: windows系统为了特定的目的创建了特别组。通过用户访问系统资源的方式来决定用户是否具有特别组的成员资格,特别组不可以通过用户管理器为其添加新成员,同时它也不可以被浏览和修改。 windows系统提供的特别组如下: (1)System:Windows操作系统 (2)Creator owner:创建对对象拥有所有权的用户 (3)Interactive:以交互的方式在本地系统登录入网的所有用户 (4)Network:系统中所有通过网络连接的用户。 (5)Everyone:登录上网的所有用户(包括Interactive和Network组) 需要注意的是,在特别组中,所有登录用户都是Everyone组的成员。

帐号安全管理:

  • 用户帐户的管理: 从安全角度考虑,应注意,要保证用户不会从隶属于的组中获得超过其任务要求的额外权限,同时用户隶属于的组能满足它的任务要求。
  • 系统管理员账户的管理: 为了使对系统的野蛮攻击和猜测变得更加困难,应该选择随即的、并且大小写混合的字符串来设置系统管理员,尤其是系统域管理员(主域控制器的系统管理员)的口令。其他服务器的管理员应采取与域控制器中管理员不同的密码,以便更安全的保证域的绝对管理权限。
  • 组的安全管理措施: (1)应该清楚用户组的成员设置是否得当,要对其进行仔细的观察; (2)为了使具有相同安全策略的用户组在登录时间、密码和权限等方面保持一致,可以用组将器组织在一起。

帐号克隆和SID:

  1. 安全标识符(Security Identifiers) SID也就是安全标识符,是标识用户、组和计算机账户的唯一的号码。其实Windows系统是按SID来区分用户的,不是按用户的用户账号名称,所以建立一个账户A,然后删除后马上再重建一个用户A其实是两个账户。
  2. 利用SID原理——账号克隆 在windows操作系统中通过对注册表的HKEYLOCALMACHINE\SAM\SAM\Domains\Account\Users\下的子键进行操作,(需要system权限)使一个普通用户具有与管理员一样的桌面和权限。这样的用户就叫克隆帐号。 在日常查看中这个用户显示它正常的属性。例如guest用户被克隆后当管理员查看guest的时候它还是属于guest组,如果是禁用状态,显示还是禁用状态,但这个时候guest登入系统而且是管理员权限。 一般攻击者在入侵一个系统就会采用这个办法来为自己留一个后门。
  3. 防范方法: 入侵者在系统中对账号进行了克隆,一般克隆系统中已经存在账号,例如克隆aspnet账号,TsInternetuser、Guest等帐号,通过"net user"、"net localgroup administrators"以及计算用户图形管理都是查不出来的,如果计算机开放了远程终端,则入侵者可以通过这些用户账号正常访问系统。非常规检查主要通过本地管理员检查工具来检查。本地管理员检查工具则是图形界面,相对功能少些。 直接运行“本地管理员检查工具”,程序会自动以图形化界面显示系统中存在的帐号,并会给出相应的提示,一般显示为“影子管理员”。

帐号枚举:

  1. 由于windows的默认安装允许任何用户通过空用户得到系统所有帐号和共享列表,这本来是为了方便局域网用户共享资源和文件的,但是任何一个远程用户通过同样的方法都能得到账户列表,使用暴力法破解账户密码后,对我们的服务器进行攻击,称之为帐号枚举。
  2. 防范方法: 控制面板--管理工具--本地安全策略选项 在windows设置-“安全设置”中单击“本地策略”中的“安全选项”命令,将右边“策略”中“网络访问:不允许SAM账户的匿名枚举”及“网络访问:不允许SAM账户和共享的匿名枚举”命令启用。

Windows本地登陆过程 原理:

GINA->LSA->SSPI->Kerberos ->NTLM

  • Winlogon Graphical Identification and Authentication DLL(GINA) Local Security Authority(LSA) Security Support Provider Interface(SSPI) Authentication Packages Security support providers Netlogon Service Security Account Manager(SAM) (标红字体表示易被攻击的流程)
  • --Winlogon and GINA 键盘记录: Winlogon调用GINA DLL,并监视安全认证序列。而GINA DLL被设计成一个独立的模块,当然我们也可以用一个更加强有力的认证方式(指纹、视网膜)替换内置的GINA DLL。
  • Winlogon在注册表中查找\HKLM\Software\Microsoft\Windows NT\CurrentVersion\Winlogon,如果存在GinaDLL键,Winlogon将使用这个DLL,如果不存在该键,Winlogon将使用默认值MSGINA.DLL [工具:WinlogonHack]

--sam文件的安全:

windows中对用户帐户的安全管理使用了安全账号管理器(Security Account Manager)的机制,安全账号管理器对账号的管理是通过安全标识进行的,安全标识在账号创建时就同时创建,一旦账号被删除,安全标识也同时被删除。安全标识是唯一的,即使是相同的用户名,在每次创建时获得的安全标识都是完全不同的。

安全账号管理器的具体表现就是%SystemRoot%\system32\config\sam文件。sam文件是Windows的用户帐户数据库,所有用户的登录名及口令等相关信息都会保存在这个文件中。

如果我们用编辑器打开这些sam文件,除了乱码什么也看不到。因为NT系统中将这些资料全部进行了加密处理,一般的编辑器是无法直接读取这些信息的。

SAM文件的位置:

第一个:C:\WINDOWS\repair\SAM

第二个:C:\WINDOWS\system32\config\SAM

第一个位置的SAM是账户数据库的备份文件,第二个是系统正在使用的账户数据库文件。

SAM是构成windows注册表里的五大分支之一,具体内容保存在%SystemRoot%\system32\config\sam里;在windows域控制器上,账户和口令字谜文保存在活动目录(Active Directory,AD)里,对应文件是:%SystemRoot%\ntds\ntds.dit这里面包含不止是Username和HASH,还有OU、Group等等。破解方式:

(1)Sam文件存储在C:\WINDOWS\system32\config文件夹内,指直接复制粘贴不可行。

(2)使用hWinHax,将目录下的SAM文件和system文件导出。或使用samcopyer直接复制导出SAM文件。

(3)使用ophcrack进行彩虹表破解:运行ophcrack点击load->encrypted sam->再选择刚才准备好的sam文件,加载彩虹表后点击crack,即可。

--LSA(本地安全认证)注入:

本地安全认证(Local Security Authority)作用:调用所有的认证包,检查注册表;重新找回本地组的SIDs和用户权限;创建用户的访问令牌;管理本地安装的服务所使用的服务账号;储存和映射用户权限;管理审核的策略和设置;管理信任关系……

破解方式:

WinPswLogger2:windows的身份验证一般最终都是lsass进程,默认模块是msv1_0.dll,而关键在其导出函数LsaApLogonUserEx2。本程序通过注入代码到lsass进程hook LsaApLogonUserEx2,截取密码。在cmd中加载相应dll文件即可。

--Netlogon Service(NTLM认证):

早期SMB协议在网络上传输明文口令。后来出现了LAN Manager Challenge/Response 验证机制,简称LM,它是如此简单以至于很容易被破解。微软提出了WindowsNT挑战/响应验证机制,称之为NTLM。现在已经有了更新的NTLMv2以及Kerberos验证体系(保存的加密后的散列称为hash,一般翻译作"散列",也有直接译为“哈希”的,就是把任意长度的输入,通过散列算法,变换成固定长度的输出,输出的就是散列值。这种转换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出。所以不可能从散列值来唯一地确定输入值。)NTLM是windows早期的安全协议,因向后兼容性而保留下来。NTLM是NT LAN Manager的缩写,即NT LAN管理器。

NTLM的适用场景:

在网络环境中,NTLM用作身份验证协议以处理两台计算机(其中至少有一台计算机运行windows NT 4.0或更早版本)之间的事务。例如,以下列举了两种配置将使用NTLM作为身份验证机制:

Windows或Windows xp professional 客户端向 Windows NT 4.0 的域控制器验证身份。

Windows NT 4.0 WorkStation 客户端向Windows 或Windows Server 2003 域控制器验证身份。

NTLM原理解析:

解析之前先看NTLM传输的例子TELNET

通过[开始]--[网络工具]--[服务] (或运行tlntsvr.exe程序)就可启动该服务。在客户端单击“开始”按钮,在弹出的菜单中选择“运行”命令,然后输入以下命令建立连接:

  1. telnet[Remote-system][Port-number] 

正常情况下,服务启动后,键入该命令后应该是远程计算机回送Login和Password信息,提示用户输入用户名和口令。

可是仔细看看上显示,根本没有给你输入用户名和密码的机会,直接断开连接,这是什么原因呢?

原来是win2000以后的telnet的一种验证身份方式所致:Windows NT LAN Manager(NTLM)

NTLM的工作流程:

(1)客户端首先在本地加密当前用户的密码称为密码散列;

(2)客户端向服务器发送自己的账号,这账号是没有经过加密的,明文传输;

(3)服务器产生一个16位的随机数字发送给客户端,作为一个challenge(挑战);

(4)客户端再用加密后的密码散列来加密这个challenge,然后把这个返回给服务器。作为response(响应)

(5)服务器把用户名、给客户端的challenge、客户端返回的response这三个东西,发送域控制器;

(6)域控制器用这个用户名在SAM密码管理库中找到这个用户的密码散列,然后使用这个密码散列来加密challenge。

(7)域控制器比较两次加密的challenge,如果一样,那么认证成功。

从上面的过程中我们可以看出,NTLM是以当前用户的身份向Telnet服务器发送登录请求的,而不是用你自己的账户和密码登录的,显然,你的登陆将会失败。

破解方式:

(1)在命令行使用pwdump7,获取NTLM散列;

(2)在ophcrack内load中选择single hash,复制需破解用户的NTLM散列;

(3)用彩虹表破解。

防范方法(禁止LMHASH存取):

法①:通过组策略实现。在“组策略”中,依次展开“计算机配置”--“Windows设置”--“安全设置”--“本地策略”--“安全选项”,启用“网络安全:不要再下次更改密码时存储LAN Manager的哈希值”。

法②:使用长度至少为15位字符的密码。这种情况下,Windows会存储无法用于验证用户身份的LM哈希值。

--Keberos:

Keberos是为TCP/IP网络系统设计的可信的第三方认证协议。网络上的Keberos服务基于DES对称加密算法,但也可以用其他算法替代。因此,Keberos是一个在许多系统中获得广泛应用的认证协议,Windows2000就支持该协议。

域环境中的首选。

其他账号安全设置要点:

Administrator账号更名: 由于windows的Administrator账号是不能被停用的,也不能设置安全策略,这样攻击者就可以一遍又一遍地尝试这个账户的密码,直到破解,所以要在“计算机管理”中吧Administrator账户更名来防止这一点。鼠标右键单击Administrator,在右键菜单中选择“重命名”,重新输入一个名称。最好不要使用Admin、Root之类的名字,改了等于没改。尽量把它伪装成普通用户,比如改成:Guestone,别人怎么也想不到这个账号是超级用户。然后另建一个“Administrator”的陷阱帐号,不赋予任何权限,加上一个超过10为的超级复杂密码,并对该账户启用审核。这样那些攻击者忙了半天也可能进不来,或是即便进来了也什么都得不到,还留下了我们跟踪的线索。

不要显示上次登录的用户名: 攻击者一般还会从本地或者Terminal Service的登陆界面看到用户名,然后去猜密码。所以要禁止显示登录的用户名。设置方法是:选择[控制面板]--[管理工具]--[本地安全策略]--[本地策略]--[安全选项],在右侧双击"登录屏幕上不要显示上次登录的用户名"一项,选择“已启用”,另外我们也可以修改注册表来实现。找到注册表HKEYLOCALMACHINE\SOFTWARE\Microsoft\WindowsNT\CurrentVersion\Winlogon项中的Don’t Display Last User Name串,将其数据修改为1。

强制windows口令的复杂性: 通过组策略来实现强制口令复杂性的设置:打开组策略 [计算机配置]--[Windows设置]--[安全设置]--[账户策略]--[密码选项],在这里面进行策略的设置。

检查组和帐号: 计算机的常规检查主要通过[我的电脑]--[管理]--[计算机管理]--[本地用户与组]来实施检查;主要检查管理员组中是否存在多余账号,是否存在多个用户账号。或者通过CMD下的命令来查看(net user系列命令。)

检查用户: 操作系统中默认存在“Administrator”以及按照个人喜爱而添加的用户名称,其他还有一些用户例如启动IIS进程账户、Internet来宾账户等等,这些账号往往跟系统中提供的服务或者安装的软件有关。如果在检查过程中,发现了多余的账号,则极有可能是入侵者添加的账号。 任何一个用户账号都必须有一个组,在安全检查中,需要特别注意Administrator组,这个组是具有管理员权限的组,在“计算机管理”中,双击“组”中的“Administrators”即可查看是否存在多余的管理员账户。 [在cmd下也可以通过“net localgroup administrators”查看管理员组 如果入侵者在添加账号时在账号末尾加上了“$”符号,则使用“net user”命令查看用户时,以“$”结束的用户名不会显示,只能从计算机用户管理的图形界面来查看。]

系统权限设置NTFS:

windows2000以后的操作系统引入了一种权限机制,以实现对计算机的分级管理,他使不同的用户有不同的权限,从而适应了更加严峻的安全状况和应用需求:New Technology File System 在NTFS分区上,可以为共享资源、文件夹以及文件设置访问权限。许可的设置包括两方面的内容:一是允许哪些组或用户对文件夹、文件和共享资源进行访问;二是获得访问许可的组或用户可以进行什么级别的访问。访问许可权限的设置不但适用于本地计算机的用户,同样也适用于通过网络的共享文件夹对文件进行访问的网络用户。与FAT32文件系统下对文件夹或文件进行访问相比,安全性要高得多。

另外,在采用NTFS格式的win2000中,应用审核策略可以对文件夹、文件以及活动目录对象进行审核,审核结果记录在安全日志中,通过安全日志就可以查看哪些组或用户对文件夹、文件或活动目录对象进行了什么级别的操作,从而发现系统可能面临的非法访问,通过采取相应的措施,将这种安全隐患减到最低。这些在FAT32文件系统下,是不能实现的。

利用供选数据流(Alternate Data Streams ADS)隐藏后门

什么是供选数据流(Alternate Data Streams ADS)? NTFS使用Master File Table(MFT)来管理文件。在NTFS中,每个文件都对应一个MFT记录,这些记录由若干个属性(attribute)组成,如: 文件名属性($FILENAME)、数据属性($DATA)、索引根属性($INDEXROOT)等。 这次的重点在于数据属性$DATA。每个文件都有$DATA数据属性以存储文件数据内容,其大小可以为0,但该属性必须存在。一般地,$DATA数据属性在文件创建的同时就创建了,这个数据属性被称为* 主数据流(Primary Data Streams)。* 当文件内容少于大约700字节时,文件内容会直接存储在主数据流中。而数据大小超过700字节左右时,就需要额外的数据属性 供选数据流(Alternate Data Streams),以为其分配簇空间。

供选数据流的作用 供选数据流在很多地方都有用处,例如windows下,给一个文件建立摘要信息时,这些信息的数据就保留在该文件的ADS中。除了摘要,像索引以外的附加属性都可以保存在ADS中。附加属性还可以用于隐藏数据,通常的dir命令及windows资源管理器都无法查看其数据。这为后门木马的免杀提供了条件~

供选数据流的攻击实例 可见FreeBuf 作者nickchang的文章:《一个用ADS(供选数据流)隐藏Windows后门的方法》 http://www.freebuf.com/articles/73270.html 及作者3gstudent的技术文章:《Hidden Alternative Data Streams的进阶利用技巧》 http://www.4hou.com/technology/4783.html 本ADS相关内容参考了博主 睿-行 的博文:《NTFS_c. MFT 属性类型》 http://blog.163.com/ourhappines@126/blog/static/12136315420131190171664/ 感兴趣的朋友可进入链接浏览。

【编辑推荐】

  1. 重新思考使用无服务器构建软件的方式
  2. 如何搭建Nginx服务器做到负载均衡?
  3. 详解Nginx主要应用场景/反向代理/负载均衡/动静分离/HTTP服务器
  4. Apache和Nginx两大Web常用服务器有什么区别,你知道吗?
  5. 超全面Nginx+VSFTP搭建图片服务器
【责任编辑:武晓燕 TEL:(010)68476606】


点赞 0
分享:
大家都在看
猜你喜欢
24H热文
一周话题
本月最赞

读 书 +更多

超级网管员——网络服务

本书全面介绍了Windows Server 2003 R2中最常用的各种服务,包括域名服务、动态IP地址服务、Windows名称服务、活动目录服务、Web服务、FTP...

订阅51CTO邮刊

点击这里查看样刊

订阅51CTO邮刊