Безопасность
Эта страница называет и то, что мы защищаем, и то, что защитить не можем. Рассказ о безопасности без второй части заставляет читателя принять список за гарантию.
Исходная точка
Опубликовать пакет — значит выполнить код на машине каждого инженера, который его установит. Каждое решение по безопасности в этом продукте сперва проверялось одним вопросом: не облегчает ли это изменение неавторизованную публикацию?
Пакеты подписаны (ECDSA P-256)
Файл подписи едет внутри пакета. Подписывается файл манифеста с контрольными суммами файлов, идентификатором пакета и версией — а не голая сумма архива.
Если бы подписывалась только сумма, корректно подписанный старый архив можно было бы выставить под новым номером версии: подпись сошлась бы, и пользователь установил бы заведомо уязвимый инструмент как «обновление».
Закрытый ключ НЕ на сервере
Сервер только проверяет. Подписывание происходит на машине публикующего, отдельным инструментом.
Если бы ключ лежал на сервере, захвативший сервер мог бы изменить пакет и подписать заново — и подписывание потеряло бы смысл.
Клиент тоже проверяет
Дополнение на машине инженера проверяет подпись независимо, и список доверенных ключей, которым оно пользуется, приходит не с сервера.
Подписи существуют потому, что серверу нельзя верить на слово. Брать список доверия с этого же сервера означало бы тихо отменить это допущение.
Журнал аудита, который нельзя удалить
Каждая публикация, каждое изменение прав и каждое решение по каналу пишутся навсегда. Пути изменения и удаления намеренно нет, и очистка по сроку хранения его не трогает.
Вопрос «как этот инструмент здесь оказался» обычно задают месяцы спустя. В тот день запись, которую можно было удалить, — это запись, которой не было.
Необязательное правило четырёх глаз
Перевод версии в более широкий канал может требовать одобрения второго администратора, и запросивший не может одобрить собственный запрос. Откат одобрения не требует никогда.
Изначально оно выключено. В команде из трёх человек этот контроль за недели превращается в сообщение, которое одобряют не читая; контроль, который считают защитой, не будучи ею, хуже, чем его отсутствие.
Распаковка архива — тоже поверхность атаки
Загруженные архивы проверяются на выход за каталог (zip-slip) и бомбы сжатия, а размер после распаковки ограничен.
Распаковать архив кажется безобидным. Подготовленный может записать файлы за пределы целевой папки или заполнить диск сервера.
Вход без пароля
Пользователи входят по одноразовому коду, отправленному на почту. Сессия держится на короткоживущем токене; токен обновления коду в браузере не виден никогда.
Нет набора паролей — нет и базы паролей, которая может утечь. А повторное использование отозванного токена обновления считается признаком кражи: сессия сбрасывается.
Что устанавливается — записано
В папке установки лежат машиночитаемая ведомость состава (CycloneDX SBOM) и сценарии миграции для обеих СУБД.
Ваша ИТ-служба должна видеть, что попадёт на сервер, до установки. Когда в зависимости объявляют уязвимость, вопрос «есть ли она у нас» становится поиском по файлу.
Чего мы защитить не можем
Это не пробелы, а границы. Они следуют из устройства системы, и утверждать обратное было бы неправдой.
- Двух администраторов, действующих сообща. Правило четырёх глаз останавливает одного, но не двоих.
- Системного администратора сервера. Для того, у кого есть доступ к базе данных и файловой системе, никакой контроль на уровне приложения не помеха.
- Рабочую станцию, где лежит ключ подписи. Ключа нет на сервере, но он где-то есть; если падёт та машина, падёт и подпись.
- Намеренно скрытое вредоносное поведение. Наша проверка пакетов эвристическая, и мы не утверждаем, что она поймает код, который прячется.
- Утечку данных. Установленный инструмент работает с собственными правами инженера и может прочитать всё, до чего эти права дотягиваются. Это ограничивают операционная система и сеть, а не этот продукт.
- Сохранность ваших резервных копий. Копия базы данных в ваших руках, и всё в ней ровно так же ценно, как работающая система.
Сообщить об уязвимости
Если вы её нашли — напишите нам. Мы относимся к сообщениям серьёзно, не отстраняем нашедшего от процесса и сообщаем, когда выйдет исправление.