Стеганография на базе стека протоколов tcp/ip. часть 3

BankaBurn

Участник проекта

BankaBurn

Участник проекта
Регистрация
28 Ноя 2018
Темы
8
Сообщения
36
Реакции
32
4022

Эта статья является последней в серии, посвященной стеганографии на базе стека протоколов TCP/IP, которая используется для организации скрытого шелла с целью удаленного выполнения кода.
Прежде, чем начать повествование, установим несколько пакетов.
  1. Алгоритм энтропии Шеннона, реализованный на С и предназначенный для байтовых строк:
    Код:
    pip install entropy
  2. Набор пакетов для сравнения информационных массивов с известными распределениями. В итоге возвращаются схожие соотношения:
    Код:
    pip install fitter
    Код:
    pip install pandas
  3. Пакет для построения графиков на основе полученных данных:
    Код:
    pip install matplotlib
Тестовая среда: Windows 7 Ultimate 64 bit, установленная на виртуальной машине. Фаервол отключен (обязательное условие).
Эта статья является последней в серии, посвященной стеганографии на базе стека протоколов TCP/IP, которая используется для организации скрытого шелла с целью удаленного выполнения кода. В третьей части мы рассмотрим методы анализа трафика и раскрытия каналов, функционирующих на основе нашей и других похожих схем. Перед дальнейшим чтением рекомендуем ознакомиться с первой и второй статьей этого цикла.

Дискуссия об энтропии
Вся наша концепция о случайности, лежащая в основе схемы обхода систем безопасности и любых видов криптоанализа, базировалась на том, что мы пытались замаскировать создание пакетов от имени операционной системы (или сканера nmap). Однако вскоре выяснилось, что этот метод не так хорош, как кажется на первый взгляд (по крайней мере, в случае, если используется несколько полей в заголовках TCP/IP).

Хорошие новости
Содержимое идентификационных полей, используемых протоколом IP в SYN-пакетах, является практически случайным.
Проанализировав байты в передаваемых пакетах при запуске команды head /etc/shadow, я получил следующие результаты:
Энтропия устройства /dev/random - 0.836880. Объем выборки - 152 байта.
Энтропия содержимого поля ID у пакетов управляющего сервера - 0.836477. Объем выборки - 152 байта.
Энтропия содержимого поля ID у пакетов агента, установленного в системе жертвы, - 0.849231. Объем выборки - 152 байта.
Энтропия устройства /dev/random - 0.922406. Объем выборки - 304 байта.
Энтропия содержимого поля SEQ у пакетов управляющего сервера - 0.919504. Объем выборки - 304 байта.
Энтропия содержимого поля SEQ у пакетов агента, установленного в системе жертвы, - 0.906196 Объем выборки - 304 байта.

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

Плохие новости
Теперь проанализируем пакеты, создаваемые настоящим сканером nmap на Windows-машине.
Запускаем команду nmap 192.168.56.101.
Энтропия устройства /dev/random - 0.987001. Объем выборки - 1982 байта.
Энтропия содержимого поля ID у SYN-пакетов - 0.989606. Объем выборки - 2150 байт.
Энтропия содержимого поля ID у RST-пакетов агента - 0.755026. Объем выборки - 1982 байта.
Энтропия устройства /dev/random - 0.987001. Объем выборки - 3964 байта.
Энтропия содержимого поля SEQ у SYN-пакетов - 0.272816. Объем выборки - 4300 байт.
Энтропия содержимого поля SEQ у RST-пакетов агента - 0.000000. Объем выборки - 3964 байта.

По результатам анализа пакетов, формируемых при реальном сканировании, выясняется, что поле SEQ в RST-пакетах всегда равно 0. Смотрим выдержку из RFC 793 на странице 65:
Код:
If the state is CLOSED [...] then
 [...]   The acknowledgment and sequence field values are selected
 to make the reset sequence acceptable to the TCP that sent
 the offending segment.
      If the ACK bit is off, sequence  number zero is used,   # This is a
<SEQ=0><ACK=SEG.SEQ+SEG.LEN><CTL=RST,ACK>            # port scan reply
      If the ACK bit is on,
 <SEQ=SEG.ACK><CTL=RST>
