Подписывание бинарников
Mar. 21st, 2018 09:01 pm![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
Вот интересно, почему проект DigSig сдох почти десять лет назад, а от bsign-а вообще следов не найдешь, кроме как в древних-древних архивах дебиана и убунты?
В принципе ж классная идея. Намного лучше чем всякие aide и integrit.
Особенно если вместо gpg-шных подписей туда положить CMS-ные. Ну и соответствующую ключевую инфраструктуру выстроить (ровно ту, которая у меня в Детях Пространства описана - корень доверия - ключ владельца компьютера, который выписывает на ключ производителя дистрибутива сертификат с pathLen=1).
По нынешним временам, когда все ломают всех верификация бинарника при загрузке - это очень полезная вещь. Причем, при налаженном процессе разработки это не сложнее. чем подписывать пакеты (что делают все rpm-based дистрибутивы) или их метаинформацию
(что делают некоторые rpm-based и все deb-based)
В принципе ж классная идея. Намного лучше чем всякие aide и integrit.
Особенно если вместо gpg-шных подписей туда положить CMS-ные. Ну и соответствующую ключевую инфраструктуру выстроить (ровно ту, которая у меня в Детях Пространства описана - корень доверия - ключ владельца компьютера, который выписывает на ключ производителя дистрибутива сертификат с pathLen=1).
По нынешним временам, когда все ломают всех верификация бинарника при загрузке - это очень полезная вещь. Причем, при налаженном процессе разработки это не сложнее. чем подписывать пакеты (что делают все rpm-based дистрибутивы) или их метаинформацию
(что делают некоторые rpm-based и все deb-based)
no subject
Date: 2018-03-21 08:12 pm (UTC)no subject
Date: 2018-03-22 04:25 am (UTC)no subject
Date: 2018-03-21 08:52 pm (UTC)no subject
Date: 2018-03-22 04:31 am (UTC)Подход получается несколько другой. Если во всяких tripwire (откуда пошла идея нескольких независимых хэш-сумм) мы проверяем что бинарник не изменился с момента прошлого запуска инструмента проверки целостности, при этом полагаем что злоумышленник мог что-то запускать, то здесь у нас задача - не позволить запускать ничего, чему не доверяет владелец системы.
Пои этом предполагается, что та система, на которой бинарники подписываются. и та, на которой подпись проверяется - разные системы, по-разному защищенные административными мерами.
no subject
Date: 2018-03-22 10:57 am (UTC)no subject
Date: 2018-03-22 11:17 am (UTC)На самом деле здесь ОЧЕНЬ критична производительность процедуры проверки подписи. Если мы верифицируем каждый загружаемый бинарник, включая открываемые dlopen-ом, это может начать кушать заметные ресурсы, особенно при наличии короткоживущих процессов вроде CGI.
(no subject)
From:(no subject)
From:no subject
Date: 2018-03-22 12:18 pm (UTC)И это не специальная система админа, которую можно засекьюрить очень изрядно. Если изрядо засекьюрить систему разработчика, разработка встанет.
no subject
Date: 2018-03-22 12:37 pm (UTC)Но вообще по хорошему счету, система должна поддеривать контейнеры с неподписанными бинарниками (но, естественно, не ядерными модулями).
Тогда браузить веб разработчик сможет из системы с подписанными бинарниками. А разрабатывать - с неподписанными.
Хотя, честно сказать не уверен что разработка действительно встанет. Добавить в Makefile одну строчку - несложно.
Но, естественно у разработчика на машине бинарники должны подписываться тестовым ключом, которому никто кроме этой машины (и может быть пары-тройки тестовых, если у нас распределенный софт) не доверяет.
(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:no subject
Date: 2018-03-22 08:19 am (UTC)no subject
Date: 2018-03-22 08:25 am (UTC)Можно придумать signing proxy. Т.е. штуковину, которая качает пакет, убеждается в его аутентичности, его, подписывает все найденные в нем бинарники ключом локального сисадмина, и запаковывает обратно.
Для того use case, который рассматриваю я - менеджмент толп контейнеров и серверов, это приемлемые затраты.
И нужен дизайн правильной PKI и поддержка ее в инсталляторе.
Потому что в случае свободного ПО рутом PKI должен быть владелец компьютера и никто другой.
no subject
Date: 2018-03-22 08:30 am (UTC)Про PKI. Я не думаю, что в данном случае нужна именно древовидная структура. Я бы делал одноуровневый keyring. Т.е. владелец может добавить свои ключи, может выкинуть дистрибутивный ключ и подменить своим, но это все без PKI. Подход apt-key проще и понятнее большинству.
(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:no subject
Date: 2018-03-26 03:44 pm (UTC)2) Можно придумать signing proxy. А велика ли с Вашей т.з. трудоёмкость?
(no subject)
From:no subject
Date: 2018-04-26 09:30 pm (UTC)no subject
Date: 2018-04-27 03:45 am (UTC)(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:no subject
Date: 2018-04-27 06:32 am (UTC)Поскольку это будет делаться в свободное от работы время, то сроки это, примерно, трудозатраты, увеличенные в два — три раза.
(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:no subject
Date: 2018-03-22 06:09 pm (UTC)А с подписями как вы предлагаете будет одна проблема -- пакет собраный на сборочной ферме и пакет собраный локально из одних исходников будут _разные_, и именно в силу того, что у нас разные ключи на ферме и в локальном сборщике (а всякие signing proxy это только усугубят).
То есть надо как-то комбинировать зашитые в elf подписи, и detachable подписи.
(и возможно уметь смотреть на чексумму бинарника внутри fs (а приличная часть fs имеет внутреннее дерево хешей)
no subject
Date: 2018-03-22 06:49 pm (UTC)no subject
Date: 2018-03-23 10:24 am (UTC)Тут недавно у владельцев шлемов окулус рифт их честно купленная техника превращалась в тыкву. Потому что ключевая инфраструктура и сертификаты, да...
no subject
Date: 2018-03-23 10:26 am (UTC)no subject
Date: 2018-03-29 07:29 pm (UTC)Во-первых, бинарники - это не то-же самое, что исполняемый код.
Во-вторых, исполныемый код - это есть то же самое, что и данные.
Надо ли подписывать *.py и *.sh? Как насчёт bash < котики.jpg и perl < рассказ.txt? Существуют невинные на первый взгляд файлы конфигурации с кодом, такие как ~/.xbindkeysrc. Конфиги все будем подписывать? Что будем делать с *.doc и другими форматами с макросами?
Есть, конечно, и другие способы *программировать* компьютер.
Недавно видел на ютубе, как путём манипуляций в игре Марио за счёт ошибок при подгрузке спрайтов в память была записана другая игра. С геймпада!
Подытожу сказанное: если делать вид, что мы подписываем код, то подписывать придётся вообще всё, включая юзерский ввод. Это абсурд.
Более здравым (хотя практически трудноосуществомым) мне представляется путь формальной верификации программ в рамках source-based дистрибутива и, вероятно, отказ от тюринг-полных ЯП (для упрощения доказательств).
no subject
Date: 2018-03-30 06:10 am (UTC)Подписывание бинарников не решает задачу "вообще не допустить выполнения чего-либо стороннего". Оно решает задачу "гарантировать, что то, что пришло из дистрибутива, не подменили".
Правда, инструментов вроде aide, которые контролируют появление и исчезновение файлов, в полной мере не заменяет.
no subject
Date: 2018-03-31 07:49 am (UTC)Разве подписи_пакетов+система_прав+драйвер_фс не решают эту задачу?
no subject
Date: 2018-04-29 05:38 pm (UTC)А есть несколько более приземлённые задачи, где вопрос о том, чтобы исправленные/заменённые бинарники не могли запуститься - вполне актуален.
no subject
Date: 2018-05-10 03:18 pm (UTC)no subject
Date: 2018-05-12 05:39 am (UTC)