it-консалтинг и аутсорсинг
что мы делаем контакты блог

System Integrity Protection

Федор Костылев 24.05.2016

iMac

Когда Apple только анонсировала System Integrity Protection(SIP) и Rootless, казалось, что вот оно – начало конца. Mac OS X, дитя свободолюбивого Unix, начали превращать в iOS. Сперва редизайн в 10.10 Yosemite, затем – запрет на использование root, не успеешь оглянуться – и приложения станут доступны только из App Store.

На самом деле, такие опасения беспочвенны. SIP – безобидная и очень полезная функция. В этой статье мы расскажем, зачем она нужна, как работает и как мы можем использовать ее себе на пользу.

Все мы сотни, даже тысячи раз сталкивались с похожим окном. Программе требуется внести изменения, что-то установить или что-то поменять. И для всего этого необходим ваш пароль. Если вы читаете эту статью, вы наверняка знаете, зачем он нужен и почему программа требует его ввести. Но, в основном, пользователи Mac даже не подозревают, на что способен их пароль администратора и какова опасность неосторожного обращения с ним.

OS X Password

Большинство Mac настроены не лучшим образом. Одна-единственная учетная запись с правами администратора и пользователь, который может не понимать всех особенностей такой ситуации. Поэтому Apple решили, что лучшим решением будет запретить, даже для root-пользователя, запись в системные папки. Это и есть System Integrity Protection. Помимо защиты от записи, SIP также обеспечивает проверку подписей Kernel Extensions, о чем мы поговорим чуть ниже. Иногда можно встретить другое название – Rootless, но оно не совсем верно, ведь root-пользователь и sudo все еще существуют и доступны. Для начала, давайте посмотрим что именно SIP защищает от записи.

Согласно Mac Developer Library, как пользователю, так и приложениям, запрещена запись в следующие папки:

  • /bin
  • /sbin
  • /usr
  • /System

Также, запись во все приложения Apple в папке /Applications доступна тоже только для системы. Однако, пользователю и приложениям открыт доступ для записи в, помимо прочего, /usr/local.
Список всех папок и файлов, защищенных SIP, хранится в файле paths по адресу /System/Library/Sandbox/Compatibility.bundle/Contents/Resources/. Чтобы просмотреть его, в терминале введите


less /System/Library/Sandbox/Compatibility.bundle/Contents/Resources/paths

Прежде, чем продолжить, на всякий случай сохраним этот список. Для этого можно воспользоваться командой

less /System/Library/Sandbox/Compatibility.bundle/Contents/Resources/paths > ~/Desktop/paths.txt

Список появится на вашем рабочем столе в файле paths.txt

SIP paths

Мы не просто так сохранили его, ведь, если отключить SIP, список пропадет из системной библиотеки. Все пути, которые не указаны в этом списке, были особенно обработаны. Поскольку SIP появился только в 10.11 El Capitan, если вы перешли на эту систему обновлением с другой версии, в теперь защищенных папках могли быть данные, записанные туда сторонними программами. Эти данные были помещены в карантин. Чтобы проверить, было ли что-то помещено в карантин на вашем компьютере, в терминале введите


cd /Library/SystemMig

и нажмите Tab. Если путь не будет продолжен (вы можете услышать звук ошибки), значит, карантин на вашем компьютере отсутствует. Если же путь продолжился, расположение карантина зависит от UUID вашего Mac и выглядит вот так:

/Library/SystemMigration/History/Migration-<UUID>/QuarantineRoot/

Вторая, не менее важная часть System Integrity Protection – проверка цифровых подписей Kernel Extensions, или kexts. Kexts – это дополнения, или расширения, к ядру системы. С выходом 10.11 El Capitan расширения должны быть подписаны сертификатом Developer ID и установлены в /Library/Extensions. Их больше нельзя установить в /System/Library/Extensions, ведь теперь это защищенная папка.

Когда запускается какой-либо процесс, ядро проверяет, защищен ли главный исполняемый файл на диске или есть ли у него особая системная подпись. Если одно или другое верно – процесс помечается флагом защищенного ресурса и оказывается недоступен для модификаций. Любые попытки повлиять на такой процесс со стороны отклоняются ядром. Так SIP не только защищает системные папки, но и позволяет в режиме реального времени проверять исполняемый код.

Конфигурация SIP хранится в NVRAM, а не в файловой системе текущей ОС. Поэтому настройки SIP распространяются на все установки OS X на компьютере, включая системы, установленные на съемных носителях. Однако, конфигурация будет влиять только на El Capitan, поскольку пока только эта версия ОС поддерживает System Integrity Protection.

Чтобы проверить, включена ли SIP на вашем компьютере, в терминале выполните


csrutil status

Если защита включена, вы увидите сообщение как на картинке внизу (если защита выключена, вместо этого появится System Integrity Protection status: disabled).

Sip status

Теперь мы посмотрим, как SIP можно выключить или включить. Для начала, необходимо загрузить компьютер с раздела восстановления OS X Recovery. Для этого перезагрузите его с зажатыми клавишами ⌘R. Когда вы загрузитесь в раздел восстановления, наверху, в меню Utilities, откройте терминал. Здесь, в Recovery, терминал не будет использовать вашего пользователя, вместо него – root. Чтобы отключить SIP, в терминале введите


csrutil disable

Для включения SIP:

csrutil enable

Изменения вступят в силу только после перезагрузки. Вернувшись обратно в OS X, в терминале выполните

csrutil status

и, если все было сделано правильно, вы увидите свои изменения.

System Integrity Protection – самое значимое улучшение базовой безопасности OS X со времен первого выхода системы. Если вам потребовалось отключить SIP, чтобы установить какое-либо приложение или kext, даже если вы доверяете тому, что устанавливаете, пожалуйста – когда вы закончите работу с ними, включите защиту обратно.