Загрузка MacOS High Sierra KEXT — есть ли способы отменить одобрение пользователя?

Как известно некоторым разработчикам MacOS, Apple внедрила безопасную загрузку расширений ядра. .

Пользователи могут одобрить сторонний KEXT, нажав кнопку Approve в Security and Privacy. Однако существуют ли какие-либо способы отмены утверждения после утверждения KEXT?

Представьте себе случай тестирования приложения с загрузкой KEXT и т. д.

Если нет другого способа, кроме чистой установки, очень сложно тестировать приложения.


person HirofumiTamori    schedule 14.12.2017    source источник
comment
Самый простой способ, который я нашел, — настроить новую виртуальную машину с macOS 10.13 и сделать снимок. Проверьте, что вам нужно, включая утверждение kext, а затем вернитесь к моментальному снимку, когда закончите. К сожалению, это не помогает для драйверов устройств, которые нельзя передать на виртуальную машину.   -  person pmdj    schedule 14.12.2017
comment
Ой, Хакинтош! К сожалению, мой KEXT действительно работает с USB-устройствами...   -  person HirofumiTamori    schedule 15.12.2017
comment
Я не уверен, какое это имеет отношение к Хакинтошам? VMWare Fusion может передавать множество USB-устройств с хоста Mac на гостевую виртуальную машину. Это работает не для всех типов оборудования, но для некоторых работает.   -  person pmdj    schedule 15.12.2017
comment
Time Machine может восстановить статус разрешений KEXT.   -  person HirofumiTamori    schedule 25.12.2017
comment
@HirofumiTamori, ты нашел способ, который сработал? Принятый ответ не работает   -  person hmedia1    schedule 05.02.2019
comment
По крайней мере, когда я пробовал метод, он работал. Однако это своего рода грязные хаки (недокументированные, официально не открытые), а также MacOS был обновлен до Mojave, Apple может изменить метод управления kext.   -  person HirofumiTamori    schedule 05.02.2019
comment
Я добавил новый ответ, который, кажется, работает. Ключ, кажется, сбрасывает PRAM.   -  person craig65535    schedule 14.08.2019


Ответы (2)


Информация о согласованиях хранится в базе данных sqlite3:

/var/db/SystemPolicyConfiguration/KextPolicy

Вас интересуют следующие таблицы: kext_policy и kext_load_history_v3. Например. вот как вы можете просмотреть данные и схему таблицы:

sqlite3 /var/db/SystemPolicyConfiguration/KextPolicy

sqlite> select * from kext_policy;
54GTJ2AU36|com.joshuawise.kexts.HoRNDIS|1|Joshua Wise|1

sqlite> .schema kext_policy
CREATE TABLE kext_policy ( team_id TEXT, bundle_id TEXT, allowed BOOLEAN, developer_name TEXT, flags INTEGER, PRIMARY KEY (team_id, bundle_id) );

Удалить утверждение сложнее, так как защита целостности системы не позволяет вам изменять базу данных. Итак, вам нужно перезагрузиться в раздел восстановления или другую установку MacOS, затем перейти в корень вашего тома и выполнить такие команды (замените на свой team_id или используйте другие критерии):

usr/bin/sqlite3 var/db/SystemPolicyConfiguration/KextPolicy
delete from kext_load_history_v3 where team_id='54GTJ2AU36';
delete from kext_policy where team_id='54GTJ2AU36';
.quit 
person Mikhail Iakhiaev    schedule 04.08.2018
comment
Хороший ответ, за исключением того, что большинство людей не знают, что такое идентификатор команды. Возможно, список столбцов, показанных запросом select * from kext_policy (которые не выводятся вместе с запросом)? Спасибо! - person Daniel Griscom; 04.08.2018
comment
О, и добро пожаловать в Stack Overflow. Два из трех ваших ответов на сегодняшний день были полезны для меня; неплохо за один день. Так держать! - person Daniel Griscom; 04.08.2018
comment
Спасибо! Теперь я отвечаю за работу, не зависящую от MacOS ;-p Однако это ноу-хау когда-нибудь пригодится. Прежде всего, ваш трюк весьма интересен; это может сэкономить много времени по сравнению с случаем Time-Machine. - person HirofumiTamori; 07.08.2018
comment
На моей 10.13.6 все равно загружаются расширения после выполнения описанной процедуры. Есть дополнительная таблица с именем kext_policy_mdm, но удаление оттуда соответствующих записей тоже не помогло — разве что они перестали записываться в kext_load_history_v3. Но они все еще загружаются и перечислены kextstat. Также есть old_platform_cache, который намекает на какую-то миграцию. Я не мог угадать, как его записи связаны с расширениями. Подсказка о миграции подкрепляется таблицей с названием «Настройки» с единственной записью «МиграцияВыполнена|ДА». - person felix-b; 08.12.2018
comment
Некоторые из моих одобренных пользователем кекстов даже не указаны в этой базе данных. Он должен существовать в другом месте - person hmedia1; 05.02.2019
comment
@DanielGriscom Вы пробовали ответить? На самом деле это не работает - person hmedia1; 05.02.2019
comment
Расширения @hmedia1, которые уже были установлены до обновления до 10.13 или 10.14, не требуют утверждения пользователем. Система может где-то вспомнить, если это имело место для расширения. Также я думаю, что существует белый список расширений, о которых знает Apple и которые также не требуют одобрения пользователя. Кроме того, я знаю, что профиль MDM может одобрять KEXT, которые также не потребуют одобрения пользователя. Помимо этих исключений, я последовал ответу, и он сработал, как описано для меня. После повторного включения SIP мне снова предложили ранее одобренный KEXT. - person Mecki; 27.05.2019
comment
Я добавил новый ответ, который, кажется, работает. Ключ, кажется, сбрасывает PRAM. - person craig65535; 14.08.2019

Повторяя то, что люди говорят в комментариях, я обнаружил, что принятое решение не работает. Мне также пришлось сбросить PRAM.

Рабочие шаги:

  1. Создайте следующий скрипт где-нибудь в вашей файловой системе (вы будете запускать его из режима восстановления, поэтому вы не сможете копировать и вставлять в этом режиме). Вам нужно будет заменить TEAMID1234 на идентификатор команды kext(-ов), для которых вы хотите отозвать согласие. Обратите внимание, что в режиме восстановления требуются полные пути к /Volumes/Macintosh\ HD.

    Я назвал свой сценарий /Users/me/revoke_kext_consent.sh и запустил chmod +x /Users/me/revoke_kext_consent.sh.

#!/bin/sh -e
/Volumes/Macintosh\ HD/usr/bin/sqlite3 /Volumes/Macintosh\ HD/var/db/SystemPolicyConfiguration/KextPolicy 'delete from kext_policy where team_id="TEAMID1234";'
/Volumes/Macintosh\ HD/usr/bin/sqlite3 /Volumes/Macintosh\ HD/var/db/SystemPolicyConfiguration/KextPolicy 'delete from kext_load_history_v3 where team_id="TEAMID1234";'
  1. Перезагрузитесь в режим восстановления (загрузка с помощью Cmd-R)

  2. Откройте Терминал и запустите указанный выше скрипт (/Volumes/Macintosh\ HD/Users/me/revoke_kext_consent.sh).

  3. Перезагрузитесь и сбросьте PRAM (загрузитесь с помощью Cmd-Opt-P-R)

person craig65535    schedule 14.08.2019