Агент-прослойка для безопасной работы с ключами в UNIX
Есть желание настроить некую прослойку между конечными программами (к которым мало доверия, например jabber-клиент) и теми, которые работают с криптографическими ключами. В случае с gpg и gpgme это могло бы выглядеть, как их прозрачная замена на соответствующие ограниченные программы/библиотеки, которые позволяют лишь ограниченную манипуляцию с ключами (только расшифровывать, зашифровывать и подписывать). Цель: добиться того, чтобы в случае уязвимости в конечных программах они всё равно не могли слить ключ злоумышленнику. Предполагается, что такие программы-прослойки могли бы работать как некий "сервер ключей", дилегирующий ограниченные полномочия авторизованным программам.
Первый костыль, который приходит в голову – это написание обвязки к gpg, которая называется так же, но позволяет лишь ограниченный список манипуляций с ключом. К этой обвязке выставляются соответствующие права доступа (как к файлу на ФС) и владелец файла. Минусы подхода в том, что код прийдётся писать самому и в том, что часть программ работают не непосредственно с gpg, а с gpgme.
Для ssh-ключей подобное может быть реализовано такой последовательностью действий: выставить право на доступ к ключам из ~/.ssh только из-под рута. После загрузки ОС, зайти под рутом, дать временно права на чтение каталога пользователем, который будет работать с этими ключами, и из-под него запустить keychain ~/.ssh/*.ssh. Затем права на доступ к ключам опять закрываются сменой владельца на рута. Поскольку ключи уже загружены в память, ими можно далее пользоваться, хоть и нет доступа к файлам ключей на диске. В то же время, извлечь из памяти ключи из-под интерфейса keychain/ssh вроде бы нельзя (ошибаюсь?). Собственно, выглядит тоже как костыль, но вполне рабочий.
Прошу высказаться по поводу реализации решения для такой задачи.
PS: Linux-специфичные решения пока не сильно интересуют, так как у меня *BSD. Желательно, чтобы подобное делалось программи, портированными под основной парк UNIX'ов.
комментариев: 11558 документов: 1036 редакций: 4118
Элементарно реализуется как bash-, python-, какой-угодно-скрипт. Берёте из ввода только разрешённые команды и передаёте их реальному бинарнику gpg. С gpgme действительно сложнее, прокладку придётся писать на Си.
Допустим, полноценный gpg куда-то установлен, а реальный gpg заменяет обвязка. Что помешает программе выполнить оригинальный gpg, а не обвязку? Чтобы осуществить желаемое, допуск к запуску оригинального gpg должен быть доступен только руту (или другому пользователю с соответствующмим правами). Т.о. обвязка должна при запуске оригинала получать права другого пользователя, т.е. быть суидной. Мало кто знает, но скрипты суидными быть не могут, а потому и здесь – единственный вариант – это писать обвязку на Си. Ранее, решая более простую проблему (дать обычным пользовтелям выполнять ряд команд с правами рута), как раз столкнулся с проблемой суидности – пришлось просить спецов написать код на сях (сам не знаю Си). Может быть, что-то такое умеет sudo (правда, я скептически отношусь к его безопасности)? Как подобные задачи (разраничение доступа к ключам) обычно решаются в UNIX? До сих пор нет стандартного решения? А коммерческий PGP под Win таким функционалом тоже не обладает?
Ещё можно взять код gpg, и вырезать оттуда всё "ненужное", впоследствии навесив на него суидность, и можно использовать.
комментариев: 11558 документов: 1036 редакций: 4118
sudo
Скепсис должен быть чем-то подкреплён. sudo нужно аккуратно настраивать, что мало кто делает: обычно тупо дают рутовые права обычному юзеру с аутентификацией по его, юзера, паролю.
Нет.
И в этом случае, разумеется, отношение к безопасности такого мутанта будет выше, чем к sudo.
sudo менее безопасно чем su, но безопасность su сверху сильно ограничена там фактом, что злоумышленник, потенциально, заполучив права пользователя группы wheel, выполняющего время от времени su, можно получить и права рута. Не силён в технической стороне дела, но это делается (даже если опустить тривиальный случай открытого рут-шелла в screen).
Да нет, просто сказал в порядке "идеи". Если бы подобный
кастрат gpgмутант породили разработчики gpg, было бы очень кстати. Как вы думаете, стоит ли им предложить? Имхо, востребованность какая-никакая была б сообществе (да и сделать такое человеку, хорошо знающему код, легко – надо только отсечь всё лишнее).комментариев: 9796 документов: 488 редакций: 5664