罗盘时钟编码代码_安全研究 | 利用macOS Dock实现代码的持久化执行

8362a54f52e0195b6cc15fc87c905aeb.png

背景介绍

近期,我一直在研究macOS上的一些持久化技术,尤其是如何利用低等级用户权限来修改文件以影响用户交互。对于macOS终端用户来说,交互最频繁的当属Dock了。

在我的研究过程中,我发现了一个plist文件,它可以控制Apple D 对于macOS终端用户来说,交互最频繁的当属Dock了。ock应用程序是否可见。在检查plist文件中的值时,我就想判断是否可以通过修改这些值来将合法程序替换成我们的恶意程序,并执行恶意代码。

最终,我开发出了一个包含PersistentJXA项目的DockPersist.js脚本文件,并且能够将Dock中最常见的Safari和Chrome替换成我们的恶意程序,不过这种方法适用于其他任何应用程序。一旦用户点击了Safari或Chrome图标,我们的恶意软件就会运行,因为这里的Dock图标充当了实际应用程序的快捷方式。

接下来,我们将在这篇文章中介绍这项技术的实现方式。

环境配置

这种持久化方法需要将恶意程序上传到目标设备中,不过我们有很多种方法绕过Gatekeeper保护机制,并实现恶意程序的上传:

  • 压缩应用程序Bundle,在Mythic代理中使用上传命令,然后解压至目标路径;

  • 压缩应用程序Bundle,使用curl命令在目标设备中拉取程序,然后解压至目标路径;

  • 压缩应用程序Bundle,进行base64编码,然后在目标设备中解码,并解压至目标路径;

在这里,首先使用Automator创建一个应用程序,这个应用程序会在后台打开Safari,然后运行我们的Apfell Payload:

9213837ae55ceb021e06647baf3dd271.png

为了不引起终端用户的察觉,我用Safari罗盘图标替换掉了Automator图标。当然了,我们也可以使用Xcode来生成更加复杂的应用程序。

79a03ca153f0efdd0ebeeb739a3f5828.png

接下来,压缩应用程序Bundle并上传至目标系统,然后解压至/Users/Shared/路径下,此时我们就可以调用持久化方法了。

这里需要注意的是,考虑到plist文件的格式,这里要求伪造的应用程序命名为“Google Chrome”或“Safari”,并且存储路径为/Users/Shared/,然后修改Safari64和Chrome64变量来指向该地址。

调用持久化方法

将脚本导入至Apfell代理中:

4c69bba91cae1014adeff17f0ed0e898.png

调用DockPersist函数,该函数可以接收三个参数:

  • 应用程序名称;

  • 应用程序Bundle ID;

  • 重载Dock选项;

Bundle ID存在于Info.plist文件中,可以使用下列命令直接获取:

/usr/libexec/PlistBuddy -c 'Print CFBundleIdentifier' ~/FakeApp/Safari.app/Contents/Info.plist

6c12c05fbcce4d82cbd3b3f10e4538e1.png

检测技术

Crescendo是一款在单主机中快速捕捉事件的优秀工具,Crescendo也是macOS上的一款实时事件查看器,它可以利用苹果的终端安全框架ESF来实现其功能。ESF能够监控系统事件,并识别潜在的恶意活动,它相当于Windows中的ETW。

在Crescendo的帮助下,我们可以轻松查看持久化执行所生成的文件和进程事件。

比如说,下列ESF事件将会被映射至Crescendo中:

ES_EVENT_TYPE_AUTH_EXEC = process::execES_EVENT_TYPE_NOTIFY_EXIT = process::exitES_EVENT_TYPE_NOTIFY_CREATE = file::createES_EVENT_TYPE_NOTIFY_KEXTLOAD = process:kext::loadES_EVENT_TYPE_NOTIFY_MOUNT = file::mountES_EVENT_TYPE_NOTIFY_UNLINK = file::unlinkES_EVENT_TYPE_NOTIFY_RENAME = file::renameES_EVENT_TYPE_NOTIFY_UIPC_CONNECT = network::ipcconnectES_EVENT_TYPE_NOTIFY_FORK = process::fork

ES_EVENT_TYPE_NOTIFY_EXEC可以捕捉这种持久化方法的各种事件,如果还需要覆盖其他事件,我强烈推荐使用Xorrior的Appmon。

以下几个因素针对的是持久化方法的运行,因为实际的恶意应用程序组件将根据攻击者开发的内容而有所不同。

首先,plutil可以将Dock plist转换为XML,XML格式可以轻松修改:

0dd68753f11bfe7412b4ecd7344ab798.png

除此之外,temp9876文件的创建也会被记录到日志中。

DockPersist.js会在/private/tmp/目录下创建一个随机名称的文件,该脚本将修改plist文件的XML版本,并将其存储至这个随机文件名中。在这里,temp0wsn4p包含了XML格式的恶意plist,所以我们可以使用正确的格式来修改代码格式版本,并在Dock中正确加载:

221087dea93e9be574e1c46884160124.png

接下来,DockPersist.js会删除~/Library/Preferences/com.apple.dock.plist路径下的plist文件:

