罗盘时钟编码代码_安全研究 | 利用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,一经查实,立即删除!

相关文章

mysql 共享锁_mysql有排他锁为什么还需要共享锁呢?

两把锁缺一不可,InnoDB 引擎中的四种隔离级别就是用 排他锁 共享锁 实现的。下面是个人理解,可能并不严谨。首先说一下并发可能产生的四种问题,如果你还不了解这四个问题,最好拿至少 20 分钟时间模拟一下场景。假设有两个事务A&a…

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

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

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

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

不同版本的mysql_windows下如何让多个个不同版本的mysql共存-百度经验

第十步,在解压目录下,编写mysql的配置文件my.ini,注意basedir,datadir,与自己的解压目录是一致的---------------------------------------------[mysqld]# 设置3307端口port3307# 设置mysql的安装目录basedirC:\\mysql8# 设置mysql数据库的数…

mysql have_mysql having的用法

having字句可以让我们筛选成组后的各种数据,where字句在聚合前先筛选记录,也就是说作用在group by和having字句前。而 having子句在聚合后对组记录进行筛选。我的理解就是真实表中没有此数据,这些数据是通过一些函数生存。SQL实例&#xff1a…

无法执行二进制文件: 可执行文件格式错误_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维)&#…

redis解决mysql主从延迟_mysql主从同步延迟问题解决方法

mysql主从同步延迟问题解决方法:在从服务器上执行show slave status;可以查看到很多同步的参数,我们需要特别注意的参数如下:Master_Log_File: SLAVE中的I/O线程当前正在读取的主服务器二进制日志文件的名称…

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浏览器的右上方找到三条杠的“大队长”…

linux下php支持mysql_linux下php扩展mysqli的支持 .

mysqli是优化后的mysql,具体的优点baidu下就ok了cd php-5.2.8 在这下面有个ext文件夹里有mysqlicd ext/mysqlilinux下将源码文件编译应该都有configure吧,可这里没有,在我们已经安装php后,php5这个文件夹里的命令目录bin里有一个…

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

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

mysql 修改数据库的数据库_如何更改MySQL数据库的数据库名

展开全部被取消的命令MySQL 之前提供了一个 rename database db_old to db_new 的命令来直接对数据库改名,可能由于实现的功能不完备(比62616964757a686964616fe58685e5aeb931333433653931如,这条命令可能是一个超大的事务,或者是由于之前的表…

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

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

mysql错误回显注入_基于错误回显的SQL注入整理

由于复习,停了好几天,今天换换模式做了一下关于错误回显的ctf题目,首先附上题目:here整理了一下网上的一些关于错误回显的方法,在这里就不带上地址了,请大牛们原谅:P0x00 关于错误回显用我自己的…

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

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

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

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