Об­лака — это, как извес­тно, не толь­ко белог­ривые лошад­ки, но и прек­расный инс­тру­мент, что­бы соз­дать удоб­ную инфраструк­туру для при­ложе­ний и сер­висов. Ком­пании и незави­симые раз­работ­чики перено­сят свои про­екты в AWS или Azure, час­то не задумы­ваясь о безопас­ности. А зря. Будут ли эти дан­ные недос­тупны для хакеров, смо­жет ли обла­ко гаран­тировать защиту? Давай раз­бирать­ся.

Сна­чала рас­смот­рим «базу» — перечис­ление и повыше­ние при­виле­гий в IAM и EC2. В даль­нейшем мы научим­ся зак­реплять­ся в этих сер­висах, оку­нем­ся в вол­шебс­тво Lambda и SecretManager, най­дем пароль в S3, выберем­ся из кон­тей­нера, вытащим дан­ные из EBS, RDS и даже проб­росим­ся в дру­гой VPC!

 

Теория

Amazon Web Services — облачное решение, пре­дос­тавля­ющее сво­им кли­ентам мно­жес­тво полез­ных сер­висов. Их мож­но раз­делить на три типа.

  • IAS (infrastructure as a service) — к этой катего­рии отно­сит­ся толь­ко сер­вис Virtual Private Cloud, который дает воз­можность поль­зовате­лю соз­давать при­ват­ные изо­лиро­ван­ные сети пря­мо в обла­ке.
  • PAS (platform as a service) поз­воля­ет арен­довать один вир­туаль­ный сер­вер (инстанс).
  • SAS (software as a service) — пре­дос­тавле­ние ПО и услуг.
 

Сервисы

Identity and access management (IAM) — один из осно­вопо­лага­ющих сер­висов облачной инфраструк­туры Amazon. Он поз­воля­ет управлять дос­тупом к ресур­сам AWS. Адми­нис­три­руют поль­зовате­лей, груп­пы, роли и их дос­туп имен­но здесь. Струк­тура это­го сер­виса показа­на на сле­дующей иллюс­тра­ции.

Структура identity and access management
Струк­тура identity and access management
 

Политика

По­лити­ка содер­жит информа­цию о том, что может делать поль­зователь, а что нет, какие у него име­ются пра­ва. Полити­ку мож­но при­менять к груп­пам, поль­зовате­лям или ролям. Нап­ример, если полити­ка раз­реша­ет дей­ствие GetUser, то поль­зователь с такой полити­кой может получить информа­цию о дру­гих поль­зовате­лях.

Внут­ри полити­ки — три важ­ных ком­понен­та:

  1. Effect — исполь­зует­ся для пре­дос­тавле­ния дос­тупа или отка­за в нем.
  2. Action — вклю­чает спи­сок дей­ствий, которые полити­ка раз­реша­ет или зап­реща­ет.
  3. Resource — спи­сок ресур­сов, к которым при­меня­ется полити­ка.
 

Пользователь

Поль­зователь IAM — сущ­ность, которая соз­дает­ся в AWS для пред­став­ления исполь­зующе­го его челове­ка либо при­ложе­ния. У поль­зовате­лей есть так называ­емое User ARN (Amazon resource name), выг­лядит оно сле­дующим обра­зом:

arn:partition:service:region:account:resource

где

  • arn — иден­тифика­тор стро­ки;
  • partition иден­тифици­рует раз­дел для ресур­са. Для стан­дар­тных реги­онов AWS исполь­зует­ся раз­дел aws. Для Пекина, допус­тим, будет aws-cn;
  • service иден­тифици­рует про­дукт AWS. Ресур­сы IAM всег­да исполь­зуют iam;
  • region опре­деля­ет реги­он ресур­са. Для ресур­сов IAM это поле всег­да оста­ется пус­тым;
  • account ука­зыва­ет иден­тифика­тор учет­ной записи AWS без дефисов;
  • resource иден­тифици­рует кон­крет­ный ресурс по име­ни.

Вот некото­рые при­меры ARN:

arn:aws:iam::123456789012:root
arn:aws:iam::123456789012:user/JohnDoe
arn:aws:iam::123456789012:user/division_abc/subdivision_xyz/JaneDoe
arn:aws:iam::123456789012:group/Developers
arn:aws:iam::123456789012:group/division_abc/subdivision_xyz/product_A/Developers
arn:aws:iam::123456789012:role/S3Access
 

Группа

Груп­па IAM — это совокуп­ность поль­зовате­лей. Груп­пы облегча­ют управле­ние ими. Груп­па может содер­жать мно­жес­тво поль­зовате­лей, а поль­зователь может при­над­лежать к нес­коль­ким груп­пам. Кро­ме того, груп­пы не могут быть вло­жен­ными: они дол­жны содер­жать толь­ко поль­зовате­лей, но не дру­гие груп­пы.

 

Роль

