欢迎来到 无奈人生 安全网 聚焦网络安全前沿资讯,精华内容,交流技术心得!

攻击者如何借助授权插件,实现macOS持久化凭据窃取

来源: 作者: 时间:2019-02-24 21:17 点击: 我要投稿
广告位API接口通信错误,查看德得广告获取帮助

攻击者在目标主机上成功实现权限提升后,要做的第一件事往往就是窃取凭据。随着系统完整性保护(SIP)机制的引入,macOS上的凭证窃取似乎变得更加困难。攻击者无法再使用例如从安全进程中提取主密钥、解密目标用户登录密钥链这样的方法。在这里,展示了一个例子。SIP机制可以防止任何用户(甚至包括root用户)修改系统文件、目录和进程。这样一来,攻击者就开始尝试使用其他方法进行凭证窃取,这些方法包括:记录键盘键入、提示用户输入凭据、获取本地文件系统中以纯文本形式保存的凭据。此外,还有一种被称为“授权插件”(Authorization Plugins)的替代方案。
授权插件用于扩展授权服务API,从而实现操作系统本身不支持的机制。一个合法的用例是使用Duo等第三方软件,实现多因素身份验证。每个插件中可以包含多个机制,或者是实现自定义逻辑以执行授权的函数。这些机制也存在于策略数据库中。这些数据库中包含对各种授权权限的定义。针对特定授权权限的定义中,都可以引用几种机制,每种机制与其相应的授权插件相配对。Apple在这里简单介绍了其工作原理。实际上,loginwindow进程尝试获取system.login.console权限。策略数据库中的定义,详细列出了发生这种情况时执行的几种机制。并且,也可以将自定义插件及其机制插入到该列表中。列表中条目的位置,以及插件在登录过程中与操作系统的交互方式,共同决定了在什么时间执行该条目。此外,插件可以配置为在特权环境或非特权环境中运行,这一点由策略数据库中的条目字符串来指定。针对特权执行,需要将“,privileged”附加到机制条目中。如果希望访问UI,并且需要向用户弹出提示,那么就可以选用非特权插件。关于插件环境问题的更多信息,请参考这里。
在授权插件中,有一个值得关注的特性,就是能够在插件之间传递上下文值。这一特性也经常被攻击者使用。这些值中包含关于有关用户的详细信息,包括主目录、UID,甚至是明文密码。这一特性存在的目的是希望同时使用特权插件和非特权插件的开发人员,能够以相对简单的方式在两者之间实现数据的共享。对于攻击者来说,授权插件是一个能够窃取凭据、保持持久性的理想机制。如果能持久性的进行凭据窃取,那么就可以在登录过程中的任何位置执行特定代码。至于如何安装授权插件,则是一个相对简单的过程,我们将在下一节中详细讲解。
安装授权插件
授权插件由两部分组成:包含磁盘上所有插件代码的bundle文件、授权数据库中的一个条目。安全服务器会根据授权数据库中的规则和策略,授予特定用户相应的权限。应用程序可以通过AuthorizationRightSet、AuthorizationRightGet和AuthorizationRightRemove API调用,在任意特定时间修改规则。如果需要向数据库中添加条目,应该调用AuthorizationRightSet函数,同时引用包含每个身份验证机制键和值的NSDictionary。在Apple给出的文档中,展示了一个示例。除此之外,AuthorizationRightGet函数可用于获取现有权限的NSDictionary值。随后可以修改字典,并使用AuthorizationRightSet函数为自定义授权插件添加条目。这是Python的一个示例。
此外,还可以通过安全命令行工具修改授权数据库。如果攻击者想要在system.login.console策略中添加恶意插件,他们需要先将授权数据库中的策略读入plist文件:
security authorizationdb read system.login.console >> system.login.console.plist
然后按照下列格式,将其插入到bundle中,作为其中的一种机制:
[Plugin Name]:auth,privileged
PlistBuddy也可以使用以下命令执行此操作:
/usr/libexec/PlistBuddy -c “add :mechanisms:[HomeDir Offset] string [bundlename]:login,privileged”
在更新plist文件后,使用以下命令,将更改同步到数据库中:
security authorizationdb write system.login.console
武器化
接下来,我们使用Xcode,尝试创建一个插件,然后为Payload执行添加相应的逻辑。在这个例子中,我们将使用Shell命令,来启动Apfell Payload,但实际上Python Payload也可以工作。
1、首先打开Xcode,并选择“创建一个新的Xcode项目”选项。
2、在macOS系统中,选择bundle模板,为项目进行命名,然后单击“下一步”。

3、接下来,下载并保存项目文件夹中列出的所有三个文件。右键单击导航窗格中的项目文件夹,将这三个文件添加到项目中,然后选择将文件添加到“[你的项目名称]”。

4、然后,设置Apfell,并生成JXA Payload。关于设置Apfell的方法和创建Payload的相关说明,请参考@its_a_feature_的博客文章。
5、复制以osascript -l JavaScript开头的一行JXA代码,并将其放到适当的位置。

6、从顶部菜单栏中选择项目,点击“构建”。生成的包将会显示在左侧导航窗格的项目目录下。右键点击bundle文件,然后选择在Finder中显示。随后,即可将文件复制到我们指定的可访问位置下。

[1] [2]  下一页

