Книга Джульена Вехена «Безопасный DevOps»

В последнее время я больше стал заниматься разработкой для серверной части веб-приложений, короче говоря, бэкендом. И хотя я не особо люблю заниматься админскими делами (самый страшный сон для меня — это искать проблему, почему что-то не работает в сети), но иногда приходится заниматься настройкой серверов, планированием структуры микросервисов и тому подобными делами. Ну и куда ж сегодня без DevOps-а? Грань между программистами и админами размывается, и по крайней мере нужно разбираться, как аккуратно должно развертываться приложение на серверах, каким образом взаимодействуют микросервисы и т.п. И в этом деле меня всегда беспокоит безопасность. Как делать это правильно? На какие грабли наступали другие разработчики, чтобы не повторять хотя бы элементарные ошибки? Держа в голове эту цель я начинал читать книгу Джульена Вехена «Безопасный DevOps».

Автор этой книги c 2013 года работает в Mozilla и занимается безопасностью облачных сервисов. Собственно безопасности и облакам посвящена книга. Конкретно про DevOps в ней сказано не так много (в основном в первой половине книги), зато рассматривается безопасность на различных уровнях, начиная с того, какие типичные ошибки допускают разработчики приложений, что позволяет злоумышленнику провести атаку, и до безопасности на уровне предприятия.

В этой книге все примеры показаны на небольшом самописном веб-сервисе, написанном на Go. В первых главах показывается, как можно организовать конвейер непрерывного тестирования и развертывания с помощью хуков github и сервера непрерывного развертывания CircleCI, который в итоге закачивает созданный Docker-образ на Docker Hub. Позже будет добавлено приложение для развертывания сервиса в облаке Amazon. Таким образом, следуя инструкциям в первых главах, можно получить небольшой опыт работы с CircleCI, Docker Hub и, самое интересное, научиться работать с сервисами AWS (Amazon Web Services) через командную строку. Но это все-таки не учебник по AWS, и хотя автор подробно описывает свои действия (создание экземпляров распределителя нагрузки, облака вычислений с сервисом, экземпляра базы данных), но для полноценного понимания работы с AWS этого мало. После того, как автор показал процесс развертывания, начинается поиск и заделывание дыр безопасности.

Сначала поиск проблем осуществляется на уровне приложения. Автор коротко рассказывает о наиболее известных проблемах, таких как XSS- и CSRF-атаки. Напомню, что первая атака позволяет внедрять в код страницы выполняемые скрипты (главная причина возможности проведения этого типа атаки — это если где-то вы забыли заэкранировать особые символы), а вторая атака — это межсайтовый запрос, когда пользователь заходит на сайт атакующего и незаметно для пользователя в браузере выполняются запросы к атакуемому сайту. Для автоматического тестирования сервиса на уязвимости используется сканер безопасности OWASP Zed Attack Proxy (ZAP). Автор показывает, как этот сканер безопасности можно внедрить в конвейер развертывания и автоматически тестировать свое приложение на некоторые уязвимости с помощью него. Вообще говоря, по мере продвижения по главам, будут встречаться ссылки на большое количество приложений для различных задач: для поиска уязвимостей, тестирования конфигурации серверов, анализа логов и т.п. В этой же главе разбираются проблемы, связанные с хранением пользовательских паролей на бэкенде и способах аутентификации, рассказывается о том, как настроить свое приложение для использования аутентификации с помощью OpenID / OAuth2. Понравилось, что про каждую используемую технологию автор достаточно подробно рассказывает, чтобы она не казалась непонятным черным ящиком.

На следующем шаге тестируется безопасность облачной инфраструктуры. Здесь будет рассказываться о том, как настраиваются группы безопасности в AWS, какие есть инструменты для автоматического тестирования безопасности в облаках Amazon. После этого рассказывается о том, как организовать боле безопасный доступ к сервисам AWS через специально запущенный сервер (так называемый SSH-бастион), только пройдя идентификацию на котором админ может напрямую подключаться к базам данных или входить через SSH на другие сервера AWS. Здесь же говорится о том, как подключить двухфакторную авторизацию к SSH, а также как можно настроить отправку уведомлений админу о том, что кто-то подключился к SSH-бастиону.

Мне понравились разделы, где речь идет о SSL/TLS. Достаточно подробно рассказывается о том, как происходит процесс установки безопасного соединения и обмена ключами, какие параметры у TLS существуют, какие алгоритмы в нем еще актуальны, а какие уже устарели. Приводятся небольшие примеры получения информации о TLS-соединении с помощью командной строки, чтобы на более низком уровне можно было бы увидеть параметры соединения, а не просто наблюдать зеленый значок в браузере. Здесь же рассказывается как можно с помощью утилиты lego автоматизировать получение сертификатов от Let’s Encrypt и использовать их на серверах AWS. Приводятся примеры использования некоторых утилит, которые тестируют настройки TLS на сервере (например, на предмет разрешенных алгоритмов, которые уже считаются недостаточно надежными).

Еще одна глава посвящена обеспечению безопасности конвейера развертывания. В этой главе речь идет о том, как понять, какие минимальные права нужны каждому компоненту, как хранить секретные данные, которые должны быть доступны некоторым сервисам.

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

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

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

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

PS. Вы можете подписаться на новости сайта через RSS, Группу Вконтакте или Канал в Telegram.

Пожалуйста, оцените запись

УжасноПлохоТак себеХорошоОтлично (Количество голосов: 3, средняя оценка: 5,00)
Загрузка...

комментария 2

  1. Михаил:

    Евгений, я, может быть, что-то пропустил, но вы советуете столько хороших книг (многие из которых я купил), но я нигде не вижу никаких реферальных ссылок. Не думали немного заработать на советах?)

  2. Jenyay:

    Когда-то я игрался с такими ссылками, но у меня не настолько много читателей, чтобы это имело какой-то смысл.

Leave a comment

Subscribe without commenting