Узнайте о методах выявления доменных имен, сгенерированных с использованием Domain Generation Algorithm (DGA). Подробно о подходах, обучении моделей и оценке качества методов
В данной статье я расскажу о Domain Generation Algorithm (DGA) – что это, почему он был разработан и как используется злоумышленниками. Расскажу про различные способы генерации доменных имён, их отличительные признаки, а также методы обнаружения таких вредоносных программ через анализ DNS-трафика. Отдельное внимание уделю классическим подходам и методам машинного обучения (ML), а также разберу, почему эта тема важна и что вы можете сделать для защиты своей инфраструктуры.
Представьте себя на месте киберпреступника. Вы потратили недели, а может, и месяцы на разработку вредоносного ПО. Через фишинговые письма, зараженные сайты и поддельные приложения вы распространяете свой вирус и, наконец-то, получаете первые сигналы с зараженных машин, Ваш ботнет заработал.
Но внезапно что-то идёт не так. Вместо того чтобы расширяться, ваша сеть начинает сокращаться. Сигналы с хостов пропадают, подключений всё меньше. Причина проста — защитные системы обнаружили вредонос, исследовали его код и нашли в нём «зашитые» IP-адреса или домены ваших C2-серверов. Эти адреса внесли в чёрные списки, а ваш ботнет обезвредили. Досадно, не так ли?
Видимо, примерно так же подумали и хакеры из кибергрупп вроде Kraken и Conficker в 2008 году и попытались решить эту проблему. Их решение было незамысловатым, но действенным. Они начали использовать DGA (Domain Generation Algorithm). Это позволило генерировать сотни новых доменов ежедневно, а позже и десятки тысяч, обеспечивая вредоносам живучесть и устойчивость к блокировкам.
Уже в 2009 году по разным оценкам миллионы устройств в более чем 190 странах были заражены различными версиями червя Conficker. «Червь» стал практически неуловим, поскольку каждый день для связь использовал ранее неизвестный домен.
Так DGA стал настоящим прорывом в развитии киберугроз и серьёзным вызовом для всей индустрии информационной безопасности, а Conficker стали одной из самых серьезных угроз в истории кибербезопасности.
DGA (Domain Generation Algorithm) — это алгоритм, который использует заранее заданный параметр, известный как seed, для генерации псевдослучайных доменных имен. В основе механизма лежит ГПСЧ — генератор псевдослучайных чисел.
Параметр seed известен как злоумышленнику, так и вредоносному ПО. Это позволяет обеим сторонам независимо генерировать одинаковый список доменов на определенный момент времени, например, в зависимости от даты, времени суток или последнего контакта с C2-сервером. Вредонос перебирает эти домены в попытке установить соединение — до тех пор, пока не попадет на тот, который злоумышленник предварительно зарегистрировал.
DGA-алгоритмы условно можно разделить на несколько типов, в зависимости от источника входных данных:
Динамические DGA делятся на два подвида:
Также существуют так называемые гибридные DGA — совмещающие разные методы (словарь + случайность), чтобы повысить устойчивость к анализу, жертвуя размером словаря. Упрощенно: представьте два барабана. Один находится у злоумышленника, второй — у вредоносного ПО. В заранее определенное время, по команде «Вращайте барабан», оба начинают вращение. Хакер выбирает домен из списка, регистрирует его и ждёт. Вредонос перебирает варианты, пока не «выпадет нужный сектор», и устанавливается соединение.
Один из ключевых механизмов, благодаря которому злоумышленники могут управлять ботнетами незаметно для систем безопасности, — это применение DGA. Алгоритмы генерации доменов позволяют создавать огромное количество временных адресов, из которых лишь немногие реально регистрируются. В результате вместо одного постоянного домена, который легко заблокировать, появляется целая «шумовая завеса» из псевдослучайных имён, среди которых скрывается активный C2-сервер.
Такая схема нарушает работу традиционных защитных механизмов: большинство сгенерированных доменов попросту не существует, а используемый адрес живет ограниченное время. Это делает детектирование и блокировку командных каналов практически невозможной задачей без глубокой аналитики.
Особую сложность представляют динамичные и непредсказуемые DGA, в которых для генерации используются внешние переменные, например, заголовки новостей, текущая цена на нефть или коэффициенты биржевых индексов. В таких случаях заранее определить, какие домены будут использоваться, нельзя даже при наличии вредоносного файла. Это снижает эффективность стандартных методов анализа сигнатур или статического блок-листинга.
Кроме того, DGA снижает затраты злоумышленников на инфраструктуру. Вместо поддержания десятков серверов они регистрируют всего несколько временных доменов и оперативно переключаются на новые. Это позволяет не только сохранять управление ботнетом, но и быстро восстанавливать его после частичного выявления, при этом минимизируя финансовые вложения.
При этом автоматизация процесса значительно облегчает работу злоумышленникам, вместе с тем для противодействия подобной маскировке требуется анализ DNS-запросов, выявление аномального поведения и применение алгоритмов машинного обучения. Однако и эти методы сталкиваются с трудностями — злоумышленники постоянно адаптируют DGA-алгоритмы, усложняя синтаксис, структуру и логику генерации.
Вредоносное ПО и особенно APT-кампании (Advanced Persistent Threats) требуют длительной, скоростной и надежной связи с управляющими серверами. DGA идеально подходит для таких задач: он позволяет атакующим сохранять контроль над зараженными машинами, не раскрывая свою инфраструктуру даже при активных действиях со стороны специалистов по кибербезопасности.
Особенно это важно для атак, нацеленных на промышленный шпионаж, кражу интеллектуальной собственности или компрометацию госструктур. DGA позволяет вредоносу «уходить в тень» и ждать подходящего момента, чтобы активировать соединение через заранее предсказанный или динамически созданный домен.
Примеры:
Кроме того, DGA позволяет злоумышленникам эффективно противостоять технике sinkholing — перехвата доменов защитными компаниями. Благодаря постоянной генерации новых адресов, злоумышленники легко обходят такие меры, поддерживая устойчивое управление даже в условиях активной обороны со стороны жертвы.
Именно поэтому DGA остаётся ключевым элементом в инструментарии кибершпионажа и высокоуровневых атак, требуя от защитных систем не только реагирования, но и «проактивного анализа поведения», корреляции событий и глубокого мониторинга сетевого трафика.
DGA — одна из самых стойких техник маскировки вредоносного ПО и ботнетов. Если раньше системы защиты могли оперативно блокировать известные домены, то с появлением DGA эта задача усложнилась в разы. Вредоносные программы, использующие DGA, автоматически генерируют сотни или даже тысячи доменных имён в сутки. Это позволяет злоумышленникам поддерживать связь с зараженными машинами даже в условиях активной обороны со стороны IT-отдела или SOC-команды.
Для бизнеса последствия таких атак могут быть катастрофическими: от сбоев в работе сервисов и потери данных до серьезных имиджевых и юридических рисков. Особенно опасно то, что DGA-активность может оставаться незамеченной в течение длительного времени, скрывая серьезную проблему под видом случайного трафика или DNS-ошибок.
Сам по себе DGA алгоритм не представляет опасности и не наносит урона, но это важная составляющая современных вредоносных ПО и различных атак делающая традиционные методы обнаружения практически неэффективными. Блокировка одного IP-адреса или домена не принесёт результата — уже завтра появятся десятки новых. Для компаний это означает одно: опасность не в том, что вредонос проник в сеть, а в том, что он может долго и незаметно там находиться, поддерживая связь с управляющим сервером.
DGA позволяет вредоносному ПО:
Всё это превращает даже небольшое заражение в долгосрочную проблему, которая может дать злоумышленникам доступ к критически важным данным, внутренним сервисам или аккаунтам пользователей. Кроме того, даже единичный случай DGA-активности может быть признаком работы APT-группы. А это значит, что организация может быть целью масштабной кампании.
Компании, которые игнорируют аномалии в DNS-запросах, рискуют слишком поздно обнаружить масштаб инцидента. В результате — ущерб, на ликвидацию которого могут уйти месяцы и миллионные инвестиции.
DGA-связанные атаки могут спровоцировать целый каскад инцидентов. Ниже — ключевые риски, с которыми сталкиваются организации:
Утечка конфиденциальных данных. DGA позволяет злоумышленникам передавать данные с зараженных машин, обходя прокси и фильтрацию. Это особенно критично для компаний, работающих с персональными данными, финансовыми системами или интеллектуальной собственностью.
Скрытая компрометация. Поскольку соединения происходят с псевдослучайными доменами, они не вызывают подозрений на ранних стадиях. Вредонос может действовать скрытно, получая команды, передавая информацию и заражая другие узлы в сети.
Финансовые потери. Простои сервисов, нарушение SLA, восстановление после заражения, затраты на расследование и ликвидацию инцидента — всё это ложится на бизнес и напрямую влияет на прибыль.
Репутационные риски. Даже если атака не вызвала массовых сбоев, сам факт публикации информации об инциденте может повлиять на доверие клиентов, партнёров и регуляторов. А утрата конфиденциальных данных клиентов лишь усугубит репутационный урон.
Регуляторные последствия. Компании в сфере финансов, здравоохранения или логистики могут столкнуться с санкциями за несоблюдение требований по защите данных (GDPR, 152-ФЗ и др.), если утечка будет связана с бездействием.
Инфраструктурное заражение. Через DGA могут распространяться вредоносы, создающие внутренние бэкдоры, шифровальщики или инструменты lateral movement, приводя к заражению всей корпоративной сети.
Conficker (2008–2010)
Один из первых массовых примеров использования DGA. Этот сетевой червь генерировал до 250 новых доменов в день и заражал миллионы машин в более чем 190 странах. Аналитики долго не могли остановить его распространение именно из-за сложной и изменяющейся схемы C2-коммуникации. (Предполагаемый ущерб ~200M$)
Zeus/GameOver Zeus
Модификация банковского трояна Zeus использовала DGA для устойчивого управления зараженными хостами. GameOver Zeus генерировал по 1 000 доменов ежедневно, что усложнило координацию его нейтрализации даже международным структурам. (Предполагаемый ущерб ~100M$)
Emotet
Троян Emotet стал знаковым примером гибридного DGA, совмещающего словарный метод и генерацию по дате. Это позволяло создавать более «человеческие» домены, сложные для автоматического анализа, и успешно уходить от обнаружения. (Предполагаемый ущерб ~2500m$)
Sunburst (SolarWinds, 2020)
Одно из самых известных кибер происшествий последнего десятилетия. Вредонос использовал продвинутый DGA для генерации C2-доменов на основе идентификаторов машин и условий сети. Это позволяло контролировать десятки заражённых организаций, включая крупные корпорации и госучреждения, оставаясь незаметным более полугода. (Предполагаемый ущерб миллиарды долларов)
Обнаружение DGA-доменов — одна из более сложных задач в области кибербезопасности так как вредоносное ПО, использующее DGA, генерирует сотни и тысячи временных доменов, что делает классическую фильтрацию бессмысленной. Тем не менее, существует ряд подходов, позволяющих выявлять такие домены по их поведенческим и статистическим признакам. Особенно эффективными являются методы, сочетающие технический анализ DNS, машинное обучение, поведенческую аналитику и сетевую корреляцию событий.
Ниже рассказываю об основных техниках выявления DGA-доменов.
Сгенерированные DGA-домены, хотя и не всегда, часто имеют искусственную, "шумную" структуру: случайные буквы и цифры, редкие сочетания символов, равномерное распределение по алфавиту. Это отличает их от легитимных доменов, которые, как правило, строятся из слов, читаемых слогов и узнаваемых шаблонов. Одним из способов выявления такой "шумности" является вычисление энтропии Шеннона, которая показывает степень неопределенности в последовательности символов.
H=-Σp(x)log p(x)
Формула для вычисления Шеннона
Pi — вероятность появления символа i в строке
n — количество уникальных символов
К примеру энтропия доменов: «google.com» имеет энропию ~2.6 тогда как сгенерированный домен используя упрощенную формулу «Conficker»: «yhwsldkmnof.info» имеет энтропию в ~3.6.
Анализ трафика позволяет выявлять поведенческие аномалии, характерные для использования DGA-доменов. В отличие от легитимного поведения пользователей, обращения к DGA-доменам часто следуют предсказуемым или подозрительным шаблонам, не характерным для обычных приложений.
Примеры таких паттернов:
Одним из базовых методов фильтрации трафика является сравнение с белыми списками (whitelisting) — наборами проверенных, доверенных доменов (например, из Alexa Top 1M, Cisco Umbrella, Majestic Million и др.). Такой подход позволяет быстро отсеивать заведомо легитимные запросы, снижая нагрузку на системы анализа и уменьшая количество ложных срабатываний. Если домен отсутствует в белом списке, его можно пометить как подозрительный и отправить на дальнейшую проверку.
Дополнительно для оценки подозрительных доменов эффективно используется пассивный DNS (Passive DNS) — технология, позволяющая анализировать историю DNS-записей. С её помощью можно определить:
В совокупности, whitelisting и пассивный DNS дают возможность быстро отсечь доброкачественные домены и выявить аномальные, нестабильные или скомпрометированные ресурсы, даже если они пока неизвестны как DGA.
Когда традиционные подходы (например, белые списки, сигнатуры, ручные правила) перестают справляться с эволюционными алгоритмами DGA, на помощь приходят методы машинного обучения (ML) и поведенческая аналитика. Эти технологии позволяют находить закономерности, недоступные при классических проверках, и обеспечивают более гибкое и устойчивое обнаружение всей выборки вредоносных доменов.
Одним из эффективных и простых подходов считается использование методов Natural Language Processing (NLP), в частности — разбиение выборки доменов на N-граммы. Такая техника позволяет оценивать «человеко-читаемость» строки и выявлять статистические аномалии в её структуре.
Возьмём домен skydns.ru и разложим его имя (skydns) на N-граммы от 3 до 6 символов:
На основе частотности каждой N-граммы в обоих наборах формируются векторы признаков:
Эти векторы подаются на вход в изучаемые модели от логистической регрессии и случайных лесов до современных градиентных методов, например, XGBoost и CatBoost. Чтобы усилить точность модели, к признакам из N-грамм можно добавить технические характеристики поведения потенциально зловредного домена в сети, полученные в процессе анализа DNS:
Такой гибридный подход объединяет контекстные признаки (из логов) с структурными признаками (из анализа доменного имени), что позволяет выявлять не только известные, но и новые, ранее не встречавшиеся DGA-домены, делая систему детекции адаптивной и устойчивой к эволюции угроз.
Domain Generation Algorithms давно вышли за пределы лабораторных примеров и стали повседневным инструментом в арсенале киберпреступников. Вредоносное ПО, использующее DGA, применялось в шпионаже, ботнет-атаках, распространении вымогателей и банковских троянов. Реальные кейсы наглядно демонстрируют, насколько эффективно DGA помогает злоумышленникам сохранять устойчивую связь с зараженными устройствами.
Предлагаю рассмотреть чуть подробнее некоторые примеры вредоносов, использующих DGA.
Conficker — первый масштабный успех DGA
Ранее уже упомянутый и один из самых известных примеров использования DGA — это червь Conficker, впервые обнаруженный в 2008 году. Уже через год он заразил миллионы машин в более чем 190 странах. Его живучесть во многом обеспечивалась встроенным механизмом генерации нейтральных и национальных доменных имён: в более поздней версии (Conficker C) вредонос генерировал множество доменов (до 50000) в день. Благодаря этому подходу C2-серверы могли быть заменены автоматически, что затрудняло их обнаружение и блокировку.
После заражения Conficker отключал службы безопасности, удалял точки восстановления, блокировал автоматическое обновление системы и открывал каналы для получения команд. Он также стремился к распространению по внутренним сетям, используя уязвимости в Windows и слабые пароли.
Для противодействия атаке была создана международная инициативная группа, включающая Microsoft, ICANN, Afilias, Symantec, Neustar, а также множество регистраторов и провайдеров DNS. Microsoft назначила награждение в $250 000 за информацию о создателях червя. Тем не менее, даже скоординированные усилия международного уровня не позволили быстро нейтрализовать угрозу: ликвидация последствий заняла несколько лет.
Necurs — DGA + спам и трояны:
Necurs — один из самых масштабных и устойчивых ботнетов в истории, обслуживавший вредоносы вроде GameOver Zeus и Locky. Он использовал DGA для построения распределенной и отказоустойчивой сети доставки. Исследователи отмечали, что в сутки Necurs мог генерировать до 2 048 доменов, из которых лишь единицы регистрировались злоумышленниками. Такая архитектура позволяла избежать sinkhole-атак и блокировок, а также обеспечивала масштабную кампанию рассылки фишинговых писем с вредоносными вложениями.
Ключевую роль в его устойчивости сыграла гибридная архитектура управления. Во-первых, Necurs использовал Domain Generation Algorithm, генерируя до 2048 доменов каждые несколько дней. Эти домены создавались на основе статического seed и текущей даты. Несмотря на то что злоумышленники регистрировали лишь несколько адресов из списка, вредонос перебирал их, пока не находил активный C2-сервер. Это делало инфраструктуру крайне живучей: даже при блокировке части адресов ботнет продолжал функционировать.
Помимо DGA, Necurs использовал одноранговую P2P-сеть, в которой устройства обменивались списками «супернод» — промежуточных точек доступа к C2. Это делало ботнет чрезвычайно устойчивым к традиционным методам деактивации, включая sinkhole-атаки.
Дополнительно Necurs применял антианализ: если вредонос обнаруживал подозрительную активность (например, эмуляцию сети или песочницу), он прекращал генерацию доменов, тем самым затрудняя детектирование и анализ образца.
На пике Necurs управлял сетью по разным подсчетом до 6 миллионов устройств и использовался как масштабная спам-платформа. Только в 2016 году он отправлял сотни миллионов фишинговых писем в сутки, часто с вложениями, содержащими вредоносное ПО. По разным оценкам, Necurs потенциально приносил своим операторам от $100 000 до $200 000 в день, распространяя вредоносы и участвуя в финансовых мошеннических схемах.
Revolver Rabbit и XLoader — DGA нового поколения
Современные угрозы продолжают развивать DGA-подход. В 2023–2024 годах специалисты Infoblox обнаружили крупную кампанию, связанную с Revolver Rabbit — неизвестной кибергруппой, использующей продвинутую форму DGA, называемую RDGA (Registered Domain Generation Algorithm). В отличие от классического DGA, здесь злоумышленники предварительно регистрируют все сгенерированные домены — более 500 000 доменов в зоне .bond, потратив на это свыше $1 миллиона.
Эта инфраструктура использовалась вредоносом XLoader (развитие FormBook) — кроссплатформенным инфостилером, работающим как на Windows, так и на macOS. Домены выглядели как легитимные: ai-courses-2024-pk.bond, job-offers-london-sec.bond, что позволяло обходить простую фильтрацию по паттернам. Такая реализация RDGA маскировалась под нормальный пользовательский трафик, а домены часто были активны лишь несколько часов.
В отличие от ботнетов прошлого, таких как Necurs или Conficker, которые полагались на генерацию тысяч доменов с минимальной регистрацией, Revolver Rabbit делает упор на масштаб, реалистичность и финансовую устойчивость. RDGA-домены используются как для активных командных серверов (C2), так и для декой-серверов, что усложняет их блокировку. Эта модель позволяет киберпреступникам создавать инфраструктуру, которая маскируется под легитимный бизнес, и обходить традиционные индикаторы компрометации (IOC) и сигнатурные методы защиты. Для противодействия таким угрозам требуется использование продвинутых методов, таких как DNS-аналитика и машинное обучение.
Все эти кейсы показывают: DGA и его современные модификации — это не архаика, а живая, эволюционирующая угроза. От простых генераторов случайных строк (Conficker) до целых экосистем с реалистичными доменами и миллионными бюджетами (Revolver Rabbit).
Обнаружение признаков активности доменов, сгенерированных DGA, — это тревожный сигнал для любой организации. Он может указывать как на уже состоявшееся заражение, так и на попытку установления соединения с внешней управляющей инфраструктурой. Чтобы минимизировать ущерб, важно действовать по четко построенному сценарию инцидент-менеджмента.
Вы получили уведомление о возможной DGA-активности. Важно убедиться, действительно ли трафик указывает на домены, сгенерированные алгоритмом:
На этом этапе важно отделить ложноположительные срабатывания (например, запросы от легитимных сервисов или сканеров безопасности) от потенциально вредоносных.
После подтверждения факта DGA-активности необходимо определить, с какого устройства исходят DNS-запросы:
Зараженное устройство или устройства должны быть оперативно изолировано от корпоративной сети:
Важно не выключать устройство, чтобы не потерять артефакты для последующего анализа: volatile-память, временные файлы и логи могут сыграть ключевую роль в расследовании.
После изоляции начинается анализ заражения:
Цель — определить масштабы ущерба, возможную утечку данных и найти источник первичного проникновения (root cause).
После этого:
По завершении инцидента команда ИБ:
Рекомендация: наличие предварительно подготовленного плана реагирования на DGA-угрозы (playbook) позволяет действовать быстрее и слаженнее, снижая потенциальный ущерб и время простоя.
DGA-алгоритмы становятся всё более изощренными, а значит, защита от них требует системного подхода. Ни один инструмент в одиночку не гарантирует полной безопасности, поэтому важно внедрить набор лучших практик, охватывающих как инфраструктуру, так и процессы.
DNS-фильтрация является одним из наиболее эффективных методов обнаружения и защиты от DGA, поскольку позволяет выявлять вредоносный трафик на ранних этапах, масштабируется на уровне всей инфраструктуры и даёт возможность анализировать поведенческие паттерны в рамках всего домена.
Поскольку генерация доменов позволяет злоумышленникам менять инфраструктуру связи ежедневно, организациям важно выстраивать защиту на уровне DNS и сетевой инфраструктуры. Это дает возможность перехватывать вредоносный трафик до того, как произойдёт установка соединения с управляющим сервером (C2).
Централизованный контроль DNS-запросов
Необходимо обеспечить полное логирование DNS-трафика. Это включает:
Такие данные являются основой для обнаружения DGA-активности, поскольку вредоносные программы генерируют десятки или сотни доменов в день, что сразу отражается в статистике.
Фильтрация DNS с использованием внешних и локальных списков
Современные облачные DNS-сервисы с функцией фильтрации позволяют блокировать домены на основе репутации, категорий риска и контекста. Дополнительно можно интегрировать внутренние списки, сформированные по результатам анализа собственной инфраструктуры.
Регулярное обновление таких списков и автоматическое применение политик фильтрации критично при работе с DGA, где время жизни домена может составлять лишь несколько часов.
Поведенческий анализ и интеграция с SIEM/NDR
Если организация использует систему мониторинга безопасности (SIEM) или решения класса NDR, стоит внедрить правила анализа аномалий, таких как:
Блокировка по TLD и географическим зонам
DGA-домены нередко используют малоизвестные и дешёвые доменные зоны: `.xyz`, `.info`, `.click`, `.top`. При этом в некоторых корпоративных сценариях такие TLD не используются. Настройка фильтрации по TLD и ограничение обращений к подозрительным зонам может позволить снизить вероятность подключения к вредоносному ресурсу.
Защита на уровне DNS и сети — это не просто дополнительный уровень безопасности, а основа проактивной киберзащиты. В случае с DGA, где вредонос может менять адреса ежедневно, именно DNS становится критической точкой контроля, позволяющей остановить угрозу еще до ее активации. Важно, что DNS-фильтрация покрывать как офисные, так и удаленные узлы.
Многие заражения начинаются с фишинга. Регулярные тренировки сотрудников, симуляции атак и обучение работе с вложениями могут снизить риск первичного проникновения вредоноса с DGA. Также стоит рассмотреть антифишинговые фильтры: Используйте почтовые шлюзы с функцией фильтрации для блокировки писем с вредоносными вложениями и/или ссылками на DGA-домены.
Регулярно обновляйте ПО! Убедитесь, что все операционные системы, приложения и антивирусные программы обновлены до последних версий, чтобы закрыть уязвимости, используемые для доставки DGA-вредоносов.
Используйте поведенческий анализ и машинное обучение для выявления аномалий в DNS-активности. Алгоритмы, обученные на легитимных и вредоносных данных, помогут выявлять даже неизвестные ранее DGA-схемы — особенно если они не подпадают под классические сигнатуры.
Не ждите срабатывания сигнатуры — регулярно проводите охоту на угрозы (Threat Hunting). Ищите необычные доменные шаблоны, всплески NXDOMAIN, неожиданные обращения к новым TLD и другие нетипичные сигналы.
Проводите внутренние тесты, в том числе с использованием симулированного вредоноса, чтобы проверить, насколько быстро сработают системы обнаружения. Создайте план реагирования (playbook) на случай DGA-активности и регулярно его обновляйте.
«Эшелонированная защита» – комбинация технических мер, человеческого фактора и постоянного мониторинга – позволяет существенно снизить риск как первичного заражения, так и последующего взаимодействия с C2-инфраструктурой злоумышленников.