Webrium
Подписаться

Безопасность как метрика команды

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

Столбиковая диаграмма: плановые задачи укладываются в бюджет, затем фактическая стоимость внеплановой работы резко превышает пунктирный план — аварийный тарифаварийный тариф

Почему метрика — это выбор поведения

Руководителю, у которого сроки и бюджет, безопасность обычно является не как процесс, а как сбой планирования. Посреди спринта срабатывает сканер, перед релизом приезжает аудит, в ленте зависимостей появляется бюллетень — и план недели переделывается. Отсюда и запрос «метрики безопасности разработки»: раз работу не видно, её надо измерить и встроить в обычный ритм.

Инстинкт правильный, но у метрики есть свойство, о котором забывают в момент выбора: команда оптимизирует то, что измеряют. Не в плохом смысле — в буквальном. Повесите число — получите поведение, которое это число улучшает. Поэтому вопрос «какую метрику безопасности выбрать» — это, в сущности, вопрос «какое поведение мы покупаем».

И ещё одно, без чего выбирать не из чего. Незапланированная работа оплачивается по аварийному тарифу, и складывается он не из часов на сам фикс — часов там примерно столько же, — а из выброшенного плана, переключения контекста, замороженного релиза и решений, принятых в спешке. Планируемая работа того же содержания оплачивается по обычному тарифу. Метрика покупает не безопасность как таковую — она переводит работу из одного режима в другой. Это аргумент для бюджета, а не для паники.

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

Тупик: считать находки

Первое, что вешают на команду, — количество уязвимостей: открытых на релиз, найденных за месяц, критических в бэклоге. Выглядит здраво. Безопасность про дефекты — значит, мерить надо дефекты.

Не работает, и это видно из устройства системы, без всяких замеров. Находок столько, сколько находит инструмент, — функция его покрытия и конфигурации. Столько, сколько позволяет поверхность, — список зависимостей и стек, который команда чаще унаследовала, чем выбрала. И столько, сколько команда честно решила не игнорировать. Из трёх сомножителей команда контролирует один — честность, и метрика бьёт именно по нему. Купите инструмент пошире — счётчик поползёт вверх в тот самый момент, когда всё стало лучше. Начните смотреть внимательнее — то же самое. Единственный способ улучшить цифру — смотреть меньше или закрывать находки на бумаге. Оба пути метрика поощряет, и оба меняют качество работы ровно в обратную сторону.

У эффекта есть имя — закон Гудхарта, — но имя не главное. Главное: счётчик находок — это запас, а не поток. Запасы измеряют мир вокруг команды, потоки измеряют саму команду.

Рядом — второй соблазн, «ноль инцидентов». Тоже мимо, по другой причине: инциденты редки и отстают от поведения, на горизонте планирования такой индикатор измеряет скорее удачу и честность журнала, чем что-то, чем команда управляет. Нормированные варианты — уязвимостей на релиз, на объём кода — не спасают: нормировка меняет масштаб, а измеряется всё тот же приток находок, не поведение. Третий из той же серии — часы тренингов — хотя бы безобиден: он измеряет присутствие, и только.

Что считать: время петли

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

Почему медиана, а не среднее: одна зависшая аудиторская позиция тянет среднее куда угодно, и после взгляда на него непонятно ничего про типичный случай. Медиана — про типичный.

Считать лучше с разбивкой по источнику. Находки, которые команда нашла сама — сканером, ревью, чек-листом, — измеряют рутину. Принесённые снаружи — пентестом, аудитором, исследователем — измеряют худший случай. Часы у них разные по природе, и, свалив всё в одну кучу, вы получите число, на которое невозможно опереться.

Есть и выбор часов. Строгий вариант считает петлю от публикации бюллетеня и включает задержку на чтение перечня; мягкий — от попадания в трекер, и эту задержку прячет. Мягкий удобен для сравнения команд, строгий честен про систему в целом. Выберите один и не смешивайте в одном ряду — этого достаточно, чтобы начать.

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

Дальше — защита от игры. Скорость сама по себе приглашает к косметике: закрыть «не будем чинить», заплатить точечно, не убрав класс, заглушить правило. Поэтому медиану времени нужно носить в паре с повторяемостью: возвращается ли тот же класс дефекта в пределах окна, которое выберете вы. Возвращается — значит, петля не закрывается, а циклится. Пара «медиана плюс повторяемость» закрывает обе крайности: медленно, но честно; быстро, но косметично.

