首页 > 安全 > 网络安全 >

网络安全之MacOS安全加固指南

2016-10-27

尽管MacOS默认配置依然十分自由,但是MacOS通常强制加固安全等级到接近IOS的程度(但仍然不是十分牢固)。这里有许多的加固方法和一些包括已存在自动化工具(例如osx-config-check)的指南(例如CIS APPLE OS X安全指标)。

尽管MacOS默认配置依然十分自由,但是MacOS通常强制加固安全等级到接近IOS的程度(但仍然不是十分牢固)。

这里有许多的加固方法和一些包括已存在自动化工具(例如osx-config-check)的指南(例如CIS APPLE OS X安全指标)。然而,几乎只要将投入一点点到一些建议上(例如禁止浏览器中的javascript就能提高安全--激励天真无邪的用户进入到十九世纪九十年代的怀旧的万维网)。这些建议在这里提出在尽可能将用户烦恼和所遭受的痛苦减少时,要尽力加强全面安全的态度。这里同样有一些被公开文档所忽视的建议。我尽力去关注“内建(built-in)”和“开箱即用(out-of-box)”的函数和设置,并且避免涉及反病毒、反恶意软件或者指明已存在第三方产品以及他们的实用性。

因为途径不同,我最初不考虑在我书中添加一个这样的指南。然而,随着sebastien Volpe的问题我意思到为这本书添加一个非正式的总结是一个很好的补充,我非常感激sebas为本指南所做的一切。我同样地对Amit Serper(@0xAmit)表达我最大的感激,他/她在出版之前审核了这篇文献并且分享了他/她一些深刻的见解!

Patching, Patching and Patching

如果你没有阅读过在本卷第12章深度解析MacOS缺陷,那就让我们打破这个悬念,让你知道它的结论:核心操作系统中的缺陷是不可避免的,并且你将自动受到它们的影响。尽管安全防范措施概述了纵观附录能够起到一定地帮助,但是他们会在面对单个的内核漏洞利用全部失败。

对于缺陷点来说没有简单的解决办法,并且对于所有0-day漏洞没有应对措施。然而,一旦0-day漏洞被披露,它们就会(通常)迅速地被修补好。但是补丁是没有价值的,除非补丁被应用。仅仅当补丁被应用时才能让缺陷点被移除,不再是一个风险。

\

图例1:缺陷点生存周期

然而,作为图例1所示,当每个系统被打上补丁或者更新时,移除掉一个缺陷点是完全能够实现的。尽管对于平常安全意识高的用户不是一个问题,但是对于也许是几百上千的机器并且尽力保持更新版本的公司环境来说会是一个重大的挑战。结果在这样的环境中发现老旧过时的操作系统一点也不罕见,在这些操作系统中也许会藏着使用exploit-db.com中脚本能够简单地利用的缺陷点。

幸运的是,MacOS中软件更新的执行是非交互式的、在命令行下的,因此能够被自动运行执行。使用软件更新工具的-i(--install)和-r(--recommended)选项不需要用户交互便下载和安装好能找得到的补丁,因此,用户没有干涉进程的权限。

注意,苹果“放弃”和停止支持MacOS老版本的做法并不罕见,即使苹果知道缺陷点存在。一个好例子就是MacOS10.10,它的最新(也是-最终)版本-10.10.5仍然有许多muymacho和tpwn漏洞利用点,这些在本书前面部分描述过。尽管有些时候会提示你安全更新,但苹果通常认为大众会更新至MacOS 10.11 (和现在的12),因此不会操心一个提供缺陷点的一个简单的补丁。

Logging and Auditing

小心地监视MacOS日志和审计的子系统,它们通常会在hack成功之前提示警告:一些黑客攻击行为会在第一次尝试时尝试“get it right”,但是仅仅通过观察失败尝试的记录和它们能侦查到的不正常的活动是不够的。

syslog/asl

苹果的日志系统(直到MacOS10.12)都遵照UN*X syslog(1)加上一些苹果特殊扩展(被成为ASL,苹果系统日志)的结构。扩展在使维持传统机制的兼容性和第三方服务的同时,使更大程度上显示信息和过滤成为可能。

Syslog最强大的特点之一就是能够记录远程主机。Syslog绑定UDP514端口,并且能在/etc/syslogd.conf配置,/etc/syslogd.conf使用一个“@”作为标识物(伴随IP或者主机名),同样在DNS或者/etc/hosts中标明了一个loghost入口。远程主机必须运行syslogd且网络可用,因为在MacOS X默认日志记录是越过本地主机和非网络套接字的。

远程日志记录提供两种不同的优势:

代码:

1

2

Centralized logging(集中记录): 对于单台服务器大大地简化了日志监测,能够自动加载第三方工具或者复合UN*X标准的公共工具grep(1),awk(1),perl(1)和其他过滤器。

