Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
12
Добавлен:
20.04.2024
Размер:
17.2 Mб
Скачать

 

 

 

 

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

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

 

 

 

 

 

 

to

 

 

 

 

 

 

w Click

 

 

 

 

 

m

w Click

 

 

 

 

 

m

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

o

 

 

 

w

 

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

g

.c

 

 

 

.

 

 

 

 

g

.c

 

 

 

p

 

 

 

 

 

 

 

 

 

 

p

 

 

 

 

 

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-xcha

 

 

 

 

 

 

 

 

 

 

-x cha

 

 

 

 

 

ся от официального OTA-обновления смартфона, и она просто выложила последнюю бету в открытый доступ. Любой владелец Xperia Play мог скачать ее и воочию убедиться в превосходной стабильности и производительности, однако для Sony весь процесс, по сути, оказался пустой тратой времени.

Вопрос третий: когда прошивка становится доступна пользователям?

Энтузиаст всегда имеет очень большое преимущество перед компанией-про- изводителем, так как может поделиться прошивкой уже на ранней стадии работы, благодаря чему баги будут выявлены очень быстро, а к разработке смогут присоединиться другие разработчики.

У компании-производителя таких преимуществ нет. От начала и до конца разработка ведется закрыто, и только после преодоления большого количества проблем и доведения прошивки до почти приемлемого состояния они могут поделиться бета-версией с небольшим количеством тестеров. Другими словами, там, где у программистов-энтузиастов есть тысячи советчиков и тестеров самой разной квалификации по всему миру, у компании — только собственные ресурсы. Само собой, такое положение вещей тоже затягивает разработку.

Ну и наконец, представь, что при всем при этом компании еще необходимо натянуть на новую версию ОС собственную оболочку, реализовать фирменную функциональность, которая будет отличать «их Android» от всех остальных андроидов, и ты получишь те самые полгода, а может, даже и год.

 

 

 

 

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

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

EAАлексей «GreenDog» Тюрин, Digital SecurityY agrrrdog@gmail.com,,twitter.com/antyurin

HACK

WARNING

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

 

 

 

 

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

 

 

 

 

Задача: Эксплуатация directory traversal в архивах

 

 

 

 

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

 

 

 

 

Давай представим себе ситуацию: у нас есть какое-то веб-приложение

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

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

Втеории ничто не мешает указать внутри архива путь до файла с поднятием на директорию выше (../) или даже на несколько. Таким образом, мы можем указать практически произвольные места для разархивируемых файлов. В *nix — любые, так как там единая корневая система, а в Windows мы ограничены разделом диска и за его пределы выйти не сможем (то есть c С: на D:, к примеру, таким образом перейти нельзя).

Атака эта называется dir traversal, она далеко не новая и существует еще со времен формата tar. И неудивительно, что большинство архиваторов ее не боятся, — скорее всего, они нормализуют пути до начала работы.

Однако в 2009 году фирма Neohapsis провела исследование на эту тему,

иоказалось, что многие библиотеки (к примеру, в PHP, Python, Java и Ruby) уязвимы к dir traversal. Правда, это не столько уязвимость библиотек, сколько следствие возможностей самих архивов. Программист сам должен заботиться о том, чтобы проверить пути, ведь библиотеки позволяют получить имя

ипуть каждой из сущностей в архиве. Со времени исследования во многих библиотеках это уже пофиксили. Я протестировал Java и Pythоn: первая все так же уязвима, во втором поправили.

Единственная трудность в реализации атаки — это создание архива файлов с неверными путями. Ручками это сделать можно, но тяжело: легко нарушить целостность архива. Можно воспользоваться тулзой того же Neohapsis, она называется evilarc и подходит для архивов zip, tar, tgz, bz2. Dir traversal будет работать и в системах на *nix, и в Windows.

 

 

 

 

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

-x

 

n

e

 

 

 

 

 

cha

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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

 

 

 

 

Задача: Захват контроля над Windows через WSUS