d9f513628899beea200c926c6f026346.png

ESF会捕捉到我们存储新的恶意plist文件的行为:

~/Library/Preferences/com.apple.dock.plist

930b69190e9d893a9a3909ff74b237ec.png

最后,因为我们在函数调用中重载了Dock,因此killall命令将会被调用:

e04b1709df951dc8a806537e035dd5c7.png

这些事件都可以作为构建检测机制的入口点,这里最重要的就是plutil和killall了。除此之外,还可以利用文件创建、删除和修改事件进行检测。

正常执行

我们已经知道了如何使用ESF来捕捉恶意行为了,那么我们如何让ESF来显示正常执行行为呢?

在正常操作中,cfprefsd会触发com.apple.dock.plist上的file::rename(文件重写)事件,当用户通过GUI手动修改Dock时同样会触发这些事件:

ad89f6fa1402657328b03da6b38db43f.png

防护绕过

攻击者可以在目标设备外执行plist修改操作,然后再上传到目标Dock plist路径下,这样可以降低被检测到的风险。但是,这同样会触发file::rename事件,不过它不会使用到cfprefsd进程。

e64d05729c944b104d60986a197ca4dd.png

可视化指标

我们的PoC应用程序执行之后,会在Dock中出现两个Safari图标:

e937f174b6213ff04cc485de2c4d5ff9.png

第一个Safari是恶意程序,它存在于plist文件中的persistent-apps字段,第二个就是真实的Safari了,它存在于plist文件中的recent-apps字段。

总结

在这篇文章中,我们介绍了一种在macOS上的持久化机制,它有点类似于在Windows中利用.LNK文件实现持久化的方法。更重要的是,我们希望通过这篇文章来帮助广大研究人员开发出相应的检测技术。

4ca586cd10095b20e8ea4b06395cdf41.gif

精彩推荐

42bb10484797f14d49bf0a7df0e3617e.png1ef644214cdb114330fb5214201e0d3b.pngc4192d792d03fbc78fea1c578e075367.png

3f18eec9247f25af8e99846cc17ab382.png1bd395c3b985e652d3ccd6c3b7b553c0.png2b23f1ae4895b43b704e424977c6308a.png

0787bf09d5ff27b5e2ad5a4d07450087.gif

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/567046.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

xpress-mp优化实例精选_量化研究每周精选-20170711

本周为大家精选了5项机器学习/深度学习在量化投资中的相关资源,机器学习/深度学习是偏实践性学科,只有不断实践才能有所收获,纸上得来终觉浅,绝知此事要躬行!BigQuant拥有海量的数据和主流开源框架,附能每一…

mac 删除分区 command r 选择网络_Mac使用必看基础篇,Mac快捷键大全,mac新手入门指南...

你是Mac新手吗?你对使用Mac电脑有疑问吗?你还不知道mac有哪些快捷键吗?别着急,来看看小编给大家准备的Mac使用必看基础篇——Mac快捷键大全,对于新手用户很有帮助哦!!一、开机相关命令快捷键C:从…

无法执行二进制文件: 可执行文件格式错误_VB中.frm .frx .vbp .vbw .scc文件都有什么作用,你知道么?...

.frm 是每个窗体都有的,保存窗体的代码,你可以用记事本打开;.frx 窗体里使用图片、图标等资料,保存的是资源;.vbp 和.vbw 保存一个工程时他会自动生成这两个文件。.vbp 是关键的文件,它用来保存当前工程中的…

共享文件原理_fishhook 的实现原理浅析

| 作者:小可长江,目前在 bilibili 做音视频研发,业余时间喜欢研究好的源码和逆向打开姿势很重要早些时候,iOS中一提到“黑魔法”、HOOK,很多人第一时间想到的就是 AOP RunTime MethodSwizzling 这些不明觉厉的东西&…

ef power tools mysql_使用 EF Power Tool Code Frist 生成 Mysql 实体

使用 EF Power Tool Code Frist 生成 Mysql 实体1,在要生成的项目上右键2,3,4,5, 生成后的效果已知问题:1,在Mysql数据表中 tinyint(1) ,会被映射成为 C# bool ,这样造成一些数据信息的丢失。 这个问题应该是EF 工具的问题&#…

python数据可视化散点图案例_Python数据可视化—散点图_python 数据可视化

Python数据可视化—散点图 PS: 翻了翻草稿箱, 发现居然存了一篇去年2月的文章。。。虽然naive,还是发出来吧。。。 本文记录了Python中的数据可视化——散点图scatter, 令x作为数据(50个点,每个30维)&#…

python重复元素判定_30段极简Python代码:这些小技巧你都Get了么

选自 | towardsdatascience转自 | 机器之心Python 是机器学习最广泛采用的编程语言,它最重要的优势在于编程的易用性。如果读者对基本的 Python 语法已经有一些了解,那么这篇文章可能会给你一些启发。作者简单概览了 30 段代码,它们都是平常非…

mysql主从数据库同步问题_聊聊MySQL主从数据库同步的那些事儿

