Прежде чем перейти к статье, хочу вам представить, экономическую онлайн игру Brave Knights, в которой вы можете играть и зарабатывать. Регистируйтесь, играйте и зарабатывайте!
В целом компания SpectralOps (сейчас принадлежит Check Point) занимается разработкой и развитием инструментов, уменьшающих вероятность публикации чувствительной информации и предлагает целое семейство продуктов для разработчиков:
netz - обнаружение неудачных конфигураций сервисов и потенциальных уязвимостей в указанной подсети или в облачных провайдерах;
teller - инструмент для безопасного хранения секретов и исключения их отображения в командной строке, который может работать как прокси к другим хранилищам
senv - утилита для безопасного отображения переменных окружения без риска показать секреты (например, полезно при трансляции экрана)
spectral - инструмент, основанный на эвристиках для обнаружения в файлах конфигурации или иных файлах токен доступа к облачным провайдерам или иной чувствительной информации
Мы будем рассматривать последний инструмент, для использования которого нужно зарегистрировать бесплатную учетную запись по ссылке. Свободная версия сервиса позволяет выполнять до 30 сканирований в день и до 10 репозиториев, что может быть достаточно для небольших компаний. Для выполнения сканирования может использоваться утилита командной строки (может быть установлена через установщик для Linux из готового образа с https://get.spectralops.io/latest/x/sh?key=<ключ> или через homebrew для MacOS, также есть версия для Windows). Ключ может быть получен на странице Settings -> Organization -> Team Key.
Установленное приложение по умолчанию размещается в $HOME/.spectral. Начнем с инициализации проекта:
spectral init
Для авторизации в облачном сервисе используем следующую команду и данные авторизации, которые были указаны при регистрации:
spectral login
Your email: ....
Password: ....
Кроме авторизации это действие выполняет привязку к Spectral DSN (его можно найти на странице Settings -> Organization -> DSN) для управления сканированием зарегистрированных репозиториев (на этапе настройки можно подключить github/gitlab-репозитории, которые будут отсканированы при запуске). Отчет о результатах сканирования может выглядеть так:
Список обнаруживаемых проблем можно посмотреть в документации проекта. Как можно видеть, spectral обнаруживает потенциальную публикацию данных для доступа к облакам Azure, Google, Amazon, искать возможную утечку секретов в конфигурации Kubernetes, а также обнаруживать потенциальные проблемы конфигурации memcached, MySQL, Kafka, PostgreSQL, Airflow и Redis.cat t
Spectral может использоваться в одном из следующих вариантов:
precommit-hook - можно добавить сканирование перед отправкой коммита, чтобы избежать появление чувствительной информации в репозитории;
Github Actions - включение проверки на секреты в github;
произвольный CI через использование npm-модуля (
npm i -g spectralops)
или консольного инструмента.
Для примера создадим токен для доступа в AWS и сохраним его в текстовом файле:
echo "AKIA4HKD3VF23AE*****" > secret.txt
Также запишем токен для Github:
echo "ghp_K7J3YZ***************" >github.txt
И запустим сканирование проекта:
spectral scan
Результатом будет отчет об обнаруженных проблемах, с указанием файла и позиции секрета в нем:
Также утилита может использоваться при выполнении CI, при ошибке она устанавливает ненулевое значение кода возврата:
Теперь добавим проверку на секреты на precommit hook. Для этого инициализируем git-репозиторий и добавим в него все файлы:
git init
git add .
git commit -a -m "Initial commit"
Один из примеров использования инструмента pre-commit приведен в репозитории https://github.com/SpectralOps/spectral-example-pre-commit, но мы сделаем классический вариант git hook. Перейдем в каталог .git/hooks и создадим файл pre-commit со следующим содержанием:
#!/bin/bash
export SPECTRAL_DSN=spk-....
spectral scan
И сделаем файл исполняемым chmod +x .git/hook/pre-commit. Теперь добавим пример сценария с потенциальной утечкой секретов (test.py):
import requests
url = "http://api/profile"
r = requests.post(url, headers={'Authorization': 'Basic YWRtaW46YWRtaW4='})
Теперь при попытке отправить файл в ветку будет запускаться сканер SpectralOps, который вернут код ошибки и остановит коммит:
Инструмент особенно полезен при использовании инструментов оркестрации, в этом случае он сможет обнаружить не только потенциальные утечки в исходных кодах и токены доступа к Github, но также и найти возможные ошибки в конфигурации развертываний (в том числе для Kubernetes), SSH-ключи (например, для Ansible), секреты для S3 и многое другое, что может быть использовано как потенциальный вектор атаки. В целом использование spectral повышает безопасность развертывания и может быть актуально как в случае публикации Open Source-проектов, так и для внутренних проектов, где необходимо избежать хранения данных авторизации в исходных текстах системы.
Количество модулей Ansible велико и возможности их разнообразны. Но иногда даже этого не хватает. И в этом случае мы можем разработать свой собственный модуль, использовать его в работе и, возможно, даже поделиться им с комьюнити. О том как это сделать, вы можете узнать на бесплатном уроке "Разработка модуля Ansible" от моих коллег из OTUS. Узнать подробнее о курсе "Infrastructure as a code" и зарегистрироваться на бесплатный урок можно по ссылке ниже.
Узнать подробнее о курсе.