当前位置: 首页 > 科技观察

macOS的15个安全提示(1)

时间:2023-03-14 17:16:08 科技观察

自2004年以来,我每天都在使用macOS,自OSXPanther(2003年10月发布)以来的每个操作系统版本,以及自Lion以来,我都对每个版本的macOS进行beta测试自10.7(2011年7月发布)以来的一年。虽然这听起来可能很乏味,但我一直在学习有关AppleDesktopEnvironment的所有知识。但在实践中,苹果的操作系统总能带来一些新的惊喜。例如,关于选项键的技巧可能已经隐藏了很多年,而且由于Apple每年都会发布它,谁知道还有多少未被发现呢?尽管如此,多年来,我发现并使用了一些在macOS中有效的技巧,它在许多安全任务中都很有用,无论是编写代码、搜索漏洞、记录恶意软件行为,还是筛查受感染的设备。在这篇文章中,我想分享其中的一些技术,希望其他人可以使用它们。这是我的15大macOS安全提示!查找任意app的BundleID提示:lsappinfolist|grep或grep-A1-ibundleidentifier"$(mdfind-name.app|head-n1)"/Contents/Info.plist简介:AppBundleID(包标识符)是系统APP唯一标识的ID。它用于捆绑识别以显示应用程序与其他应用程序之间的区别。AppBundleID一般用于软件开发者在生成软件时需要捆绑的特殊字符串,每个APP只有一个专属的BundleID,不能用于其他软件开发。常规的BundleID采用“com.com.apple.finder。BundleID在AppBundle的Info.plist文件中设置,并在Bundle写入磁盘后立即注册到LaunchServices数据库中。这样,如果你知道你的应用程序的BundleID,然后很容易找到它的位置,而不用花费不必要的处理器资源,比如使用Finder或shellfind命令。第一个例子使用lsappinfo查询所有正在运行的应用程序,并从输出中grep获取BundleID。该实用程序的列表非常有用,不仅告诉您包的ID,还告诉您可执行文件的路径、当前PID和许多其他详细信息。有关更多详细信息,请参见官方网站。但是,您可能希望找到当前未运行的应用程序的包标识符。为此,请使用利用mdfind实用程序的第二个版本。请注意,mdfind仅显示用户有权访问的文件的结果:这就是为什么您没有获得使用常规“find”命令获得的所有权限错误的原因(除非您将stderr重定向到/dev/null)。但这没关系,因为整个启动服务数据库是用户相关的:它只会返回用户有权启动的应用程序的结果。mdfind命令是Spotlight功能的终端界面,这意味着如果禁用Spotlight,mdfind命令也将不起作用。mdfind命令非常快速和高效。寻找缺少强化运行时的应用程序技巧:foriin/Applications/*.app;docodesign-dv"${i}"&>>/tmp/codes;done;grep-B3'none'/tmp/codes|grep^Executable|sed's/^Executable=/No\Hardened\Runtime:\/g';rm-rf/tmp/codes简介:从macOS10.15Catalina开始,默认情况下所有应用程序都必须经过公证才能启动,但有一些免责声明意味着您的系统上可能有未经认证的应用程序。首先,用户可以在本地完成公证要求,不需要管理员权限。这是一种常见的macOS恶意软件技术,可以对用户进行社交工程来做到这一点。其次,Apple在早期阶段对公证要求有点动摇,应用程序在2020年2月之前在不太严格的要求下公证和安装,例如没有硬化运行时,即使在更严格的要求生效后,它在Catalina上也可以正常运行。如果您安装的Xcode工具更短,您可以检查应用程序是否没有公证“票”:foriin/Applications/*;dostaplervalidate"${i}"|grep-B1-vworked;done然而,这有两个问题,除了需要Xcode命令行工具。第一,应用可以免票公证;事实上,许多开发人员将票据附加到DMG或安装程序,而不是应用程序本身,因此仅检查票据不会产生准确的结果。其次,从安全角度来看,公证的主要好处是,在最严格的规则下,它需要强化的运行时标志。没有此类标志的应用程序可能会被恶意进程修改,因此通过这个技巧,我们实际上列出了应用程序文件夹中的所有应用程序。当然,您可以而且应该考虑将相同的技术应用于包含您的应用程序的其他文件夹,然后测试它们是否都缺少必需的标志。将代码签名的结果输出到一个临时文件然后抓取文件中所有未标记的条目的单行显示没有强化运行时。在输出与搜索匹配的可执行文件列表后,单行程序还会清除此临时文件。查找连接到LAN技巧的设备:whiletrue;doclear;arp-alnx;c=$(arp-alnx|wc-l);letn=$c-1;printf'\tCount:\t'$n'\n';睡眠2;完成;简介:这个单行程序使用arp实用程序打印出有关连接到LAN的设备的信息,包括本地IP地址、MAC地址(也称为链路层地址)和过期时间。这个命令使用一个无限的while循环,有2秒的延迟,所以它会一直更新,直到你用键盘命令Ctl-C中断它。如果你还保留网络上允许的MAC地址列表,这可能是一个非常简单的方法,以手动发现家庭、实验室或其他小型网络中存在的恶意设备。对于自动化企业解决方案,请使用像SentinelOne的Ranger这样的工具。扩充文件,更改其哈希技巧:foriin{1..3000000};doecho'0'>>;done注意:在测试已知恶意软件时,在某些情况下,您可能需要更改文件的大小或哈希值以击败安全检测规则。这个技巧在我们最近关于如何绕过Catalina上的XProtect的文章中有所介绍,但这肯定不是您可能想要使用它的唯一原因。任何文件大小检查以及针对文件哈希的信誉检查都可以通过这种方式完成。在后一种情况下,不需要将文件扩展到一个字节以上,因此将条件中的第二个数字从3000000调整为2,并将其调整为略大于您尝试打??破的规则中提到的大小更大的数字。查找所有日志记录子系统的名称技巧:ls-al/System/Library/Preferences/Logging/Subsystems|awk'{print$9}'|sed's/.plist//g'简介:Apple的内置日志记录工具允许您访问os_log、os_trace和其他日志记录系统,创建系统范围的日志消息。一旦掌握了通用日志系统,它就是一个强大的实用程序。但是,需要清除几个障碍。一是习惯使用基于谓词的过滤。另一个是知道哪些子系统可供查询。在这个技巧中,我们从系统中提取所有可用的子系统并将它们打印到标准输出。有了这个列表,我们现在可以将搜索范围缩小到特定区域,这非常适合漏洞发现和漏洞评估。查找具有全磁盘访问权限的应用程序技巧:sudosqlite3/Library/Application\Support/com.apple.TCC/TCC.db"SELECTclient,allowedFROMaccessWHEREservice=='kTCCServiceSystemPolicyAllFiles'"|grep'1'$介绍:全磁盘访问(FDA)是一种在macOSMojave中引入并在macOSCatalina中显着扩展的用户保护机制。它是否真的有效地提供了现实世界的保护还有待商榷,但毫无疑问,它常常让开发人员和高级用户感到沮丧,因为许多常见的应用程序和脚本功能将无法工作,除非实施过程被清除食品药品监督管理局。这个技巧可以让您快速确定给定设备上的哪些应用程序已被授予该权限。在大多数情况下,输出应该与您在系统偏好设置的“安全和隐私”面板中看到的相匹配(请参阅“隐私”选项卡下的“完整磁盘访问”)。但是,如果您的设备由MDM解决方案管理,则系统偏好设置不会向您显示实际上具有完整磁盘访问权限的所有项目,因此这个技巧在这种情况下也很有用。注意sudo命令的使用:需要管理员权限才能读取TCCSQLITE3数据库。值得注意的是,如果您在最后停止对grep的调用,那么您将看到一个更长的条目列表,其他条目的末尾为0。这些应用程序已经在FDA的列表中,但目前尚未启用。获取Mac的UUID、Board-ID技术:ioreg-rd1-cIOPlatformExpertDevice|grepUUID|awk'{print$NF}'|sed's/\"//g'or/usr/sbin/system_profilerSPHardwareDataType|grepUUID|awk'{print$NF}'简介:这是macOS广告软件的常用技巧,它的用处有很多。从攻击者的角度来看,IOPlatformUUID是攻击者跟踪受感染受害者的好方法,UUID可以用作URL从受害者的计算机到攻击者的C2。从防御者的角度来看,值得监视对ioreg和system_profiler的调用,这些调用专门查找IOPlatformExpertDevice属性或解析UUID。请注意,ioreg列出了相同的属性ioreg中的“board-id”键-rd1-cIOPlatformExpertDevice|grepboard-id是恶意进程判断它是在裸机上还是在研究人员的虚拟机上运行的几种方法之一。硬件分析器提供了很多有用的环境信息(使用与上面相同的命令,但删除调用grep以及之后的所有内容)。system_profiler命令实际上是系统信息的命令行版本,是一个位于应用程序文件夹Applications子文件夹中的工具。使用system_profiler-listDataTypes查看您可以查询的所有不同部分,本文将为您提供有关该实用程序的其他有用信息。将十六进制字符串转换为ASCII(并再次返回)技巧:echo''|xxd-r-p或echo'helloworld'|xxd-p或echo'helloworld'|od-tc-tx1或python-c"p??rintbytearray.fromhex('')"介绍:如果你注重自己设备的安全,几乎不可避免地会经常遇到需要在十六进制编码的字符串和ASCII字符之间进行转换的情况。正如上面的代码所示,其实有很多种方法可以做到,看你的喜好。就个人而言,我更喜欢使用xxd,因为它速度快、易于记忆且输入起来简短。确保使用-p开关来获得非常连续的打印字符串。使用-r开关,可以将十六进制转换回ASCII。od实用程序提供的输出略有不同,它以ASCII和十六进制并排显示每个字节,这在您想要直观地比较每个字节与其ASCII表示形式的情况下很有用。将PNG图像的文件夹批量转换为JPEG提示:mkdirjpegs;默认情况下,macOS屏幕捕获实用程序将使用.png格式。但是,如果您要将屏幕截图上传到网页,通常首选JPEG,因为这些文件更轻,页面加载速度更快。虽然您可以更改screencapture的默认文件格式(请参阅manscreencapture),但我发现将默认值保留为.png很有用,因为它通常是许多其他任务的首选格式。幸运的是,这个单行代码几乎立即遍历当前工作目录中的所有图像,创建一个名为“JPEGS”的新文件夹,并用JPEG的所有PNG副本填充该文件夹。sips工具是一个鲜为人知的实用程序,它具有许多有用的功能。Sips是Mac提供的图像处理命令行工具。与Photoshop等重量级选手相比,其自然功能就差了很多。不过话虽如此,尺寸裁剪、图片翻转旋转等日常小功能并不需要借助Photoshop等专业级工具。简单的学习sips这样的终端命令就可以快速的辅助你完成任务。可能那边的PS还没有完全打开,这里的图片已经处理过了。本文翻译自:https://www.sentinelone.com/blog/15-macos-power-tricks-for-security-pros/