Одним из основных этапов работы в каждом тестировании на проникновение является разведка, включающая сбор информации в открытых источниках. На этом этапе мы одновременно с общей информацией об инфраструктуре заказчика ищем утечки паролей, исходных кодов и файлов конфигурации.
Многие исследователи хорошо знакомы с основными приемами поиска информации в публичных репозиториях систем контроля версий. Думаем, вы сможете назвать немало таких систем – например, всем известный GitHub. Так или иначе, большинство из них будет принадлежать к типу Git. Но как часто вы обращаете внимание на репозитории образов Docker?
![dockerhub dockerhub](/upload/cssinliner_webp/medialibrary/ed9/lhiuroiugmyy7pnts6lkl4khhfg26x4f/dockerhub.webp)
Порой – неважно, специально или случайно – в публичных репозиториях образов публикуются весьма интересные вещи. Это могут быть сборки образов с dev-версиями софта, внутренние разработки или просто настроенные сервисы для повседневного использования.
Вы можете возразить, что сейчас гораздо реже встречается такая беда, как конфигурационные и отладочные файлы и пароли в контейнерах. Так было не всегда, но, как мы знаем, интернет помнит все.
На DockerHub хранятся и старые версии образов. На скриншоте видна показательная путаница с тегами версий, где latest не соответствует своему имени
![dockerhub хранятся и старые версии образов dockerhub хранятся и старые версии образов](/upload/cssinliner_webp/medialibrary/32b/iea14do054h5p4ulr1m3qxyzsfiu7qwn/dockerhub_hranyatsya_i_starye_versii_obrazov.webp)
Не стоит забывать, что и внутри периметра встречаются локально развернутые системы хранения образов, изучение которых игнорируется довольно часто. Листать API docker-registry с помощью curl, пробираться через бесконечные списки скачанных пакетов в nexus – не самое интересное занятие, но зачастую листинг и скачивание образов доступны без авторизации. Почему бы не воспользоваться этим?
Изучать образы можно как вручную, так и автоматизированно: DevSecOps-сообщество написало множество разных инструментов для таких задач, остается только найти место и время, чтобы скачать все образы, которые вас интересуют.
Если же действовать более целенаправленно, то ищем образы с интересными названиями и начинаем отсматривать их версии. Куда смотреть? Прежде всего нужно изучить, как выглядел процесс сборки образа (с образом, по сути, всегда идет Dockerfile, с помощью которого он собран), из чего будет видно:
- что скопировано внутрь,
- что будет запущено и установлено,
- какие порты открыты.
Такая информация поможет с продвижением внутри инфраструктуры или позволит провести эксплуатацию новых векторов на внешнем периметре.
Небольшая подборка подобных находок из одного кейса:
![образ с исходниками внутреннего сервиса для отчетов образ с исходниками внутреннего сервиса для отчетов](/upload/cssinliner_webp/medialibrary/db1/ahabp0cmmv1fgbp7e2bl2qf8kybfivmk/obraz_s_iskhodnikami_vnutrennego_servisa_dlya_otchetov.webp)
![солидный набор адресов zabbix в забытом конфиге солидный набор адресов zabbix в забытом конфиге](/upload/cssinliner_webp/medialibrary/cf9/vmqy5szb05rbn9awz4ya5jfnnjdu0d88/solidnyj_nabor_adresov_zabbix_v_zabytom_konfige.webp)
![код сервера на python бережно оставленный в актуальной версии образа код сервера на python бережно оставленный в актуальной версии образа](/upload/cssinliner_webp/medialibrary/709/ymww3n6u83xtw6uc043tq6pygg37bfhd/kod_servera_na_python_berezhno_ostavlennyj_v_aktualnoj_versii_obraza.webp)
![не золото, а алмаз не золото, а алмаз](/upload/cssinliner_webp/medialibrary/40d/yyb3ub9tno39428okizpo6vhobz71zuh/ne_zoloto_a_almaz.webp)