在linux服务器下测试:主(master)服务器IP:219.223.5.105(对应内网IP:192.168.1.75)从(slave)服务器IP:219.223.5.104(对应内网IP:192.168.1.74)一、修改主服务器master[mysqld]log-binmysql-bin //[必须]启用二进制日…

360浏览器广告太多怎么办_360浏览器如何关闭广告自动推送

点击蓝字关注我们大家是不是在用360浏览器上网的时候经常会跳出广告来,这些广告有些时候是很烦人的,然而这些广告是能够关闭的,现在我们针对360浏览器,介绍如果关闭自动推送的广告。首先在360浏览器的右上方找到三条杠的“大队长”…

代码合并工具_作为程序员你必须知道的几款代码比较工具

在程序开发的过程中,程序员会经常对源代码以及库文件进行代码对比,在这篇文章里我们向大家介绍几款程序员常用的代码比较工具。WinMergeWinMerge是一款运行于Windows系统下的文件比较和合并工具,使用它可以非常方便地比较多个文档内容&#x…

powershell设置了权限依旧无法运行脚本_Power Shell折腾记

更多内容可以关注公众号“编程学习杂谈(codingLearning)”或者访问我的博客微软昨天刚刚发布了最新的Terminal图标,对是图标不是软件。对这个最新版的终端个人期待值还是很高的,不仅颜值高而且更好用,不过正式在稳定Wi…

delphi中richedit中光标如何定位到最后_嵌入式开发之Linux系统中Vi编辑器的使用

请大家关注点赞&#xff0c;已经完成物联网相关开发&#xff0c;会从硬件层&#xff0c;硬件中间层&#xff0c;传输层&#xff0c;软件中间件(物联网云平台)&#xff0c;APP开发相关博文。首先从嵌入式开发博文开始&#xff01;上一节关于<>。本节关于Linux系统中Vi编辑…

什么是python自动化测试_python已经自动化了,大家一般用什么测试框架?

首先我们需要明白自动化测试框架更倾向于一种设计思想 &#xff0c;这种思想指导工具的使用或者自研开发&#xff0c;并且不是只能使用仅仅一种框架&#xff0c;结合被测系统本身特性一般是选择多种测试框架的组合&#xff0c;来满足测试和设计需求(开发、维护角度)。录制回放测…

nginx会将post请求转为get么_前端角度谈GET与POST的区别

GET与POST 参数&#xff1a;GET传递的参数只能带URL后面&#xff0c;文本格式QueryString&#xff0c;各浏览器一般有长度限制&#xff0c;一般认为是2083&#xff0c;如果有中文字符更短。提交到服务器端的数据量小。参考&#xff1a;https://www.XXX.com.cn/blog/20201021.ht…

js预览本地word文档_Github+docsify打造在线文档

效果图如下预览链接&#xff1a;https://a870439570.github.io/interview-docs快速开始首先先安装好npm和nodejs,这里就不做过多介绍了 自信安装即可 (https://blog.csdn.net/zimushuang/article/details/79715679)安装docsify 推荐安装 docsify-cli 工具&#xff0c;可以方便创…

python创建一个json_如何为Python选择一个更快的JSON库

使用JSON越多, 你就越有可能遇到JSON编码或解码瓶颈。Python的内置库也不错, 但是还有多个更快的JSON库可用: 如何选择使用哪一个呢?事实是&#xff0c;没有一个正确的答案&#xff0c;没有一个最快的JSON库来超越其他所有库:一个“快速的JSON库”对不同的人意味着不同的东西&…

python函数拟合不规则曲线_python 对任意数据和曲线进行拟合并求出函数表达式的三种解决方案...

第一种是进行多项式拟合&#xff0c;数学上可以证明&#xff0c;任意函数都可以表示为多项式形式。具体示例如下。 ###拟合年龄 import numpy as np import matplotlib.pyplot as plt #定义x、y散点坐标 x [10,20,30,40,50,60,70,80] x np.array(x) print(x is :\n,x) num […

python数据结构 树_Python数据结构——AVL树的实现

既然&#xff0c;我们已经证明&#xff0c;保持 AVL 树的平衡将会使性能得到很大的提升&#xff0c;那我们看看如何在程序中向树插入一个新的键值。因为所有的新键是作为叶节点插入树的&#xff0c;而新叶子的平衡因子为零&#xff0c;所以我们对新插入的节点不作调整。不过一旦…

python安装常见问题_Python常见问题

问题描述: 在linux环境下部署Python项目时常常报错无法找到自己编写的模块解决方案export PYTHONPATH项目路径问题描述:Scrapy防封之settings文件设置解决方案设置动态USER-AGENT安装scrapy-fake-useragent模块在settings.py中添加配置DOWNLOADER_MIDDLEWARES {scrapy.downloa…

设无向图g如图所示_阿里重磅发布大规模图神经网络平台 AliGraph,架构算法解读...

图神经网络 (GNN) 主要是利用神经网络处理复杂的图数据&#xff0c;它将图数据转换到低维空间&#xff0c;同时最大限度保留结构和属性信息&#xff0c;并构造一个用于训练和推理的神经网络。在实际应用中&#xff0c;为了加速 GNN 训练和新算法的快速迭代&#xff0c;设计一套…