Если подытожить, что написано выше, то стеганография через поле SEQ у пакетов, отсылаемых агентом из системы жертвы, невозможна. Сей факт означает, что ответы будут иметь размер в 1 байт (+1 байта на опкод) и будут передаваться только через поле Identification протокола IP.
С другой стороны, удаленное выполнение кода вслепую будет работать, как и предполагалось изначально.
В общем, SYN-пакеты, отправляемые с управляющего сервера, скорее всего, смешиваются с пакетами операционной системы, поскольку ОС подставляет случайное содержимое в поле ID. Сканер nmap без параметров использует не поддельные пакеты, а системный вызов connect(), вследствие чего нет необходимости в правах суперпользователя.
Гистограммы, показанные ниже, изображают распределение значений для разных случаев:
4014

Рисунок 1: Распределение значений поля ID в SYN-пакетах
Диапазон возможных значений: 0-65535(2^16).
С другой стороны, RST-пакеты не перемешиваются настолько хорошо.

4015

Рисунок 2: Распределение значений поля ID в RST-пакетах в Windows 7
4016

Рисунок 3: Распределение значений поля ID в RST-пакетах в Linux
Подобное происходит потому, что операционные системы используют значения Sequential ID в качестве ответов на запросы о сканировании портов вместо случайных значений. При анализе RST-пакетов, отсылаемых жертвой, получаем небольшие столбики, распределенные по всему диапазону. В то же время столбики, полученные при анализе RST-пакетов операционных систем интерпретируются как единичные и большие, поскольку значения находятся очень близко к друг другу.
По результатам анализа поля Identification подведем некоторые итоги. В RFC, в котором появилось обновление, касаемое переназначения поля ID (RFC 6864), говорится о проблеме скрытых каналов (раздел Security Considerations, страница 16). В качестве решения предлагается внедрение алгоритма перезаписи поля ID в пакетах при прохождении через роутеры и фаерволы с целью усиления незаметности и предотвращения идентификации операционной системы. В целом, новый RFC уже стал большой проблемой для любителей скрытых каналов, из-за всего лишь одного переопределения поля ID в протоколе IP (по сравнению с тем, что было в RFC 791).

Поле Sequence в протоколе TCP
После анализа содержимого этого поля становится ясно, что битва полностью проиграна.
Рассмотрим гистограммы распределения значений поля ISN в SYN-пакетах (максимальное значение 2^32 = 4.294.967.296 ~ 4,294 * 10^-9).
4017

Рисунок 4: Распределение значений поля SEQ в SYN-пакетах
Из рисунка выше видно, что nmap использует один и тот же номер последовательности при сканировании всех портов. Сей факт является очень странным. С одной стороны, команда nmap –sS запускается от имени суперпользователя, и здесь вполне могут формироваться одни и те же пакеты (без изменения полей ISN и Destination Port). Однако почему формируются одни и те же значения полей в других случаях? Разве стек операционной системы не должен менять значение поля ISN?
Смотрим подробнее содержимое поля, где хранится исходный порт (Source Port):
4018

Рисунок 5: Распределение значений поля SPORT в SYN-пакетах
Из рисунка выше видно, что nmap использует одно и то же значение в поле Source Port при сканировании всех портов, и поэтому в поле ISN значение также не меняется. В итоге получается, что мы не можем замаскироваться под nmap. Игра окончена.
Если сравнить распределение значений, используемых в нашей схеме, со значениями, используемыми netcat, получаем такую картину:
4019

Рисунок 6: Распределение значений поля SPORT в SYN-пакетах в нашей схеме и netcat
Из рисунка выше видно, что в нашей схеме используется более узкий диапазон портов с большими значениями (механизм формирования портов заложен в алгоритме ширования). Netcat используется намного более случайную последовательность портов. Но даже несмотря на то, что видны различия, я не считаю, что распределение портов в более узкой части диапазона является доказательством использования скрытого канала.

Анализ RST-пакетов
4020

