Статья Serialization and Deserialization

1570104313168.png


Добрый вечер, дорогие друзья. В этой статье я бы хотел поговорить о довольно интересной теме (десериализация и сериализация). Данная вещь есть во многих языках программирования, поэтому хотелось бы с нуля объяснить вам, что это такое и как применять. Приступим.

Введение | Что это?

Для начало давайте разберемся, что это такое:

Сериализация — это преобразование того или иного объекта в битовую последовательность.
Десериализация — восстановление первоначального состояния объекта из битовой последовательности.

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

Допустим ваше веб-приложение перемещает сереализованные битовые потоки между браузером и серверами. Такая вещь передается по протоколам HTTP или HTTPS. И такая вещь может делится на стороне клиента. Что должен сделать хакер, чтобы редактировать эти потоки? Все просто, ему требуется узнать структуру передаваемых в битовом потоке объектов и знать уязвимости движков под управлением которых как раз и работает наше веб-приложение, чтобы проникнуть в систему. Давайте перейдем к сценарием атаки.


Практика | Как работает?


И так, прежде чем показать это на практике давайте разберем два вида атаки. Именно какие они бывают:

1. Атаки, которые меняют логику приложения или выполняют произвольный код при наличии доступных приложению классов. Поведение которых меняется при десериализации или после.
2. Атаки с подменной данных. К примеру используя определенную структуру данных можно изменять их содержимое.

Давайте рассмотрим парочку сценариев атак. К примеру:

№1 Сценарий: Это самый распространенный пример. Происходит вызов микрослужб Spring Boot React-приложение. Разработчики обеспечили полный неизменяемый код. Данное решение заключается в том, что в сериализации состояния пользователя и передаче его с каждым запросом. Злоумышленник, заметивший подпись Java-объекта "rO0", может использовать Java Serial Killer для удаленного выполнения кода на сервере приложения.

№2 Сценарий: На PHP форуме для хранения "supercookies" используется сериализация PHP-объектов. Они содержат идентификатор, роль, хеш пароля и другие данные пользователя и это можно заметить ниже:

a:4:{i:0;i:132;i:1;s:7:"Mallory";i:2;s:4:"user";i:3;s:32:"b6a8b3bea87fe0e05022f8f3c88bc960";}

Хакер используя данную вещь изменяет сериализованный объект и тем самым выдает себе права администратора. Это все выглядит примерно так:

a:4:{i:0;i:1;i:1;s:5:"Alice";i:2;s:5:"admin";i:3;s:32:"b6a8b3bea87fe0e05022f8f3c88bc960";}

На заметку говорю где используется сериализация в приложениях:

1. Удаленного и межпроцессного взаимодействия.
2. Проводных протоколов, веб-служб, брокеров сообщений.
3. Кэширования или сохранения данных.
4. Баз данных, серверов кэширования, файловых систем.
5. Куки-файлов HTTP, параметров HTML-форм, токенов аутентификации API.

И так, это основная информация по сериализации и десериализации. В завершении расскажу как от этого защищаться. Для этого нужно:

1. Проверить целостность сериализованных объектов (цифровая подпись для проверки).
2. Изолировать и запустить код, который осуществляет десериализацию в среде где по минимум привилегий (если это возможно).
3. Исключить ошибки десериализации.
4. Контролировать входящие/исходящие сетевые подключения контейнеров или серверов. Которые проводят десериализацию.
5. Отслеживать десериализацию с предупреждением о фактах продолжительной десериализации.

Итоги | Вывод

Ну что же, сказать, что это легко нельзя, но я попытался объяснить кратко все и понятно. Последняя и самая популярная десериализация была в Java. Расширение Java Serial Killer Burp. Ну а в остальном удачи ;)

 
  • Нравится
Реакции: Rumbur
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!