Для поиска ключей в коде использовалась утилита ripgrep с регулярным выражением «((?:ASIA|AKIA|AROA|AIDA)([A-Z0-7]{16}))» для выявления наличия идентификаторов ключей и «[a-zA-Z0-9+/]{40}» для выявления самого ключа. Учитывались только действующие ключи, актуальность которых проверялась при помощи штатной CLI-утилиты aws. Проверка всего репозитория заняла 27 часов.
Самый старый из найденных ключей присутствовал в коде с 2013 года, а самый новый с 20 декабря 2022 года. В 11 случаях были найдены root-ключи (arn:aws:iam:..:root), в 18 — ключи непривилегированных пользователей (arn:aws:iam:..:user/пользователь), а в 22 — ключи доступа к сервису (arn:aws:iam:..:user/сервис).
Утечки разделены на три категории — случайно забытые в коде ключи, тестовые данные и преднамеренное использование (как правило для загрузки временных файлов Amazon S3). В качестве примеров случайно забытых ключей упоминается ключ компании Terradata, который был удалён из кода, но случайно забыт в специфичном для одной из платформ выпуске. В случае с компанией Amazon ключ был оставлен в amazon_pay SDK 2.5.1 в составе одного из тестовых сценариев.
После завершения эксперимента дополнительно был создан инструментарий для постоянного отслеживания утечек ключей в новых пакетах, публикуемых в PyPi, HexPM и RubyGems. Инструментарий вызывается через
Github Actions и в случае выявления утечек автоматически отправляет информацию о проблеме в репозиторий и в AWS.
Источник: http://www.opennet.ru/opennews/art.shtml?num=58446