Рисунок 6: Распределение значений поля SEQ в RST-пакетах при использовании netcat
Значения, используемые в нашей схеме, настолько разбросаны, что на графике не видны.
В итоге выясняется, что мы нарушаем правила протокола TCP. Номер последовательности в RST-пакетах равен нулю до тех пор, пока система жертвы не будет скомпрометирована. Подобное нельзя скрыть. По крайней мере, следующее поколение фаерволов должно уметь распознавать эту аномалию.

Другие отклонения
Отклонения от значений в полях протокола – не единственный признак, позволяющий обнаружить скрытый канал. Хотя другие аспекты и не могут служить прямым доказательством наличия скрытых каналов, но могут служить индикатором о необходимости более тщательного анализа. А в процессе дополнительного анализа после выгрузки образа памяти агент будет неминуемо найден.
Распределение значений временного интервал между пакетами, исходящими от одного и того же источника, имеет определенную структуру. Сканеры masscan, zmap, nmap и netcat отличаются по этому параметру.
4021

Рисунок 7: Распределение значений поля TIME в RST-пакетах в различных сканерах
Графика - красноречивее тысячи слов. Netcat медленнее, чем nmap. Возможно потому, что каждый раз меняет значение поле Source Port.
В нашей схеме временной интервал между пакетами еще больше, поскольку перед отправкой и после получения выполняется множество операций: вычисление 4 хешей SHA512 для каждого пакета, операция XOR, разделение на части, поиск опкодов по словарю. Если у netcat интервал между пакетами около 0.0005 секунд, то в нашей схеме около 0.1-0.2 секунды. Различие на несколько порядков.

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

Настройка тестовой среды
Будут использоваться две виртуальные 32-битные машины с установленным дистрибутивом Ubuntu 12.04.5 без полного комплекта патчей (не у всех есть время и желание заниматься обновлениями). Одна система выступает в роли жертвы, другая – в роли управляющего сервера. Эти две машины будут находиться по разные стороны фаервола.
В качестве фаервола будет использоваться pfSense с плагином Suricata (IDS/IPS). В плагине Suricata активированы все стандартные правила в режиме полной записи логов. Также будем использовать правила приложения Snort.
Управляющий сервер будет генерировать пару SSH-ключей, пересылать публичный ключ на другую сторону (возможно, в папку /root/.ssh/authorized_keys) и авторизироваться в системе жертвы под именем суперпользователя.

Результаты анализа
Вначале я включил слушатель syslog и перенаправил все выходные данные в файл (syslog.log). Далее я стал смотреть содержимое этого файла на предмет изменений (утилиты sed и grep используются только с целью форматирования).
Затем я показываю, что два поддельных RST-пакета, созданных scapy, спровоцировали появление двух предупреждений. Первое – от плагина Suricata IDS, второе – от самого фаервола. Демонстрация проводится с целью показать, что запись логов работает корректно.
Далее я запустил клиента на управляющем сервере и агента в системе жертвы (порядок запуска не имеет значения), создал директорию .ssh/ в папке /root/ и добавил публичный SSH-ключ в файл authorized_keys. К сожалению, после подключения через SSH программа аварийно завершила работу, поэтому данный этап не показан.
На видео ниже демонстрируется вся схема (левый верхний угол – управляющий сервер, левый нижний угол – scapy, правый верхний угол – агент в системе жертвы, правая центральная область – журнал от pfSense, правый нижний угол – слушатель netcat):

Как видно на видео, логи, связанные со сканированием портов, отсутствуют, если не включены специальные правила. Даже если были бы логи, эта информация была бы бесполезной. Аномальные TCP-логи на базе сообщений из encoder.alerts в плагине Suricata могли бы быть более пригодными. В итоге в первом раунде тестирования наша схема оказалась устойчивой к обнаружению.

