Проверка ведер. Как искать уязвимости в бакетах AWS S3

Содержание статьи

  • Теория
  • Поиск бакетов
  • Получение содержимого
  • Разведка из облака
  • AWS CLI
  • Эксфильтрация
  • Повышение привилегий
  • Изменение политики бакета
  • Изменение ACL бакета
  • Изменение ACL объекта
  • Выводы

Хра­нили­ще Amazon S3, хоть и содер­жит ста­тичес­кие дан­ные, может откры­вать боль­шие воз­можнос­ти при пен­тесте. Неп­равиль­но выс­тавлен­ные раз­решения поз­воля­ют хакерам выис­кивать в S3 чувс­тви­тель­ные дан­ные, которые дадут путь для даль­нейше­го прод­вижения. В этой статье мы пос­мотрим, как могут выг­лядеть мис­конфи­ги S3 и как их экс­плу­ати­ровать.

warning

Статья име­ет озна­коми­тель­ный харак­тер и пред­назна­чена для спе­циалис­тов по безопас­ности, про­водя­щих тес­тирова­ние в рам­ках кон­трак­та. Автор и редак­ция не несут ответс­твен­ности за любой вред, при­чинен­ный с при­мене­нием изло­жен­ной информа­ции. Рас­простра­нение вре­донос­ных прог­рамм, наруше­ние работы сис­тем и наруше­ние тай­ны перепис­ки прес­леду­ются по закону.

 

Теория

У бакетов есть воз­можность кон­тро­ля дос­тупа: объ­екты могут быть обще­дос­тупны­ми либо при­ват­ными. Дос­туп к при­ват­ным быва­ет как толь­ко для чте­ния, так и с воз­можностью записи.

Как выг­лядит S3

Внут­ри S3 есть два типа дан­ных: Bucket — кон­тей­нер для объ­ектов и Object — сам файл. Самые час­тые спо­собы вза­имо­дей­ствия:

  • List — перечис­лить все хра­нили­ща S3 или фай­лы на S3;
  • Get — получить файл;
  • Put — помес­тить файл на S3;
  • Delete — уда­лить файл.

Фор­мат URL для дос­тупа к S3 выг­лядит так:

http(s)://{имя бакета}.s3.{регион}.amazonaws.com

Здесь {имя} опре­деля­ется вла­дель­цем бакета, нап­ример:

https://xakeprufiles.s3.us-west-2.amazonaws.com

Ба­кеты S3 мож­но обна­ружить раз­ными спо­соба­ми, нап­ример най­ти URL в исходном коде стра­ницы веб‑сай­та, в репози­тори­ях GitHub или даже авто­мати­зиро­вать про­цесс с помощью готовых ути­лит.

Для перебо­ра мож­но исполь­зовать наз­вание ком­пании, за которым сле­дуют общие тер­мины. Нап­ример, xakepru-assets, xakepru-www, xakepru-public, xakepru-private и так далее.

Так­же к бакету или объ­екту может быть при­вяза­на полити­ка безопас­ности.

По­лити­ки бакета

С помощью политик мож­но ука­зать, кто име­ет дос­туп к ресур­су и какие дей­ствия может выпол­нять с ним. Есть четыре вари­анта:

  • пуб­личный дос­туп (Public Access);
  • ACL — сок­ращение от Access Control List. Мож­но нас­тра­ивать как на бакет, так и на кон­крет­ный объ­ект бакета;
  • Bucket Policies — нас­тра­ивают­ся толь­ко для бакета;
  • Time Limited URLs — вре­мен­ные URL для дос­тупа.

Еще есть полити­ки, осно­ван­ные на лич­ности, они прик­репля­ются к поль­зовате­лю, груп­пе или роли IAM. Поз­воля­ют опре­делять, что объ­ект может делать.

 

Поиск бакетов

На­чать сто­ит с сер­виса greyhatwarfare.com. Он поз­воля­ет находить бакеты и объ­екты в них с помощью клю­чевых слов.

Об­наруже­ние бакетов

Ес­ли тол­ком ничего не находит­ся, то идем на сайт ком­пании. Здесь нам поможет Burp Suite. Прос­то прос­матри­вай веб‑сайт, а затем ана­лизи­руй получен­ную кар­ту.

При этом бакеты всег­да находят­ся на сле­дующих URL:

http://s3.[region].amazonaws.com/[bucket_name]/
http://[bucket_name].s3.[region].amazonaws.com/
http://s3-website-[region].amazonaws.com/[bucket_name]
http://[bucket_name].s3-website-[region].amazonaws.com
http://[bucketname].s3.dualstack.[region].amazonaws.com
http://s3.dualstack.[region].amazonaws.com/[bucketname]

Нуж­но ли нам под­бирать пра­виль­ный реги­он? Нет! Amazon любез­но под­ска­жет, что мы ищем где‑то не там. Поэто­му нам дос­таточ­но лишь наз­вания бакета.

Не­вер­ный реги­он

Но как получить это наз­вание? Чаще все­го оно скры­вает­ся в записях CNAME (в них сопос­тавле­ны псев­донимы с исходны­ми DNS-име­нами) домена ата­куемой ком­пании. Обна­ружить их мож­но вот так:

dig <domain> any

При­мер:

dig flaws.cloud any

Смот­рим DNS

Да, может быть, CNAME и пуст, но пос­мотрим, что еще есть на этом IP:

nslookup <ip>

При­мер:

nslookup 52.218.192.11

Об­ратный поиск

И получим, что к IP при­вязан еще и адрес s3-website-us-west-2.amazonaws.com. Это так называ­емый Website Endpoint. Эндпой­нты исполь­зуют­ся, ког­да с бакетом интегри­рован прос­тень­кий ста­тичес­кий веб‑сайт.

Все бакеты S3, нас­тро­енные для веб‑хос­тинга, получа­ют домен AWS, который мож­но исполь­зовать без собс­твен­ного DNS. То есть имя бакета в дан­ном слу­чае сов­пада­ет с име­нем домена, а имен­но flaws.cloud.

Ко­неч­но же, каж­дый домен переби­рать вруч­ную проб­лематич­но. Уско­рит дело прос­тень­кий скрипт на Bash:

while read p; doecho $p, curl --silent -I -i http://$p | grep AmazonS3
done < subdomains.txt

Пе­ребор доменов

Об­рати вни­мание, что не все домены зарегис­три­рова­ны как записи CNAME. Некото­рые могут не отоб­ражать­ся явно в про­цес­се раз­решения имен. В таком слу­чае удоб­но исполь­зовать сайт dnscharts.hacklikeapornstar.com. Сюда мож­но заг­рузить спи­сок доменов, а сер­вис уже самос­тоятель­но най­дет записи и по воз­можнос­ти сопос­тавит их с облачны­ми сер­висами.

Ви­зуали­зация всех записей

Ес­ли ты не зна­ешь, как находить под­домены, то рекомен­дую ути­литу Amass в связ­ке с но­вой тех­никой перечис­ления доменов.

Источник: xakep.ru

Ответить

Ваш адрес email не будет опубликован. Обязательные поля помечены *