导语:在11月30日,苹果悄悄地为macOS XProtect反恶意软件系统添加了一个名为OSX.HiddenLotus.A的签名。 虽然关于HiddenLotus苹果并未做许多说明,不过当天晚些时候,安全研究员Arnaud Abbati就在其博客公布了他找到的样本。
在11月30日,苹果悄悄地为macOS XProtect反恶意软件系统添加了一个名为OSX.HiddenLotus.A的签名。 虽然关于HiddenLotus苹果并未做许多说明,不过当天晚些时候,安全研究员Arnaud Abbati就在其博客公布了他找到的样本。
HiddenLotus“dropper”是一个名为Lê Thu Hà (HAEDC).pdf的应用程序,它会把自己伪装成Adobe Acrobat文件。
这与激发Mac OS X中的文件隔离功能的方案相同,在Leopard(Mac OS X 10.5)中引入了该标签后,XProtect就会使用特殊的元数据标记从Internet下载的文件,以表明该文件已被“隔离”。当用户试图打开文件时,如果它是任何类型的可执行文件(如应用程序),则系统会向用户发出警告。
所以添加这个标签的作用是确保用户知道他们打开的文件是一个应用程序,而不是一个文件。早在2009年,恶意应用程序伪装成文件开始攻击,所以采用文件隔离就是为了解决这个问题。
尽管采用了文件隔离政策,但自从攻击者尝到了使用伪装文件攻击的甜头后,恶意软件的开发者就一直在升级这个攻击技巧。今年年中,就出现了一个针对所有版本的MacOS的恶意软件——Dok,它主要伪装成Word文档,通过电子邮件钓鱼来传播。用户中招之后,DOK恶意软件会获取计算机的管理权限,并安装一个新的根证书,然后完全截获受害者的所有网络流量,包括SSL加密流量。
所以乍一看,HiddenLotus除了是海莲花后门的一个新变种外,似乎并没有什么特殊之处。 海莲花是在今年夏天早些时候被发现的,伪装成Word文档并针对越南进行攻击。
但是HiddenLotus有一些奇怪的地方,它与过去的恶意软件不同,并没有隐藏.app扩展名,这表明它是一个应用程序。不过,它实际上有一个.pdf扩展名,不过Finder仍将其确定为应用程序。
这很令人费解,通过进一步的调查,研究人员并没有发现隐藏的扩展名,也没有迹象表明Janicab在2013年使用过这样的伎俩。
Janicab会伪装成没有任何危害的PDF(“RecentNews.ppa.pdf”)或DOC文件,常驻用户电脑中,使用特殊的Unicode字符也就是RLO发起邮件攻击。
换句话说,Janicab的真实文件名实际上是“RecentNews.fdp.app”,但名称中的第一个标点之后出现的RLO字符导致接下来的所有内容在Finder中都反向显示。
但是,HiddenLotus并没有使用这种欺骗手段。事实证明,.pdf扩展中的“d”实际上不是“d”,而是罗马数字“D”,代表数字500。
Abbati据此推断,正是这非常不起眼的小型罗马Unicode,才让HiddenLotus显得与众不同。但是,到目前为止还不清楚它的具体性能什么,以及这个特殊的特征是如何让恶意软件被当作一个应用程序的?
Abbati在进一步研究后,发现了macOS的一个秘密:应用程序其实不必非得有一个.app扩展名才可以被视为应用程序。
macOS上的一个应用程序实际上是一个具有特殊内部结构的文件夹,专业的叫法是bundle。具有正确结构的文件夹仍然只是一个文件夹,但如果你给它一个.app扩展名,它将立即变成一个应用程序。 而Finder会把它看作是单个文件而不是文件夹,如果用户双击,则启动的是应用程序而不是文件夹。
双击文件(或文件夹)时,LaunchServices将首先考虑扩展名。如果已知扩展名,该项将根据扩展名打开。因此,扩展名为.txt的文件在默认情况下会使用TextEdit打开。某些文件夹可能会被视为文档,如用于Aperture库“文件”的.aplibrary扩展名的情况,具有.app扩展名的文件夹(假设它具有正确的内部结构)将作为应用程序启动。
如果一个文件带有用户不熟悉的扩展名,则会向使用者作出如何处理的询问,处理选项包括打开文件或搜索Mac应用程序商店的应用程序。然而,当双击带有未知扩展的文件夹时,会发生一些奇怪的事情。此时,LaunchServices会重新查看文件夹的bundle结构(如果有的话)。
那么这意味着什么呢?HiddenLotus dropper会使用具有适当内部bundle结构的文件夹作为应用程序,它使用的扩展名为.pdf,其中'd'是罗马数字,而不是字母。尽管这个扩展看起来和用于Adobe Acrobat文件的扩展完全一样,但是完全不同,并且没有通过注册来处理该扩展的应用程序。尽管它没有显示.app扩展名,此时系统也将会回到bundle结构上,将文件夹作为应用程序来处理。
这个.pdf扩展(使用罗马数字'd')没有什么特别的特殊之处,大概是因为它还没有被使用,不过,任何其他未使用的扩展名也可以正常工作:
上面的示例意味着有大量可能的扩展列表,特别是在包含Unicode字符的时候。虽然可以很容易地从Unicode字符中构造出与其他普通扩展完全相同的扩展,但其实它们并不相同。这意味着可以使用相同的技巧模仿Word文档(.doc),Excel文件(.xls),Pages文档(.pages),Numbers文档(.numbers)等等。
虽然这个技巧相当好使,但它仍然不会通过文件隔离。此时系统会提醒你,你正在打开的是一个应用程序。当然,除非你打开的是一个应用程序,且它没有使用正确设置隔离标志的API。
所以我可以判断,这个技巧不太可能对Mac产生多么大的威胁。最重要的是,这个技巧让我们又从一个新的角度看到了macOS如何识别和启动应用程序。