Хочу тебя познакомить еще с одной атакой, которая была представлена на последнем Black Hat Las Vegas 2015. На мой взгляд, это одно из немногих реалистичных и дельных исследований среди тех, что были на конференции.

Вообразим ситуацию: в большой организации есть парк машин с Windows,

ивсе их надо обновлять. Понятно, что заставлять каждый из хостов ходить в интернет за обновлениями накладно и неудобно, а потому внутри корпоративной сети поднимают сервер WSUS (Windows Server Update Services), который и используется для управления обновлениями: их выгрузкой, распространением

ираспределением.

Поскольку задача типичная и решение готовое, WSUS крайне распространен, а потому заманчива и возможность атак на него и через него. Компания Contextis изучила принципы его работы и представила очень мощную (мы можем получить RCE с привилегиями System), но легкую в эксплуатации атаку. Очень в стиле Easy Hack! Исследование получилось объемным, так что я сосредоточусь на основных пунктах.

Итак, в компании поднимается сервер WSUS, а в настройках конечных хостов через групповые политики указывается, что обновляться нужно именно с этого сервера. Для общения хостов с сервером используется протокол SOAP, причем по умолчанию работает он по HTTP-протоколу. Это один из важнейших фактов для нас. Стандартный порт — 8530.

Путь до сервера для конечного хоста хранится здесь: HKEY_LOCAL_MACHINE\ Software\Policies\Microsoft\Windows\WindowsUpdate\WUServer.

Конечные хосты взаимодействуют с сервером следующим образом. Сначала конечный хост регистрируется на сервере и получает в ответ cookie, которую и использует потом при общении с сервером. После этого хост систематически (обычно раз в сутки) запрашивает, есть ли для него обновления. WSUS отвечает перечнем обновлений и путями, по которым их можно скачать (тоже на WSUS). При автоматическом обновлении хост скачивает и устанавливает данные обновления (от SYSTEM, конечно). Аналогичный процесс имеется и для обновления драйверов. Фактически процесс (и протокол) аналогичен обычному обновлению ОС через Windows Update.

ОбновлениядолжныбытьподписанывалиднымсертификатомMicrosoft—это и есть главный элемент защиты. Только они могут быть установлены.

Было выяснено, что существует несколько видов обновлений. И самый интересный для нас — CommandLineInstallation (это handler из запроса). Суть его в том, что какой-то исполняемый файл будет загружен в ОС, а потом запустится с определенными параметрами (например, это используется для запуска антивиря MS).

 

 

 

C

hang

e

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

X

 

 

 

E

 

 

 

 

 

 

 

 

 

 

 

X

 

 

 

 

E

 

 

 

 

-

 

 

 

 

 

d

 

 

 

 

 

 

 

 

-

 

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

 

t

 

 

 

 

 

 

 

 

F

 

 

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

D

 

 

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

r

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

to

 

 

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

w Click

 

 

 

 

 

 

m

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

o

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

g

.c

 

 

 

 

 

 

 

 

.

 

 

 

 

g

.c

 

 

 

p

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

p

 

 

 

 

 

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-xcha

 

 

 

 

 

Итак,

у нас есть хосты и сервер WSUS. Общение между ними идет по неза-

 

 

 

-x cha

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

щищенному протоколу HTTP, и мы можем провести атаку MITM и менять дан-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ные в запросах и ответах SOAP (сами запросы SOAP не подписываются). По-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

скольку у клиента нет никакой возможности проверить, существуют ли

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

обновления, мы по ходу атаки можем спокойно установить все что угодно. Ис-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

пользуя CommandLineInstallation, мы можем исполнять любые команды в опе-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

рационной системе и с любыми параметрами.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Исполняемыйфайл,конечно,долженбытьподписансертификатомMicrosoft,

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

но специального сертификата Windows Update не существует. Сгодится любой

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

подписанный MS СA. В качестве отличного варианта Contextis предложила ис-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

пользовать тулзы из Sysinternals Tools, написанные Руссиновичем. С тех пор

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

как они стали официальными

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

инструментами

Microsoft, они

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

