Схема по материалу: Как я выявляю SIP-фрод и аномальные направления вызовов по обезличенным агрегатам CDR
Схема основана на материале «Как я выявляю SIP-фрод и аномальные направления вызовов по обезличенным агрегатам CDR» и его сигналах. Спокойный взгляд на ритм звонков помогает вовремя заметить перемену.

Начинаю с симптома и ограничиваю силу вывода

Я, Семёнов Евгений Сергеевич, технический директор IT Fresh, начинаю не с ярлыка «фрод», а с наблюдаемого изменения ритма исходящей связи. Это может быть рост числа попыток, появление ранее редкого класса направления, сдвиг распределения длительности, необычное время активности или приближение занятости каналов к согласованной границе. Я записываю, какое именно агрегированное измерение изменилось, в каком временном окне, относительно какой базовой линии и насколько свежи входные данные. Затем формулирую сигнал как повод для проверки. Аномалия не доказывает злоупотребление: похожую картину создаёт разрешённая кампания, сезонный поток, перенос трафика на другой маршрут, отказ провайдера или ошибка локальной агрегации. Поэтому событие Zabbix сообщает о расхождении с ожидаемым профилем, но не называет неизвестного виновного и не утверждает установленный факт. До независимого подтверждения ответственным владельцем я сохраняю нейтральный статус расследования. Такой язык важен не только для точности уведомления: он не подталкивает дежурного к поспешной блокировке работающей телефонии и удерживает внимание на проверяемых признаках.

Развожу регистрацию, здоровье транка и фактические вызовы

Состояние SIP-регистрации и здоровье транка я вывожу отдельной дорожкой. Отказ регистрации означает, что определённый механизм подключения не подтвердил готовность; он не показывает, были ли исходящие вызовы, кому они предназначались и почему возникли. Успешная регистрация, в свою очередь, не означает безопасность активности. Транк может оставаться технически доступным во время необычного потока, а всплеск неуспешных попыток может возникнуть при исправной регистрации из-за правила набора, ответа сети или поведения вызывающей стороны. Я также не склеиваю в одну тревогу отказ регистрации, рост failed calls, увеличение незнакомого класса направления, резкий сдвиг времени или диапазонов длительности и ограничение доступных каналов. Для каждого симптома нужны собственные различающие признаки и отдельная граница вывода. Сопоставление на общей шкале времени полезно, но совпадение не превращает техническое состояние в причину. Если регистрация пропала после всплеска, это ещё не устанавливает причинную связь; если она стабильна, это не снимает вопрос о необычных исходящих агрегатах. Такой разбор позволяет обсуждать доступность и риск без опасного смешения понятий.

Строю минимальный и заранее согласованный набор агрегатов

В Zabbix поступают не исходные CDR или CEL, а результат локальной подготовки. Владелец заранее утверждает временные окна и допустимые измерения. Я использую количество попыток, количество ответов, интенсивность, диапазоны длительности, классы исходов и состояние одновременных каналов. Категорию происхождения, класс направления или группу стран добавляю лишь тогда, когда владелец сам определил их как неидентифицирующие и действительно нужные для решения. Транк и маршрут представлены псевдонимизированным классом, который не раскрывает имя, адрес или способ подключения. В агрегатах нет номера вызывающей или вызываемой стороны, имени, содержимого разговора, записи, отдельного идентификатора вызова либо параметров SIP-доступа. Даже редкую комбинацию измерений оцениваю на риск обратного выделения и при необходимости объединяю в более широкий класс. Исходные CDR и CEL остаются локально под контролем владельца. Предварительная обработка выполняется до передачи данных, а Zabbix хранит только утверждённые числовые ряды и технический статус подготовки. Это не просто сокращение объёма: такая граница делает назначение мониторинга понятным и предотвращает превращение диагностической системы в копию телефонной истории.

Сравниваю окна только в правильном временном контексте

