Какие методы безопасности я использую при создании библиотеки, которая требует доступа к определенным устройствам и файлам с низким уровнем доступа?

Предыстория

Я пишу библиотеку, которая обращается к модулю ядра, uinput , который позволяет создавать или управлять устройствами в /dev/input/event#, и вставьте в них события.

Простая usecase позволит кому-то написать скрипт, который перемещает курсор мыши в центр вашего дисплея и выполняет левый щелчок.

Как таковой, для этого нужны корневые привилегии, и я не уверен, какие ощутимые риски я принимаю здесь, и какие именно меры предосторожности мне нужно использовать.


Я спросил об этом в ##kernel, и один ответ, который я получил, был:

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

Вопросы

  1. Является ли он правдой, что моя библиотека будет в порядке, если моя система не будет «pwned»?
  2. Для этого, как я узнаю, что моя библиотека не станет вектором для моей системы, который будет «pwned»? Я не хакер, поэтому я не знаю, что предоставляет мою библиотеку для такой вещи.
  3. Я хочу, чтобы мой код был доступен потенциальным работодателям, поэтому, даже если это правда, что мне не нужно беспокоиться, какие методы безопасности следует использовать, чтобы продемонстрировать, что я проницателен и осознаю потенциальные риски для безопасности?
  4. Будет ли лучшая практика в этом случае включать в себя создание пользователя с специальной группой разрешений, которая ограничивает его воздействие на систему?

Спасибо.

3 голоса | спросил Akiva 13 FebruaryEurope/MoscowbTue, 13 Feb 2018 23:24:20 +0300000000pmTue, 13 Feb 2018 23:24:20 +030018 2018, 23:24:20

1 ответ


3

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

Пользователь в группе root может выполнять множество действий, которые обычные пользователи не могут:

  • Удалить все файлы в операционной системе - включая само ядро: rm -rf /
  • Реформаторы и реформационные диски
  • Начать и останавливать службы
  • Установка и удаление приложений - в том числе вредоносных программ
  • Доступ ко всем файлам в домашних каталогах пользователей (т. е. нарушение конфиденциальности)

Конечно, современные установки Linux требуют от вас sudo для эскалации привилегий на root, если вы находитесь в этой группе. Это предотвращает глупые ошибки от полного уничтожения вашей машины.

Тем не менее, если ваша библиотека требует эскалационных привилегий, то использует любое приложение , которое использует его. Если у процесса, использующего вашу библиотеку, нет привилегий root, тогда ваша библиотека не будет иметь доступ к uinput. По сути, это будет выглядеть так, как будто ваша библиотека сломана. Я не знаю, как получить привилегии для библиотеки, но не для приложения, вызывающего его.

Единственный способ повысить привилегии для процесса, о котором я знаю, - это разделить вашу библиотеку на службу, которая работает с соответствующими привилегиями и частью, которая вызывает вызовы этой службы. Этот подход, по крайней мере, позволит вам предоставить доступ к uinput, но не обязательно что-нибудь еще. Это позволяет вам управлять одним вектором для эскалации привилегий.

Я работал с некоторыми хакерами из серой шляпы, которые по сути знают, как «pwn» ящик, который в настоящее время не «pwned». Даже если ваша служба имеет доступ только к uinput, у них все еще может быть полевой день, так как они могут иметь контроль над мышью и клавиатурой, чтобы косвенно управлять вашей системой.

Я бы взял ответ этого пользователя с очень большим количеством соли. Хотя вероятность взлома может быть низкой, она не равна нулю. Вероятно, этому пользователю повезло.

Лучшие практики:

  • Попробуйте найти любые другие средства обеспечения одинаковой функциональности, не требуя при этом повышенной привилегии. Если нет, продолжайте в списке.
  • Управлять принципом наименьших привилегий . Другими словами, убедитесь, что вы предоставляете доступ только к тому, что вам нужно, и активно отказываетесь от всего остального.
  • Отделите код, который требует повышенных привилегий для запуска в своем собственном процессе под своим собственным пользователем.
  • Максимально сократить время в эскалированном коде
  • Аудит и тестовый код, который вызывает привилегированные API более строго, чем непривилегированный код
ответил Berin Loritsch 13 FebruaryEurope/MoscowbTue, 13 Feb 2018 23:58:52 +0300000000pmTue, 13 Feb 2018 23:58:52 +030018 2018, 23:58:52

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

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

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