На самом деле, что такое «бескомпромиссная» функция в Эль-Капитане?

Я только что узнал о функции «Rootless» в El Capitan, и я слышу такие вещи, как «Нет пользователя root», «Ничто не может изменить /System» и «Мир будет конец, потому что мы не можем получить root ".

Какова функция «Rootless» El Capitan на техническом уровне? Что это означает для пользователя и опыта разработчиков? Будет ли работать sudo -s, и если да, то как изменится опыт использования оболочки как root?

223 голоса | спросил Josh 27 J0000006Europe/Moscow 2015, 23:43:18

3 ответа


259

Во-первых: имя «rootless» вводит в заблуждение, поскольку до сих пор есть учетная запись root, и вы все равно можете получить к ней доступ (официальное название «System Integrity Protection» более точно). Фактически это ограничивает мощность учетной записи root, поэтому даже если вы станете пользователем root, у вас нет полного контроля над системой. По сути, идея заключается в том, что вредоносное ПО слишком легко получить, чтобы получить root-доступ (например, представив пользователю диалог auth, что заставит пользователя рефлексивно ввести пароль администратора). SIP добавляет еще один уровень защиты, который вредоносное ПО не может проникнуть, даже если оно получает root. Плохая часть этого, конечно же, заключается в том, что она также должна применяться к вещам, которые вы делаете намеренно. Но ограничения, которые он накладывает на root, не так уж плохи; они не препятствуют самой «нормальной» настройке системы.

Вот что он ограничивает, даже от root:

  • Вы ничего не можете изменить в /System, /bin, /sbin или /usr (кроме /usr/local); или любые встроенные приложения и утилиты. Только установщик и обновление программного обеспечения могут изменять эти области, и даже они делают это только при установке пакетов, подписанных Apple. Но поскольку обычная настройка в стиле OS X выполняется в /Library (или ~/Library или /Applications)) и в настройках unix-стиля ( например, Homebrew), введите /usr/local (или иногда /etc или /opt)), это не должно быть большой проблемой. Он также предотвращает запись на уровне блока на загрузочный диск, поэтому вы не можете обойти его таким образом.

    Полный список ограниченных каталогов (и исключений, таких как /usr/local и несколько других) находится в /System/Library/Sandbox/rootless.conf. Конечно, этот файл сам находится в ограниченной области.

    Когда вы обновляетесь до El Capitan, он перемещает любые «несанкционированные» файлы из запрещенных областей в /Library/SystemMigration/History/Migration-(some UUID)/QuarantineRoot/.

  • Вы не можете подключаться к системным процессам (например, тем, кто работает из этих системных местоположений) для таких вещей, как отладка (или изменение динамических библиотек, которые они загружают, или некоторые другие вещи). Опять же, не слишком большое дело; разработчики все еще могут отлаживать свои собственные программы.

    Это блокирует некоторые важные вещи, такие как ввод кода во встроенные приложения Apple (в частности, Finder). Это также означает, что dtrace - инструменты для мониторинга системы (например, dtrace ) не сможет контролировать & отчет о многих системных процессах.

  • Вы не можете загружать расширения ядра (kexts), если они не были правильно подписаны (например, Apple или одобренный Apple разработчик). Обратите внимание, что это заменяет старую систему для принудительной подписи kext (и старых способов ее обхода). Но поскольку v10.10.4 у Apple есть имел возможность включить поддержку отделки сторонних SSD , причина №1 для использования unsigned kexts исчезла.

Если вам не нужны эти ограничения - либо потому, что вы хотите изменить свою систему за пределы того, что это разрешает, либо потому, что вы разрабатываете & отлаживая что-то вроде kexts, которые не являются практичными в рамках этих ограничений, вы можете отключить SIP. В настоящее время для этого требуется перезагрузка в режиме восстановления и запуск команды opensnoop (и вы можете повторно включить ее с помощью csrutil disable).

Но остановитесь и подумайте, прежде чем отключать SIP, даже временно: вам действительно нужно отключить его, или есть лучший (SIP-совместимый) способ делать то, что вы хотите? Вам действительно нужно что-то изменить в csrutil enable или /System/Library или что-то в этом роде, или это может быть в лучшем месте, например /bin или /Library и т. д.? SIP может «чувствовать» сдерживание, если вы к нему не привыкли, и есть некоторые законные причины, чтобы отключить его, но многое из того, что он навязывает ему, действительно является лучшей практикой в ​​любом случае.

Ссылки и дополнительная информация: Презентация WWDC на тему «Безопасность и приложения» , хорошее объяснение Eldad Eilam на quora.com , Ars Technica обзор El Capitan и Apple поддерживает статью по SIP и глубокое погружение Rich Thuton (который также разместил ответ на этот вопрос ).

