0x00 背景
几天前,我一份报告,是美国 *** 安全公司bit9发布:2015: The Most Prolific Year for OS X Malware》
报告的主要内容是2015年OS X恶意软件平台。bit9研究小组进行了10周的分析和研究,分析了1400个恶意软件样本。如下图所示,2015年恶意软件样本数量是前五年恶意样本数量之和的5倍。据估计,苹果将失明。Mac越来越受欢迎。
报告指出的重点是:
恶意软件的启动启动模式(Persistence Mechani *** s)使用传统Unix技术越来越少,基本消失了。大多数恶意软件使用OS X提供了新的启动机制。
感染继续增长,但恶意软件的复杂性并不太高。
主要有7种启动方式。
由于OS X恶意软件在平台上的多样性不如windows平台,所有相对的检测 *** 都比较简单,因为需要检查的地方比较windows平台要少。
0x01 启动
接下来我们来谈谈这个启动,看看黑客喜欢哪七种武器:
你知道以上7种武器(大神自动飘过)。
Launch daemons/agents
事实上,这两种启动方式可以一起介绍。启动方式基本相同,但有一些不同。
这两种方式都是苹果官方提供的标准启动方式。更详细的介绍可以在官方手册中找到。[link]。daemons和agents都是由launchd该过程负责后台作业的启动。launchd是OS X系统用户态***一个过程。对应其他UN*X系统中的init。负责直接或者间接的启动系统中的其他进程。
从图中可以看出daemons和agents都是由launchd启动过程。
daemons:防护程序,后台服务,通常不与用户互动。无论是否有用户登录系统,系统都会自动启动。
agent: *** 程序是一种特殊的保护程序,只有在用户登录时才能启动。它可以与用户互动,也可以GUI。
创建一个daemons或agent是非常简单的,就是创建一个普通的二进制可执行文件。然后将自己的属性列表文件(.plist)放置到daemons或agent配置目录:
目录用途
/System/Library/LaunchDaemons系统本身的守护程序
/Library/LaunchDaemons第三方程序的守护程序
/System/Library/LaunchAgents系统本身的 *** 程序
/Library/LaunchAgents第三方程序的 *** 程序通常是空的
~/Library/LaunchAgents用户自有的launch只有有相应的用户才能执行 *** 程序
plist手册可以查看文件的结构[link],下面是一个启动计算器plist文件。键值为true的RunAtLoad键。
将此.plist文件复制到/Library/LaunchAgents目录(复制后的文件所有者为root),就可以在重启后,自动启动计算器。
可以使用
1sudo plutil -lint /path/to/com.test.plist
来检测plist文件格式是否有问题。
plist主要字段及其含义:
Label 用来在launchd中的一个***标识类似于每个程序都有一个identifies一样。
UserName 只有当用户指定操作启动项目时Launchd 作为 root 用户运行时,此项适用。
GroupName 指定运行启动项目的组只有当Launchd 作为 root 用户运行时,此项适用。
KeepAlive 这个key值是用来控制可执行文件是连续运行,还是在满足具体条件后启动。默认值为false,也就是说满足具体条件之后才启动。当设置值为ture在整个系统运行周期内,表示无条件打开可执行文件。
RunAtLoad 标识launchd加载服务后,立即启动路径指定的可执行文件。默认值为false。
Program 该值用于指定过程中可执行文件的路径。
ProgramArguments 如未指定Program必须指定该项目,包括可执行文件和运行参数。
Cron job
Cron job是一个随Unix启动机制OS X中已经不被推荐使用。苹果公司推荐使用launchd命令完成计划任务。OS X仍然支持Cron。黑客当然不会嫌弃。
Cron可用于在设定时执行命令或脚本。如果恶意软件是python可直接操作编写的python命令。
Cron服务使用crontab控制命令。在目录/usr/lib/cron/tabs目录中会有相应的用户名配置文件。当然,可以通过命令直接配置。具体可以查询手册[link]。
crontab可以直接读取文件作为输入配置:
如图 用crontab加载文本persist
保存文本内容如下:
*****open /Applications/Calculator.app
该配置每分钟执行open命令打开计算器。
上图为文件格式,可分为多行给出多个任务#进行注释。
还可以使用@reboot等待配置设置启动启动。OS X 10.10上测试启动计算器不成功!可以在时间间隔内启动。
可以用crontab参数
-l 查看当前crontab配置。
-r 移除所有配置
-e 编辑配置
login items
login items苹果推荐启动需要启动的应用程序。
有两种使用login item的方式:
使用shard file list。
使用Service Management framework。针对sandbox性能的程序[link]。
***种方式:
使用***以各种方式启动login items设置系统偏好->用户和群组>登录项可以查看并设置
可在此界面添加并删除登录项。
所有这些登录项的信息都保存在~/Library/Preferences/com.apple.loginitems.plist在配置文件中,每个启动项对应一个字典Alias,Name等,其中Name是NSString类型,其他类型Data类型,进行了base64,所以目前可以删除。(手工添加文章说可以,在OS X 10.10.x作者暂时没有找到办法)。
通过程序添加:
12345LSSharedFileListRef loginItems = LSSharedFileListCreate(NULL,kLSSharedFileListSessionLoginItems,NULL); //url为app所在的目录
CFURLRef url = (CFURLRef)[NSURL fileURLWithPath:appPath];
LSSharedFileListItemRef item = LSSharedFileListInsertItemURL(loginItems,kLSSharedFileListItemLast,NULL,NULL,url,NULL,NULL);
CFRelease(item);
CFRelease(loginItems);
有些恶意软件是用代码添加的login item实现自启动的 *** 。
第二种方式:
使用login item如果使用沙盒技术,由于权限问题,该程序将无法使用***必须使用Service Management Framework。有两个程序:一个主程序,一个主程序helper程序。helper存储在主程序中的程序Contents/Library/LoginItems目录下。运行时调用主程序 *** LoginItemSetEnabled()设置函数helper程序是自启动程序。[link] [link]。
注:您的主程序必须在Application在目录下,启动设置将生效,否则将失败
StartupItems
这是苹果不推荐的启动 *** 。但在目前的版本中还没有失败。
一个Startup Item是一个特殊的文件。可以在系统中使用boot执行过程。
创作过程如下:
1,创建目录
StartupItems存放在以下两条路径下:
/System/Library/StartupItems
/Library/StartupItems(默认情况下不存在,需要手动创建)
2,生成执行程序或脚本
程序或脚本必须与目录名相同,需要获得可执行文件root权限。
一般使用shell script,因为它更容易创建和更新。
下图是一个例子:
启动后,系统会自动给脚本start作为参数。“$1” 表示传给脚本***个参数
StartService(),StopService(),RestartService()
可执行文件接收的参数为start,stop或者restart执行相应的函数。
3,创建StartupParameters.plist
在目录中创建文件StartupParameters.plist是属性列表。
关于plist主要字段
可以参考:
Binary infection
二进制感染实现驻留。
原理和windows系统下的PE文件感染是一样的。修改二进制文件,获得执行权,执行自己的代码。
因为OS X允许未签名的二进制文件运行。因此,这种 *** 仍然有效。感染的 *** 有很多种。最简单的是修改入口点。通过修改Mach-O文件的Load Commands。添加新的segment实现代码注入感染。
0x02 检测
检测启动项目,bit9的报告针对企业和个人给出了建议。
这里给大家介绍一下个人Mac检测 *** 。
当然,除了手动检测启动项的位置外,还可以使用脚本。但是推荐一个好的工具
https://objective-see.com/products/knockknock.html
该工具在9中自动扫描启动模式。
读者可以使用此工具进行快速检测。
该工具的作者还开发了动态监控软件
https://objective-see.com/products/blockblock.html
可动态拦截启动项的添加。你不妨试试。
0x03 参考
2015: The Most Prolific Year for OS X Malware
https://www.bit9.com/resources/research-reports/2015-the-most-prolific-year-for-os-x-malware/
VB2014 paper: Methods of malware persistence on Mac OS Xhttps://www.viru *** tn.com/viru *** ulletin/archive/2014/10/vb201410-malware-persistence-MacOSX
Levin,J. Mac OS X and iOS Internals: To the Apple’s Core. Wrox. 2012
Mac OSX启动配置 http://www.tanhao.me/talk/1287.html/
在SandBox实现沙箱下程序启动 http://www.tanhao.me/pieces/590.html/
苹果手册https://developer.apple.com/library/mac/documentation/MacOSX/Conceptual/BPSystemStartup/Chapters/Introduction.html
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。