OpenVPN HMAC Firewall
2013-07-10 08:03 pmOpenVPN реализует интересную защиту от сканирования портов: они называют это HMAC Firewall. Суть этой опциональной фичи заключается в том, что сервер проверяет HMAC в каждом пакете, прежде чем этот пакет будет принят на обработку. HMAC вычисляется по содержимому пакета и pre-shared ключу между клиентом и сервером (который хранится в файле ta.key). Таким образом, не зная pre-shared ключа, невозможно даже определить достоверно, слушает ли OpenVPN-сервер данный порт или нет (при условии, что вы не используете TCP-порт для сервера и у вас sysctl-параметр net.inet.udp.blackhole равен 1).
Разумеется, одного только знания pre-shared ключа недостаточно для входа в VPN; далее в процессе установления соединения начинается сессия Диффи-Хеллмана, однако она уже посложнее в реализации (RSA, LZO, уйма симметричных шифров на выбор, защита от replay-атак с использованием генератора случайных чисел криптографического качества и т.п.) — так что там возможен и buffer overrun, и DoS-атака (в т.ч. и исчерпание памяти на сервере), и многое другое.
HMAC firewall просто пресекает все эти вещи на корню. Вычислить фиксированную хэш-функцию пару раз — для этого даже куча не нужна. Это вообще хороший пример того, как следует делать подобные вещи, а вот port knocking — контрпример.
Разумеется, одного только знания pre-shared ключа недостаточно для входа в VPN; далее в процессе установления соединения начинается сессия Диффи-Хеллмана, однако она уже посложнее в реализации (RSA, LZO, уйма симметричных шифров на выбор, защита от replay-атак с использованием генератора случайных чисел криптографического качества и т.п.) — так что там возможен и buffer overrun, и DoS-атака (в т.ч. и исчерпание памяти на сервере), и многое другое.
HMAC firewall просто пресекает все эти вещи на корню. Вычислить фиксированную хэш-функцию пару раз — для этого даже куча не нужна. Это вообще хороший пример того, как следует делать подобные вещи, а вот port knocking — контрпример.