关于 MAC OSX El Capitan 10.11 中 引入的安全机制和非签名内核扩展

背景 升级最新的MAC OSX El Capitan已经有段时间了,事实上最近系统已经更新到了10.11.2,也就是该大版本的第2个update。我有一台2011年的老Macbook Pro 15,我相信应该是其做工的问题,蓝牙信号很不好。拿去当地天才吧看过,确认了这个问题,但是告知我这款机器是将蓝牙天线集成在屏幕中的,如果要解决这个问题就需要连屏幕一起换了,于是我就算了。我需要在这台机器上使用蓝牙耳机,于是单独买了一个USB的蓝牙dongle(El Capitan直接支持一些外接USB蓝牙适配器,Broadcom 20702A1芯片,0a5c:21e8这款是大路货),这个问题也就算曲线解决了。但是我是一个不升级最新版本不舒服的人,也因为这点后面问题来了。 MAC中蓝牙驱动固件机制 大部分的Broadcom蓝牙设备使用一种叫RAMUSB的系统机制,这种机制允许系统把该设备的固件即时上传,但是每次关机或者重启就会丢失。在Broadcom提供给windows的驱动中,broadcom的驱动做法是每次开机就会上传一次最新的驱动。但是Mac OSX中不是这样的。所以针对我这款USB蓝牙适配器,虽然即插即用,但是固件版本是v4096(后续更新后可以到v5555)。那么自然就需要把类似windows中的做法也在mac中实现就可以了 BrcmPatchRAM 这方面老外总是早早的就有了想法,并且有了proof of concept的实现。BrcmPatchRAM就是这样一个可以帮我完成上节问题的开源项目,放在github上。实现方法大概如下: 以Mac OSX的内核扩展形式在每次开机时加载一次,将从windows驱动中提取出来的zhx格式固件上传,这样设备就可以用新版固件运行。 签名的内核扩展 好东西是有了,但是新问题又来了。早在OSX 10.8的时候,苹果就以安全为名义引入了需要签名的内核扩展,意思就是说不是随随便便的就可以写一个kext,放到系统中让系统在启动时一起加载的。OSX系统需要审查!只有获得苹果签名的kext才可以正常加载。而这类实用的野路子kext是肯定不会获得苹果的签名的。幸好在桌面系统上,苹果并没有严格到将以上规定设计成绝对。事实上一直以来都留了一个官方的开关,允许用户主动关闭这种审查。当然后果就是给恶意代码也开了方便之门。到了El Capitan,苹果将这个开关变了个法子,引入了所谓的SIP机制。一直到El Capitan的DP8之前,其实SIP是有明显的漏洞的。根据Pike的说法,他找到了在DP8之前根本不需要关闭SIP就可以随便植入不签名的kext的玩法。有兴趣的可以自翻看那篇博客,内容很是干货。 植入未签名kext 不管是SIP还是之前的kext-dev-mode,其实从安全性角度是很有必要打开的,确实我们平时实际使用中,针对弹出的要sudo权限的密码窗口,基本是直接给的。真的碰上一些恶意软件也是麻烦。截至目前10.11.2,苹果是允许你暂时关闭SIP,然后将未签名的kext复制到/System/Library/Extensions(俗称/S/L/E)。重启机器,这样osx系统会根据最新的改动,重新生成/System/Library/PrelinkedKernels/prelinkedkernel这个文件。然后我们可以将SIP重新打开,后续只要prelinkedkernel没有变化就没问题(一般在系统update时这个文件肯定会变。所以未签名的kext在系统小版本号更新后都会失效,需要重新开关SIP重启系统)。

VMWare Copied Linux Virtual Machine network adapter udev issue

After cloning a VMWare image I had noticed that my CentOS Linux server renamed eth0 as eth1, eth1 as eth2 and so on. This is due to wrong or duplicate mac address. To fix this problem login to your CentOS Linux server using console and type the following commands: # cd /etc/udev/rules.d # cp 70-persistent-net.rules… Continue reading VMWare Copied Linux Virtual Machine network adapter udev issue

OSX 获取CPU信息

可以使用sysctl 命令: [code] sysctl hw [/code] 会列出一些和CPU内存配置相关的参数,其中还有此CPU的byteorder, 4321 为bigendian, 1234为little endian.

Manually Install Kernel extensions on OSX

If you insist on doing it the command-line way, here’s how: First, copy the kext file to /System/Library/Extensions. Then, open the Terminal app (located in OS X under Applications->Utilities) and type: cd /System/Library/Extensions For those unfamiliar with command line, this just changes the directory that Terminal is working on to /System/Library/Extensions. Then type: sudo chmod… Continue reading Manually Install Kernel extensions on OSX

Uninstall HUAWEI 3G MobileConnect Driver From OSX