Write-only access: 如果登录主机在网络上不是可访问的(例如没有SSH,远程登录,或者或者其他的工具),记录会被添加进日志,而且日志不可读、不可移动。这大大地增加了安全性,因为攻击者不能该得到日志收集任何配置和敏感信息。此外这使得日志更可信,因为作为攻击者不能抹去和修改任何之前记入的记录。注意,一个攻击者仍然能够用伪造记录来淹没日志,但是不能撤销先前任何记录。

log (MacOS 12+)

MacOS 12 反对syslog/asl支持心得os_log子系统。这是一个更强大的基础设施,它丢弃了传统的基于记录的文本文件,支持通常地记录在内存日志(in-memory logging)和数据库。显然,如果苹果决定在os_log上实现syslog(3)和asl(3) API,可以预见经过一段时间, ASL将被整个地遗弃,

os_log子系统不支持网络日志记录(在写入的时候)。然而,这是一个相当简单的问题,运行log(1)客户端命令和用管道输送它的输出给nc(1):

代码:

1

log –stream | nc remote.log.host ###

然而,这仅仅是重定向输出基础方法,还有一个更加弹性的解决方法-认为应该接受网络故障事件和可量测性。

Enabling Auditing

MacOS的最强大的安全特征就是不可抵赖的审计性。尽管不具有前瞻性,但是跟踪安全敏感操作和实时的事件还是很有效的。不像上述所提及的日志记录子系统,它请求应用程序所生成的志愿记录,审计记录被操作系统自身所生成。

尽管记录直接地从内核空间到审计日志,但是审计的一个主要缺点是它的本地性质。如果一个系统被破坏,它的审计日志就不能认为具有可信价值。幸运地是,一点点UN*X shell脚本创造性就能重定向审计记录到一个服务器。与nc(1)欺骗能够应用在log(1)上面一样也能应用在/dev/duditpipe上。事实上,审计管道的日志也许被praudit(1)管理,使其成为一个二进制流,而不是第一次转变给人类可读的格式。在这里,一个更具有弹性的包装器(在shell脚本或者其他的里面)被推荐。

审计策略的精确规范在推荐的范围之外,因为它也许很依赖于组织策略。然而,第一条规则,要记住审计与性能是成反比例的。建议最低限度记录lo(login/logout(登录/注销)),aa(authentication/authorization(认证/授权)),ex(execution(执行))和pc(process lifetime(进程存活时间))。因为在高安全性设备上的审计是很严苛的,要考虑到使用ahlt标志,它能够在审计失败时中止系统。

User-level Security

Login banner

除了使用常用的/etc/motd外,图形登录界面能被设置显示成一个通知。当然这不能决定阻止任何黑客,但是在使用策略上确实起到了一个警告作用,并且在某些位置能够被合法的请求。

Password Hints

在任何的密码提示出现前,有规则的调整密码尝试失败次数是合理的。这能够用来禁用整个的密码提示。

Login/Logout hooks

MacOS一个小知识但是却非常有用就是Login/Logout hooks。这些路径的二进制程序可以作为登录和注销进程的一部分运行。

可以使用登录钩子运行一个程序,例如监视用户登录和记录或者实时的警告管理员。同样的,一个注销钩子能够用来确保删除临时文件(例如,使用srm清除回收站中所有文件)。

注意,登录/注销钩子是 有潜力持续扫描隐藏恶意软件位置,并且应该定期检查非法修改(最好在每一个用户会话中)。

Password Policies

企业的MacOS系统由于允许集中认证服务,会在许多情景中用控制器自动同步他们的密码策略。Mac OS X Server App(或者更早的系统,工作组也能配置这样的系统)。

从命令行模式中,powerlicy(8)工具里可以找到设置密码策略的所有方面。

这个工具(在第一章中被提到的)恰好在它的手册中有说明。实际建议策略将会是不同的。

Screen Saver locking(屏幕保护程序锁)

大多数用户离开他们的电脑都没来得及锁屏,并且当过路人下意识的点击一下窗口就能偷取信息和运行命令时,无人值守的会话状态意味着安全风险。因此建议设置屏幕保护选项-通过系统首选项或者defaults(1)命令:

Disable su

su(1)是没有安全敏感,但比sudo(8) 起更重要作用,因此应该被禁止。禁用它就像一个chmod u-s操作一样简单,但是更久远的建议是在pam_deny.so添加一行(如第一章中的“修改PAM配置文件”)。

Harden sudo

虽然无参的sudo(8)比基本的su(1)要更安全,但是sudo的默认配置能够且应该被加固

因此建议以下步骤:

在共同环境中,只有指定的命令能够被sudo使用。这些命令应该包括比shutdown(8)和reboot(8) 更加安全的命令。在任何时候下,绝不应该所有的shell都能被运行,因为这有效的绕过了sudo命令作为用户能简单地sudo bash或相似命令的限制条件。

Sudo有一些已知功能在tty_tickets,它绑定了超级用户许可终端(tty)在那些最终已认证sudo命令上。如果没有这个功能,一旦他们之一被认证,两个不同用户会话终端将自动获得超级用户权限。

