|
|
[CSGO] Фикс Уязвимости.Фикс уязвимости с открытым исходным кодом! |
01.11.2026 в 12:28 4 |
| Keks423 | 01.11.2026 в 12:28#1 | ||
|
Сообщений: 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 |
|
Сообщений: 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 |
|
Сообщений: 9
Реакции: 1
Клиенты
|
Keks423, Ну спасибо давно на це увагу звертав
|
| Ответить Цитата 1 |
| Keks423 | 04.11.2026 в 18:52#4 |
|
Сообщений: 118
Реакции: 42
Клиенты
|
goldennthree, Да не за что. К слову на кс хосте уже установлен фикс, который защищает от этой уязвимости. Однако не все юзают ксхост есть и другие хостинги, на которых подобная защита может отсутствовать. Поэтому проблема актуальна не для всех серверов, и многое зависит от используемого хостинга.
|
| Ответить Цитата |