Как стать автором
Обновить
831.73
OTUS
Цифровые навыки от ведущих экспертов

Как случайно не рассказать секреты всему миру

Время на прочтение4 мин
Количество просмотров5.1K

В целом компания SpectralOps (сейчас принадлежит Check Point) занимается разработкой и развитием инструментов, уменьшающих вероятность публикации чувствительной информации и предлагает целое семейство продуктов для разработчиков:

  • netz - обнаружение неудачных конфигураций сервисов и потенциальных уязвимостей в указанной подсети или в облачных провайдерах;

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

  • senv - утилита для безопасного отображения переменных окружения без риска показать секреты (например, полезно при трансляции экрана)

  • spectral - инструмент, основанный на эвристиках для обнаружения в файлах конфигурации или иных файлах токен доступа к облачным провайдерам или иной чувствительной информации

Мы будем рассматривать последний инструмент, для использования которого нужно зарегистрировать бесплатную учетную запись по ссылке. Свободная версия сервиса позволяет выполнять до 30 сканирований в день и до 10 репозиториев, что может быть достаточно для небольших компаний. Для выполнения сканирования может использоваться утилита командной строки (может быть установлена через установщик для Linux из готового образа с curl -L https://get.spectralops.io/latest/sh или через 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" и зарегистрироваться на бесплатный урок можно по ссылке ниже.

Узнать подробнее о курсе.

Теги:
Хабы:
Если эта публикация вас вдохновила и вы хотите поддержать автора — не стесняйтесь нажать на кнопку
+6
Комментарии2

Публикации

Информация

Сайт
otus.ru
Дата регистрации
Дата основания
Численность
101–200 человек
Местоположение
Россия
Представитель
OTUS