Ситуация... пятница, вечер, в паблик вываливается критикал уязвимость в ядре. Вендор (если он вообще жив) обещает патч к среде. А пока прод торчит голой жопой в интернеты и чтобы его закрыть - предстоит увлекательный квест.
Но на прошедшей конфе LSFMM+BPF 2026 инженеры из Cisco показали, как ломают эту практику. Они используют eBPF для мгновенного блокирования эксплойтов на тысячах устройств со своими кастомными ядрами (без единого даунтайма).
eBPF - это, по сути, виртуалка внутри ядра Linux, которая позволяет безопасно выполнять код прямо в Ring 0, не меняя исходники ядра и не подгружая стремные модули.
Когда Cisco обнаруживает уязвимость в функции ядра, они не идут пересобирать это ядро. Они пишут микро-программу на eBPF и цепляют ее хуком (через
kprobes или fentry) прямо на вход в уязвимую функцию. Дальше происходит магия:
🟢Хакер закидывает пейлоад, триггеря уязвимый системный вызов.
🟢Ядро пытается выполнить функцию, но первым делом управление перехватывает eBPF-программа.
🟢Программа мгновенно инспектирует переданные аргументы. Если аргументы легитимные, то она пропускает вызов дальше.
🟢Если аргументы содержат паттерн эксплойта, то eBPF использует хелпер
bpf_override_return(). Он принудительно завершает выполнение функции еще до того, как уязвимый код успеет отработать, и возвращает хакеру ошибку (вроде, -EINVAL или -EPERM).Всё, эксплойт помножен на ноль за микросекунды... сервис работает как ни в чем не бывало и можно спокойно ждать официального патча от вендора хоть до следующего месяца.
Но есть нюанс... такая схема работает только там, где есть куда прицепить хук. Если уязвимость зарыта глубоко внутри
inline функции или огромного макроса, который компилятор размазал по бинарнику, то eBPF будет не за что зацепиться (в таблице символов просто нет нужной точки входа). Из-за этого магия иногда рассеивается, а инженерам приходится вручную утыкивать ядро tracepoint-ами.Типичный 🥸 Сисадмин