当前位置: 首页 > 科技观察

OSX怎么样——恶意软件是如何启动的?

时间:2023-03-12 10:17:17 科技观察

0x00背景前几天,看了美国网络安全公司bit9发布的一份报告:《2015: The Most Prolific Year for OS X Malware》报告的主要内容是讲2015年的OSPlatformX恶意软件案例。bit9的研究团队进行了为期10周的分析研究,分析了1,400个恶意软件样本。从下图可以看出,2015年的恶意软件样本数量是前五年恶意软件样本数量总和的五倍。这估计要让苹果眼前一亮。Mac越来越热。它也越来越不安全。报告重点指出:恶意软件的启动方式(PersistenceMechanisms)使用传统Unix技术的越来越少,几乎没有。大多数恶意软件也使用OSX提供的新启动机制。感染继续增长,但恶意软件的复杂性并不太高。有7种主要的启动方式。由于OSX平台上的恶意软件多样性不如windows平台,所以相对的检测方法都比较简单,因为比windows平台要检查的地方少。0x01Startup接下来说一下启动,看看黑客喜欢哪7种武器:以上7种武器你知道多少(高手会自动飘走)。Launchdaemons/agents其实这两种启动方式可以一起引入。启动方法基本相同,但也有一些区别。这两种方式是苹果官方提供的标准启动方式。更详细的介绍可以参考官方手册【链接】。守护进程和代理都是由launchd进程启动的后台作业。launchd是OSX系统用户态的第一个进程。对应其他UN*X系统中的init。负责直接或间接启动系统中的其他进程。从图中可以看出,daemons和agents都是由launchd进程启动的。daemons:守护进程,后台服务,通常与用户没有交互。由系统自动启动,不管是否有用户登录系统。agent:代理程序是一种特殊的守护程序,只有在用户登录时才会启动,它可以与用户交互,也可以有GUI。创建守护进程或代理与创建普通二进制可执行文件一样简单。然后将自己的属性列表文件(.plist)放在daemons或agents的配置目录下:目录purpose/System/Library/LaunchDaemons系统自己的daemon/Library/LaunchDaemons第三方程序daemon/System/Library/LaunchAgents的代理程序系统本身/Library/LaunchAgents第三方程序的代理程序,这个目录一般是空的~/Library/LaunchAgents用户拥有的launch代理程序只有有相应的用户才会执行。plist文件的结构可以在手册[链接]中查看,下面给出了启动计算器的plist文件。具有值为true的RunAtLoad键。把这个.plist文件复制到/Library/LaunchAgents目录下(复制文件的所有者是root),重启后计算器就可以自动启动了。可以使用1sudoplutil-lint/path/to/com.test.plist检测plist文件格式是否有问题。plist中的主要字段及其含义:Label用于标识launchd中的key,类似于每个程序都有一个identifies。UserName指定运行启动项的用户,仅适用于Launchd以根用户身份运行的情况。GroupName指定在其下运行启动项的组,这仅适用于Launchd以root身份运行时。KeepAlive这个键值用来控制可执行文件是继续运行,还是在满足特定条件后启动。默认值为false,表示只有满足特定条件才会启动。当设置值为真时,表示在整个系统运行周期内无条件打开并保存可执行文件。RunAtLoad标记为launchd,加载服务后立即启动路径指定的可执行文件。默认值为假。Program该值用于指定进程的可执行文件的路径。ProgramArguments如果不指定Program,则必须指定此项,包括可执行文件和运行参数。CronjobCronjob是Unix自带的一种启动机制。它在OSX中已弃用。Apple建议对计划任务使用launchd命令。但OSX仍然支持Cron。黑客当然不会放弃。Cron可用于在设定的时间执行命令或脚本。如果恶意软件是用python编写的,则可以直接运行python命令。使用crontab命令控制Cron服务。在/usr/lib/cron/tabs目录下会有用户名对应的配置文件。当然也可以直接通过命令配置。有关详细信息,请参阅手册[链接]。crontab可以直接读取文件作为输入进行配置:如图,使用crontab加载文本persist将文本内容保存为:*****open/Applications/Calculator.app这个配置就是执行open命令每分钟打开计算器。上图为文件格式,多个任务可以多行给出,可以用#注释。您还可以使用诸如@reboot之类的配置来设置引导。但是我在OSX10.10上测试启动计算器失败了!可以用一个时间间隔来启动它。您可以使用crontab参数-l查看当前的crontab配置。-rremoveallconfigurations-eeditconfigurationsloginitemsloginitems是苹果推荐的需要开机的应用程序的启动方式。有两种使用登录项的方法:使用分片文件列表。使用服务管理框架。沙盒性能程序[链接]。第一种方法:第一种方法启动的登录项可以在系统偏好设置->用户和组>登录项中查看和设置。在该界面中可以添加和删除登录项。这些登录项的信息保存在~/Library/Preferences/com.apple.loginitems.plist配置文件中。每个启动项对应一个字典,包括Alias、Name等,其中Name为NSString类型,其他为Data类型。进行了base64,所以目前可以删除。(有文章说可以手动添加,但是笔者在OSX10.10.x暂时没有找到方法)。另一种是通过程序添加:12345LSSharedFileListRefloginItems=LSSharedFileListCreate(NULL,kLSSharedFileListSessionLoginItems,NULL);//url为app所在目录CFRelease(项目);CFRelease(登录项);一些恶意软件使用代码添加登录项来实现自启动。第二种方法:如果使用登录项的程序使用了沙盒技术,第一种方法会因为权限问题无法使用。必须使用服务管理框架。需要两个程序:一个主程序和一个辅助程序。辅助程序存储在主程序的Contents/Library/LoginItems目录中。主程序在运行时调用SMLoginItemSetEnabled()函数将辅助程序设置为自启动程序。详情请参考【链接】【链接】。注意:你的主程序必须在Application目录下,这样启动设置才会生效,否则启动失败。StartupItems是苹果不推荐的启动方式。但在当前版本中并没有失效。启动项是一个特殊文件。它可以在系统启动过程中执行。创建过程如下:1.创建目录StartupItems,存放在以下两个路径:/System/Library/StartupItems/Library/StartupItems(默认不存在,需要手动创建)2.生成执行程序或脚本程序或脚本必须与目录同名,可执行文件需要root权限。通常使用shell脚本,因为它更易于创建和更新。下图为例:开机后,系统会自动将start作为参数传递给脚本。“$1”表示传递给脚本的第一个参数StartService()、StopService()、RestartService()当可执行文件接收到的参数为start、stop或restart时,将执行相应的函数。3.创建StartupParameters.plist在目录中创建文件StartupParameters.plist是一个属性列表。plist中的主要字段可以参考:二进制感染实现常驻二进制感染。原理同windows系统下的PE文件感染一样。修改二进制文件,获取执行权限,执行自己的代码。因为OSX允许未签名的二进制文件运行。所以该方法仍然有效。而且传染途径多种多样。其中最简单的是修改入口点。通过修改Mach-O文件的加载命令。添加新的段以实现代码注入感染。0x02检测针对启动项检测,bit9报告给企业和个人建议。这里我介绍一下个人Mac的检测方法。除了手动检测启动项的位置,你当然也可以使用脚本。不过推荐一个好工具https://objective-see.com/products/knockknock.html这个工具会自动扫描9中的启动方式,读者可以使用这个工具快速查看。这个工具的作者还开发了一款启动项动态监控软件https://objective-see.com/products/blockblock.html,可以动态拦截启动项的添加。你不妨试试。0x03参考2015:OSX恶意软件最多产的一年https://www.bit9.com/resources/research-reports/2015-the-most-prolific-year-for-os-x-malware/VB2014论文:MacOSX上的恶意软件持久性https://www.virusbtn.com/virusbulletin/archive/2014/10/vb201410-malware-persistence-MacOSXLevin,J.MacOSX和iOS内部结构:Apple的核心。罗克斯。2012MacOSX启动配置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