其他有用的特性是log_input和log_output。这些应该被全局设置或者被设置在一个单命令模式基础上(使用 [NO]LOG_[INPUT/OUTPUT])。Sudo命令甚至能够应用到发送电子邮件的成功或失败上。这些命令和其他命令大量文献能够在sudoers(5)找到。

Periodically check start up and login items

搜寻驻留的恶意软件,因此定期检查用户启动项和登录选项是一个好主意。确切的时间也许不同,但是可以一周一次,或者尽力用钩子相关联登录项。任何新发现的项应该被考虑到审计价值。这包括检查登录/注销钩子甚至是它们自己的工作,因为恶意软件也许会寻求驻留,通过cron或者AT(计划的安排、任务的管理、工作事务)调度它们自身。

Use MDM (or parental controls) to manage user sessions and capabilities

如第六章所描述,MacOS有一些软件限制机制,通过mcxlr二进制程序实施并且与它的内核扩展相关联。软件限制十分强大,它仅仅允许被选上白名单的app安装运行或者甚至还原工作站到“kiosk”模式。

精确限制是留给管理员策略的,但是这个机制是被高度推荐的。

Data Protection

Periodically obtain cryptographic snapshots of important files

重要系统文件,例如/etc/hosts(绕过DNS),/etc/passwd和其他经常被恶意软件或带有各种各样目的的黑客修改。仅仅依靠文件大小和时间戳是不够的,因为调整文件大小和时间戳十分简单。

加密哈希值功能例如MD5和SHA-1不能够简单地碰撞。因此对重要系统配置文件运行一个周期检查是一个好主意。当然对于文件认为是不可变的(例如,/bin,/usr/bin中的各种各样的二进制等等)。重要文件的确切名单有所不同(因为会需要更新操作系统补丁或升级)。重要文件任何可探测的改变应该立即提示一个警报。

Periodically backup user data

用户数据很容易丢失---被意外删除、有针对性破坏或者勒索软件勒索。定期备份数据能够减缓潜在损失。备份脚本能够手动配置,或者使用第三方管理工具。在这些配置手册中,使用find / -mtime … | xargs tar zcvf能够运行得很好。

当一个单个、可信的备份服务器能与网络上的机器无密码、使用公钥的SSH会话通信,通过网络备份是最好的。

Cloud Saving

MacOS与iCoud结合越来越紧密,这对普通用户通常非常方便,但是在一些情境中会成为一个潜在的数据泄漏点。iCloud存储需要被禁止,用一下命令很容易做到:

Enable hibernation

Pmset手册描述了hibernatemode不同选项尤其是模式25,它仅仅可以通过命令行可设置utility.hibernatemode=25是通过pmset唯一可以设置的。系统会存储一份内存映像到持续性存储介质上(磁盘),并且移除内存电源。系统会从磁盘中还原映像。如果你想“hiberna-tion”-慢休眠,慢唤醒和更好的电池寿命,你应该使用这个设置。

Secure Deletion

一个HFS(或APFS)中的文件实际上不会被删除-它们的文件系统节点是无链接的,但是数据块直到在低级空间条件下(a low disk space condition,这里实在不清楚是什么条件)才会被清除或回收。强迫安全删除是可能的-通过使用srm(1)或rm –p复写数据块内容。注意到这个方法不推荐用户在Flash or Fusion Drives中使用,因为大大地增加了P/E循环次数和缩短了存储介质寿命。

Physical Security

设置一个固件密码阻止任何启动配置改变,例如尝试从另一个引导设备引导。这大大地增加了你的Mac的安全性。在Apple文档知识库文章HT204455中有设置固件密码的过程,但必须通过recovery文件系统设置。

Find my Mac

许多人熟悉设置”find my i-Device”这样的特色,并且这也同样适用于Mac。尽管经常对于固定位置的Mac Pro和iMac无用,但是这对于macbook来说是一个福利。不仅仅自动设置固件密码,如果被偷或丢失,它也能够远程锁定和清除Mac。

FileVault 2

应该启用FileVault 2( 全磁盘加密)。这个重要特性在Mac OS10.7以上版本可以获得。这个功能可靠、易懂并且高效。尽管当在系统上运行时没有明显效果,但是它使得在设备被破坏或重启时非法授权的个人无法访问。

Remove key during standby

当一台Mac进入到待机状态时,FileVault2密钥仍然在物理内存中明文存储。这使得有些基于硬件攻击类型能通过捕捉和转储RAM映像确定密钥。设置pmset destroyfvkeyonstandby 1可以从内存中删除密钥,但是当电脑从待机状态脱离时,就需要用户重新登录了。

注意这个设置已知会干涉电脑正常的待机和power nap。所以这两种设置都应该被禁用(使用pmset –a [standby/powernap])0。

相关文章
最新文章
热点推荐