получили и валидную подпись.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

С помощью PsExec мы можем

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

выполнять

произвольные ко-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

манды и запускать любое ПО (к

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

примеру,

Meterpreter). Точно

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

так же можно

использовать

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

bginfo, так как некоторые сто-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ронние антивирусы ругаются

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

на PsExec.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Как мы видим, в настрой-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ках по умолчанию вся система

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

очень небезопасна. И навер-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ное, главным практическим во-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

просом остается то, как можно

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

заставить конечный хост за-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

просить обновления с WSUS,

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

чтобы не ждать сутки для про-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ведения атаки.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

BGinfo из Sysinternals Tools подписан MS

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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

 

 

 

 

Задача: Подмена данных в сериализованных объектах Java

 

 

 

 

 

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

 

 

 

 

В качестве большой темы в этот раз я решил выбрать двоичную сериализацию в Java и две связанные с ней атаки. Из-за специфики не хотелось бы разделять их. Однако начнем с теории.

Статья в Википедии гласит: «Сериализация — процесс перевода какой-ли- бо структуры данных в последовательность битов». Эту последовательность можно передать по сети или сохранить в файл, после чего полностью с помощью десериализации восстановить в изначальное состояние.

Идея тут проста. С сериализацией мы можем сохранить значения сложных типов данных. Например, массив объектов произвольного класса, который был создан в программе.

Итоговый формат данных зависит от вида сериализации. Есть двоичные, есть такие, в результате работы которых создается документ XML. Фактически формат может быть любой. Мы же рассмотрим нативную двоичную сериализацию в Java.

Давай представим, что у нас есть класс Employee:

У него есть две переменные (свойства) — id и имя. Обе приватные (private), то есть вне класса они недоступны. Еще есть конструктор, который выставляет значения переменным, и два метода для доступа к переменным (начинаются с get).

 

 

 

 

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

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

 

 

 

 

 

 

 

 

to

 

 

 

 

 

 

 

 

 

df

n

 

 

 

 

 

Для того чтобы этот класс можно было сериализовать, нужно добавить ин-

 

 

df

n

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

m

 

 

 

 

 

 

 

 

m

w Click

 

 

 

 

 

 

 

 

 

w Click

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

o

 

 

 

 

 

w

 

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

g

.c

 

 

 

 

 

.

 

 

 

 

g

.c

 

 

 

p

 

 

 

 

 

 

 

 

 

 

 

 

p

 

 

 

 

 

 

 

 

 

 

 

-xcha

 

e

 

 

 

 

 

 

 

 

-x cha

 

e

 

 

 

 

 

 

 

 

 

 

терфейс-маркер Serializable (implements Serializable).

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Теперь мы спокойно можем создать объект этого класса в нашей програм-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ме и сохранить в файл:

 

 

 

 

 

 

 

 

 

 

 

Вот и все — реализация сохранения последовательности ложится на плечи Java. Для чтения объекта мы должны сделать следующее:

С учетом того что FileInputStream и FileOutputStream используются лишь для сохранения объектов в файлы, на практике для сохранения и восстановления сериализованного объекта нам требуется всего две строки.

Здесь примерно такая же ситуация, как с наследованием. Все, что может быть сериализовано, сериализуется. Например, объекты внутренних и родительских классов.

Вот как устроен итоговый формат. Сначала идет magic-string ACED (плюс некий номер версии) обозначающая сериализованный объект. Дальше идет толстое и полное описание каждого из свойств класса, и потом сами значения свойств (полей) объекта.

Важно, что сериализуются именно объекты. Сюда входят все значения свойств самого объекта (private, public, protected), а временные переменные (к примеру, какого-нибудь из методов) и код самих методов не входит.

Двоичный вид сериализованного объекта

 

 

 

 

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

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

 

 

 

 

 

 

to

 

 

 

 

 

 

w Click

 

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

o

 

 

 

w

 

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

g

.c

 

 

 

.

 

 

 

 

g

.c

 

 

 

p

 

 

 

 

 

 

 

 

 

 

