логотип

[CSGO] Фикс Уязвимости.

Фикс уязвимости с открытым исходным кодом!
01.11.2026 в 12:28
4
статус Keks423 01.11.2026 в 12:28#1
Фикс уязвимости с открытым исходным кодом!\r\n\r\n\r\nРасширение против известного инструмента «CSGO Server Lagger», который валит сервер флудом\r\n\r\nнулевых пакетов по TCP на игровой порт.\r\n\r\n\r\nПроблема\r\n\r\nЛанггер не говорит на протоколе Source. Он открывает обычное TCP-соединение на игровой порт\r\n\r\nи отправляет 4096 нулевых байт каждые 15 мс (~273 КБ/с на сокет). srcds держит на игровом порту\r\n\r\nTCP-листенер, принимает такие соединения и молча разбирает мусор: RSS растёт примерно на\r\n\r\n0.5 МБ/с на соединение, и около 0.1 с CPU на каждый мегабайт принятых данных.\r\n\r\n24 соединения — это уже 83% ядра и рост A2S RTT с 0.6 мс до 116 мс, 48 — упор в единственный\r\n\r\nсетевой поток.\r\n\r\n\r\nКак работает\r\n\r\n1. Находит TCP-листенер игрового порта в процессе сервера и подменяет его через dup2() на\r\n\r\n неблокирующий листенер 127.0.0.1:. Старый сокет уничтожается: игровой порт\r\n\r\n перестаёт слушать TCP, ядро отвечает на SYN пакетом RST, атакующий немедленно получает\r\n\r\n Connection refused и не передаёт ни байта. Движок при этом не получает ни данных, ни ошибок.\r\n\r\n Подмена неблокирующая намеренно: блокирующий accept() усыпляет сокетный поток движка вместе\r\n\r\n с его UDP-частью, и сервер перестаёт отвечать на A2S.\r\n\r\n2. Раз в секунду проверяет, не открыл ли движок листенер заново, и при необходимости снова\r\n\r\n уводит его на loopback. Окно меньше секунды.\r\n\r\n3. Дополнительно перехватывает accept/accept4 через GOT-слоты загруженных модулей (обе таблицы\r\n\r\n релокаций: .rel.plt и .rel.dyn, поздно подгружаемые модули подхватываются ресканом).\r\n\r\n Честно: на движке CS:GO этот хук флуд не перехватывает — движок принимает соединения путём,\r\n\r\n который не идёт через патченные слоты. Всю защиту держит пункт 1, хук оставлен страховкой.\r\n\r\n4. Обнаружение атаки: соединение отшибает ядро, поэтому событий «на подключение» нет и раз в\r\n\r\n 2 секунды читается счётчик Tcp: OutRsts (ответы RST = отказы в соединении). Всплеск — атака,\r\n\r\n в консоль пишется темп и суммарное число отказов.\r\n\r\n\r\nЧто не затрагивается\r\n\r\nUDP не трогается вообще: игра, A2S, rcon, Steam-сеть работают как обычно. Исходящие TCP-соединения\r\n\r\nсервера (Steam, Game Coordinator, HTTP из плагинов) тоже работают — на замерах при активной защите\r\n\r\nсервер держит установленное исходящее TCP к Steam.\r\n\r\n[CODE]\r\n\r\nЗамеры (локальный srcds, оба варианта ланггера)\r\n\r\n\r\n без расширения с anti-lagger\r\n\r\n\r\n залито атакующим 4.3–5.4 МБ 0 байт\r\n\r\n\r\n установлено соединений 1 и больше 0 (Connection refused)\r\n\r\n\r\n CPU сервера за прогон 1.2–2.4 с 0 с\r\n\r\n\r\n A2S по UDP 130 байт 130 байт\r\n\r\n\r\n TCP-листенер на порту есть нет\r\n\r\n\r\n строки Socket ProcessAccept Error — 0[/CODE]\r\n\r\n\r\nК\r\n\r\n[CODE]онсоль\r\n\r\n\r\n[anti-lagger] anti-lagger starting: pid 4242, built against extension API 8\r\n\r\n\r\n[anti-lagger] TCP listener on port 27015 retired (fd 27): port is no longer listening, SYNs get RST\r\n\r\n\r\n[anti-lagger] guard ACTIVE: 4 accept slot(s) in 3 module(s) of 40 loaded, 1 own TCP listener(s) closed\r\n\r\n\r\n[anti-lagger] !!! ATTACK DETECTED: 455 TCP handshakes refused in ~2s (~227/s) on the game port\r\n\r\n\r\n[anti-lagger] !!! attack ongoing: 1830 refused handshakes in ~2s (~915/s), total 4500\r\n\r\n\r\n[anti-lagger] attack stopped: 5 windows above threshold, 10 s, 7290 handshakes refused in total[/CODE]\r\n\r\n\r\nРаз в минуту печатается строка alive: ..., по ней видно, что защита жива.\r\n\r\nЛог-файл: addons/sourcemod/logs/anti-lagger.log\r\n\r\n\r\nОграничения\r\n\r\n* Закрывается любой входящий TCP-листенер процесса, включая резервный TCP-фолбэк Steam SDR.\r\n\r\n Клиенты в сетях, где UDP зарезан и нужен TCP-фолбэк, до сервера не дотянутся; обычный трафик\r\n\r\n игры и A2S идёт по UDP и не задет.\r\n\r\n* IP атакующих не логируются: соединение не доходит до сервера, в этом и смысл. Нужны IP —\r\n\r\n только лог на уровне системы (nft/iptables с log).\r\n\r\n* Сборка привязана к API SourceMod (собрано под 1.11, API 8) и требует glibc не старше 2.34.\r\n\r\n После обновления SourceMod расширение нужно пересобрать.\r\n\r\n* Это не DDoS-защита: от UDP-флуда и забивания канала не спасает.\r\n\r\nУстановка:\r\n 1. Скопировать в addons/sourcemod/extensions/ два файла:\r\n\r\n anti-lagger.ext.2.csgo.so\r\n\r\n anti-lagger.autoload (пустой файл, включает автозагрузку)\r\n\r\n\r\n2. Перезапустить сервер.\r\n\r\n\r\n3. Проверить: sm exts list — в списке должна быть строка anti-lagger.
аватарка
Сообщений: 118
Реакции: 42
Клиенты
Фикс уязвимости с открытым исходным кодом!


