
Бэкдор на уровне ядра iptables, который принимает все пакеты с установленным «битом зла» RFC 3514, обходя правила брандмауэра. Включает сборки в дереве исходников и вне дерева для Linux.
iptable_eviliptable_evil — это очень специфичный бэкдор для iptables, который позволяет пропускать все пакеты с установленным "зловредным битом" (evil bit), независимо от правил брандмауэра.
Первоначальная реализация находится в iptable_evil.c, который добавляет таблицу в iptables и требует изменения заголовка ядра для вставки места под неё.
Вторая реализация — это модифицированная версия основного модуля ip_tables и его зависимых компонентов, позволяющая пропускать все "зловредные" пакеты.
Я тестировал это на версии ядра Linux 5.8.0-48, но это должно быть применимо практически к любой версии ядра с полной реализацией iptables.
RFC3514, опубликованный 1 апреля 2003 года, определяет ранее неиспользуемый старший бит поля смещения фрагмента IP как флаг безопасности.
Для систем, соответствующих RFC, 1 в этой позиции бита указывает на зловредное намерение и приведет к блокировке пакета.
По умолчанию этот бит выключен, но его можно включить в вашем программном обеспечении, если вы собираете весь IP-пакет целиком (как это делают некоторые хакерские инструменты), или в ядре Linux с помощью этого патча (зеркало в этом репозитории здесь).
Когда пакет принимается ядром Linux, он обрабатывается iptables и либо отправляется в пользовательское пространство, либо отклоняется, либо изменяется в соответствии с настроенными правилами.
В частности, каждая таблица iptables использует функцию ipt_do_table в ip_tables.c для решения, принять ли данный пакет.
Я изменил её, чтобы автоматически принимать любой пакет с установленным "зловредным битом" и пропускать всю дальнейшую обработку.
Я также попытался добавить другую таблицу (iptable_evil.c), которая принимала бы все "зловредные" пакеты и передавала остальные стандартным таблицам для обработки, но я так и не разобрался, как передавать пакеты следующей таблице, и решил, что бэкдора в ipt_do_table достаточно в качестве доказательства концепции.
Мне нужно было выполнить и описать довольно крупный проект в области компьютерной безопасности для одного из моих курсов, и эта идея показалась мне классной. Вероятно, это больше работы, чем он ожидал от этого, но ¯\_(ツ)_/¯.
Таблица evil требует изменения заголовков ядра, поэтому для её установки необходимо запустить ядро, собранное из полного дерева исходников.
replace-existing в дерево исходников вашего ядра, перезаписывая существующие файлы.iptable_evil.c в linux-X.Y.Z/net/ipv4/netfilterip_tables.c в linux-X.Y.Z/net/ipv4/netfilteriptables -t filter -Liptables -t evil -L (вывод будет запутанным, но модуль загрузится)Это значительно проще и быстрее, но не поддерживает таблицу evil и помечает ядро как "испорченное" (tainted).
Должна быть возможность скопировать полученные файлы ko на другой компьютер с точно такой же версией ядра, но я этого не проверял.
makermmod iptable_*rmmod ip_tablesinsmod ip_tables.koinsmod iptable_filter.koЧтобы протестировать это, вам нужно либо пересобрать всё ядро с этим патчем, либо создать собственные пакеты с помощью такого инструмента, как Scapy.
Я выбрал первый вариант, потому что уже собирал ядро для таблицы evil.
На первом скриншоте я заблокировал весь трафик к этой ВМ в iptables, но я всё равно могу подключиться по SSH, потому что мои пакеты имеют установленный "зловредный бит", как показано на втором скриншоте.

При подключении к ВМ с бэкдором из ВМ, которая не устанавливает "зловредный бит", SSH-соединение в конечном итоге истечёт по таймауту.

Захваты пакетов SSH-соединений с бэкдором и без него находятся в папке docs/ в этом репозитории для ознакомления.
iptables_uwu от Бена Кокса (в основном для указания названий вещей для исследования): https://github.com/benjojo/iptables-uwuiptables и как добавлять цели и модули: https://inai.de/documents/Netfilter_Modules.pdf