p

 

 

 

 

 

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-xcha

 

 

 

 

Для удобства просмотра сериализованных объектов можно воспользоваться

 

 

 

-x cha

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

тулзой jdeserialize. Она помогает смотреть, какие поля хранятся в объекте и ка-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

доступа к самому классу объекта.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Просмотрщик сериализованных объектов

Первая атака заключается в следующем. Иногда сериализацию используют для передачи данных. Например, есть некое веб-приложение, клиенты подключаются к нему по HTTP и в качестве запросов передаются сериализованные объекты. Конечно, для подключения требуется специальное клиентское ПО: реализовано оно чаще всего в виде Java-апплета. В интернете такое встречается редко, а вот в корпоративном ПО это более распространенное решение.

Атака представляет собой обычный parameter tampering. Мы пытаемся подменить значения свойств объектов, посылаемых от клиента на сервер, и таким образом достичь обхода тех или иных ограничений. В данном случае мы надеемся на то, что разработчики воспринимают сериализацию как нечто более доверенное, чем обычные HTTP-запросы. Так может показаться из-за более «страшного» формата данных и из-за наличия контроля доступа к полям (private, public). В нашем примере два поля (employeeId и employeeName) — это private. В рамках виртуальной машины Java ничто, кроме самого объекта, не сможет их менять.

 

 

 

 

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

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

 

 

 

 

 

 

 

to

 

 

 

 

 

 

w Click

 

 

 

 

 

m

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

o

 

 

 

 

w

 

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

g

.c

 

 

 

 

.

 

 

 

 

g

.c

 

 

 

p

 

 

 

 

 

 

 

 

 

 

 

p

 

 

 

 

 

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-xcha

 

 

 

 

 

Для нас как для атакующих обе этих причины не преграда. Мы спокойно

 

 

 

-x cha

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

можем изменить любое из значений, так как мы работаем с «сырыми» данны-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ми. Фактически нам требуется перехватить HTTP-запрос с объектом от клиен-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

та к серверу и поменять несколько байтов информации (в Burp во вкладке Hex,

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

например). Сервер десериализует ответ и получит уже измененные данные.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

К сожалению, этот способ годится только в случае самых простых объектов.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Это связано со сложностью самого формата данных. Поля имеют разную

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

длину, и при изменениях, сделанных вручную, испортить объект проще про-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

стого. Поэтому нам требуется автоматизировать процесс. В этом поможет

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

специальный плагин для Burp Suite — BurpJDSer.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Сериализованный объект передается по сети

Плагин работает следующим образом. Когда сериализованный объект проходит через Burp в запросе, плагин отправляет этот объект в специальную библиотеку XStream. Это библиотека позволяет сериализовать объекты в виде XML. Его видно в Burp и можно менять. При отправке запроса далее XStream сериализует его обратно в двоичный вид. Что вдвойне приятно, плагин поддерживает все основные возможности Burp — и proxy, и intruder, и repeater.

 

 

 

 

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

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

 

 

 

 

 

 

 

 

to

 

 

 

 

 

 

 

 

 

df

n

 

 

 

 

 

Для корректной работы плагина необходимо добавить его, xstream.jar и, са-

 

 

df

n

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

m

 

 

 

 

 

 

 

 

m

w Click

 

 

 

 

 

 

 

 

 

w Click

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

o

 

 

 

 

 

w

 

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

g

.c

 

 

 

 

 

.

 

 

 

 

g

.c

 

 

 

p

 

 

 

 

 

 

 

 

 

 

 

 

p

 

 

 

 

 

 

 

 

 

 

 

-xcha

 

e

 

 

 

 

 

 

 

 

-x cha

 

e

 

 

 

 

 

 

 

 

 

 

мое главное, файл класса (jar), который должен быть сериализован в classpath.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Я отметил возможность ручного изменения объектов (hex-редактором), потому что этот способ не требует доступа к самому классу объекта, а вот в случае с XSteam это необходимо.

Сериализованный объект передается по сети

Соседние файлы в папке журнал хакер