Необычное время активности имеет смысл только при согласованных часах. Я фиксирую часовой пояс источника, правило формирования окна и момент завершения агрегации. Переходы календарного режима, задержка выгрузки и несовпадение часов способны сдвинуть значения между соседними корзинами. Поэтому текущий интервал сравниваю с базовой линией того же типа: рабочее время с рабочим, выходной режим с выходным, окно обслуживания с аналогичным контекстом. Базовая линия не является вечной нормой. Изменение маршрутизации, запуск разрешённой кампании или новый режим работы должно попасть в журнал контекста и затем осознанно изменить ожидания. Я не стираю прежний профиль сразу: временно показываю расхождение и пометку о согласованном изменении, чтобы увидеть переход. Отдельно проверяю полноту окна. Незавершённая корзина почти всегда выглядит меньше завершённой, а запоздавшие события могут исправить её позже. Нулевая активность допустима только при успешной подготовке полного интервала. Ошибка, устаревшее значение и ожидание закрытия окна получают самостоятельные состояния. Это защищает как от ложной тревоги, так и от ложного зелёного результата.

Различаю направления, исходы, длительность и каналы

Один общий счётчик вызовов слишком груб для расследования, поэтому я читаю несколько агрегированных проекций рядом. Рост незнакомого класса направления при обычном общем объёме отличается от общего всплеска во всех классах. Увеличение failed calls без роста отвеченных вызовов может указывать на ошибку маршрута, отказ внешней стороны, неверную классификацию либо повторные попытки, но само по себе не доказывает злой умысел. Сдвиг к коротким диапазонам длительности имеет иной смысл, чем увеличение продолжительных соединений, и оба признака требуют контекста. Занятость каналов показывает влияние на доступность: приближение к пределу может сопровождать необычный поток, однако ограничение каналов также возникает при правомерной нагрузке или изменённой ёмкости. Я смотрю на согласованность признаков: появился ли новый класс, изменилась ли интенсивность, как распределились исходы, что произошло с длительностью и одновременными каналами. При этом не пытаюсь восстановить отдельный звонок по единому агрегату. Если для вывода будто бы требуется персональная детализация, я останавливаюсь на границе мониторинга и передаю владельцу нейтральный запрос на независимую проверку в его защищённом контуре.

Отвергаю правомерные и технические объяснения до эскалации

После появления устойчивого сигнала я последовательно проверяю альтернативы. Сначала уточняю у владельца, не было ли разрешённой кампании, сезонного изменения или плановой работы. Затем сверяю изменение маршрутизации и классификатора: новый класс мог возникнуть из-за переименования правила, а не из-за нового назначения трафика. Проверяю здоровье подготовки агрегатов, полноту окон и свежесть базовой линии. Отдельно смотрю на доступность провайдера и распределение классов исходов, потому что внешний сбой часто порождает множество повторных неуспешных попыток. Технический фон регистрации и транка использую для различения, не выдавая его за доказательство безопасности. Если объяснение согласуется со временем, затронутыми классами и исходами, я документирую, что именно оно объясняет и что остаётся неизвестным. Если альтернативы не сходятся, сигнал повышает приоритет проверки, но всё равно не становится установленным фродом. Ответственный владелец независимо оценивает угрозу по своим разрешённым процедурам. Мониторинг передаёт только агрегированную временную линию, состояние качества данных и перечень проверенных гипотез.

Подтверждаю наблюдение только чтением

Для подтверждения я беру несколько завершённых окон до сигнала, само окно и последующие значения. Проверяю единый часовой пояс, версию правила агрегации, свежесть источника и отсутствие разрыва доставки. Затем сравниваю затронутый псевдонимизированный класс с соседними разрешёнными классами и общей нагрузкой. Важно увидеть, локален ли сдвиг для одного маршрута, относится ли он ко всем исходящим потокам или совпадает лишь с ошибкой подготовки. Я сопоставляю количества, интенсивность, диапазоны длительности, классы исходов и занятость каналов, не запрашивая исходные записи. Повторяемость в нескольких окнах усиливает достоверность наблюдаемого паттерна, но не доказывает его природу. Однократный пик может остаться значимым для доступности, однако требует особенно осторожной формулировки. В итоговой заметке раздельно перечисляю факт, возможные объяснения, отвергнутые альтернативы, неизвестные обстоятельства и границу данных. Read-only подтверждение не включает пробный звонок, изменение маршрута, перерегистрацию, перезапуск станции или правку межсетевого экрана. Если минимальных агрегатов недостаточно, мониторинг не расширяет доступ самовольно: необходимость иной проверки решает владелец.

