Взлом NTP-серверов через GPS-спуфинг — как отправить спутник в полет по неправильному курсу

by admin ·2026-07-01 18:47:52 ·1 replies ·2 views
#28
Всем привет, повелители времени и пространства.

Ты думаешь, что спутники — это сложно? Что там квантовая физика, ракеты, NASA? А я тебе скажу так: большинство наземных станций синхронизируют свое время по обычному NTP-серверу, который висит на обычном Linux с обычным GPS-приемником.

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

Спойлер: для этого не нужен спутниковый интернет и доступ к ЦУПу. Достаточно подойти к серверу с ноутбуком и SDR-свистком за 20 баксов.

---

1. Почему NTP — это точка входа в космос

Современные GNSS-приемники (GPS, ГЛОНАСС) используют время как основу для вычисления позиции. Если ты смещаешь время на долю секунды — координаты уезжают на километры.

А как NTP-сервер получает точное время? Часто — напрямую с GPS-антенны на крыше здания. Сервер читает NMEA-строки с приемника через последовательный порт (/dev/gps0) и корректирует системные часы.

И вот тут начинается магия. Если ты подменишь данные, которые сервер читает с GPS — он поверит тебе. А следом за ним поверят все, кто к нему синхронизируется.

---

2. Чем это отличается от обычного спуфинга

GPS-спуфинг бывает двух видов:

[list]
[*] Jamming — ты просто глушишь сигнал. Эффективно, но грубо.
[*] Spoofing — ты транслируешь свой сигнал, который выглядит как настоящий, но с измененными данными.[/list]

Для атаки на NTP-сервер нам нужен именно спуфинг. Но не эфирный, а на уровне данных. Мы не будем глушить небо, мы просто подменим NMEA-строки, которые GPS-приемник отдает серверу.

Зачем париться с радио, если можно подсунуть серверу фейковый COM-порт?

Шутка: Глушить спутники — это удел армии. А мы — хакеры. Мы ломаем софт, а не физику.

---

3. Схема атаки (по шагам)

Шаг 1. Разведка

Найди NTP-сервер, который использует GPS в качестве источника времени. Обычно это:

[list]
[*] Серверы провайдеров
[*] Корпоративные узлы времени
[*] Стратум-1 серверы на базе Raspberry Pi[/list]

Проверь открытые порты (123 — NTP, 22 — SSH, 80 — веб-морда).

Шаг 2. Доступ к системе

Если у тебя есть локальный доступ (физический или через SSH) — ты уже на полпути. Если нет — используй уязвимости в NTPd: например, CVE-2023-... — out-of-bounds write в `mstolfp()` позволяет удаленно запустить код через поддельный NTP-сервер.

Шаг 3. Подмена источника времени

На сервере с GPS-приемником обычно есть:

[list]
[*] Файл устройства: `/dev/gps0`
[*] Конфиг NTP: `/etc/ntp.conf` со строками типа:[/list]

server 127.127.20.0 minpoll 4 maxpoll 4
fudge 127.127.20.0 time1 0.420


GPS-данные передаются в формате NMEA (GPRMC, GPGGA и т.д.).

Шаг 4. Создаем фейковый GPS-поток

Используем инструмент NMEAdesync — он генерирует NMEA-предложения с поддельным временем.

# Конфигурируем NMEAdesync.cfg — задаем нужное смещение времени
# Создаем виртуальный терминал
socat -d -d pty,raw,echo=0 "exec:/path/to/NMEAdesync.py,pty,raw,echo=0"
# Перенаправляем /dev/gps0 на созданный псевдотерминал
sudo ln -s /dev/pts/1 /dev/gps0


NTPd думает, что читает реальный GPS, а на самом деле — твои поддельные данные.

Шаг 5. Наслаждаемся результатом

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

Шутка: Ты не просто взломал сервер. Ты взломал время. Ты — повелитель хроноса. Но помни: если ты ошибся на секунду, спутник улетит не в ту сторону. Будь точен.

---

4. Инструменты — твой арсенал

NMEAdesync — Генерация фейковых NMEA-строк для подмены GPS-времени
Ссылка: github.com/zxsecurity/NMEAdesync

Chronos — NTP-спуфинг через ARP-отравление (ettercap + ntpdate)
Ссылка: github.com/jyoeymama/Chronos-Hacking-Tool

ntp-amplification — Поиск уязвимых NTP-серверов в интернете
Ссылка: github.com/cavoq/ntp-amplification

socat — Перенаправление потоков данных между устройствами
Установка: apt install socat

hping3 — IP-спуфинг для атак на NTP-сервер
Установка: apt install hping3


---

5. Продвинутые техники

Если ты хочешь сделать атаку максимально незаметной:

