
Поиск секретов в открытых томах EBS
Dufflebag — это инструмент для поиска секретов, которые могли быть случайно оставлены в общедоступных снимках Elastic Block Storage (EBS). Вы можете удивиться, сколько паролей и секретов просто валяется!
Инструмент организован как приложение Elastic Beanstalk (сокращённо EB, не путать с EBS) и определённо не будет работать, если попытаться запустить его на своей собственной машине.
У Dufflebag много движущихся частей, потому что на практике довольно нетривиально читать тома EBS. Вам нужно находиться в среде AWS, клонировать снимок, создать том из снимка, подключить том, смонтировать том и т.д. Именно поэтому он сделан как приложение Elastic Beanstalk — чтобы автоматически масштабироваться вверх или вниз по вашему желанию, и чтобы всё это можно было легко разобрать, когда работа закончена.
Просто следите за консолью AWS, чтобы убедиться, что всё идёт по плану и не накручиваются счета. Мы постарались предусмотреть все возможные аварийные ситуации и добавить обработку ошибок... но вы предупреждены!
Вам нужно добавить некоторые дополнительные разрешения IAM AWS для роли: aws-elasticbeanstalk-ec2-role. В качестве альтернативы можно создать новую роль с этими разрешениями и настроить EB на использование этой роли, но это немного сложнее. В любом случае, вам нужно добавить:
Основное приложение написано на Go, поэтому вам понадобится компилятор Golang. Но приложение EB на самом деле собирается в .zip-файл (так уж устроен EB), поэтому makefile выдаст вам zip.
Проверьте свой регион. Dufflebag может работать только в одном регионе AWS за раз. Если вы хотите искать во всех регионах, вам придётся развернуть столько же экземпляров. Чтобы изменить регион, измените содержимое файла исходного кода region.go.
Установите зависимости: Ubuntu 18.04 x64:
sudo apt install make golang-go git
go get -u github.com/aws/aws-sdk-go
go get -u github.com/deckarep/golang-set
go get -u github.com/lib/pq
go get -u lukechampine.com/blake3
make
Теперь вы должны увидеть файл dufflebag.zip в корневой папке проекта.
dufflebag. Имена корзин S3 должны быть глобально уникальными, поэтому, скорее всего, вам понадобится суффикс в виде набора бессмысленных символов или что-то подобное.Перейдите в консоль AWS и найдите пункт меню Elastic Beanstalk. Это можно сделать и через CLI, но в этом описании будет использоваться консоль. Выберите Actions -> Create Environment.

Затем в следующем окне выберите Worker environment и нажмите Select.

В следующем окне для Platform выберите Preconfigured -> Go.

Под Application Code выберите Upload your Code.

Нажмите кнопку Upload и выберите только что собранный dufflebag.zip.

Наконец, нажмите Create Environment, чтобы начать.
AWS потребуется несколько минут, чтобы создать всё необходимое и запуститься. Как только среда будет создана, Dufflebag начнёт работу сразу же. Никаких дополнительных действий не требуется.
После запуска вы можете попробовать снова, сняв предохранительный клапан. По умолчанию Dufflebag ищет только 20 снимков EBS (чтобы он не вышел из-под контроля при первой же попытке). Чтобы расширить поиск на весь регион, откройте populate.go, удалите следующую строку кода и пересоберите:
//#####################################################################
//#### Safety Valve ####
//#### Remove this line of code below to search all of your region ####
//#####################################################################
snapshots = snapshots_result.Snapshots[0:20]
Одна из причин, по которой Dufflebag спроектирован как приложение Elastic Beanstalk, — это возможность легко автоматически масштабировать программу вверх или вниз. По умолчанию он будет работать только на одном экземпляре и будет довольно медленным. Но если вы хотите его немного ускорить, настройте автомасштабирование в Elastic Beanstalk. Полные настройки выходят за рамки этого документа, так что дайте им поиграться. Однако на практике я обнаружил, что простой триггер по загрузке CPU работает достаточно хорошо.
При настройке среды, описанной выше, вы найдёте эти параметры под кнопкой Configure more options (вместо нажатия Create environment), а затем нажмите Scaling.

Dufflebag будет копировать все интересные файлы в созданную вами ранее корзину S3. (Технически Dufflebag использует первую найденную корзину S3, имя которой начинается с "dufflebag".)
Вы можете просто наблюдать, как файлы поступают один за другим в вашу корзину S3. Они будут называться:
originalfilename_blake3sum_volumeid
Если всё идёт хорошо, вам не нужно читать логи. Но на всякий случай — Elastic Beanstalk позволяет приложениям писать в файлы логов во время работы, и они захватываются при переходе на вкладку Logs. Затем нажмите Request Logs и Last 100 Lines. Вы получите последнюю партию логов Dufflebag. Нажмите кнопку Download, чтобы прочитать его. Этот файл будет содержать множество других системных логов, но часть с Dufflebag находится в /var/log/web-1.log в начале.
Чтобы увидеть полную историю логов, выберите Full Logs вместо Last 100 Lines. (Обратите внимание, что EB по умолчанию довольно агрессивно ротирует логи)
Кроме того, вы можете оценить общий прогресс, посмотрев на очередь SQS для среды. Рабочие среды Elastic Beanstalk используют SQS для управления рабочим процессом. Каждое сообщение в очереди Dufflebag представляет том EBS, который нужно обработать:

Столбец Messages Available показывает, сколько томов ещё не обработано. Столбец Messages in Flight показывает, сколько томов обрабатывается прямо сейчас.
Dufflebag запрограммирован на поиск того, что, по нашему мнению, может быть «интересным». Закрытые ключи, пароли, ключи AWS и т.д. Но что, если вы хотите найти что-то конкретное для себя? Например, вы работаете в bank.com и хотите посмотреть, что есть в открытом доступе, связанное с bank.com.
Для этого потребуется небольшая модификация кода Dufflebag, но не очень большая. Не волнуйтесь! Логика поиска находится в inspector.go. Функция pilfer() — это goroutine, которая занимается проверкой файла. Код там может сначала показаться пугающим, но вот что он делает (и как вы можете его модифицировать без особого труда).
Чёрные списки имён файлов:
blacklist_exact)blacklist_contains)blacklist_prefix)Вы можете довольно легко изменить логику поиска, просто изменив содержимое этих трёх списков. Однако в целом я бы рекомендовал оставить их как есть. Эти чёрные списки предназначены для исключения скучных файлов, которые присутствуют во многих файловых системах, и предотвращают необходимость глубокого анализа каждого файла во всём AWS. Чувствительные данные, которые вы ищете, МОГУТ быть в этих файлах... но, вероятно, нет.
Белый список имён файлов:
IsSensitiveFileName() проверяет имя файла на соответствие регулярному выражению, которое находит чувствительные имена файлов (например, /etc/shadow, bash_history и т.д.).Содержимое файлов:
checkContentsRegex() проверяет содержимое файла на соответствие набору регулярных выражений. (Аргумент file input является построчным, поэтому ввод в эту функцию — это одна строка файла, а не весь файл.) Таким образом, чтобы искать ключевые слова, связанные с вашей организацией, просто измените регулярные выражения внутри checkContentsRegex().