首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

ATT&CK矩阵的攻与防

对于ATT&CK,我相信搞安全的师傅们都在熟悉不过了,ATT&CK把攻击者所运用的技术都以各种TTP展现出来了,如何将ATT&CK框架,更好的利用在我们的企业中,看似是一个简单的问题,实际操作却会出现许多无法意料的问题,就比如我们ATT&CK对应的计划任务,我们对应的规则应该怎么写,写完了规则的准确率是多少,误报率是多少,召回率是多少,写的规则是否真的能检测业务蓝军或者是入侵者,企业是否有支持ATT&CK运营的基础设施平台,ATT&CK运营人员的水位怎么样,因为你的规则匹配出了计划任务,但是仅凭借计划任务我们就能判断出改终端的行为是恶意的吗?不能这么草率吧,以及T1059.001的powershell,我们又打算如何设计我们的规则,是单纯的匹配恶意powershell文本的执行,比如powerspliot还是empire的脚本,还是根据powershell的功能来判断恶意行为?比如执行,下载,-bypass参数来匹配恶意行为,或者是直接套用微软的powershell语言限制模式,当然,这几种模式没有优劣之分,我们红军需要的是用已知的技术解决方案满足企业的安全需求,我们防守方的优势在于攻击者对于我们安全防线水位的未知 当然,我们企业红军所面临的蓝军或者攻击者,他们的攻击方式都是很简单致命的,就是一条攻击链路不会有没必要的攻击行为,这对于我们防守方来说,我们设计了很多规则,看似巧妙精密,但是还是会被企业的蓝军绕过,每次复盘都有许多能提升的水位,当然,废话了这么多,此篇文章仅是以笔者的攻防思路,输出自己对于ATT&CK矩阵的理解,文章尽量会按照以前的风格浅显易懂,如果有师傅对ATT&CK感兴趣,欢迎与我交流,可以邮箱联系我

02

创建SvcHost.exe调用的服务原理与实践

1. 多个服务共享一个Svchost.exe进程利与弊 windows 系统服务分为独立进程和共享进程两种,在windows NT时只有服务器管理器SCM(Services.exe)有多个共享服务,随着系统内置服务的增加,在windows 2000中ms又把很多服务做成共享方式,由svchost.exe启动。windows 2000一般有2个svchost进程,一个是RPCSS(Remote Procedure Call)服务进程,另外一个则是由很多服务共享的一个svchost.exe。而在windows XP中,则一般有4个以上的svchost.exe服务进程,windows 2003 server中则更多,可以看出把更多的系统内置服务以共享进程方式由svchost启动是ms的一个趋势。这样做在一定程度上减少了系统资源的消耗,不过也带来一定的不稳定因素,因为任何一个共享进程的服务因为错误退出进程就会导致整个进程中的所有服务都退出。另外就是有一点安全隐患,首先要介绍一下svchost.exe的实现机制。 2. Svchost原理 Svchost本身只是作为服务宿主,并不实现任何服务功能,需要Svchost启动的服务以动态链接库形式实现,在安装这些服务时,把服务的可执行程序指向svchost,启动这些服务时由svchost调用相应服务的动态链接库来启动服务。 那么svchost如何知道某一服务是由哪个动态链接库负责呢?这不是由服务的可执行程序路径中的参数部分提供的,而是服务在注册表中的参数设置的,注册表中服务下边有一个Parameters子键其中的ServiceDll表明该服务由哪个动态链接库负责。并且所有这些服务动态链接库都必须要导出一个ServiceMain()函数,用来处理服务任务。 例如rpcss(Remote Procedure Call)在注册表中的位置是 HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/RpcSs,它的参数子键Parameters里有这样一项: "ServiceDll"=REG_EXPAND_SZ:"%SystemRoot%/system32/rpcss.dll" 当启动rpcss服务时,svchost就会调用rpcss.dll,并且执行其ServiceMain()函数执行具体服务。 既然这些服务是使用共享进程方式由svchost启动的,为什么系统中会有多个svchost进程呢?ms把这些服务分为几组,同组服务共享一个svchost进程,不同组服务使用多个svchost进程,组的区别是由服务的可执行程序后边的参数决定的。 例如rpcss在注册表中 HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/RpcSs 有这样一项: "ImagePath"=REG_EXPAND_SZ:"%SystemRoot%/system32/svchost -k rpcss" 因此rpcss就属于rpcss组,这在服务管理控制台也可以看到。 svchost的所有组和组内的所有服务都在注册表的如下位置: HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows NT/CurrentVersion/Svchost,例如windows 2000共有4组rpcss、netsvcs、wugroup、BITSgroup,其中最多的就是netsvcs=REG_MULTI_SZ:EventSystem.Ias.Iprip.Irmon.Netman.Nwsapagent.Rasauto.Rasman.Remoteaccess.SENS.Sharedaccess.Tapisrv.Ntmssvc.wzcsvc.. 在启动一个svchost.exe负责的服务时,服务管理器如果遇到可执行程序内容ImagePath已经存在于服务管理器的映象库中,就不在启动第2个进程svchost,而是直接启动服务。这样就实现了多个服务共享一个svchost进程。 3. Svchost代码 现在我们基本清楚svchost的原理了,但是要自己写一个DLL形式的服务,由svchost来启动,仅有上边的信息还有些问题不是很清楚。比如我们在导出的ServiceMain()函数中接收的参数是ANSI还是Unicode?我们是否需要调用RegisterServiceCtrlHandler和StartServiceCtrlDispatcher来注册服务控制及调度函数? 这些问题要通过查看svchost代码获得。下边的代码是windows 2000+ serv

04
领券