Расширение против известного инструмента «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.



Замеры (локальный 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



К

онсоль



[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-флуда и забивания канала не спасает.

Установка:
1. Скопировать в addons/sourcemod/extensions/ два файла:

anti-lagger.ext.2.csgo.so

anti-lagger.autoload (пустой файл, включает автозагрузку)


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


3. Проверить: sm exts list — в списке должна быть строка anti-lagger.
Ответить Цитата
статус Keks423 03.11.2026 в 23:26#2
Уязвимость актуальна и для Counter-Strike: Source\r\n\r\nТа же самая проблема воспроизводится и на серверах Counter-Strike: Source (srcds для CS:S). Движок точно так же держит TCP-листенер на игровом порту и молча разбирает мусорные нулевые пакеты от «CSGO Server Lagger»: RSS растёт, CPU нагружается, A2S RTT деградирует, а при достаточном числе соединений сервер упирается в единственный сетевой поток. Инструмент не говорит на протоколе Source — он просто открывает обычное TCP-соединение на игровой порт и льёт нулевые байты, и CS:S реагирует на это так же, как CS:GO.
аватарка
Сообщений: 118
Реакции: 42
Клиенты
Уязвимость актуальна и для Counter-Strike: Source

Та же самая проблема воспроизводится и на серверах Counter-Strike: Source (srcds для CS:S). Движок точно так же держит TCP-листенер на игровом порту и молча разбирает мусорные нулевые пакеты от «CSGO Server Lagger»: RSS растёт, CPU нагружается, A2S RTT деградирует, а при достаточном числе соединений сервер упирается в единственный сетевой поток. Инструмент не говорит на протоколе Source — он просто открывает обычное TCP-соединение на игровой порт и льёт нулевые байты, и CS:S реагирует на это так же, как CS:GO.
Ответить Цитата
статус goldennthree 04.11.2026 в 03:41#3
[b]Keks423[/b], Ну спасибо давно на це увагу звертав
аватарка
Сообщений: 9
Реакции: 1
Клиенты
Keks423, Ну спасибо давно на це увагу звертав
Ответить Цитата 1
статус Keks423 04.11.2026 в 18:52#4
[b]goldennthree[/b], Да не за что. К слову на кс хосте уже установлен фикс, который защищает от этой уязвимости. Однако не все юзают ксхост есть и другие хостинги, на которых подобная защита может отсутствовать. Поэтому проблема актуальна не для всех серверов, и многое зависит от используемого хостинга.
аватарка
Сообщений: 118
Реакции: 42
Клиенты
goldennthree, Да не за что. К слову на кс хосте уже установлен фикс, который защищает от этой уязвимости. Однако не все юзают ксхост есть и другие хостинги, на которых подобная защита может отсутствовать. Поэтому проблема актуальна не для всех серверов, и многое зависит от используемого хостинга.
Ответить Цитата
Информация
Войдите или зарегистрируйтесь для общения на форуме
Перетащите файлы или нажмите
Максимально 5 файлов. Максимальный размер 20 Мб.

Игровые сервера Дополнительные услуги Инфо Сообщество

android

application chrometelegramapiCSHOST.COM.UA 2012-2026 Хостинг игровых серверов