攻击者在目标主机上成功实现权限提升后,要做的第一件事往往就是窃取凭据。随着系统完整性保护(SIP)机制的引入,macOS上的凭证窃取似乎变得更加困难。攻击者无法再使用例如从安全进程中提取主密钥、解密目标用户登录密钥链这样的方法。在这里,展示了一个例子。SIP机制可以防止任何用户(甚至包括root用户)修改系统文件、目录和进程。这样一来,攻击者就开始尝试使用其他方法进行凭证窃取,这些方法包括:记录键盘键入、提示用户输入凭据、获取本地文件系统中以纯文本形式保存的凭据。此外,还有一种被称为“授权插件”(Authorization Plugins)的替代方案。
授权插件用于扩展授权服务API,从而实现操作系统本身不支持的机制。一个合法的用例是使用Duo等第三方软件,实现多因素身份验证。每个插件中可以包含多个机制,或者是实现自定义逻辑以执行授权的函数。这些机制也存在于策略数据库中。这些数据库中包含对各种授权权限的定义。针对特定授权权限的定义中,都可以引用几种机制,每种机制与其相应的授权插件相配对。Apple在这里简单介绍了其工作原理。实际上,loginwindow进程尝试获取system.login.console权限。策略数据库中的定义,详细列出了发生这种情况时执行的几种机制。并且,也可以将自定义插件及其机制插入到该列表中。列表中条目的位置,以及插件在登录过程中与操作系统的交互方式,共同决定了在什么时间执行该条目。此外,插件可以配置为在特权环境或非特权环境中运行,这一点由策略数据库中的条目字符串来指定。针对特权执行,需要将“,privileged”附加到机制条目中。如果希望访问UI,并且需要向用户弹出提示,那么就可以选用非特权插件。关于插件环境问题的更多信息,请参考这里。

无奈人生安全网


在授权插件中,有一个值得关注的特性,就是能够在插件之间传递上下文值。这一特性也经常被攻击者使用。这些值中包含关于有关用户的详细信息,包括主目录、UID,甚至是明文密码。这一特性存在的目的是希望同时使用特权插件和非特权插件的开发人员,能够以相对简单的方式在两者之间实现数据的共享。对于攻击者来说,授权插件是一个能够窃取凭据、保持持久性的理想机制。如果能持久性的进行凭据窃取,那么就可以在登录过程中的任何位置执行特定代码。至于如何安装授权插件,则是一个相对简单的过程,我们将在下一节中详细讲解。
安装授权插件
授权插件由两部分组成:包含磁盘上所有插件代码的bundle文件、授权数据库中的一个条目。安全服务器会根据授权数据库中的规则和策略,授予特定用户相应的权限。应用程序可以通过AuthorizationRightSet、AuthorizationRightGet和AuthorizationRightRemove API调用,在任意特定时间修改规则。如果需要向数据库中添加条目,应该调用AuthorizationRightSet函数,同时引用包含每个身份验证机制键和值的NSDictionary。在Apple给出的文档中,展示了一个示例。除此之外,AuthorizationRightGet函数可用于获取现有权限的NSDictionary值。随后可以修改字典,并使用AuthorizationRightSet函数为自定义授权插件添加条目。这是Python的一个示例。

www.wnhack.com


此外,还可以通过安全命令行工具修改授权数据库。如果攻击者想要在system.login.console策略中添加恶意插件,他们需要先将授权数据库中的策略读入plist文件:
security authorizationdb read system.login.console >> system.login.console.plist
然后按照下列格式,将其插入到bundle中,作为其中的一种机制:
[Plugin Name]:auth,privileged
PlistBuddy也可以使用以下命令执行此操作:
/usr/libexec/PlistBuddy -c “add :mechanisms:[HomeDir Offset] string [bundlename]:login,privileged”
在更新plist文件后,使用以下命令,将更改同步到数据库中:
security authorizationdb write system.login.console
武器化
接下来,我们使用Xcode,尝试创建一个插件,然后为Payload执行添加相应的逻辑。在这个例子中,我们将使用Shell命令,来启动Apfell Payload,但实际上Python Payload也可以工作。
1、首先打开Xcode,并选择“创建一个新的Xcode项目”选项。
2、在macOS系统中,选择bundle模板,为项目进行命名,然后单击“下一步”。
www.wnhack.com

3、接下来,下载并保存项目文件夹中列出的所有三个文件。右键单击导航窗格中的项目文件夹,将这三个文件添加到项目中,然后选择将文件添加到“[你的项目名称]”。

4、然后,设置Apfell,并生成JXA Payload。关于设置Apfell的方法和创建Payload的相关说明,请参考@its_a_feature_的博客文章。
5、复制以osascript -l JavaScript开头的一行JXA代码,并将其放到适当的位置。

6、从顶部菜单栏中选择项目,点击“构建”。生成的包将会显示在左侧导航窗格的项目目录下。右键点击bundle文件,然后选择在Finder中显示。随后,即可将文件复制到我们指定的可访问位置下。
无奈人生安全网
无奈人生安全网

[1] [2]  下一页 www.wnhack.com

。 (责任编辑:admin)
【声明】:无奈人生安全网(http://www.wnhack.com)登载此文出于传递更多信息之目的,并不代表本站赞同其观点和对其真实性负责,仅适于网络安全技术爱好者学习研究使用,学习中请遵循国家相关法律法规。如有问题请联系我们,联系邮箱472701013@qq.com,我们会在最短的时间内进行处理。