Проверяю логику на изолированном контексте

Контролируемую проверку провожу только на изолированной телефонной станции, в выделенном тестовом контексте либо воспроизведением синтетических агрегированных записей. До старта фиксирую исходное состояние, ожидаемый сигнал и условия немедленной остановки. Меняю одну обратимую переменную: например, величину счётчика одного синтетического класса в одном закрытом окне. Проверяю, что нужный зависимый показатель изменился, соседние классы остались прежними, а состояние ошибки не превратилось в ноль. После возврата входа к исходному значению событие должно закрыться по задуманному правилу. Остановка обязательна при попадании тестовых данных в рабочую историю, затрагивании живых маршрутов, неожиданном изменении нескольких рядов или потере признака свежести. Я не создаю живые вызовы, не блокирую маршруты, не меняю учётные данные и не касаюсь действующего плана набора. Тест не должен проверять реакцию реальных людей или внешней сети. Его цель уже: доказать корректность агрегации, предобработки, порога, зависимостей и уведомления в безопасной среде.

Оставляю воздействие владельцу и сохраняю обратимость

Мониторинг не должен автоматически блокировать SIP account, trunk, outbound route или dialplan. Он также не перезапускает PBX и не меняет firewall. Даже сильное сочетание признаков остаётся диагностическим сигналом, пока ответственный владелец независимо не подтвердил угрозу. При подтверждении только владелец выполняет отдельное согласованное действие по своей процедуре. Я со стороны мониторинга фиксирую агрегированное состояние до и после, отмечаю время решения и сохраняю минимально необходимый объём на утверждённый срок. Если действие изменило маршрутизацию или ёмкость, базовую линию не переписываю молча: сначала показываю переход и проверяю, что сбор остался сопоставимым. Откат моей части означает отключение только добавленных элементов, правил предобработки, событий и уведомлений, возврат прежних интервалов и срока хранения, затем удаление временного read-only доступа и секрета по согласованию. Внешнее защитное действие откатывает его владелец по отдельному плану. Если хотите обсудить приватный мониторинг телефонии без передачи детализации вызовов, свяжитесь с IT Fresh: https://itfresh.ru/ — описание подхода, https://t.me/ITfresh_Boss — прямой диалог, tel:+79037296241 — телефон для связи.

Сигналы, которые сопоставляю

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

Отвергнутые альтернативы

  • Объявить фродом первый всплеск незнакомого класса направленияТакой профиль может объясняться правомерной кампанией, сезонным потоком, новым правилом маршрутизации или изменением классификатора. Ответственный владелец должен независимо подтвердить угрозу.
  • Считать успешную SIP-регистрацию доказательством безопасности исходящих вызововРегистрация описывает доступность механизма подключения, но не подтверждает происхождение, назначение или правомерность уже совершённых попыток связи.
  • Блокировать транк или маршрут автоматически по порогуЛожная классификация способна остановить законную связь. Система наблюдения должна эскалировать сигнал и сохранять контекст, а воздействие остаётся отдельным решением владельца.
  • Передавать сырые записи ради более подробной диагностикиОтдельные записи несут избыточные идентификаторы и детали. Для описанной задачи достаточно локально подготовленных агрегатов с утверждёнными измерениями.
  • Приравнять отсутствие новых значений к нулевой активностиОшибка подготовки, задержка доставки и реальный ноль имеют разный смысл. Их смешение создаёт ложное успокоение и ломает сравнение с базовой линией.

Конфигурация и сбор