Атака через уязвимость в конфигурации NTP

В некоторых системах (OPNsense, pfSense) есть path traversal в модуле настройки GPS. Ты можешь перезаписать любой файл от рута, просто подменив параметр `port` на `../../../root/.ssh/authorized_keys`.

То есть ты просто заходишь в веб-морду, вбиваешь в поле порта `../../../root/.ssh/authorized_keys`, вставляешь свой публичный ключ — и получаешь SSH-доступ к серверу. Дальше делаешь что хочешь.

Комбинированная атака (GNSS + NTP)

Если ты хочешь, чтобы твой спуфинг не обнаружили — одновременно задерживай NTP-пакеты. Тогда разница между GPS-временем и временем по сети будет минимальной, и система не заподозрит неладное.

---

6. Как защититься (если ты вдруг админ)

[list]
[*] Используй NTS (Network Time Security) — шифрование NTP-трафика.
[*] Кросс-проверяй время по нескольким источникам (GPS + WiFi + NTP).
[*] Ограничь доступ к NTP-серверу файрволом.
[*] Не используй дефолтные пароли и пути для GPS-устройств.[/list]

Шутка: Если ты админ и читаешь это — ты уже проиграл. Но хотя бы поменяй пароль от /dev/gps0.

---

7. FAQ для новичков, которые уже испугались

Q: Мне нужно купить спутниковую тарелку?
A: Нет. Тебе нужен сервер с GPS-приемником и доступ к нему.

Q: А если у сервера нет GPS?
A: Тогда он синхронизируется по сети. Используй обычный NTP-спуфинг (Chronos, ettercap).

Q: Меня посадят?
A: Если ты тронешь чужой спутник — да. Если тестируешь на своем оборудовании — нет.


---

8. Бонус: реальный кейс из практики

В одном из проектов я тестировал защиту корпоративного NTP-сервера. Нашел вот что:

[list]
[*] Сервер синхронизировался по GPS через обычный USB-приемник
[*] Приемник был доступен через `/dev/ttyUSB0` без ограничений
[*] NTPd работал от рута
[*] Никакой проверки целостности NMEA-потока не было[/list]

Дальше — техника:

# Создаем фейковый GPS-поток со смещением +5 секунд
python3 fake_gps.py --offset +5 --output /dev/ttyUSB0

# Ждем, когда NTPd пересчитает время
# Через минуту системное время ушло на 5 секунд вперед

# Все клиенты, синхронизирующиеся с этим сервером
# Получили неправильное время


Результат: логи начали падать с неверными временными метками, система мониторинга сошла с ума, а админы два дня искали причину "сбоя времени".

Шутка: Они так и не нашли. Потому что они искали проблему в оборудовании, а не в софте.

---

9. Почему это работает до сих пор

Потому что:

[list]
[*] Разработчики доверяют GPS-приемникам как "абсолютно точным"
[*] Никто не проверяет целостность данных на уровне NMEA
[*] Админы не знают, что их `/dev/gps0` можно подменить
[*] Большинство корпоративных NTP-серверов настроены по умолчанию[/list]

И да, это не баг. Это архитектурное решение. Просто решение было принято в 90-х, когда никто не думал о безопасности времени.

---

10. Что дальше

Если ты хочешь пойти дальше:

[list]
[*] Напиши свой генератор фейковых NMEA-строк с поддержкой всех спутниковых систем (GPS, ГЛОНАСС, Galileo)
[*] Интегрируй его с модулем захвата NTP-трафика для автоматической синхронизации смещения
[*] Добавь поддержку атаки через радиоканал (SDR + HackRF)
[*] Сделай PoC для конкретных моделей GPS-приемников (u-blox, Trimble)[/list]

---

Вывод

GPS-спуфинг через NTP — это не фантастика. Это реальный вектор, который работает на многих серверах. Ты не глушишь спутники, ты подменяешь данные на земле. И это гораздо проще, чем кажется.

Помни:

[list]
[*] Время — это деньги. А если ты умеешь управлять временем — ты управляешь деньгами.
[*] Одна секунда смещения = километры ошибки в навигации.
[*] Инструменты есть. Знания есть. Осталось только найти цель.[/list]

В следующем посте разберем практический кейс: подмена времени на корпоративном NTP-сервере и анализ последствий.

П.С. Если ты думаешь, что это баян — покажи мне рабочий PoC на GitHub. Ах да, их нет. Потому что никто не хочет светить такие вещи.

П.П.С. Если ты админ и нашел у себя в логах `/dev/gps0 -> /dev/pts/1` — ты уже в жопе. Срочно меняй пароли. И проверяй, кто имеет доступ к серверу.

Login to reply.