【分享嘉宾】陈然
【嘉宾简介】陈然(b0b@c),任职于某安全公司网络安全部,负责内部安全异常检测规则,包括内网渗透、威胁情报、攻击模拟、攻击特征提取、检测规则工程化,目前致力于在安全运营框架下,构建基于ATT&CK模型的实战攻击模拟和检测能力。
【活动时间】5月15日周五晚上19:00-20:00,60分钟。
【活动形式】嘉宾通过文字形式,在“金融业企业安全建设实践”、“企业安全建设实践2群”微信群内就“内网安全攻击模拟和异常检测规则实战”话题直播分享(约四十分钟),之后是互动提问和回答(约二十分钟)。
大家好,我是陈然,目前在公司网络安全部负责Threat hunting团队,很高兴有机会和大家分享
随着现在国家越来越重视信息安全,大型的“护碗”越来越多,也越来越逼近实战,企业或者相关的组织机构也对这种实战化的安全对抗越来越重视。
我们建立起内部安全的安全运营体系架构后,安全事件经历顶峰后再次跌落到一个低谷。原因也很简单,随着我们发现了一些基础的安全问题后,该补漏洞就补漏洞,该限制访问就限制访问,该处罚违规就处罚违规,基础的一些安全攻击已经被我们发现和拦截了。
但是我们真的安全了吗?
最近两年我们开始在内部进行常态化安全红蓝对抗,红队有我们专门承担攻击任务的安服团队,也有我们内部安全的模拟攻击队(虚拟红队),前者更多是全阶段攻击模拟:侦查范围、定位目标、设计攻击方案、实施攻击、达成目的;后者更多是分阶段攻击模拟:模拟某一个或者某几个具体的TTPs,比如测试T1075– Pass the Hash的横向移动在目标机器上正常执行。通过不断的真实对抗,我们还是发现了很多问题,我们的网络与信息系统依然面临着不少风险,也存在着一些问题。
不得不说,攻击队师傅们的手法非常精妙啊,例如代码审计出应用0day、权限维持框架工具重写、各类白利用内存执行绕安全工具等等,思路也是清奇:从地下车库或者角落里翻窗进入大楼啊,买一箱子零食绕保安进入公司、发邮件控终端耐心摸清上下游再脱域拿域管账户... 我们也是在一次次抵抗中不断复盘总结,吸取经验教训。
我们的安全运营的监控体系在提升了覆盖率和正常率之后,却遇到了发现能力瓶颈,有价值的安全事件越来越少,为什么?经过思考,我们得出答案:
我们的监控体系在对抗一些高水平的攻击手段上,现有的一些规则是不够的。 陈然
-
我们安装了WAF,网站日志也接进来了,怎么进入内网的?
答:钓鱼进来的啊!
-
我们在员工电脑上进来是普通用户,搞不了事情啊?
答:人家用白利用的提权方法!
-
什么我们的EDR没有监控到对方提取凭据,为什么?
答:人家直接在内存DUMP的!
-
安装了卡巴斯基,专治内存攻击手法的,没拦住?
答:底层DLL和驱动已经被替换了!
-
怎么一条日志没有?
答:日志进程被Hook了啊!
当攻击技术能力超越你的防御检测设备检测能力的时候,整体安全能力就被限制了。所以需要提高我们对攻击的了解程度,研究攻击的原理,模拟攻击的进行,提炼出检测规则,去切实提高实战对抗的能力。
谈到攻击,首先我们想到的是啥?对,没错,就是ATT&CK这个矩阵图,但是这个东西真的太全了,太完整了,太复杂了。所以我们需要模仿ATT&CK建设一个自己的作战地图。根据我们自己的资产的现状,结合我们自己渗透的经验,加上和大家一起头脑风暴,我们构建了自己的作战地图。
我会发一下作战地图的图片,给大家一点点时间,看一下,可能比较长,后面有兴趣的可以慢慢看。(图片过大无法上传公众号,链接:https://pan.baidu.com/s/1YiKfuN-YiktMDaHAWUg3WA 密码:u71w)
从渗透的阶段来讲,大概可以分为一下几个阶段
由于现在网络边界的检测大家都很重视,WAF或者IPS/IDS一类的设备也很多,在缩小攻击面这件事上大家也都很努力的去做,所以边界攻击的检测相对是充足的,缺乏的是在突破边界后的检测能力,于是我们重点选取了以下几个阶段,进行攻坚。
初期我们做了这几个领域:
-
权限提升
-
权限维持
-
凭据窃取
-
横向移动
在这几个领域举几个例子:
1、权限提升
我们来看看MSF的Meterpreter中的GetSystem,我们知道这个命令可以用来提权,但是为什么呢,怎么检测呢?
-
可以看到GetSystem的基本原理流程,GetSystem创建一个新的Windows服务,并将其设置为连接命名管道时以SYSTEM身份运行。
-
GetSystem生成一个进程,该进程会创建一个命名管道并等待来自上述服务的连接。
-
Windows服务启动,连接到命名管道。
-
上面生成的进程接收连接,并调用ImpersonateNamedPipeClient,这样就会为SYSTEM用户创建一个模拟令牌。
然后,我们只需用新收集的SYSTEM模拟令牌生成cmd.exe,这样,我们就获得了一个具有SYSTEM权限的进程。
当然,这里涉及到一个Windows用户模拟的概念:Windows操作系统允许一个进程模拟另一个用户的安全上下文,安全上下文当初当然包括权限。例如FTP账户启动的FTP服务进程可以模拟用户USERA的权限去访问一个文件夹,提供读写功能等。
https://docs.microsoft.com/en-us/windows/win32/api/namedpipeapi/nf-namedpipeapi-impersonatenamedpipeclient?redirectedfrom=MSDN
于是我们知道这个提权的关键点在于管道PIPE,庆幸的是,经过测试我们可以找到相关的特征,于是规则也就可以做出来了。
2、BypassUAC
这个我们是根据MSF的源代码进行一些分析,我们可以很轻松的在Rapid7的GitHub账号上找到开源的MSF的1代码。
我们随机提取一个Injection的例子,我们再来看看他的描述
这里用到了Windows下的内存对抗技术,反射性DLL注入,什么是反射性DLL注入呢?
我们先来说说进程注入,注入恶意Payload:
-
OpenProcess 可以打开目标进程
-
VirtualAllocEx 在目标进程中分配一块内存区域
-
WriteProcessMemory 在刚刚分配的内存区域中写入恶意的Payload
以上3个函数可以实现Payload的注入,这些都是Windows的一些API。
再来看看反射DLL注入(这个DLL可以是本地的,也可以是网络的):
-
使用RWX权限打开目标进程(OpenProcess),并为该DLL分配足够大的内存(VirtualAllocEx)。
-
将DLL复制到分配的内存空间(WriteProcessMemory)。
-
计算DLL中用于执行反射加载的导出的内存偏移量(GetReflectiveLoaderOffset)。
-
调用CreateRemoteThread(或类似的未公开的API函数RtlCreateUserThread)在远程进程中开始执行,使用反射加载函数的偏移地址作为入口点。
-
反射加载函数使用适当的CPU寄存器查找目标进程的进程环境块(PEB),并使用它查找内存中的地址kernel32.dll以及任何其他所需的库。
-
解析的KERNEL32出口目录中找到所需的API功能,如内存地址LoadLibraryA,GetProcAddress和VirtualAlloc。
-
使用这些函数,然后正确加载DLL(本身)到内存中,并调用它的入口点,DllMain。
所以我们需要使用EDR 去Hook这些关键的函数,然后利用获取到进行注入的源进程名、目标进程名去判断,有大厂背书签名的,自己注自己的(比如Google的Chrome)的暂且放过,剩下的就可以去排查排查。
当然,这样也有问题,如果签名被盗用怎么办?如果大厂软件程序被感染怎么办?这就需要依赖其他规则去检测这几方面的问题了。
然后我们说下权限维持中的例子。
3、Windows Library-MS持久化
这个东西的典型例子是我的文档,他不是一个文件夹,本质是就是这样一个XML文件。
这个利用过程如图:
我们可以添加一个CLSID,里面有一个URI 写到XML里面。
根据这个URL的位置改成自己恶意程序注册的那个就可以了,下次用户打开这个XML对应的路径就可以引起你的后门上线。
这个注册是要在注册表里生成新的键值的,所以还是要监控注册表。
4.凭据窃取。
大家都知道一个很常用的叫做Mimikatz的凭据提取工具,大部分杀软对这个程序都是查杀的。
但是如果对方使用的是PowerShell版本的 VBS版本/JS版本/C#版本的Mimikatz,还有多少能查杀呢?

-
监控一些重点注册表项,尤其是关于注册COM组件的地方和一些关于服务启动过程中会带起的一些进程的地方(俗称白利用)。
-
Hook一些关键的系统API调用,例如在ALSR场景下导出具体函数或者模块地址的API,以及那些和注入相关的API。
-
关注一些重点进程及其相关服务的异动,例如lsass.exe的Dump行为等等、或者一些高权限进程或服务对管道的连接。
补充:其实刚才陈然也讲到很多,攻击要分析到原理层。像是我们针对Lsass的权限申请或者内存读取,达到了以不变应万变的凭据提取攻击。无论是怎么样的凭据提取攻击,原理到最后都是要读这个Lsass认证进程的内存。监控到这个核心行为就好。
A:比例不好说,但概率是100%,一方面是正面打线上系统,另一方面就是打终端然后打域控等核心拿内网。
A1:规则不可能解决所有攻击,比如PTH就很难,但是异常行为模型可以,你的ip不是这个账号,你今天认证了这个账号就有问题,需要互补。
打内网的目的并不一定是为了打域控,攻击的本质是信息收集、分析和关联,而传统内网里的敏感信息最多。打内网的话找数据更能得利,还不易被发现,只是说护碗而言终端分太低了,和域控这种核心相差几百倍。
我们有一点恶意行为的监测,思路不大一样,倒不是去监测未知的攻击手法,而是做了些行为分析。攻击者通过位置手段控制了一个终端,他总要干些坏事啊,在内网Wiki搜密码,在内网IM搜密码,用自己账号试着登陆些公司内部IT系统。假如这个用户在非常用时间非常用地点 非常用IP段登陆系统,或者短时间大量风险行为,我们也有模型告警。
打内网的目的并不一定是为了打域控,攻击的本质是信息收集、分析和关联,而传统内网里的敏感信息最多。
1、安全研究负责人、
2、客户端安全工程师(Windows)
3、客户端安全工程师(MacOS/iOS)
4、应用安全工程师(代码审计)
5、SDL安全工程师
[email protected] (请注明:社招-职位-城市-姓名-来自君哥的体历)


-
聂君,信息安全从业人员,十余年金融行业信息安全从业经历,默默无闻。好读书,不求甚解。性格开朗,爱好足球。 -
本订阅号文章是个人对工作生活的一些体验和经历分享,站在不同角度和立场解读会有偏差,见仁见智,不求正确统一,但求真、善、美。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论