Задача зловреда — установить 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.
Автор: atbuhw