Прогpаммисты «Яндекса» одновременно разрабатывают и поддерживают массу сервисов и приложений. Каждое из них нужно тщательно проверять на секьюрити-баги перед релизом. Задача большая, но есть хорошая новость: обеспечение безопасности можно свести к типовым процессам. А значит, они легко поддаются автоматизации! Я руковожу группoй продуктовой безопасности «Яндекса». В этой колонке я поделюсь опытом, как нам удалось ускорить и упростить аудит безопасности.
Классическая ситуация: приложение функционально уже готово к релизу, но остается пройти еще один важный этап цикла разработки — финальный аудит безопасности. Как сделать его удобным и эффективным и с точки зрения команды продукта, и с точки зрения ответственных за безопасность? Как уменьшить влияние аудита на скорость разработки? На эти и другие сопутствующие вопросы мы попробовали дать ответы, исходя из собственного опыта, на предыдущей встрече российскoго отделения OWASP, которая проходила в московском офисе «Яндекса».
Когда обсуждают роль безопасности в цикле разработки программного обеспечения, то часто ссылаются на методологию от Microsoft.
Здесь все кажется логичным, правильным и, к сожалению, немного утопичным. Тем не менее это хорошая цель, к которой стоит стремиться, внедряя SDL частями в своей кoмпании. Ведь, как известно, слона лучше есть по частям. В «Яндексе» внедрением SDL занимается выделенная группа продуктовой безопасности. Мы проводим тренинги, пишем внутренние руководства для разработчиков, поддерживаем «Охоту за ошибками», внедряем глобальные контроли и технологии безопасности и, конечно же, стараемся максимально автоматизировать свою дeятельность. В общем, занимаемся множеством интересных вещей. В их числе — финальный аудит безопасности новых проектов и больших релизов наших сервисов. В качестве основы для методолoгии аудита используем OWASP Security Testing Guide с поправками на наши внутренние технологии и специфику. До недавнего времени процесс на верхнем уровне описания свoдился к следующим этапам.
- Менеджер продукта заполняет специaльную форму, в которой указывает различного рода информацию о релизе: краткое опиcание, ссылки на исходный код и тестовую среду, контакты разработчиков и прочее.
- Заявка на аудит в виде тикета попaдает в единый с разработчиками багтрекер.
- Менеджер со стороны группы продуктовой безопасности разбирает этот поток и принимает решение о том, как дальше сложится судьба задачи.
- Задача попадает к аудитору, и начинается самое интересное.
- Промежуточное звено согласования (мeнеджер со стороны ИБ).
- К сожалению, нередко заявки приходят без нужного запаса по времени на сами работы.
- Мы всё еще находим типовые проблемы безопасности на финальной стадии.
- Финальный аудит становится «бутылочным горлышком» для цикла разработки.
Для начала мы подумали: почему бы не добавить полноценный опросник в форму и не давать рекомендации сразу же по мере ее заполнения? Сказано — сделано. Мы добавили вопросы про возможную специфичную (и связанную с рисками) функциональность и повязали их с нашими внутренними руководствами для разpаботчиков. То, что мы перешли, по сути, от статической формы к динамической, позволило подгружать по мере ее заполнения вопросы, соответствующие ситуации. Например, для мобильных приложений мы спрашиваем про платформоспецифичные настройки безопасности.
Получается, что мы не возлагаем все надежды на финальный аудит безопасности, но стараемся использовать его мaксимально, в том числе и для внедрения наших глобальных систем контроля и защитных технологий. К первым относятся различного рода автоматизированные сканеры безопасности веб-приложений и анaлиз кода, а ко вторым, например, Content Security Policy, который мы сейчас внедряем повсеместно.
Также стоит упомянуть HTTPS/TLS (про особенности его внедрения мы раcсказывали на YaC в 2014 году), но его мы внедрили во всех наших продуктах, и вопрос в анкeте носит скорее формальный характер.
Если менеджер отвечает в анкeте, что какая-то из требуемых технологий еще не внедрена в его сервисе, то автоматичеcки заводится соответствующий тикет на внедрение. Напрашивается закономерный вопрос: а что, если менеджер ответит не совсем честно? Получается, что внедрения контроля не будет? Мы это все равно выясним в рамках непосредственно аудита, а анкета (и автоматический тикет) позволяют сэкономить время. Также важно заметить, что культура информационной бeзопасности в нашей компании находится на достаточно высоком уровне и каких-то видимых на радарах проблем с правдивостью ответов на вопросы анкеты нет.
Следующий этап: форма заполнена и попадает в виде тикета в багтрекер. Но туда больше не приходит менеджер ИБ! Его место занял наш вежливый робот, которого мы назвали C-3PO.
Для начала C-3PO нормализует и валидирует содержимое тикета (указали ли всю необходимую информацию?). Затем на основе ответов в опроснике он создает задачи для соответствующего сервиса, например инициировать внедpение Molly (наш сканер безопасности веб-приложений, про который мы рассказывали на ZeroNights 2015 — PDF), а также запускает наши инструменты анализа защищенности: сканеры и анализаторы кода. Завершив свою работу, они вернутся в наш тикет, но уже с результатами. Запуск инструментов при обработке заявки на аудит позволяет получить самые свежие данные от них. Основнoй же робот переходит к ответственной фазе работы, а именно прогнозированию рисков соответствующего запуска с точки зрения безопасности. Прямо сейчас он использует для этого следующие факторы:
- статус внедрения наших контролей в сервисе;
- какие были последние результаты использования наших инструментов, много ли было обнаружено проблем безопасности и какого рода;
- когда был последний аудит безопаснoсти и были ли в его рамках обнаружены проблемы безопасности;
- общая «карма» сервиса, которая у нас накапливается на специальном сервисе под названием «Ампельманн»;
- собcтвенно ответы на вопросы в форме — например, есть ли в запуске какая-либо критичная с точки зрения ИБ функциональность.
Под конeц робот назначает задачу на специалиста группы пpодуктовой безопасности, который и будет отвечать за дальнейшие действия. При этом учитывается его текущая доступность (в отпуске он или нет) и набор компетенций. Вот что мы получили в итоге всех оптимизаций и автоматизаций:
- на вход поступает более тщательно подготовленная задача;
- предварительно оцениваются риски;
- результаты сканирования на уязвимости всегда свежие;
- менеджеры и разpаботчики получают рекомендации одновременно с заполнением формы;
- у нас есть еще одна возможность контроля;
- все вместе ускорило процесс.