Выделенному сборщику разрешено только чтение локально подготовленного набора утверждённых агрегатов. Исходные CDR и CEL остаются в контуре владельца и обрабатываются до Zabbix. Номера, имена, записи разговоров, отдельные идентификаторы, адреса, URI и параметры SIP-доступа не извлекаются. Секрет read-only подключения хранится защищённо, не включается в ключи элементов, значения, журналы, события и уведомления. Ошибка, устаревание и неполное окно передаются отдельно от достоверного нуля.

  • Согласовать часовой пояс, границы окон, допустимые категории и минимальный срок хранения агрегатов.
  • Оставить исходные CDR и CEL локально; до передачи удалить идентифицирующие поля и сформировать только утверждённые итоговые счётчики, интенсивности и диапазоны.
  • Псевдонимизировать классы транков и маршрутов; category происхождения, class направления или country-group применять лишь при явном определении владельцем как неидентифицирующих.
  • Передавать одним мастер-набором значения окна, версию агрегации, время завершения и статус качества, затем разбирать разрешённые показатели зависимыми элементами.
  • Хранить ошибки подготовки, задержку, неполное окно и ноль раздельно; контролировать свежесть независимо от величины активности.
  • Сравнивать с базовой линией только сопоставимые окна и выводить обслуживание, кампанию или изменение маршрутизации как подтверждённый контекст.
  • Ограничить уведомление обезличенной временной линией и не запускать из него команды изменения телефонной станции или сети.

Контролируемая проверка и свидетельство

Проверка разрешена только на isolated PBX, в отдельном test context или как replay of synthetic aggregated records. До неё фиксируются исходные значения, одна обратимая переменная, ожидаемый результат и stop conditions. Допустимо изменить только счётчик синтетического класса в закрытом окне и затем вернуть его назад. Тест прекращается при попадании в рабочую историю, влиянии на соседние показатели, потере свежести или любом признаке воздействия на живую телефонию. Live call generation, blocked routes и credential changes запрещены; также нельзя менять действующий план набора, регистрацию, транк, межсетевой экран или перезапускать станцию.

Фрагмент рабочего регламента

  • Зафиксировать симптом, временное окно, часовой пояс, свежесть и затронутый обезличенный класс без утверждения о фроде.
  • Проверить завершённость окна, статус локальной агрегации и версию правила; ошибку и задержку не заменять нулём.
  • Сопоставить количества, интенсивность, диапазоны длительности, классы исходов и занятость каналов с подходящей базовой линией.
  • Отдельно проверить регистрацию и здоровье транка, не приравнивая их ни к факту вызовов, ни к безопасности активности.
  • Уточнить подтверждённый контекст обслуживания, кампании, сезонного потока, изменения маршрутизации и внешнего сбоя.
  • Описать правомерные и технические альтернативы, область неопределённости и повторяемость сигнала в соседних завершённых окнах.
  • Передать владельцу агрегированное наблюдение для независимого подтверждения; не выполнять блокировку или изменение конфигурации.

Откат

Если пилот мониторинга прекращается, я отключаю только добавленные элементы, зависимые показатели, правила предобработки, события и уведомления, возвращаю прежние интервалы и срок хранения. Временный минимальный read-only доступ и его секрет удаляются после подтверждения владельца. Синтетические данные тестового контекста исключаются из рабочей истории, а локальная подготовка возвращается к сохранённой исходной схеме. Любое отдельное защитное действие на телефонной станции или сети откатывает ответственный владелец по собственному согласованному плану. Исходные CDR и CEL не копируются для отката; разрешённые агрегаты удаляются по утверждённому сроку.

Ограничения вывода

Подход видит отклонения только в пределах утверждённых агрегатов, окон и качества базовой линии. Он не устанавливает личность или намерение, не восстанавливает отдельный вызов и не обеспечивает полного обнаружения каждого злоупотребления. Новый законный профиль может выглядеть необычно, а медленное изменение — оставаться внутри ожидаемого диапазона. Ошибка классификации, задержка подготовки, изменение часового пояса и неполный контекст влияют на вывод. Окончательное решение о подтверждённой угрозе и любом воздействии принимает ответственный владелец вне автоматической логики мониторинга.

Источники

  1. Asterisk Documentation: CDR Specification
  2. Asterisk Documentation: CEL Specification
  3. Zabbix documentation: Item value preprocessing
  4. Zabbix documentation: Dependent items