Наши специалисты технической поддержки фиксируют самые разные запросы пользователей. Один из таких запросов оказался весьма интересным для анализа. Ситуация заключалась в обнаруженной нами вредоносной активности в системе пользователя, которая проявилась в технике DNS hijack. Она используется для перенаправления DNS-запросов пользователя на специальные DNS-серверы. Особенность ситуации заключалась в том, что вредоносное ПО использовало для операции hijack специальный метод, который скрывал от глаз пользователя вредоносную активность.
Таким образом, пользователь не мог видеть настройки DNS-серверов в GUI-интерфейсе сетевых настроек. Кроме этого, там также будет указано, что система использует DHCP-протокол для получения настроек. Нежелательное приложение, которые выполняет подобные операции в системе, называется DNS Unlocker.
Приложение DNS Unlocker устанавливает сетевые настройки системы жертвы таким образом, что они будут указывать на фиктивные адреса DNS-серверов. При посещении веб-браузером жертвы ресурса google-analytics.com, фальшивый DNS-сервер будет указывать на вредоносный адрес с внедренным туда содержимым JavaScript. Это делается для того, чтобы реклама, которая вставляется в веб-страницы DNS Unlocker, опиралась на Google Analytics. Как правило, пользователь, с установленным DNS Unlocker, увидит рекламные объявления с заметкой внизу веб-страницы с надписью «Ads by DNSUnlocker» (Рис. 1) или чем-то подобным во множестве других вариантов (Рис. 2).
Рис. 1. Внедренное в веб-страницу рекламное содержимое.
Рис. 2. Фишинговое сообщение для запугивания пользователя.
Вредоносное ПО, которое использует механизмы подмены адресов DNS в настройках Windows, не является новым, кроме этого, такие экземпляры даже не достойны подробного освещения. Однако, DNS Unlocker имеет в своем составе интересную функцию, которая выделяет его среди прочих аналогичных примеров. Она используется для скрытного изменения настроек DNS таким образом, что пользователь этого не заметит. Пользователь не сможет увидеть новые настройки TCP/IPv4 в панели управления, которые отвечают за поля статических DNS-записей. Как правило, при задании адреса DNS-сервера, его адрес должен быть отображен в списке настроек «Предпочитаемых DNS-серверов» при условии установленного флага «Использовать следующие адреса DNS-серверов». Кроме этого, пользователь может обратить внимание на настройку «Альтернативный DNS-сервер». При использовании протокола DHCP для получения адресов DNS (используется в большинстве конфигураций домашних и офисных окружений), активной является настройка «Получать адрес DNS-сервера автоматически».
Рис. 3. Сетевые настройки TCP/IPv4 с типичными настройками.
Особенность используемой DNS Unlocker техники заключается в том, что заданный им статический адрес DNS не отображается в списке сетевых настроек, кроме этого, там указано, что пользователь получает DNS-адреса автоматически. Команда ipconfig /all также укажет на использование DHCP, но она отобразит и статически установленные адреса DNS. При использовании инструмента ipconfig, тем не менее, невозможно установить для каких сетевых подключений используется DHCP, а для каких статические адреса. GUI-интерфейс сетевых настроек не отображает статическую часть и уверяет пользователя в использовании DHCP. Ниже мы ответим на вопрос, почему так происходит, т. е. что является причиной того, что статическая запись не отображается в GUI-интерфейсе сетевых настроек.
Рассмотрим раздел реестра, который отвечает за настройки сетевых интерфейсов.
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\
Этот раздел реестра фиксирует настройки сетевых интерфейсов, каждый из которых задается идентификатором GUID. Раздел настроек для каждого сетевого адаптера может содержать параметры DhcpNameServer и NameServer. Параметр NameServer представляет для нас интерес. Обычно, в случае задания настройки статического DNS-сервера, используются сетевые настройки панели управления (либо для этого привлекается команда netsh). При этом статические адреса серверов будут храниться в параметре реестра NameServer с символом «,» в качестве разделителя элементов значения.
192.168.1.21,192.168.1.22
Теперь рассмотрим случай, когда в качестве разделителя адресов в этом параметре используется пробел.
192.168.1.21 192.168.1.22
Это небольшое изменение позволяет скрыть от GUI-интерфейса сетевых настроек адреса используемых DNS-серверов, так как, на самом деле, один из них является основным, а второй дополнительным. Для пользователя данный факт означает получение рекламных объявлений, внедренных в посещаемые пользователем веб-сайты.
Поскольку Windows считает, что адреса первичных и вторичных DNS-серверов уже установлены, установка пользователем новых значений, всего лишь приведет к их добавлению в конец списка уже существующих там элементов, как это показано ниже.
192.168.1.21 192.168.1.22,208.67.222.123,208.67.220.123
Видно, что в качестве разделителя Windows использует символ «,», в то время как для первых элементов по-прежнему используется пробел.
Вопрос заключается в том, почему Windows разрешает такое поведение своего системного компонента. У нас нет достоверного ответа на этот вопрос. Наша гипотеза заключается в предположении, что параметр DhcpNameServer использует список с пробелом в качестве разделителей, а NameServer копирует его поведение. Кроме этого, как утверждает сама Microsoft на веб-сайте TechNet, в случае присутствия параметра NameServer, он имеет более высокий приоритет чем DhcpNameServer.
If the value of NameServer is valid, it takes precedence over the value of DhcpNameServer.
Источник: technet.microsoft.com/en-us/library/cc962470.aspx.
Так как значению параметра DhcpNameServer разрешено иметь символ пробела в качестве разделителя, то аналогичное может быть разрешено и для NameServer. Кроме этого, на ресурсе TechNet указывается, что символ пробела разрешен для разделения элементов значения параметра NameServer. В действительности, такое свойство параметра системного реестра не является стандартным и GUI-интерфейс панели управления не знает, как обрабатывать такое значение. Панель управления использует только символ запятой в качестве разделителя значений «Предпочитаемого» и «Альтернативного» DNS-серверов. Стоит отметить, что другие приложения Windows, которые работают с данным параметром реестра, нормально работают с пробелом в качестве разделителя. То же самое относится к значению параметра на вкладке «Расширенные настройки TCP/IP».
Хуже всего, что данную особенность используют нежелательные приложения для перенаправления DNS-запросов пользователя на нужные им ресурсы. Она используется в качестве метода DNS hijack и заставляет пользователя работать с подмененными DNS-серверами. Мы называемых их скрытыми, поскольку пользователь на сможет увидеть их в настройках сетевых подключений панели управления.
Теперь, когда мы разобрались с DNS hijack, посмотрим на другие области в GUI-интерфейсе сетевых настроек TCP/IPv4 панели управления. Нас будут интересовать окно расширенных настроек TCP/IP на вкладке DNS. Верхняя часть вкладки содержит список, который определяет порядок использования DNS-серверов и позволяет указать использование более двух IP-адресов в качестве них. Каждый адрес должен использовать свою отдельную строку. Теперь в том случае, когда DNS был перехвачен и скрыт, настройки TCP/IP будут выглядеть следующим образом.
Рис. 4. Вкладка с расширенными настройками DNS протокола TCP/IP, в котором используется вариант с пробелом в качестве разделителя.
Видно, что в настройках на скриншоте выше указаны два адреса, разделенные пробелом. В том случае, если попытаться нажать на кнопку «Добавить…», для добавления двух адресов, разделенных пробелом, система отобразит сообщение об ошибке с указанием неверного IP-адреса. В случае попытки добавить дополнительные адреса DNS-серверов к уже указанным скрытым, они будут добавлены в GUI-интерфейсе вкладки свойств TCP/IP как отдельные строки.
Рис. 5. Вручную установленные адреса DNS-серверов, когда перед этим уже были включены «скрытые» записи.
К счастью, пользователь может удалить вредоносные записи DNS на вкладке DNS на странице расширенных настроек TCP/IP.
Наши специалисты сообщили о данной проблеме Microsoft Security Response Center (MSRC) 10-го мая 2016 г. MSRC признал проблему, но не классифицировал его ее как уязвимость, поскольку модификация значения системного реестра требует прав администратора. Они направили данный вопрос другим командам разработчиков для рассмотрения исправления в будущих версиях.
Заключение
Отметим, что сама Windows может нормально работать со значением параметра NameServer, в котором вместо запятой в качестве разделителя используются пробелы. В свою очередь, нежелательные приложения могут использовать этот метод для сокрытия настроек DNS в системе. Он наблюдался в использовании DNS Unlocker начиная с декабря 2015 г. и работает на всех ОС Windows, начиная с Windows XP. Интересно отметить, что для метода DNS hijack в качестве разделителя может использоваться и точка с запятой, однако, мы не наблюдали использование такого варианта в других типах вредоносного или нежелательного ПО по состоянию на 31-е мая 2016 г.
Индикаторы компрометации
Описанная выше версия DNS Unlocker обнаруживается ESET как MSIL/Adware.CloudGuard.C. Она использует следующие IP-адреса для подмены DNS:
Следующие IP-адреса используются как HTTP-серверы для внедрения вредоносного содержимого JavaScript, которое отображает рекламу на веб-страницах.
Следующие образцы вредоносного ПО используют эту технику.
Таким образом, пользователь не мог видеть настройки DNS-серверов в GUI-интерфейсе сетевых настроек. Кроме этого, там также будет указано, что система использует DHCP-протокол для получения настроек. Нежелательное приложение, которые выполняет подобные операции в системе, называется DNS Unlocker.
Приложение DNS Unlocker устанавливает сетевые настройки системы жертвы таким образом, что они будут указывать на фиктивные адреса DNS-серверов. При посещении веб-браузером жертвы ресурса google-analytics.com, фальшивый DNS-сервер будет указывать на вредоносный адрес с внедренным туда содержимым JavaScript. Это делается для того, чтобы реклама, которая вставляется в веб-страницы DNS Unlocker, опиралась на Google Analytics. Как правило, пользователь, с установленным DNS Unlocker, увидит рекламные объявления с заметкой внизу веб-страницы с надписью «Ads by DNSUnlocker» (Рис. 1) или чем-то подобным во множестве других вариантов (Рис. 2).
Рис. 1. Внедренное в веб-страницу рекламное содержимое.
Рис. 2. Фишинговое сообщение для запугивания пользователя.
Вредоносное ПО, которое использует механизмы подмены адресов DNS в настройках Windows, не является новым, кроме этого, такие экземпляры даже не достойны подробного освещения. Однако, DNS Unlocker имеет в своем составе интересную функцию, которая выделяет его среди прочих аналогичных примеров. Она используется для скрытного изменения настроек DNS таким образом, что пользователь этого не заметит. Пользователь не сможет увидеть новые настройки TCP/IPv4 в панели управления, которые отвечают за поля статических DNS-записей. Как правило, при задании адреса DNS-сервера, его адрес должен быть отображен в списке настроек «Предпочитаемых DNS-серверов» при условии установленного флага «Использовать следующие адреса DNS-серверов». Кроме этого, пользователь может обратить внимание на настройку «Альтернативный DNS-сервер». При использовании протокола DHCP для получения адресов DNS (используется в большинстве конфигураций домашних и офисных окружений), активной является настройка «Получать адрес DNS-сервера автоматически».
Рис. 3. Сетевые настройки TCP/IPv4 с типичными настройками.
Особенность используемой DNS Unlocker техники заключается в том, что заданный им статический адрес DNS не отображается в списке сетевых настроек, кроме этого, там указано, что пользователь получает DNS-адреса автоматически. Команда ipconfig /all также укажет на использование DHCP, но она отобразит и статически установленные адреса DNS. При использовании инструмента ipconfig, тем не менее, невозможно установить для каких сетевых подключений используется DHCP, а для каких статические адреса. GUI-интерфейс сетевых настроек не отображает статическую часть и уверяет пользователя в использовании DHCP. Ниже мы ответим на вопрос, почему так происходит, т. е. что является причиной того, что статическая запись не отображается в GUI-интерфейсе сетевых настроек.
Рассмотрим раздел реестра, который отвечает за настройки сетевых интерфейсов.
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\
Этот раздел реестра фиксирует настройки сетевых интерфейсов, каждый из которых задается идентификатором GUID. Раздел настроек для каждого сетевого адаптера может содержать параметры DhcpNameServer и NameServer. Параметр NameServer представляет для нас интерес. Обычно, в случае задания настройки статического DNS-сервера, используются сетевые настройки панели управления (либо для этого привлекается команда netsh). При этом статические адреса серверов будут храниться в параметре реестра NameServer с символом «,» в качестве разделителя элементов значения.
192.168.1.21,192.168.1.22
Теперь рассмотрим случай, когда в качестве разделителя адресов в этом параметре используется пробел.
192.168.1.21 192.168.1.22
Это небольшое изменение позволяет скрыть от GUI-интерфейса сетевых настроек адреса используемых DNS-серверов, так как, на самом деле, один из них является основным, а второй дополнительным. Для пользователя данный факт означает получение рекламных объявлений, внедренных в посещаемые пользователем веб-сайты.
Поскольку Windows считает, что адреса первичных и вторичных DNS-серверов уже установлены, установка пользователем новых значений, всего лишь приведет к их добавлению в конец списка уже существующих там элементов, как это показано ниже.
192.168.1.21 192.168.1.22,208.67.222.123,208.67.220.123
Видно, что в качестве разделителя Windows использует символ «,», в то время как для первых элементов по-прежнему используется пробел.
Вопрос заключается в том, почему Windows разрешает такое поведение своего системного компонента. У нас нет достоверного ответа на этот вопрос. Наша гипотеза заключается в предположении, что параметр DhcpNameServer использует список с пробелом в качестве разделителей, а NameServer копирует его поведение. Кроме этого, как утверждает сама Microsoft на веб-сайте TechNet, в случае присутствия параметра NameServer, он имеет более высокий приоритет чем DhcpNameServer.
If the value of NameServer is valid, it takes precedence over the value of DhcpNameServer.
Источник: technet.microsoft.com/en-us/library/cc962470.aspx.
Так как значению параметра DhcpNameServer разрешено иметь символ пробела в качестве разделителя, то аналогичное может быть разрешено и для NameServer. Кроме этого, на ресурсе TechNet указывается, что символ пробела разрешен для разделения элементов значения параметра NameServer. В действительности, такое свойство параметра системного реестра не является стандартным и GUI-интерфейс панели управления не знает, как обрабатывать такое значение. Панель управления использует только символ запятой в качестве разделителя значений «Предпочитаемого» и «Альтернативного» DNS-серверов. Стоит отметить, что другие приложения Windows, которые работают с данным параметром реестра, нормально работают с пробелом в качестве разделителя. То же самое относится к значению параметра на вкладке «Расширенные настройки TCP/IP».
Хуже всего, что данную особенность используют нежелательные приложения для перенаправления DNS-запросов пользователя на нужные им ресурсы. Она используется в качестве метода DNS hijack и заставляет пользователя работать с подмененными DNS-серверами. Мы называемых их скрытыми, поскольку пользователь на сможет увидеть их в настройках сетевых подключений панели управления.
Теперь, когда мы разобрались с DNS hijack, посмотрим на другие области в GUI-интерфейсе сетевых настроек TCP/IPv4 панели управления. Нас будут интересовать окно расширенных настроек TCP/IP на вкладке DNS. Верхняя часть вкладки содержит список, который определяет порядок использования DNS-серверов и позволяет указать использование более двух IP-адресов в качестве них. Каждый адрес должен использовать свою отдельную строку. Теперь в том случае, когда DNS был перехвачен и скрыт, настройки TCP/IP будут выглядеть следующим образом.
Рис. 4. Вкладка с расширенными настройками DNS протокола TCP/IP, в котором используется вариант с пробелом в качестве разделителя.
Видно, что в настройках на скриншоте выше указаны два адреса, разделенные пробелом. В том случае, если попытаться нажать на кнопку «Добавить…», для добавления двух адресов, разделенных пробелом, система отобразит сообщение об ошибке с указанием неверного IP-адреса. В случае попытки добавить дополнительные адреса DNS-серверов к уже указанным скрытым, они будут добавлены в GUI-интерфейсе вкладки свойств TCP/IP как отдельные строки.
Рис. 5. Вручную установленные адреса DNS-серверов, когда перед этим уже были включены «скрытые» записи.
К счастью, пользователь может удалить вредоносные записи DNS на вкладке DNS на странице расширенных настроек TCP/IP.
Наши специалисты сообщили о данной проблеме Microsoft Security Response Center (MSRC) 10-го мая 2016 г. MSRC признал проблему, но не классифицировал его ее как уязвимость, поскольку модификация значения системного реестра требует прав администратора. Они направили данный вопрос другим командам разработчиков для рассмотрения исправления в будущих версиях.
Заключение
Отметим, что сама Windows может нормально работать со значением параметра NameServer, в котором вместо запятой в качестве разделителя используются пробелы. В свою очередь, нежелательные приложения могут использовать этот метод для сокрытия настроек DNS в системе. Он наблюдался в использовании DNS Unlocker начиная с декабря 2015 г. и работает на всех ОС Windows, начиная с Windows XP. Интересно отметить, что для метода DNS hijack в качестве разделителя может использоваться и точка с запятой, однако, мы не наблюдали использование такого варианта в других типах вредоносного или нежелательного ПО по состоянию на 31-е мая 2016 г.
Индикаторы компрометации
Описанная выше версия DNS Unlocker обнаруживается ESET как MSIL/Adware.CloudGuard.C. Она использует следующие IP-адреса для подмены DNS:
- 203.131.145
- 203.131.150 — 199.203.131.152
- 163.142.2 — 82.163.142.7
- 163.142.66 — 82.163.142.70
- 163.142.130 — 82.163.142.189
- 163.143.131 — 82.163.143.190
- 211.158.129 — 95.211.158.135
- 211.158.145 — 95.211.158.151
Следующие IP-адреса используются как HTTP-серверы для внедрения вредоносного содержимого JavaScript, которое отображает рекламу на веб-страницах.
- 163.143.23 — 82.163.143.250
- 88.193.133 — 209.88.193.141
Следующие образцы вредоносного ПО используют эту технику.