##
# Объединенный скрытый канал: CVE-2023-1206 + CVE-2024-49882
Этот проект демонстрирует скрытый канал связи с использованием двух уязвимостей ядра Linux:
**Канал синхронизации**| CVE-2023-1206| Синхронизация времени через измерение коллизий хеша IPv6
**Канал данных**| CVE-2024-49882| Передача данных между контейнерами через утечки hugepage
┌─────────────────────────────────────────────────────────────────────┐
│ НЕЗАШИФРОВАННЫЙ СКРЫТЫЙ КАНАЛ │
├─────────────────────────────────────────────────────────────────────┤
│ Контейнер A (Отправитель) Контейнер B (Получатель) │
│ ┌─────────────────┐ ┌─────────────────┐ │
│ │ 1. Запись данных│ │ 4. Обнаружение │ │
│ │ в hugepage │ │ преамбулы │ │
│ └────────┬────────┘ └────────┬────────┘ │
│ │ │ │
│ ▼ ▼ │
│ ┌─────────────────┐ Коллизия ┌─────────────────┐ │
│ │ 2. Отправка │──хеша IPv6──▶│ 5. Измерение │ │
│ │ преамбулы │ Время │ задержки │ │
│ └────────┬────────┘ └────────┬────────┘ │
│ │ │ │
│ ▼ ▼ │
│ ┌─────────────────┐ Повторное ┌─────────────────┐ │
│ │ 3. Освобождение │──использование──▶│ 6. Захват │ │
│ │ hugepage │ hugepage │ утекших │ │
│ └─────────────────┘ │ данных │ │
│ └─────────────────┘ │
└─────────────────────────────────────────────────────────────────────┘
Вам потребуется ядро 6.12 с воспроизведённой уязвимостью:
git clone --depth=1 --branch v6.12 linux-6.12
@@ -750,7 +750,12 @@ static inline u32 ipv6_addr_hash(const struct in6_addr *a)
/* more secured version of ipv6_addr_hash() */
static inline u32 __ipv6_addr_jhash(const struct in6_addr *a, const u32 initval)
- return jhash2((__force const u32 *)a->s6_addr32, 4, initval);
+ u32 v = (__force u32)a->s6_addr32[0] ^ (__force u32)a->s6_addr32[1];
### 2\. Настройка hugepages (CVE-2024-49882)
echo 256 | sudo tee /sys/kernel/mm/hugepages/hugepages-2048kB/nr_hugepages
cat /sys/kernel/mm/hugepages/hugepages-2048kB/free_hugepages
sudo apt-get install -y docker.io docker-compose
sudo cat > /etc/docker/daemon.json I/O Graphs -> Y Axis: Packets/s
1. **Преамбула синхронизации** : Чередующиеся всплески SYN-пакетов
* Низкая частота или отсутствие пакетов при битах '0'
* У всех исходных адресов будет одинаковое значение XOR(addr[0], addr[1])
### Lua-диссектор для Wireshark (опционально)
Сохраните как `~/.local/lib/wireshark/plugins/covert_channel.lua`:
-- Covert Channel Dissector for CVE-2023-1206
local covert_proto = Proto("covert_sync", "CVE-2023-1206 Covert Sync")
local f_collision = ProtoField.bool("covert.collision", "Hash Collision")
local f_bucket = ProtoField.uint32("covert.bucket", "Target Bucket", base.HEX)
covert_proto.fields = { f_collision, f_bucket }
function covert_proto.dissector(buffer, pinfo, tree)
if pinfo.ipv6_src and pinfo.match_uint("tcp.flags", 0x02) then
local subtree = tree:add(covert_proto, buffer())
local tcp_table = DissectorTable.get("tcp.port")
# График частоты пакетов в реальном времени
tshark -i docker0 -f "tcp port 31337" -q -z io,stat,0.1
# Извлечение данных о времени для построения графика
tshark -r covert.pcap -T fields -e frame.time_relative -e ipv6.src \
set title 'CVE-2023-1206 Covert Sync Channel'
plot 'timing_data.csv' using 1:(1) smooth frequency with impulses
echo 512 | sudo tee /sys/kernel/mm/hugepages/hugepages-2048kB/nr_hugepages
# Если не сработало, попробуйте сбросить кеши
sync; echo 3 | sudo tee /proc/sys/vm/drop_caches
echo 512 | sudo tee /sys/kernel/mm/hugepages/hugepages-2048kB/nr_hugepages
# Если отсутствует, возможно, нужно включить в конфигурации ядра
sudo mknod /dev/udmabuf c 10 $(cat /proc/misc | grep udmabuf | cut -f1 -d' ')
sudo sysctl -w net.ipv6.conf.all.forwarding=1
docker network inspect covert_net | grep -A5 IPv6
docker network rm covert_channel_covert_net
### Проблемы с временем канала синхронизации
# Увеличение длительности бита для более надёжного обнаружения
#define SYNC_BIT_DURATION_MS 200 # Увеличьте со 100
# Увеличьте порог при ложных срабатываниях
#define SYNC_THRESHOLD 3.0 # Увеличьте с 2.0
Это демонстрирует несколько серьёзных проблем безопасности:
1. **Обход изоляции контейнеров** : Повторное использование hugepage приводит к утечке данных между контейнерами
2. **Скрытая связь** : Каналы, основанные на времени, обходят мониторинг сети
3. **Шифрование не требуется** : Сам канал незаметен; добавление шифрования делает его необнаружимым
1. Отключите hugepages: `echo 0 > /sys/kernel/mm/hugepages/hugepages-2048kB/nr_hugepages`
2. Обновите ядро до исправленной версии (6.5+)
3. Используйте `--security-opt=no-new-privileges` в Docker
4. Отслеживайте необычные паттерны TCP SYN
* CVE-2024-49882: Уязвимость hugepage в ядре Linux
* Патч ядра: `d11b0df7ddf1831f3e170972f43186dad520bfcc`
The full story
This article is one source in a clustered incident — the cluster page carries the summary, timeline and every other outlet covering it.
