Лабораторный стенд на базе аналоговой АТС: изучаем уязвимости телефонных сетей прошлого

Разбираемся, как в домашних условиях развернуть миниатюрную аналоговую телефонную сеть, имитировать работу винтажных АТС и поэкспериментировать с тональной сигнализацией. Это отличный способ понять основы классического фрикинга на уровне физических сигналов. В материале: схемотехника, аппаратная часть, практические опыты с частотой 2600 Гц и лабораторное моделирование атак в полностью изолированном окружении.

Актуальность аналоговой телефонии в 2026 году

Мною двигало желание разобраться, как на самом деле функционировали легендарные телефонные уязвимости, о которых многие слышали, но мало кто воспроизводил вживую. Мы читали о «синих коробочках» (blue box), частоте 2600 Гц и внутриканальной сигнализации — но как это выглядит на уровне электрических импульсов и спектров?

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

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

Моей целью было создание автономного полигона:

  • пара классических аналоговых аппаратов;

  • программная мини-АТС;

  • инструментарий для генерации произвольных тонов;

  • мониторинг и логирование сигнализации;

  • полная изоляция от внешнего мира.

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

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

Архитектура стенда: железо, вольтаж и физика процесса

Итоговая конфигурация системы выглядит следующим образом:

  • сервер под управлением Linux;

  • PCIe-плата с портами FXS и FXO;

  • IP-АТС Asterisk;

  • ретро-телефоны с дисковым или кнопочным набором;

  • аудиоинтерфейс для инжекции сигналов в линию.

Краткий ликбез: FXS-порт имитирует станцию (подает питание), а FXO-порт ведет себя как оконечное устройство (телефон).

Электрические параметры впечатляют: в режиме ожидания в линии около 48 В постоянного тока. При снятии трубки ток возрастает, что сигнализирует АТС о занятости линии. Вызывной сигнал (звонок) — это переменное напряжение порядка 70–90 В с частотой 20–25 Гц. Наблюдать за этими всплесками на осциллографе — отдельное удовольствие.

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

Для реализации я выбрал Digium-совместимую плату, хотя подойдут и внешние USB-FXS адаптеры, поддерживаемые драйверами DAHDI.

Конфигурация DAHDI после настройки выглядит так:

# /etc/dahdi/system.conf
fxsks=1
fxsks=2
loadzone=us
defaultzone=us

Настройка каналов в Asterisk:

; /etc/asterisk/chan_dahdi.conf
[channels]
language=ru
context=internal
signalling=fxs_ks
channel => 1
channel => 2

Стандартный план набора (dialplan) я дополнил возможностью перехвата аудиопотока для частотного анализа в реальном времени.

Эксперименты с 2600 Гц и манипуляция сигнализацией

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

Для имитации этого процесса я подготовил простой генератор на Python:

# language: Python
import numpy as np
import sounddevice as sd

fs = 44100 duration = 5 frequency = 2600

t = np.linspace(0, duration, int(fs duration), False) tone = 0.5 np.sin(2 np.pi frequency * t)

sd.play(tone, fs) sd.wait()

Аудиовыход был сопряжен с FXO-портом через согласующий трансформатор. Это критично: без гальванической развязки высокое напряжение телефонной линии мгновенно выведет из строя звуковую карту.

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

Кстати, чистый тон 2600 Гц в телефонной трубке звучит довольно резко и специфично.

Спектральный анализ: шумы и неидеальность среды

Самое интересное начинается при переходе от прослушивания к математическому анализу сигналов.

Был написан инструмент для визуализации спектра:

# language: Python
import numpy as np
import matplotlib.pyplot as plt
from scipy.fft import fft

fs = 44100 samples = np.fromfile("capture.raw", dtype=np.int16) yf = fft(samples) xf = np.linspace(0, fs/2, len(yf)//2)

plt.plot(xf, np.abs(yf[:len(yf)//2])) plt.title("Spectrum Analysis") plt.xlabel("Frequency (Hz)") plt.ylabel("Amplitude") plt.show()

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

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

Воссоздание логики маршрутизации

Чтобы максимально приблизиться к историческому контексту, я реализовал программный модуль на C, реагирующий на последовательности тонов. Это упрощенная вариация алгоритма Герцеля (Goertzel algorithm):

// language: C

include <math.h>

define TARGET_FREQ 2600.0

define SAMPLE_RATE 8000

int detect_2600(short buffer, int len) { double real = 0.0, imag = 0.0; for (int i = 0; i < len; i++) { double angle = 2.0 M_PI TARGET_FREQ i / SAMPLE_RATE; real += buffer[i] cos(angle); imag -= buffer[i] sin(angle); } double magnitude = sqrt(realreal + imagimag); return magnitude > 1000000; }

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

Выводы и итоги

Зачем тратить время на сборку такого стенда?

  • Понимание физического уровня: Мы привыкли работать с абстракциями и API, забывая, что в основе всего лежит электричество и физика волн.

  • Эволюция безопасности: Становится ясно, почему появились протоколы SS7 и SIP, и какие именно «дыры» они были призваны закрыть.

  • Инженерный азарт: Это уникальный опыт — сидеть ночью с осциллографом, слушая щелчки декадно-шагового набора и вылавливая гармоники 2600 Гц.

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

 

Источник

Читайте также