Роль IAM — это сущ­ность, которая опре­деля­ет набор раз­решений для выпол­нения зап­росов к сер­висам AWS. Исполь­зование ролей — безопас­ный спо­соб пре­дос­тавить раз­решения опре­делен­ным объ­ектам. Так, пен­тестер может поп­робовать взять на себя опре­делен­ную роль, если у него есть на это пра­ва, и получить при­виле­гии этой роли.

Ро­ли соз­дают­ся для того, что­бы не приш­лось регис­три­ровать допол­нитель­ную учет­ную запись ради каких‑нибудь авто­мати­чес­ких задач. Роль зачас­тую при­вязы­вает­ся к какому‑либо сер­вису.

 

EC2

Он же Elastic Compute Cloud. Это вир­туаль­ный сер­вер (инстанс), на котором поль­зователь может запус­кать любые при­ложе­ния, что­бы решать собс­твен­ные задачи. Инстанс сос­тоит из сле­дующих ком­понен­тов.

Структура Elastic Compute Cloud
Струк­тура Elastic Compute Cloud

Рас­смот­рим все эти сос­тавля­ющие по поряд­ку.

  1. Опе­раци­онная сис­тема — на EC2 мож­но уста­новить прак­тичес­ки любую ОС.
  2. Дос­туп — спо­собы, с помощью которых мож­но получить дос­туп к EC2 через интернет.
  3. Ад­рес — IP-адрес, по которо­му откли­кает­ся инстанс.
  4. Хра­нили­ще — мес­то, где хра­нят­ся дан­ные инстан­са.
  5. Груп­пы безопас­ности — набор пра­вил, которые при­меня­ются к EC2, они поз­воля­ют кон­тро­лиро­вать вхо­дящий и исхо­дящий тра­фик.
  6. VPC (virtual private cloud) — изо­лиро­ван­ная облачная сеть, в которой может находить­ся наш инстанс.
 

Initial Access

Есть мно­жес­тво спо­собов про­ник­нуть в обла­ко заказ­чика пен­теста. Мы будем дей­ство­вать через AWS CLI — коман­дную стро­ку для работы с AWS. Нам пот­ребу­ются спе­циаль­ный иден­тифика­тор сек­ретно­го клю­ча и сам сек­ретный ключ, пос­ле пре­дос­тавле­ния которых мы получим воз­можность работать с обла­ком. В качес­тве точ­ки вхо­да будем исполь­зовать IAM и EC2.

 

Сбор информации

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

/root/.aws/credentials
/home/user/.aws/credentials

В Windows:

%userprofile%\.aws\credentials

Иден­тифика­тор сек­ретно­го клю­ча и сам сек­ретный ключ мож­но обна­ружить в пуб­личных репози­тори­ях.

Очень час­то нуж­ные нам клю­чи могут лежать в перемен­ных окру­жения. Обя­затель­но про­веряй и их:

set
dir env:
Get-ChildItem Env: | ft Key,Value

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

aws_access_key_id
aws_secret_access_key
aws_session_token
bucket_name
aws_access_key
aws_secret_key
S3_BUCKET
S3_ACCESS_KEY_ID
S3_SECRET_ACCESS_KEY
S3_SECRET_KEY
S3_ENDPOINT
list_aws_accounts
metadata_service_timeout
metadata_service_num_attempts
 

Подключение

Пос­ле того как ты нашел иден­тифика­тор и сам сек­ретный ключ, нас­тало вре­мя под­клю­чать­ся к AWS CLI. Для это­го исполь­зуем PowerShell:

aws configure

Что­бы узнать, под какой учет­ной записью ты под­клю­чил­ся к сис­теме, в Linux исполь­зует­ся коман­да whoami, но в AWS такой коман­ды нет. Что­бы узнать свое имя поль­зовате­ля, нуж­но ввес­ти в кон­соль PowerShell сле­дующую коман­ду:

aws sts get-caller-identity
# Дополнительно можно указать конфигурационный профиль (если, допустим, получили данные не от профиля default)
aws sts get-caller-identity --profile demo
 

Enumeration

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

Не пережи­вай, механизм работы с полити­ками и ролями будет понача­лу не сов­сем ясен. Пос­тарай­ся удер­жать в голове коман­ды. Ког­да дой­дем до эта­па повыше­ния при­виле­гий, все вста­нет на свои мес­та само собой.

 

IAM

Пользователи

Поль­зовате­ли — самая популяр­ная точ­ка вхо­да в обла­ко AWS. Имен­но поль­зователь­скую учет­ную запись мож­но обна­ружить в фай­ле .aws/credentials, а так­же в пуб­личных репози­тори­ях.

Продолжение доступно только участникам

Материалы из последних выпусков становятся доступны по отдельности только через два месяца после публикации. Чтобы продолжить чтение, необходимо стать участником сообщества «Xakep.ru».

Присоединяйся к сообществу «Xakep.ru»!

Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее

Подписаться
Уведомить о
2 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии