Технологии безопасности

Сайт посвященный вопросам безопасности

Как WannaCry и подобные ему вирусы могут забраться за NAT (за домашний роутер)

(adsbygoogle = window.adsbygoogle || []).push({});

Задача зловреда — установить TCP-соединение с компьютером, расположенным за NAT. После этого (если пакеты передаются и в ту, и в другую сторону) зловред знает, что делать.

Пусть сеть устроена так:

Квартира 1: компьютер A с XP (потому что в XP все работают под админом), заражен, напрямую подключён к внутридомовой сети:

ip 10.0.2.56 netmask 255.255.255.0

Квартира 2: роутер B: на интерфейсе, который смотрит во внутридомовую сеть:

ip 10.0.2.83 netmask 255.255.255.0

на интерфейсе, который смотрит во внутриквартирную сеть:

ip 192.168.1.1 netmask 255.255.255.0

там же компьютер C с не важно какой виндой:

ip 192.168.1.2 netmask 255.255.255.0

Сценарий атаки:

1. Вирус на A сканирует 10.0.2.* и по наличию ответа на ARP понимает, что на 10.0.2.83 кто-то есть.

2. Вирус говорит (в linux-терминологии, понятно, что он под виндой, но поскольку он под админом, то он может сказать эквивалент):

route add -net 192.168.1.0 netmask 255.255.255.0 gw 10.0.2.83

3. Вирус отправляет SYN-пакет с 10.0.2.56:43892 на 192.168.1.2:445, он приходит на «внешний интерфейс» B.

4. B видит этот пакет, смотрит по своим NAT-правилам, ничего не находит, потому что там написано:

iptables -t nat -A POSTROUTING -o eth1 -s 192.168.1.0/24 -j MASQUERADE

… а у нас src_ip вне сети 192.168.1.0/24.

Поскольку у маршрутизатора /proc/sys/net/ipv4/ip_forward=1, то он отправляет пакет на C.

5. C видит этот пакет и отвечает SYN/ACK с 192.168.1.2:445 на 10.0.2.56:43892.

6. B видит, что пакет подходит под NAT-правило и меняет 192.168.1.2:445 на 10.0.2.83:42675 и отправляет дальше на 10.0.2.56:43892 (и заодно запоминает, что с этого момента, если адрес назначения будет 10.0.2.83:42675, то его теперь надо менять на 192.168.1.2:445).

7. A видит пакет, пришедший на порт 43892, но не с адреса 192.168.1.2:445, для соединения с которым был выбран локальный порт 43892, а с 10.0.2.83:42675. И вот здесь я не знаю, что A будет делать: либо передаст этот пакет процессу вируса, либо выбросит как испорченный.

Но я легко поверю, что если вирус поменяет на A системные библиотеки и ядро (он админ, ему можно, и перезагрузиться тоже никто не мешает), то он этот пакет с неправильным исходящим адресом таки себе получит.

Вопрос к знающим людям: насколько реальна такая атака? Насколько часто на настоящих домашних роутерах встречаются именно такие настройки nat (я подозреваю, что если просто написать iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE, без -s, то ничего не получится).

Disclaimer: я никого не призываю включать обновления от Microsoft в автоматическом режиме, я не утверждаю, что это безопаснее, что сам Microsoft не может прислать в обновлениях чего-то плохого. По моему личному мнению, намного безопаснее обоих возможностей (не ставить обновления и получать зловреды/ставить обновления и получать непонятно что от Microsoft) использовать Linux.