需要删除以下目录和文件: /Library/Receipts/HWportDetect_driver.pkg(Mac OS X 10.5) /Library/Receipts/MobileConnectDriver.pkg(Mac OS X 10.5) /Library/StartupItems/HWPortDetect /Library/StartupItems/HWNetMgr /Library/Modem Scripts/HUAWEI Mobile Connect – 3G Modem /System/Library/Extensions.mkext(Mac OS X 10.5) /System/Library/Extensions/HuaweiDataCardDriver.kext /System/Library/Extensions/USBExpressCardCantWake_ Huawei.kext /System/Library/Modem Scripts/HUAWEI Mobile Connect – 3G Modem /System/Library/Modem Scripts/HUAWEI Mobile.ccl(Mac OS X 10.5) 以上目录可能会根据OS版本不同略有变化。

OSX重装后需要的设置(SSD)

1,首先对于ssd装在硬盘位置的同学,我推荐把mbp自带的硬盘移动突发感应器关闭。 这是针对传统机械硬盘的一项保护功能,机器在监测到剧烈晃动或突发性落地时,会将硬盘的磁头缩回安全位置来保护硬盘不产生坏道 而对不怕震不怕摔不怕晃的SSD来说,这个功能是多余的,所以将它关闭 在终端窗口执行以下代码 [code] sudo pmset -a sms 0 [/code] 2,对于在移动硬盘设置了Time Machine的同学,我推荐把Time Machine的本地备份功能关闭。 Time Machine的本地备份好像是从10.7开始才增加的新功能,具体的作用是在未接入Time Machine的移动硬盘时,将备份存储在本地硬盘上,等你接入了移动硬盘后,系统会自动的将本地备份的内容,传输到作为Time Machine的移动硬盘上。 这功能其实不错,但对于空间宝贵的SSD来说,我个人推荐关闭。 在终端窗口执行以下代码 [code] sudo tmutil disablelocal [/code] 3,许多同学都为自己的mbp升级了8gb,甚至16gb的内存。 而OS X默认的合盖休眠方式,是混合睡眠,合上盖子之后,仅为内存供电,这样在掀开盖子的时候可以迅速的恢复。 而一旦电池没电之后,系统会自动的将内存里的内容写入硬盘上的一个睡眠缓存文件里,下次开机时,会看见类似iPhone恢复时的进度条,读取硬盘缓存文件里的内容,来恢复你合盖之前的桌面。 那么这个缓存文件的大小,和你内存的大小是一样的,例如你有8gb内存,那么缓存文件就是8gb,16gb内存,缓存文件就是16gb。 这对于64gb或128gb的ssd来说,占用的空间实在不小,那么我个人建议关闭设置为内存休眠。 但是一旦电池没电,系统将丢失所有未保存的数据。不过一般来说,mbp的电池都不会用到没电的那一刻。。 在终端窗口按顺序执行以下代码 [code] sudo pmset -a hibernatemode 0 sudo rm /var/vm/sleepimage* [/code] 4、开启第三方ssd的trim功能 ssd的trim这项功能的重要性,我在这里就不多说了,对于apple原厂的ssd,os x的trim默认就是打开的,例如air,rmbp 而我们自己改装的第三方ssd,trim都是默认关闭的,如何开启?请看下面。 对于10.7和10.8的os x 在终端窗口按顺序执行以下代码 [code] sudo cp /System/Library/Extensions/IOAHCIFamily.kext/Contents/PlugIns/IOAHCIBlockStorage.kext/Contents/MacOS IOAHCIBlockStorage… Continue reading OSX重装后需要的设置(SSD)

Mac OSX Mountain Lion 的全局环境变量, For all GUI apps and Spotlight

以前osx的全局变量可以通过~/.MacOSX/envrironment.plist文件来设置,现在Mountain lion后就不行了。现在的文件换成/etc/launchd.conf 可以使用一下方法来设置: 1) Open a terminal prompt 2) Type sudo vi /etc/launchd.conf (note: this file might not yet exist) 3) Put contents like the following into the file # Set environment variables here so they are available globally to all apps # (and Terminal), including those launched via Spotlight. # # After editing this file run… Continue reading Mac OSX Mountain Lion 的全局环境变量, For all GUI apps and Spotlight

Cannot Change the Binding Order for Remote Access Connections(kb/311218)

Symptoms You may experience a problem after you change the binding order for [Remote Access connections] by moving it to the top of the connections list. You would do so in the Advanced Settings dialog box of the Network and Dial-up Connections tool. After you do so, network utilities that resolve host names by using the Domain… Continue reading Cannot Change the Binding Order for Remote Access Connections(kb/311218)

How to Burn Your Own OS X Lion Install DVD or USB Drive

Download Lion from the Mac App Store. The installer should show up in your Applications folder. Right-click on the installer and hit “Show Package Contents”. Navigate to Contents > SharedSupport and look for a file called “InstallESD.dmg”. Open up Disk Utility and drag the DMG file into the left-hand sidebar. If you’re burning it to… Continue reading How to Burn Your Own OS X Lion Install DVD or USB Drive