Серьезная уязвимость в реализации TCP в системах Linux, выпущенных с 2012 года (версия 3.6 ядра Linux), открывает для хакеров возможность определить хост, использующий для коммуникации данный протокол, и перехватить передаваемый трафик.

Исследователи из Университета Калифорнии в Риверсайде совместно с исследовательской лабораторией ВС США представили на симпозиуме USENIX Security Symposium свою работу под названием «Off-Path TCP Exploits: Global Rate Limit Considered Dangerous» («Эксплойт уязвимости TCP по «побочным каналам»: опасность ограничения АСК в TCP»), в которой объясняют природу уязвимости и способы ее устранения.

Патчи уязвимости разработаны для текущей версии ядра Linux, сообщил Цзи Юнь Киан (Zhiyun Qian), младший научный сотрудник в области компьютерных наук и консультант проекта. Соавторы отчета — Юи Цао (Yue Cao), Цзи Юнь Киян (Zhiyun Qian), Чон Чжи Ван (Zhongjie Wang), Тван Дао (Tuan Dao), Шрикант В. Кришнамурти (Srikanth V. Krishnamurthy) и Лиза М. Марвел (Lisa M. Marvel) — также работали над патчем для хостов клиента и сервера; решить проблему можно, существенно повысив номер ожидаемой последовательности (ACK), что усложняет эксплуатацию бреши.

Для эксплуатации уязвимости хакерам необязательно внедряться в поток трафика (то есть занимать позицию «человек посередине»), действий со стороны жертвы также не требуется.

«Уникальный аспект продемонстрированной нами атаки — чрезвычайно низкие требования к условиям, достаточным для эксплуатации, — заявил Киан. — Атаку может по большому счету провести любой человек — при условии, что его компьютер подключен к целевой сети, в которой возможен спуфинг IP-адресов. Единственное, что нужно в арсенале, — это пара IP-адресов (жертва — клиент и жертва — сервер), а достать их вполне просто».

Уязвимая реализация TCP (CVE-2016-5696) используется в неизвестном количестве устройств под Linux, в том числе во встроенных компьютерах, мобильных телефонах и других системах. Исследователи заявили, что на проведение атаки понадобится не более минуты; попытки эксплуатации завершились успехом в 88–97% случаев.

«В общем, уязвимость позволяет атакующему, использующему небольшой дефект в TCP («побочный канал»), выявить, какие из двух произвольных хостов сообщаются по TCP, — пишут исследователи. — Если такая связь обнаружена, хакер может выявить последовательность ACK в TCP с обоих концов соединения; это, в свою очередь, дает хакеру возможность прервать соединение и внедрить произвольные данные в трафик».

Подобная атака может прервать или ухудшить передачу зашифрованного трафика (в том числе в сети Tor).

Исследовательская работа подвергает сомнению считавшиеся ранее справедливыми выводы о том, что хакер не сможет легко определить, сообщаются ли две точки сети по TCP, путем перебора уникальных номеров последовательности, если только не займет позицию «человек посередине», то есть не может перехватывать или модифицировать трафик.

Атака по «побочным каналам» позволяет определить, используют ли атакуемые хосты TCP-соединение, а затем выяснить номера портов. Метод дает возможность выявить последовательность номеров TCP, а затем внедрить эксплойт или прервать передачу трафика.

«Мы хотим подчеркнуть, что подобная атака возможна по «побочным каналам», без использования MitM-позиции и заражения клиента или сервера вредоносным кодом, — пишут исследователи. — Это может иметь серьезные последствия для безопасности и приватности в масштабе всего Интернета».

По словам авторов исследования, проблема связана с низким лимитом АСК в Linux (100 в секунду), что делает возможным быстрый подбор номера сессии, передаваемого в пакете.

Если выразиться более простыми словами, хакер может послать на сервер SYN-пакет с поддельным IP-адресом на IP-адрес клиента, подставив предположительный номер сессии, и 100 SYN-пакетами со своего IP-адреса. Если он получает в ответ 99 АСК, значит, 1 ACK был успешно отправлен клиенту, и номер сессии угадан. Таким образом, можно относительно быстро подобрать четырехзначный номер сессии и выдать себя за клиента на уровне TCP, чтобы затем отправить от его имени данные на сервер или прервать сессию, отправив тот же SYN.

Категории: Главное, Уязвимости