Отдельно — про законный выход. Петля не должна требовать чинить всё подряд. «Осознанно не чиним» — тоже разрешение находки, но с двумя условиями: у отказа есть имя того, кто его подписал, и у него есть дата пересмотра. Без имени и даты «приемлемый риск» превращается в мусорное ведро для неудобного, и мы возвращаемся в тупик со счётчиком находков, только с другой стороны.

И про унаследованный долг. Команда, которая тянет старый код, начинает с горы находок, которых не создавала. Если валить в одну медиану старый бэклог и новые поступления, цифра честно покажет цену очереди — это тоже полезно, но про другое. Старый долг — проект с собственным планом; медиана по новым поступлениям — устоявшийся режим команды. Считать их надо раздельно, иначе спор о справедливости метрики съест саму метрику.

Что метрика меняет в разговоре. Число времени петли — язык, на котором руководитель и безопасники обходятся без переводчика: не «вы небезопасны», а «петля длинная, вот где она длинная, вот что её укорачивает». Метрика перестаёт быть моральной оценкой и становится входом планирования, а наказывать имеет смысл только за то, что команда контролирует.

Позиция редакции

Мы считаем, что безопасность имеет смысл вешать на команду ровно в одном виде: время петли в паре с повторяемостью класса. Счётчики находок и счётчики инцидентов — метрики системы, а не команды. Это не значит, что они бесполезны: приток находок, состояние перечня зависимостей, разборы инцидентов нужны — но их владелец тот, кто распоряжается системой целиком, выбирает инструменты и распределяет долг. Команде достаётся то, что она может изменить собственным поведением.

Руководителю это даёт главное: безопасность перестаёт быть серией ЧП и становится строкой стоимости владения кодом — предсказуемой и торгуемой со спринтом на равных. Про то, что в этой стоимости считать и что игнорировать, у нас есть отдельный разбор; здесь достаточно сказать, что время петли — та статья расходов, которую нельзя «не считать», можно только не заметить.

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

С чего начать в понедельник

Без дашборда. Возьмите последние закрытые находки, сколько их есть, и у каждой две даты: когда стала известна и когда с ней разобрались. Отсортируйте, посмотрите на середину. Это число, с которым можно идти в планирование.

Повторяемость проверяется рядом: поищите среди свежих находок похожие на уже закрытые. Найдутся — либо окно слишком широкое, либо закрытие было косметикой.

Если дат нет, это и есть первая находка: петля не записана, значит, ею не управляют. Всё остальное вторично.

С чем это связано

Метка над заголовком говорит, зачем туда идти: продолжить тему, перейти к практике или увидеть возражение.

Среди нескольких сборок поиском выделена одна — та, что содержит искомую библиотеку: так перечень отвечает на запрос вместо мёртвого файлавсе сборкиесть библиотека
Спор

Цепочка поставок: перечень, который кто-то читает

Спор с прочитанным: сгенерировать перечень состава и положить рядом — тупик, файл без читателя. Разобраны шаги, которые превращают его в индекс, отвечающий на запросы по всем сборкам.

Четыре шкалы расходов: хостинг, лицензии и зарплаты — в норме, а четвёртая, стоимость владения кодом, уходит за шкалу — инвойса на неё не существуетстоимость кода
Углубление

Стоимость владения кодом: что считать и что игнорировать

Безопасность — не единственная метрика команды. Сколько часов съедает уже написанный код, тоже можно посчитать: по горячим модулям и следам, которые система и команда оставляют сами.

Цепочка шагов конвейера CI: чужой код входит, исполняется с ключами, и последний шаг — публикация — штатно выводит секрет за границу доверияграница довериясекрет наружу
Углубление

Секреты в CI: пять типовых утечек

Секреты спрятаны в хранилище, логи замаскированы — а конвейер CI всё равно теряет ключи. Разбор пяти типовых мест, где именно это происходит.

Письмо по вторникам

Один разбор недели и короткий список того, что изменилось. Без дайджестов на сорок ссылок.

Начните вводить — материалы появятся здесь.

выбрать · Enter открыть · Esc закрыть