Ошибка OSDP NAK 0x05: Отклонен повтор пакета (Sequence Number Replay)
Механизм защиты от повторов (Anti-Replay) в OSDP и код 0x05
Для предотвращения атак типа «Replay Attack» (когда злоумышленник записывает легитимный зашифрованный пакет разблокировки двери и посылает его повторно) протокол SIA OSDP использует двухуровневый механизм нумерации:
- 2-битный счетчик кадров (Sequence Number, SEQ): Расположен в битах 0–1 байта
CTRL(циклические значения 0, 1, 2, 3). - Криптографический счетчик сообщений (SQN / Crypto Sequence): 32-битный монотонно возрастающий счетчик внутри зашифрованного блока Secure Channel.
Если считыватель или контроллер получает пакет со значением счетчика SQN меньшим или равным уже обработанному в рамках текущей сессии, либо если нарушена базовая последовательность SEQ (например, после пакета с SEQ=1 сразу пришел SEQ=3 без признака переинициализации), устройство немедленно отвергает пакет с ответом NAK 0x05 (Cryptographic Sequence Number Replay Rejected).
Бизнес-риски
Контроллер СКУД фиксирует попытку взлома или физического вмешательства в линию связи. Происходит мгновенный разрыв сессии Secure Channel, дверь блокируется, а оператор службы безопасности получает сигнал тревоги Security Breach / Line Tamper.
Диагностика и устранение причин ошибки OSDP NAK 0x05
Сценарий 1: Диагностика дублирования пакетов из-за задержек и Retries
В большинстве штатных систем ошибка NAK 0x05 вызывается не хакерами, а багами сетевых шлюзов RS-485 to Ethernet (Serial Device Servers):
- Если преобразователь интерфейсов (Moxa, Tibbo, USR) накапливает пакеты в буфере и сбрасывает их пачкой (Nagle algorithm), контроллер отправляет повтор пакета по таймауту.
- Считыватель получает сначала оригинальный пакет, а затем задержанный повтор с тем же номером
SQNи генерирует NAK 0x05. - Решение: В настройках Serial Device Server включите режим Force Transmit (Packing length = 1 byte, Delimiter timeout = 2ms) и отключите буферизацию TCP (TCP_NODELAY).
Сценарий 2: Анализ счетчиков SEQ в логе анализатора шины
# Анализ дампов OSDP через Wireshark / TShark (с плагином OSDP)
tshark -i /dev/ttyUSB0 -d serial.baud:9600 -V -Y "osdp.nak.code == 0x05"
# Обратите внимание на поля:
# OSDP Control: Sequence Number (SEQ: 0x01 -> Expected: 0x02)
# OSDP Secure Channel: Message Sequence Counter (SQN received <= SQN current)Сценарий 3: Сброс и повторная синхронизация сессии контроллером
Проверьте прошивку контроллера СКУД. При получении ошибки NAK 0x05 ACU обязан сбросить счетчики SEQ/SQN в 0 и отправить команду начальной инициализации osdp_POLL с SEQ=0 (Sequence Zeroing) без шифрования перед возобновлением Secure Channel.
Типовые ошибки администраторов
- Параллельное подключение двух контроллеров к одной шине со считывателем: Оба мастера шлют опросы со своими независимыми счетчиками, что мгновенно вызывает постоянный шквал NAK 0x05.
- Использование конвертеров RS-485 с полудуплексным эхо (Local Echo On): Считыватель принимает свое собственное эхо-сообщение как входящий пакет с некорректной последовательностью.
Инженеры ITSTM настроят параметры сетевых шлюзов, исключат коллизии опроса и проведут аудит устойчивости СКУД к сетевым атакам.
Частые вопросы (FAQ)
Почему sequence number сбрасывается в 0 при каждом новом рукопожатии?
При отправке команды osdp_CHLNG / osdp_SCRYPT сессия Secure Channel создается заново, а 32-битный криптографический счетчик SQN обнуляется по обе стороны канала связи.
Является ли появление NAK 0x05 признаком реальной кибератаки?
В изолированной СКУД это чаще всего результат аппаратных сбоев (потеря питания считывателя на доли секунды, баги буферизации шлюзов). Однако в потенциально уязвимых местах это указывает на попытку Replay-атаки (replay attack).
Как счетчик SEQ в байте CTRL защищает от потери пакетов?
Счетчик принимает значения 0..3. Если контроллер отправил SEQ=1, а считыватель ответил SEQ=1, следующий пакет мастера обязан иметь SEQ=2. Любое выпадение номера фиксируется как потеря кадра.
Что делать, если считыватель зависает в состоянии NAK 0x05?
Необходимо выполнить цикл сброса питания считывателя (Power Cycle) через управляемый выход реле контроллера или перезапустить порт опроса.