ответил Gordon Davisson 28 J0000006Europe/Moscow 2015, 03:16:00
86

Для меня это означает, что DTrace больше не работает.

DTrace похож на ptrace /strace в Linux, поскольку он позволяет вам видеть, что процесс говорит ядру. Каждый раз, когда процесс хочет открыть файл, записать файл или открыть порт и т. Д., Ему нужно спросить ядро. В Linux этот процесс мониторинга происходит за пределами ядра в «userland», и, следовательно, разрешения довольно мелкозернистые. Пользователь может контролировать свои собственные приложения (исправлять ошибки, находить утечки памяти и т. Д.), Но для контроля процесса другого пользователя должен быть установлен root.

DTrace на OSX, однако, работает на уровне ядра, делая его намного более производительным и мощным, однако он требует корневого доступа для добавления своих зондов в ядро ​​и, таким образом, что-то делать. Пользователь не может отслеживать свои собственные процессы, не будучи root, но как root они могут не только наблюдать за своими собственными процессами, но и фактически ВСЕ процессы в системе одновременно. Например, вы можете посмотреть файл (с помощью iosnoop) и посмотреть, какой процесс его читает. Это одна из самых полезных функций для обнаружения вредоносного ПО. Поскольку ядро ​​также имеет дело с сетевым IO, то это же верно. Wireshark обнаруживает необычную сетевую активность, DTrace сообщает вам процесс отправки данных, даже если он встроен в систему как ядро.

Как и в случае с El Capitan, Apple намеренно предотвратила работу DTrace - так как в ней была специально нацелена и выделена как нечто, ограничивающее SIP. Зачем они это делают? Ну, ранее Apple изменила свое ядро ​​и DTrace, чтобы позволить некоторым процессам отказаться от мониторинга через DTrace (что в то время расстраивало многих исследователей безопасности, поскольку некоторые процессы были теперь недоступны даже в качестве root - включают вредоносное ПО). Их причиной было защитить DRM в таких приложениях, как iTunes, поскольку теоретически кто-то мог DTrace и захватить данные DRM'd из памяти процессов.

Однако была важная работа, которая позволила исследователям продолжать выполнять свои задания, и это должно было изменить ядро, чтобы игнорировать этот флаг отказа, поэтому DTrace все еще можно было использовать для этих процессов. Это было действительно здорово, потому что программы пытались уклониться от обнаружения, где теперь освещаются этот флаг без DTrace. Все, что Apple или плохие парни хотели скрыть, теперь было на виду ...

Но теперь это не работает, так как это влияет на вас? Это коснется вас прямо и косвенно. Прямо, это ограничит вашу способность контролировать вашу систему. Большое количество низкоуровневых средств администрирования системы и мониторинга (которые будут использоваться более высокоуровневыми инструментами) больше не будут работать. Косвенный эффект, однако, будет намного больше - профессионалы в области безопасности полагаются на глубокий системный доступ для обнаружения наихудших видов угроз. Мы просто не можем этого больше делать. При анализе вредоносного ПО крайне важно, чтобы он не знал, что он работает в отладчике или honeypot. Отключение SIP сообщает всему программному обеспечению, как от плохих парней, так и от Apple, о том, что эта система просматривается. Больше не наблюдайте за наблюдателями. Если SIP был о безопасности, они могли бы получить образованных пользователей о корне, а вместо этого они удалили его. В конечном итоге это означает, что Apple заменила защитный барьер «все и закончил все» корневого пароля, с механизмом защиты «все и до конца» SIP. Или, если у вас есть какая-либо польза в социальной инженерии, пароль root с перезагрузкой ...

Есть и это: введите описание изображения здесь «> </a> </p></body></html>

ответил J.J 30 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowWed, 30 Sep 2015 13:08:52 +0300 2015, 13:08:52
45

Защита целостности системы (SIP) - это общая политика безопасности с целью предотвращения изменения системных файлов и процессов третьими лицами. Чтобы достичь этого, он имеет следующие понятия:

  • Защита файловой системы
  • Защита от расширения ядра
  • Runtime protection

Защита файловой системы

SIP запрещает сторонам, кроме Apple, добавлять, удалять или изменять каталоги и файлы, хранящиеся в определенных каталогах:

/bin
/sbin
/usr
/System

Apple указала, что для разработчиков доступны следующие каталоги:

/usr/local
/Applications
/Library
~/Library

Все каталоги в /usr, за исключением /usr/local, защищены SIP.

Можно добавлять, удалять или изменять файлы и каталоги, защищенные SIP, через пакет установщика, который подписывается собственным центром сертификации Apple. Это позволяет Apple вносить изменения в защищенные SIP части ОС без необходимости менять существующие SIP-защиты.

Соответствующий орган сертификации зарезервирован Apple для собственного использования; Установленные разработчиком пакеты установщика не могут изменять файлы или каталоги, защищенные SIP.

