Resource icon

Extension [CS:GO] Anti-lagger защита от нулевых пакетов TCP флуда закрытие Уязвимости 2026-11-01

No permission to download
Supported Games
  1. Counter-Strike: GO
Resource was created using AI
  1. Yes, partly
Source Link
https://github.com/Alleyv2/Anti-lagger-for-CSGO
Фикс уязвимости с открытым исходным кодом!

Расширение против известного инструмента «CSGO Server Lagger», который валит сервер флудом
нулевых пакетов по TCP на игровой порт.

Проблема
Ланггер не говорит на протоколе Source. Он открывает обычное TCP-соединение на игровой порт
и отправляет 4096 нулевых байт каждые 15 мс (~273 КБ/с на сокет). srcds держит на игровом порту
TCP-листенер, принимает такие соединения и молча разбирает мусор: RSS растёт примерно на
0.5 МБ/с на соединение, и около 0.1 с CPU на каждый мегабайт принятых данных.
24 соединения — это уже 83% ядра и рост A2S RTT с 0.6 мс до 116 мс, 48 — упор в единственный
сетевой поток.

Как работает
1. Находит TCP-листенер игрового порта в процессе сервера и подменяет его через dup2() на
неблокирующий листенер 127.0.0.1:<случайный порт>. Старый сокет уничтожается: игровой порт
перестаёт слушать TCP, ядро отвечает на SYN пакетом RST, атакующий немедленно получает
Connection refused и не передаёт ни байта. Движок при этом не получает ни данных, ни ошибок.
Подмена неблокирующая намеренно: блокирующий accept() усыпляет сокетный поток движка вместе
с его UDP-частью, и сервер перестаёт отвечать на A2S.
2. Раз в секунду проверяет, не открыл ли движок листенер заново, и при необходимости снова
уводит его на loopback. Окно меньше секунды.
3. Дополнительно перехватывает accept/accept4 через GOT-слоты загруженных модулей (обе таблицы
релокаций: .rel.plt и .rel.dyn, поздно подгружаемые модули подхватываются ресканом).
Честно: на движке CS:GO этот хук флуд не перехватывает — движок принимает соединения путём,
который не идёт через патченные слоты. Всю защиту держит пункт 1, хук оставлен страховкой.
4. Обнаружение атаки: соединение отшибает ядро, поэтому событий «на подключение» нет и раз в
2 секунды читается счётчик Tcp: OutRsts (ответы RST = отказы в соединении). Всплеск — атака,
в консоль пишется темп и суммарное число отказов.

Что не затрагивается
UDP не трогается вообще: игра, A2S, rcon, Steam-сеть работают как обычно. Исходящие TCP-соединения
сервера (Steam, Game Coordinator, HTTP из плагинов) тоже работают — на замерах при активной защите
сервер держит установленное исходящее TCP к Steam.
Code:
Замеры (локальный srcds, оба варианта ланггера)

                              без расширения     с anti-lagger

  залито атакующим            4.3–5.4 МБ         0 байт

  установлено соединений      1 и больше         0 (Connection refused)

  CPU сервера за прогон       1.2–2.4 с          0 с

  A2S по UDP                  130 байт           130 байт

  TCP-листенер на порту       есть               нет

  строки Socket ProcessAccept Error  —            0

К
Code:
онсоль

[anti-lagger] anti-lagger starting: pid 4242, built against extension API 8

[anti-lagger] TCP listener on port 27015 retired (fd 27): port is no longer listening, SYNs get RST

[anti-lagger] guard ACTIVE: 4 accept slot(s) in 3 module(s) of 40 loaded, 1 own TCP listener(s) closed

[anti-lagger] !!! ATTACK DETECTED: 455 TCP handshakes refused in ~2s (~227/s) on the game port

[anti-lagger] !!! attack ongoing: 1830 refused handshakes in ~2s (~915/s), total 4500

[anti-lagger] attack stopped: 5 windows above threshold, 10 s, 7290 handshakes refused in total

Раз в минуту печатается строка alive: ..., по ней видно, что защита жива.
Лог-файл: addons/sourcemod/logs/anti-lagger.log

Ограничения
* Закрывается любой входящий TCP-листенер процесса, включая резервный TCP-фолбэк Steam SDR.
Клиенты в сетях, где UDP зарезан и нужен TCP-фолбэк, до сервера не дотянутся; обычный трафик
игры и A2S идёт по UDP и не задет.
* IP атакующих не логируются: соединение не доходит до сервера, в этом и смысл. Нужны IP —
только лог на уровне системы (nft/iptables с log).
* Сборка привязана к API SourceMod (собрано под 1.11, API 8) и требует glibc не старше 2.34.
После обновления SourceMod расширение нужно пересобрать.
* Это не DDoS-защита: от UDP-флуда и забивания канала не спасает.
Requirements
* Linux, srcds 32-bit (сборка только -m32)
* Metamod:Source
* SourceMod 1.11 (API расширений 8)
* glibc не старше 2.34 (Debian 11 / Ubuntu 20.04 и новее)
Variables
Конваров нет. Есть одна переменная окружения сервера:
ANTI_LAGGER_VERBOSE=1 — включает подробный вывод по каждому соединению, которое отбрасывает
перехват accept (по умолчанию такие строки печатаются не чаще раза в 2 секунды).
Управление — стандартными командами
Code:
SourceMod: sm exts load anti-lagger / sm exts unload anti-lagger.
Commands
Консольных команд нет.
Install
1. Скопировать в addons/sourcemod/extensions/ два файла:
anti-lagger.ext.2.csgo.so
anti-lagger.autoload (пустой файл, включает автозагрузку)

2. Перезапустить сервер.

3. Проверить: sm exts list — в списке должна быть строка anti-lagger.
Author
Alley
Downloads
2
Views
40
First release
Last update

Ratings

0.00 star(s) 0 ratings
Back
Top