首页 未命名正文

OS X那些事——恶意软件是如何启动的?

访客 未命名 2022-04-10 980 4 恶意软件

0x00 背景

几天前,我一份报告,是美国 *** 安全公司bit9发布:2015: The Most Prolific Year for OS X Malware》

报告的主要内容是2015年OS X恶意软件平台。bit9研究小组进行了10周的分析和研究,分析了1400个恶意软件样本。如下图所示,2015年恶意软件样本数量是前五年恶意样本数量之和的5倍。据估计,苹果将失明。Mac越来越受欢迎。

p1

报告指出的重点是:

恶意软件的启动启动模式(Persistence Mechani *** s)使用传统Unix技术越来越少,基本消失了。大多数恶意软件使用OS X提供了新的启动机制。

感染继续增长,但恶意软件的复杂性并不太高。

主要有7种启动方式。

由于OS X恶意软件在平台上的多样性不如windows平台,所有相对的检测 *** 都比较简单,因为需要检查的地方比较windows平台要少。

0x01 启动

接下来我们来谈谈这个启动,看看黑客喜欢哪七种武器:

p2

你知道以上7种武器(大神自动飘过)。

Launch daemons/agents

事实上,这两种启动方式可以一起介绍。启动方式基本相同,但有一些不同。

这两种方式都是苹果官方提供的标准启动方式。更详细的介绍可以在官方手册中找到。[link]。daemons和agents都是由launchd该过程负责后台作业的启动。launchd是OS X系统用户态***一个过程。对应其他UN*X系统中的init。负责直接或者间接的启动系统中的其他进程。

p3

从图中可以看出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键。

p4

将此.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可以直接读取文件作为输入配置:

p5

如图 用crontab加载文本persist

保存文本内容如下:

*****open /Applications/Calculator.app

该配置每分钟执行open命令打开计算器。

p6

上图为文件格式,可分为多行给出多个任务#进行注释。

还可以使用@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设置系统偏好->用户和群组>登录项可以查看并设置

p7

可在此界面添加并删除登录项。

所有这些登录项的信息都保存在~/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,因为它更容易创建和更新。

下图是一个例子:

p8

启动后,系统会自动给脚本start作为参数。“$1” 表示传给脚本***个参数

StartService(),StopService(),RestartService()

可执行文件接收的参数为start,stop或者restart执行相应的函数。

3,创建StartupParameters.plist

在目录中创建文件StartupParameters.plist是属性列表。

p9

关于plist主要字段

可以参考:

p10

Binary infection

二进制感染实现驻留。

原理和windows系统下的PE文件感染是一样的。修改二进制文件,获得执行权,执行自己的代码。

因为OS X允许未签名的二进制文件运行。因此,这种 *** 仍然有效。感染的 *** 有很多种。最简单的是修改入口点。通过修改Mach-O文件的Load Commands。添加新的segment实现代码注入感染。

0x02 检测

检测启动项目,bit9的报告针对企业和个人给出了建议。

这里给大家介绍一下个人Mac检测 *** 。

当然,除了手动检测启动项的位置外,还可以使用脚本。但是推荐一个好的工具

https://objective-see.com/products/knockknock.html

该工具在9中自动扫描启动模式。

p11

读者可以使用此工具进行快速检测。

该工具的作者还开发了动态监控软件

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

   
版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。