Чтобы определить, какие каталоги защищены, Apple в настоящее время определила два файла конфигурации в файловой системе. Первичный найден в следующем месте:

/System/Library/Sandbox/rootless.conf

, где rootless.conf перечисляет все приложения и верхний уровень каталогов, которые SIP защищает.

 введите описание изображения здесь>> </a> </p>

<p> <STRONG> Приложения </STRONG> </p>

<p> SIP защищает основные приложения, которые OS X устанавливает в приложения и приложения. Это означает, что уже невозможно будет удалить приложения, которые OS X устанавливает, даже из командной строки при использовании привилегий root. </p>

<p> <a href= введите описание изображения здесь>> </a> </p>

<p> <a href= введите описание изображения здесь>> </a> </p>

<p> <STRONG> Каталоги </STRONG> </p>

<p> SIP также защищает несколько каталогов и символических ссылок вне <code>/Applications</code>, а верхний уровень этих каталогов также указан в <code>rootless.conf</code>. </p>

<p> <a href= введите описание изображения здесь>> </a> </p>

<p> В дополнение к защите Apple также определила некоторые исключения для защиты SIP в файле rootless.conf, и эти исключения отмечены звездочками. Эти исключения из защиты SIP означают, что можно добавлять, удалять или изменять файлы и каталоги в этих местах. </p>

<p> <a href= введите описание изображения здесь>> </a> </p>

<p> Среди этих исключений: </p>

<ul>
<li>
<code>/System /Library /User Template</code> - где OS X хранит шаблон
которые он использует при создании домашних папок для новых учетных записей. </li>
<li>
<code>/usr /libexec /cups</code> - где OS X хранит конфигурацию принтера
информация </li>
</ul>
<p> Apple рассматривает этот файл как свой, и что любые изменения в нем третьих сторон будут перезаписаны Apple. </p>

<p> Чтобы узнать, какие файлы были защищены SIP, используйте <a href = /Applications команда с типом капитала O в терминале:

rootless.conf

Файлы, защищенные SIP, будут помечены как ограниченные .

 введите описание изображения здесь>> </a> </p>

<p> Важно помнить, что даже если символическая ссылка защищена SIP, это не обязательно означает, что каталог, к которому они привязаны, защищен SIP. На корневом уровне загрузочного диска OS X El Capitan имеется несколько символических ссылок, защищенных SIP, указывающих на каталоги, хранящиеся в корневом каталоге с именем <code>private</code>. </p>

<p> Однако, когда содержимое каталога <code>private</code> проверяется, каталоги, на которые указывают эти символические ссылки, не защищены SIP, и оба они и их содержимое могут быть перемещены, отредактированы или изменены процессами, используя привилегии root. </p>

<p> <a href= введите описание изображения здесь>> </a> </p>

<p> Кроме тогок списку исключений SIP, которые Apple установила в <code>rootless.conf</code>, есть второй список исключений SIP. Этот список включает в себя несколько каталогов и имен приложений для сторонних продуктов. Подобно <code>rootless.conf</code>, этот список исключений - это изменения Apple, а изменения сторонних сторон будут перезаписаны Apple. </p>

<pre><code>/System/Library/Sandbox/Compatibility.bundle/Contents/Resources/paths
</code></pre>

<p> <strong> Защита времени выполнения </strong> </p>

<p> Защита SIP не ограничивается защитой системы от изменений файловой системы. Существуют также системные вызовы, которые теперь ограничены в их функциональности. </p>

<ul>
<li> task_for_pid () /processor_set_tasks () с EPERM </li>
<li> Специальные порты Mach сбрасываются на exec (2) </li>
<li> dyld переменные среды игнорируются </li>
<li> DTrace зонды недоступны </li>
</ul>
<p> Однако SIP не блокирует проверку разработчиком своих приложений во время разработки. Инструменты Xcode будут продолжать проверять и отлаживать приложения в процессе разработки. </p>

<p> Подробнее об этом я бы рекомендовал взглянуть на <a href = Документация разработчика Apple для SIP .

Защита от расширения ядра

SIP блокирует установку беззнаковых расширений ядра. Чтобы установить расширение ядра в OS X El Capitan с включенным SIP, расширение ядра должно:

  1. Подписываться с сертификатом Идентификатор разработчика для подписания Kexts
  2. Установить в /Библиотека /Расширения

При установке беззнакового расширения ядра сначала необходимо отключить SIP.

Для получения дополнительной информации об управлении SIP см. ссылку ниже:

Защита целостности системы - добавление другого уровня в модель безопасности Apple

ответил Rich Trouton 7 +03002015-10-07T16:47:55+03:00312015bEurope/MoscowWed, 07 Oct 2015 16:47:55 +0300 2015, 16:47:55

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132