Программисты «Яндекса» одновременно разрабатывают и поддерживают массу сервисов и приложений. Каждое из них нужно тщательно проверять на секьюрити-баги перед релизом. Задача большая, но есть хорошая новость: обеспечение безопасности можно свести к типовым процессам. А значит, они легко поддаются автоматизации! Я руковожу группой продуктовой безопасности «Яндекса». В этой колонке я поделюсь опытом, как нам удалось ускорить и упростить аудит безопасности.
Классическая ситуация: приложение функционально уже готово к релизу, но остается пройти еще один важный этап цикла разработки — финальный аудит безопасности. Как сделать его удобным и эффективным и с точки зрения команды продукта, и с точки зрения ответственных за безопасность? Как уменьшить влияние аудита на скорость разработки? На эти и другие сопутствующие вопросы мы попробовали дать ответы, исходя из собственного опыта, на предыдущей встрече российского отделения OWASP, которая проходила в московском офисе «Яндекса».
Когда обсуждают роль безопасности в цикле разработки программного обеспечения, то часто ссылаются на методологию от Microsoft.
![](https://xakep.ru/wp-content/uploads/2016/11/1478270579_c320_1.png)
Здесь все кажется логичным, правильным и, к сожалению, немного утопичным. Тем не менее это хорошая цель, к которой стоит стремиться, внедряя SDL частями в своей компании. Ведь, как известно, слона лучше есть по частям. В «Яндексе» внедрением SDL занимается выделенная группа продуктовой безопасности. Мы проводим тренинги, пишем внутренние руководства для разработчиков, поддерживаем «Охоту за ошибками», внедряем глобальные контроли и технологии безопасности и, конечно же, стараемся максимально автоматизировать свою деятельность. В общем, занимаемся множеством интересных вещей. В их числе — финальный аудит безопасности новых проектов и больших релизов наших сервисов. В качестве основы для методологии аудита используем OWASP Security Testing Guide с поправками на наши внутренние технологии и специфику. До недавнего времени процесс на верхнем уровне описания сводился к следующим этапам.
- Менеджер продукта заполняет специальную форму, в которой указывает различного рода информацию о релизе: краткое описание, ссылки на исходный код и тестовую среду, контакты разработчиков и прочее.
- Заявка на аудит в виде тикета попадает в единый с разработчиками багтрекер.
- Менеджер со стороны группы продуктовой безопасности разбирает этот поток и принимает решение о том, как дальше сложится судьба задачи.
- Задача попадает к аудитору, и начинается самое интересное.
В этом процессе есть недостатки, влияющие на скорость (и не только) работы.
- Промежуточное звено согласования (менеджер со стороны ИБ).
- К сожалению, нередко заявки приходят без нужного запаса по времени на сами работы.
- Мы всё еще находим типовые проблемы безопасности на финальной стадии.
- Финальный аудит становится «бутылочным горлышком» для цикла разработки.
Это все причиняло нам и самим сервисам постоянную боль. Мы подумали и решили, что нужно что-то делать! Во-первых, нам, конечно же, необходимо сдвигать задачи, связанные с ИБ, ближе к началу цикла разработки. Это очевидно. Во-вторых, мы любим автоматизацию, и самое время ей вновь заняться. Для этого нам понадобится новая суперформа для приема заявок на аудит безопасности, а также помощь наших «роботов».
![](https://xakep.ru/wp-content/uploads/2016/11/1478270593_146f_2.png)
Для начала мы подумали: почему бы не добавить полноценный опросник в форму и не давать рекомендации сразу же по мере ее заполнения? Сказано — сделано. Мы добавили вопросы про возможную специфичную (и связанную с рисками) функциональность и повязали их с нашими внутренними руководствами для разработчиков. То, что мы перешли, по сути, от статической формы к динамической, позволило подгружать по мере ее заполнения вопросы, соответствующие ситуации. Например, для мобильных приложений мы спрашиваем про платформоспецифичные настройки безопасности.
![](https://xakep.ru/wp-content/uploads/2016/11/1478270601_b31e_3.png)
Получается, что мы не возлагаем все надежды на финальный аудит безопасности, но стараемся использовать его максимально, в том числе и для внедрения наших глобальных систем контроля и защитных технологий. К первым относятся различного рода автоматизированные сканеры безопасности веб-приложений и анализ кода, а ко вторым, например, Content Security Policy, который мы сейчас внедряем повсеместно.
Также стоит упомянуть HTTPS/TLS (про особенности его внедрения мы рассказывали на YaC в 2014 году), но его мы внедрили во всех наших продуктах, и вопрос в анкете носит скорее формальный характер.
Если менеджер отвечает в анкете, что какая-то из требуемых технологий еще не внедрена в его сервисе, то автоматически заводится соответствующий тикет на внедрение. Напрашивается закономерный вопрос: а что, если менеджер ответит не совсем честно? Получается, что внедрения контроля не будет? Мы это все равно выясним в рамках непосредственно аудита, а анкета (и автоматический тикет) позволяют сэкономить время. Также важно заметить, что культура информационной безопасности в нашей компании находится на достаточно высоком уровне и каких-то видимых на радарах проблем с правдивостью ответов на вопросы анкеты нет.
Следующий этап: форма заполнена и попадает в виде тикета в багтрекер. Но туда больше не приходит менеджер ИБ! Его место занял наш вежливый робот, которого мы назвали C-3PO.
![](https://xakep.ru/wp-content/uploads/2016/11/1478270611_535e_4.png)
Для начала C-3PO нормализует и валидирует содержимое тикета (указали ли всю необходимую информацию?). Затем на основе ответов в опроснике он создает задачи для соответствующего сервиса, например инициировать внедрение Molly (наш сканер безопасности веб-приложений, про который мы рассказывали на ZeroNights 2015 — PDF), а также запускает наши инструменты анализа защищенности: сканеры и анализаторы кода. Завершив свою работу, они вернутся в наш тикет, но уже с результатами. Запуск инструментов при обработке заявки на аудит позволяет получить самые свежие данные от них. Основной же робот переходит к ответственной фазе работы, а именно прогнозированию рисков соответствующего запуска с точки зрения безопасности. Прямо сейчас он использует для этого следующие факторы:
- статус внедрения наших контролей в сервисе;
- какие были последние результаты использования наших инструментов, много ли было обнаружено проблем безопасности и какого рода;
- когда был последний аудит безопасности и были ли в его рамках обнаружены проблемы безопасности;
- общая «карма» сервиса, которая у нас накапливается на специальном сервисе под названием «Ампельманн»;
- собственно ответы на вопросы в форме — например, есть ли в запуске какая-либо критичная с точки зрения ИБ функциональность.
Таким образом, при оценке рисков мы учитываем как историю безопасности сервиса, так и особенности конкретного запуска.
![](https://xakep.ru/wp-content/uploads/2016/11/1478270621_0be2_5.png)
Под конец робот назначает задачу на специалиста группы продуктовой безопасности, который и будет отвечать за дальнейшие действия. При этом учитывается его текущая доступность (в отпуске он или нет) и набор компетенций. Вот что мы получили в итоге всех оптимизаций и автоматизаций:
- на вход поступает более тщательно подготовленная задача;
- предварительно оцениваются риски;
- результаты сканирования на уязвимости всегда свежие;
- менеджеры и разработчики получают рекомендации одновременно с заполнением формы;
- у нас есть еще одна возможность контроля;
- все вместе ускорило процесс.
Все изложенное можно обобщить до одного совета: старайтесь максимально автоматизировать поддающиеся этому процессы, и вы сможете освободить больше времени на более комплексные проекты. Более ранний контроль в рамках цикла разработки — не исключение!