Руслан Рахметов, Security Vision
Для реализации успешных кибератак злоумышленники непрерывно совершенствуют свои тактики, техники и процедуры, разрабатывают вредоносное ПО и ищут новые уязвимости. Однако некоторые типы современных атак осуществляются за счет небезопасных сетевых протоколов, которые были разработаны еще несколько десятков лет назад, когда о сетевой безопасности не задумывались. Одним из характерных примеров является сетевой протокол ARP, чьи особенности позволяют злоумышленникам выполнить атаку вида «ARP-спуфинг», которая является первым этапом реализации более серьезных MiTM-атак для перехвата учетных данных и подмены трафика даже в самых крупных корпоративных сетях. Атаке ARP spoofing и посвящена данная статья.
Для того, чтобы понимать, что такое атака ARP spoofing, для начала нужно объяснить, как работает протокол ARP. Протокол ARP (Address Resolution Protocol, протокол определения (разрешения) адресов) - это протокол канального уровня, который был описан в RFC 826 в 1982 году Дэвидом Пламмером (David C. Plummer), исследователем из Массачусетского технологического института. Протокол ARP позволяет определить MAC-адрес устройства по известному IP-адресу в рамках одного широковещательного домена (broadcast domain), т.е. одной подсети. В современных реалиях такой подсетью может являться группа устройств, подключенная к одному сетевому коммутатору (свитчу, switch) или роутеру (маршрутизатору), который обеспечивает выход подключенных устройств в интернет через шлюз (gateway). Для передачи данных в пределах одной подсети устройству-отправителю недостаточно знать только IP-адрес устройства-получателя - нужно знать его MAC-адрес, и именно для получения MAC-адреса хоста по его IP-адресу и используется протокол ARP. Данный протокол был разработан более 40 лет назад, когда наличие вредоносных устройств в компьютерных сетях казалось фантастикой и не учитывалось при моделировании угроз, поэтому в нём присутствуют определенные архитектурные особенности и уязвимости:
1. ARP - это протокол без контроля состояния (stateless), что позволяет атакующему осуществлять одностороннюю отправку ARP-сообщений жертве.
2. В протоколе ARP передающиеся данные не шифруются и не подписываются, что позволяет атакующему просматривать перехваченные ARP-сообщения и подделывать их.
3. В протоколе ARP не предусмотрена проверка подлинности сообщений и нет возможности достоверно установить устройство-отправитель ARP-сообщения.
4. На основе получаемых ARP-сообщений, которые могут быть подделаны атакующим, на устройстве формируется и кэшируется (временно сохраняется) APR-таблица, в которой сопоставлены IP-адреса и MAC-адреса других хостов, и на основании данных из этой таблицы сетевой трафик пересылается в пределах одной подсети.
5. Протокол ARP в соответствии со спецификацией допускает отправку и получение незапрошенных ARP-сообщений - так называемых Gratuitous ARP-оповещений (добровольных (самопроизвольных) оповещений ARP).
Все описанные особенности, а в особенности последний пункт, позволяют злоумышленнику реализовать атаку подмены ARP-сообщений (ARP-спуфинг, от англ. ARP spoofing), которая также называется "отравлением кэша ARP" (англ. ARP poisoning или ARP cache poisoning). Рассмотрим теперь, как реализуется подобная атака.
Для начала следует понять, как работает протокол ARP в нормальных условиях, без вредоносного воздействия атакующего:
1. Предположим, что пользователь A хочет отправить сообщение по сети пользователю B, при этом пользователь A знает только свой IP-адрес и IP-адрес хоста B (10.10.10.20). Хосту-отправителю A нужно получить MAC-адрес хоста-получателя B для того, чтобы сообщение было отправлено по сети. Для этого хост A отправляет широковещательный ARP-запрос, который содержит запрос MAC-адреса от хоста B с IP 10.10.10.20, а также IP-адрес запрашивающего информацию хоста A (10.10.10.10) и MAC-адрес хоста A (AA:AA:AA:AA:AA:AA). Запрос называется широковещательным, поскольку отправляется всем устройствам в пределах одной подсети, объединенной коммутатором. Такой запрос в качестве MAC-адреса назначения использует специальный широковещательный MAC-адрес FF:FF:FF:FF:FF:FF. Хост A вынужден делать такую "массовую рассылку" по всем устройствам в сети, поскольку пока не знает, куда именно отправлять запрос, и даже не знает, есть ли сейчас в сети хост B.
2. Все устройства в пределах одной подсети получают широковещательный ARP-запрос от хоста A, но отвечать будет только хост B, поскольку он видит, что в запросе содержится его IP-адрес 10.10.10.20 - значит, запрос предназначен ему.
3. Хост B отправляет ARP-ответ хосту A, в котором содержится запрошенный MAC-адрес хоста B (BB:BB:BB:BB:BB:BB), а также IP-адрес хоста B (10.10.10.20). При этом хост B отправляет ARP-ответ хосту A, используя в качестве MAC-адреса назначения переданный в исходном запросе MAC-адрес хоста A (AA:AA:AA:AA:AA:AA).
4. В результате, хост A получает информацию, что хост B с IP 10.10.10.20 имеет MAC-адрес BB:BB:BB:BB:BB:BB. Соответственно, у хоста B остаётся информация, что хост A с IP 10.10.10.10 имеет MAC-адрес AA:AA:AA:AA:AA:AA. Эти данные (сопоставление IP-адреса и MAC-адреса) записываются в APR-таблицы на каждом из хостов. Эти таблицы кэшируются на устройствах для того, чтобы в следующий раз не запрашивать ту же информацию повторно - формируется так называемый кэш ARP (англ. ARP cache). При этом срок хранения записей в ARP-таблицах для различных типов ОС составляет по умолчанию от 15 до 45 секунд (может быть изменено вручную), а для сетевых устройств срок хранения ARP-кэша может составлять несколько часов (например, 4 часа для устройств Cisco).
5. Пользователь A теперь может по сети отправлять сообщения пользователю B, а он - отвечать.
Механизм отправки самопроизвольных оповещений ARP (Gratuitous ARP), заложенный создателями протокола ARP, изначально предполагал решение следующих задач:
1. Обновление ARP-таблиц: в случае изменения своего IP-адреса устройство должно оповестить соседей по подсети о том, что теперь его MAC-адрес соответствует новому IP-адресу. Аналогичное оповещение отправляется и при смене MAC-адреса устройства.
2. Разрешение конфликта IP-адресов в одной подсети: если у нескольких устройств в сети появляется один и тот же IP-адрес, то отправленные ими ARP-оповещения, содержащие одинаковые IP-адреса, помогут выявить данный конфликт и принять меры. Такое может произойти, например, когда два пользователя вручную назначили себе одинаковые IP-адреса в настройках ОС - в зависимости от типа ОС алгоритм решения конфликта будет разный.
3. После перезагрузки устройства, после подключения хоста к локальной сети, при смене или включении сетевого адаптера в ОС также автоматически отправляются Gratuitous ARP-оповещения, которые позволяют устройствам в подсети заранее обновить свои ARP-таблицы.
4. Отправленное хостом Gratuitous ARP-оповещение позволит коммутатору перестроить свою таблицу сопоставлений сетевых портов и MAC-адресов в подсети.
Однако именно подобная механика позволяет атакующим реализовать атаки ARP spoofing, поскольку:
1. Любое устройство в сети может отправить Gratuitous ARP-оповещение.
2. В Gratuitous ARP-оповещении могут быть подделаны любые поля - в частности, вредоносный хост может проанонсировать новое сопоставление IP-адреса и MAC-адреса для любого устройства в сети.
3. Данные ARP-таблиц на всех устройствах в подсети изменятся сразу после получения подобного оповещения, даже если срок хранения закэшированных записей в ARP-таблицах еще не прошёл.
Рассмотрим приведенную выше иллюстрацию в случае, если началось вредоносное воздействие атакующего:
1. Атакующий на хосте C (IP 10.10.10.30, MAC: CC:CC:CC:CC:CC:CC) начинает рассылать поддельное Gratuitous ARP-оповещение о том, что IP-адресу 10.10.10.20 соответствует MAC-адрес CC:CC:CC:CC:CC:CC. При этом IP-адрес 10.10.10.20 по-прежнему присвоен хосту B, а MAC-адрес, указанный в оповещении, принадлежит сетевой карте вредоносного хоста C.
2. Адресатом подобного поддельного Gratuitous ARP-оповещения может быть любой хост в сети, но мы предположим, что цель атаки - это пользователь A на хосте A и пользователь B на хосте B.
3. Хост A, получив поддельное Gratuitous ARP-оповещение от вредоносного хоста C, перезапишет свою ARP-таблицу новыми данными, в соответствии с которыми IP-адресу настоящего хоста B (10.10.10.20) соответствует MAC-адрес вредоносного хоста C (CC:CC:CC:CC:CC:CC).
4. Когда пользователь A начнет по сети отправлять сообщения пользователю B, они будут перенаправлены на хост C, где атакующий сможет их прочитать или изменить, а затем отправить пользователю B так, как будто они были отправлены пользователем A.
5. Аналогично, хост B, получив поддельное Gratuitous ARP-оповещение от вредоносного хоста C, перезапишет свою ARP-таблицу новыми данными, а пользователь B начнет отправлять ответы пользователю A через «подслушивающий» хост C атакующего.
6. В наиболее распространенных вариантах этой атаки, встречающихся в реальных киберинцидентах даже в достаточно серьезных инфраструктурах, злоумышленники подменяют собой сетевой шлюз для того, чтобы перехватить весь трафик, идущий в соседние корпоративные подсети или в интернет. Например, если на иллюстрации хост B - это шлюз по умолчанию (default gateway) для хоста A, то атакующий сможет проксировать через себя весь интернет-трафик от пользователя A, при этом хост C будет выполнять роль шлюза (например, за счет второй сетевой карты, подключенной в интернет), а хост B при этом не будет получать от хоста A никакой информации.
Атака ARP-спуфинга (встречаются также названия ARP Spoofing, ARP Cache Poisoning) хорошо известна и описана в том числе в матрице MITRE ATT&CK. Метод ARP Spoofing можно применить и для организации DoS (атака отказа в обслуживании) в пределах подсети, но главная цель атакующих - перехват и подмена интернет-трафика корпоративных пользователей. ARP-спуфинг - это первый шаг для более серьёзной атаки Man-In-The-Middle, в рамках которой можно, например, реализовать атаки SMB Relay / NTLM Relay или постараться получить доступ к HTTPS-трафику (например, применяя технику SSL Stripping или отображая пользователю поддельный Captive-портал с инструкциями по установке сертификата, выпущенного атакующим для перехвата зашифрованного веб-трафика).
Отметим, что у протокола ARP есть следующие особенности:
1. Протокол ARP применяется только в сетях на базе IPv4, а в IPv6 используется протокол NDP (Neighbor Discovery Protocol).
2. Описанные особенности протокола ARP в полной мере характерны и для проводных, и для беспроводных Wi-Fi сетей. Единственное отличие в том, что для реализации ARP-спуфинга в беспроводной сети атакующий должен сначала к ней подключиться, т.е. узнать или подобрать пароль (доступ к проводным сетям, как правило, более тривиален). При этом если в беспроводной сети настроен механизм изоляции точки доступа (Access Point Isolation, AP Isolation), то все коммуникации между подключенными к одной сети устройствами будут запрещены, соответственно, атака методом ARP-спуфинга не будет возможна.
3. Для работы с протоколом ARP в большинстве современных ОС есть встроенная утилита "arp".
Для реализации атак методом ARP-спуфинга существует целый ряд инструментов, включая такие, как Cain and Abel, Ettercap, Intercepter-NG, arpspoof (из состава Kali Linux) и ряд других. Для защиты можно использовать следующие методы:
1. Простейшей защитой от данного типа атак может стать создание статических записей в ARP-таблицах на хостах (например, жестко прописать сопоставление IP-адреса шлюза его MAC-адресу).
2. На сетевых устройствах следует использовать механизм Port Security и/или применять аутентификацию устройств на канальном уровне с помощью технологии Dot1x (IEEE 802.1x) - это поможет ограничить доступ посторонних устройств в сеть.
3. Для защиты беспроводных Wi-Fi сетей следует использовать оборудование с поддержкой современного стандарта безопасности WPA3, применять технологию EAP для аутентификации устройств по сертификатам при подключении к беспроводной сети, использовать механизм изоляции точки доступа (AP Isolation) и фильтрацию MAC-адресов подключающихся к беспроводной сети устройств.
4. На различных типах сетевого оборудования могут присутствовать встроенные способы выявления и защиты от ARP-спуфинга, например, за счет создания правил ARP-based ACL или включения технологии Dynamic ARP Inspection.