Новый поворот
После 2-3 кликов в мыши в настройках фаервола pfSense наша схема оказывается полностью недееспособной. На видео ниже показаны конкретные настройки, которые позволяют защититься от скрытых каналов на базе стеганографии:
Мне всегда было интересно, читает ли кто-нибудь RFC’ы. Теперь я получил ответ на свой вопрос. RFC’ы читают разработчики фаерволов и, надо признать, читают вдумчиво!
На видео выше pfSense полностью нокаутирует скрытый канал между двумя хостами при помощи изменения случайных битов в заголовке пакета. И эта идея также не является новой.
Смотрим выдержку из RFC 6864, на странице 16:
[...] (IP Identification) field can more easily be used as a covert channel.
For some atomic datagrams it is now possible, and may be desirable,
to rewrite the IPv4 ID field to avoid its use as such a channel.


Перевод цитаты выше: поле Identification в протоколе IP очень просто приспосабливается для создания скрытых каналов. В случае с некоторыми элементарными дейтаграммами на данный момент возможна (или даже желательна) перезапись поля ID в протоколе IPv4 с целью предотвращения функционирования подобного канала.
Второй раунд выиграл pfSense.

Будет ли третий раунд?
Не будет. Оба оппонента не готовы к третьему раунду. В pfSense, кажется, отсутствует система более тщательной фильтрации пакетов. На эту мысль наводит факт попустительства при злоупотреблении правилами протокола TCP. В свою очередь, наша схема не настолько умна, чтобы работать в условиях, когда пакеты подрезаются.
Немного щемит сердце после того, как теряется шелл с правами суперпользователя, полученный с таким трудом. Может быть в другой раз.

Заключение
В процессе путешествия в дебрях протоколов TCP/IP было изучено много всего интересного. Например, я узнал о слабостях в сетевом стеке хостов в Linux (RFC1122, страница 63), о проблеме замещения в стеке ядра (какой пакет уходит первым: из ядра или scapy?) и других проблемах, связанных с сетевыми протоколами.

Практическая реализация концепции
Когда инструмент станет достаточно стабильным, я загружу большинство своих наработок github страницу. Часть, связанная с запуском команд, загружена не будет, но будет добавлен код, отвечающий за передачу данных. Любой, кто знаком с Python, сможет самостоятельно реализовать блок, связанный с выполнением команд. Лично я придержу эту часть у себя, поскольку считаю, что иногда люди становятся безответственными, когда получают нечто полностью на халяву.
Кроме того, я загружу аналитические скрипты, используемые мной в этой статье. Все гистограммы были получены при помощи нажатия одной кнопки, и я считаю эти разработки достаточно ценными и достойными, чтобы поделиться с общественностью. Выложу после того, как немного отполирую код.
 

rardHaurf

Участник проекта

rardHaurf

Участник проекта
Регистрация
11 Окт 2019
Темы
0
Сообщения
108
Реакции
0
https://thecotswoldmalthouse.com/iPhoneXGiveaway/


kw:
iPhone X Giveaway 2020 MAY
Win iPhone X Free Online
iPhone X 8 Free
Авто объединение сообщений:

The best official PSN Card Codes 2020:

https://thecotswoldmalthouse.com/free-psn-code-generator-premium/

MAY 2020 UPDATED !!!
kw:
PSN Codes
Free Ps Vita Codes No Survey 2020
How To Get Free PSN Code
Авто объединение сообщений:

https://billscheatworld.com/ToonBlastHackUltimate/

2020 MAY UPDATED!

kw:
TOON BLAST HACK Actualizado 2020
How To HACK TOON BLAST With Lucky Patcher 2020
FastHACK/Toon-Blast-HACK 2020
Авто объединение сообщений:

http://bit.ly/2AUdLJu < Get Hack HAY DAY 2020 UPDATED! // SSL PROTECT!

MAY
kw:
HACK On HAY DAY 2020
Download HACK Game HAY DAY 2020
Авто объединение сообщений:

TIKTOK Likes Hack Without Verification MAY 2020

KW:
TIK TOK Like Generator Free JUNE 2020
TIKTOK Free Hearts JUNE 2020
TIKTOK Live Hack JUNE 2020
Free TIK TOK Fans Generator Without Human Verification JUNE 2020
TIKTOK Life Hack Song JUNE 2020
Авто объединение сообщений:

IMVU Free Credits No Hack No Cheat JUNE 2020

KW:
How Can I Gift Someone VIP On IMVU JUNE 2020
How To Get Free VIP On IMVU JUNE 2020
IMVU *Use Codes List JUNE 2020
Авто объединение сообщений:

Hide Badge Link IMVU Codes JUNE 2020

KW:
Join IMVU VIP Club JUNE 2020
IMVU Cheats How I Added 50000 Credits JUNE 2020
Free VIP Generator IMVU JUNE 2020
Авто объединение сообщений:

Get Credits For Free On IMVU JUNE 2020

KW:
Get Credits For IMVU For Free JUNE 2020
Cheat Engine 6.3 IMVU JUNE 2020
IMVU How To Get VIP For Free JUNE 2020
Авто объединение сообщений:

IMVU Clothes Cheats JUNE 2020

KW:
Get IMVU Credits Free JUNE 2020
Hack IMVU Credits With Cheat Engine JUNE 2020
Free VIP Generator IMVU JUNE 2020
Авто объединение сообщений:

https://cpbild.co/e5ea6a4 - PREMIUM FREE NETFLIX NOW! (JUNE UPDATED)

--
--


kw:
NETFLIX Account Login For FREE JUNE 2020
FREE NETFLIX Account Generator Reddit JUNE 2020
How To Create NETFLIX Account FREE USA UK JUNE 2020
NETFLIX Gift Cards 2020 JUNE
Авто объединение сообщений:

https://cpbild.co/e5ea6a4 - PREMIUM FREE NETFLIX NOW! (JUNE UPDATED)

--
--


kw:
Cards For NETFLIX 2020 JUNE
NETFLIX Account Generator For JUNE 2020
Create NETFLIX Account FREE 1 MONTH JUNE 2020
NETFLIX Free Trial Without Credit Card 2020 JUNE
Авто объединение сообщений:

https://cpbild.co/e5ea6a4 - PREMIUM FREE NETFLIX NOW! (JUNE UPDATED)

--
--


kw:
Get FREE NETFLIX Account Generator JUNE 2020
NETFLIX Account FREE Latest JUNE 2020
NETFLIX Premium Account Generator Download JUNE 2020
How To Know Which Credit Cards Ive Used For NETFLIX Free Trial 2020 JUNE
Авто объединение сообщений:

https://billscheatworld.com/MSPHackUltimate/ - the best hack online generator - VIP and DIAMONDS FREE!

KW:
MSP Starcoin Hack Reddit 2020 JUNE
MSP Hack Without Survey Or Human Verification 2020 JUNE
How To Hack VIP On MSP 2020 JUNE
Авто объединение сообщений:

https://cpbild.co/e5ea6a4 - PREMIUM FREE NETFLIX NOW! (JUNE UPDATED)

--
--


kw:
NETFLIX FREE Accounts India JUNE 2020
FREE NETFLIX Account Generator JUNE 2020
FREE NETFLIX Account Generator Philippines JUNE 2020
NETFLIX Account On Hold FREE Trial JUNE 2020
Авто объединение сообщений:

https://cpbild.co/e5ea6a4 - PREMIUM FREE NETFLIX NOW! (JUNE UPDATED)

--
--


kw:
NETFLIX FREE Account Telegram Channel JUNE 2020
NETFLIX Gift Code Hack 2020 JUNE
NETFLIX Premium Account Generator (FREE) Password.Txt JUNE 2020
Everafterguide Coupons 2020 JUNE
Авто объединение сообщений:

https://cpbild.co/e5ea6a4 - PREMIUM FREE NETFLIX NOW! (JUNE UPDATED)

--
--


kw:
NETFLIX Promo Code For Current Customers 2020 JUNE
NETFLIX Discounts For Teachers 2020 JUNE
NETFLIX Military Promo Code 2020 JUNE
NETFLIX Account For FREE India JUNE 2020
Авто объединение сообщений:

https://cpbild.co/e5ea6a4 - PREMIUM FREE NETFLIX NOW! (JUNE UPDATED)

--
--


kw:
NETFLIX Premium Account Generator Online JUNE 2020
NETFLIX Account FREE September JUNE 2020
NETFLIX Account FREE January JUNE 2020
Free NETFLIX Gift Cards 2020 JUNE
Авто объединение сообщений:


KW:
Free Removal Day For Summoners War JUNE 2020
Summoners War Free Ifrit JUNE 2020
Summoners War Dimensional Crystal JUNE 2020
Ancient Crystal Shop Summoners War JUNE 2020
Summoners War Mana Crystal Usagr JUNE 2020
Summoners War Sky Arena Best Hack Tool JUNE 2020
Авто объединение сообщений:


KW:
Summoners War Crystal Lake Overflow JUNE 2020
Live Arena Hack Summoners War JUNE 2020
Where To Get Crystals Summoners War JUNE 2020
Cara Hack Summoners War Tanpa Root JUNE 2020
Hack Summoners War Br JUNE 2020
Summoners War Hack Account JUNE 2020
Авто объединение сообщений:

https://billscheatworld.com/MSPHackUltimate/ - the best hack online generator - VIP and DIAMONDS FREE!

KW:
MSP Code Hack 2020 JUNE
VIP And Diamond Hack For MSP 2020 JUNE
Free MSP Hacks No Survey Or Human Vertification Just The Hack 2020 JUNE
Авто объединение сообщений:

https://billscheatworld.com/MSPHackUltimate/ - the best hack online generator - VIP and DIAMONDS FREE!

KW:
MSP Easy Hack No Survey 2020 JUNE
MSP Money Hack 2020 JUNE
Hack A VIP Acc On MSP 2020 JUNE
Авто объединение сообщений:


KW:
How To Farm Mana Crystal Summoners War JUNE 2020
Summoners War Sky Arena Max Crystal Mines JUNE 2020
Summoners War Free Removal Day JUNE 2020
A Summoners War Hack Alowed On Apple JUNE 2020
Hack Summoners War Sans Verification JUNE 2020
Summoners War Hack Online JUNE 2020
Авто объединение сообщений:


KW:
Summoners War Crystals Free Legit JUNE 2020
Summoners War 4.0 Hack Ios JUNE 2020
Summoners War How To Get Crystals Fast JUNE 2020
Summoners War How To Get Crystals Fast JUNE 2020
Summoners War What Angelmon Are Given To You For Free JUNE 2020
How To Farm Mana Crystals Summoners War JUNE 2020
Авто объединение сообщений:


KW:
Summoners War Where To Spend Crystals JUNE 2020
Summoners War Toan Free Team JUNE 2020
Summoners War Free Download Pc JUNE 2020
Is There A Real Summoners War Hack JUNE 2020
Summoners War Crystal Hacked Apj JUNE 2020
Hack Summoners War No Survey JUNE 2020
Авто объединение сообщений:


KW:
Summoners War Cloning Hack JUNE 2020
Summoners War Hack 3.8.9 Ios JUNE 2020
Android Hacks Summoners War No Download No Survey JUNE 2020
Summoners War Monster Storage Hack JUNE 2020
Cara Mendapatkan Crystal Summoners War JUNE 2020
Summoners War Pc Hack Download JUNE 2020
Авто объединение сообщений:

https://cpbild.co/e5ea6a4 - PREMIUM FREE NETFLIX NOW! (JUNE UPDATED)

--
--


kw:
NETFLIX Premium Free Paypal JUNE 2020
Free NETFLIX Premium Account Usa JUNE 2020
Get Free NETFLIX Premium JUNE 2020
NETFLIX Accounts List For FREE JUNE 2020
How To Get NETFLIX Account FREE JUNE 2020
NETFLIX Gift Card Amazon JUNE
NETFLIX Code 2020 JUNE
Авто объединение сообщений:



KW:
Free Special Codes On ROBLOX On Untimate Youtubetycoon September JUNE 2020
Free Rixty ROBLOX Codes JUNE 2020
How To Get Free ROBLOX Game Card Codes JUNE 2020
ROBLOX Sex Hack Code JUNE 2020
Free Redeem Codes ROBLOX Mysterie Murderer 2 JUNE 2020
Free Codes For ROBLOX Mineing Sim JUNE 2020
 
Последнее редактирование:

Количество пользователей, читающих эту Тема (Пользователи: 0, Гости: 0)