65 адресов, один настоящий сервер

Схема C2-обфускации XLoader: 16 случайных адресов из 65 за проход, реальный C2 неотличим от decoy без проверки ответа.
Схема C2-обфускации XLoader: 16 случайных адресов из 65 за проход, реальный C2 неотличим от decoy без проверки ответа.

31 марта 2026 года ThreatLabz/Zscaler опубликовали разбор последних версий XLoader. Начиная с версии 8.1, авторы трояна переработали механизм связи с управляющим сервером: в бинарнике зашито 65 C2-адресов. За проход XLoader случайно опрашивает 16 из них; процесс повторяется, пока не будут перебраны все. Реальный C2 различим только после установления соединения и проверки ответа. Дополнительно используются несколько слоёв шифрования и две реализации HTTP-запросов с разными User-Agent’ами.

Для аналитика это задача различения: по наблюдаемому транскрипту — набору соединений и ответов — восстановить скрытую связь «бот → реальный C2». Задача выглядит чисто инженерной. Но за ней стоит математический вопрос: сколько информации о скрытой связи содержит транскрипт, и от чего зависит ответ?

Это не shuffle DP — но задача родственная

Сразу: XLoader не «реализует дифференциальную приватность». В shuffle privacy скрывается связь «какой пользователь породил какое сообщение» — sender anonymity. В XLoader прячется связь «бот → настоящий C2» — receiver anonymity[^1].

Дальше речь не о XLoader как таковом, а о типе математики, нужной для задач различения такого вида. В родственной shuffle-постановке различения оказывается не один режим, а несколько. Иногда работает гауссова интуиция. Иногда её ломают редкие события. Иногда ответ определяет геометрия выходов канала.

[^1]: Формально это ближе к AnoA, Vuvuzela, differential obliviousness.

Shuffle model за две минуты

Есть n пользователей, каждый держит бит. Каждый зашумляет свой бит локальным рандомизатором и выдаёт сообщение из конечного алфавита. Между пользователями и аналитиком стоит доверенный shuffler — он случайно переставляет все сообщения. Аналитик видит только гистограмму: сколько раз встретился каждый символ. Связь «кто отправил что» уничтожена.

Приватность измеряется так: берём два соседних датасета, отличающихся в одном пользователе, и сравниваем соответствующие законы гистограмм. Чем ближе эти два распределения — тем выше приватность.

На практике есть верхние оценки, numerical accountants и точные формулы в специальных случаях. Но они не отвечают на вопрос: в каком режиме находится механизм? Когда гауссово приближение адекватно? Какие свойства канала реально определяют приватность?

Фазовая диаграмма

Фазовая диаграмма для RR-масштаба; при конечном алфавите внутри критического слоя требуется дополнительная геометрия канала.
Фазовая диаграмма для RR-масштаба; при конечном алфавите внутри критического слоя требуется дополнительная геометрия канала.

Здесь важна не новая константа, а карта режимов. Есть управляющий параметр:

a_n = \frac{e^{\varepsilon_0(n)}}{n}

где ε₀(n) — уровень локальной приватности. Он определяет не «больше или меньше приватности», а тип предельного поведения:

Гауссов режим

(aₙ → 0). Для fixed full-support local randomizer это чистый гауссов режим: соседний shuffle-эксперимент асимптотически эквивалентен гауссову сдвигу. Для shuffled RR субкритический масштаб aₙ → 0 даёт ту же Gaussian/GDP картину. Работает GDP (Gaussian Differential Privacy — гауссова дифференциальная приватность).

Критический режим

(aₙ → c², c конечное). Условия Линдеберга ломаются. Предел — уже не Гаусс. GDP здесь — структурно неправильный предельный объект.

Суперкритический режим

(aₙ → ∞). Для shuffled RR и близких sparse-error суперкритических массивов соседние гипотезы становятся асимптотически различимы.

Но одного скалярного параметра мало. При конечном алфавите в критическом слое включается ещё одна ось — геометрия доминирующих выходов канала. Два протокола с одинаковым aₙ могут иметь принципиально разные гарантии. К этому вернёмся.

Гауссов режим: когда интуиция работает

Когда рандомизатор фиксирован и все выходы имеют ненулевую вероятность, всё устроено чисто. Likelihood ratio соседних экспериментов для shuffled binary randomized response имеет точное выражение:

L_{n,0}(K) = e^{-\varepsilon_0} + \frac{K}{n}\bigl(e^{\varepsilon_0} - e^{-\varepsilon_0}\bigr)

Likelihood ratio линеен по достаточной статистике K — числу наблюдённых единиц. Это тождество, не приближение.

Отсюда следует: соседний shuffle-эксперимент асимптотически эквивалентен гауссову сдвигу, с Berry-Esseen контролем скорости. В binary RR exact калибровка может быть менее консервативной, чем generic amplification bounds; это показано на конкретном приложении к frequency estimation.

Математическая деталь: правильная ковариация

При пропорциональных внутренних композициях (k/n → π, 0 < π < 1) дивергенция Йенсена-Шеннона разлагается как JSD ∼ Iπ/(8n), где Iπ — информация Фишера в ковариации фиксированной композиции Σπ = (1−π)Σ₀ + πΣ₁. Это не ковариация i.i.d. смеси — та завышена на rank-one член π(1−π)vvᵀ и даёт оптимистическую оценку. LAN и Le Cam-эквивалентность также устанавливаются в этом режиме.

Критический фронтир: где гауссов proxy ломается

На практике уровень локальной приватности ε₀ может расти с числом пользователей — например, чтобы снизить дисперсию оценок. Когда ε₀(n) растёт, некоторые выходы рандомизатора становятся очень редкими; в критическом окне их вероятности порядка 1/n. Большую часть времени ничего не происходит. Но когда такой выход возникает, он вносит макроскопический вклад в log-likelihood ratio. Редкие, но большие скачки — классическая ситуация, при которой центральная предельная теорема ломается.

При aₙ → c² мы попадаем в критическое окно. И здесь картина расщепляется.

Каноническая пара

(k = 0 vs k = 1). Предел — пуассоновский сдвиг: P = Poi(λ), Q = 1 + Poi(λ), где λ = c⁻². Обратная кривая приватности δ_{P||Q} имеет ненулевой floor на уровне e^{−λ} из-за support mismatch: P даёт ненулевую массу точке 0, а Q — нет.

Внутренние композиции

(k/n → π, 0 < π < 1). Предел — скеллам-сдвиг. Floor исчезает. Но предельный объект всё равно уже не гауссов.

В обоих случаях GDP — структурно неправильный предельный эксперимент. Это не «грубая аппроксимация». Это другой тип предела.

Обратная кривая δ_{P||Q} канонического Poisson-shift предела (λ = 2, c² = 0.5) и GDP-proxy, показанного для визуального сравнения. Поisson-shift выходит на floor e^{−λ} ≈ 0.135, а GDP уходит к нулю. Для двусторонней кривой этот floor определяет нижнюю границу two-sided δ-curve.*
Обратная кривая δ_{P||Q} канонического Poisson-shift предела (λ = 2, c² = 0.5) и GDP-proxy, показанного для визуального сравнения. Поisson-shift выходит на floor e^{−λ} ≈ 0.135, а GDP уходит к нулю. Для двусторонней кривой этот floor определяет нижнюю границу two-sided δ-curve.*

На графике видно: GDP-proxy (штриховая синяя) убывает гауссово и уходит к нулю. Пуассоновский предел (сплошная оранжевая) выходит на постоянный floor e^{−λ}. В области, где GDP считает δ ≈ 0, реальная утечка в обратном направлении не опускается ниже e^{−λ} ≈ 0.135. GDP-proxy в критическом окне может дать слишком оптимистичную сертификацию.

В single-dominant sparse-error случае предел — multivariate compound-Poisson с явной предельной (ε, δ)-кривой в виде пуассоновского ряда. Если доминирующих выходов несколько, возникает hybrid Gaussian/compound-Poisson geometry, и одного скалярного параметра уже недостаточно.

Внутри критического режима: геометрия канала

Это не третий скалярный режим. Это следующий слой внутри критической картины при конечном алфавите.

Вопрос: почему два канала с одинаковым aₙ могут давать разный уровень приватности и разную скорость сертификации?

Ответ — в геометрии доминирующих блоков. Канал порождает «доминирующие» выходы (высоковероятные) и «редкие» (порядка 1/n в критическом масштабе). Проекция на касательные направления доминирующих блоков даёт гауссов фактор. Квотиент по тем же направлениям изолирует пуассоновское поле скачков в редком блоке. Предельный эксперимент:

(G, J) \quad \text{vs} \quad (G, J + \Delta)

Сдвиг Δ действует в блоке скачков. Перекрытие доминирующих выходов, совпадение распределений внутри блока и между блоками, опасный крайний случай на границе — всё это влияет на скорость сходимости и на то, определяет ли проекция полную кривую приватности. Важная оговорка: полная сходимость кривой приватности доказана для регулярных режимов; на strong boundary существует явная obstruction, и projected quotient limit не всегда определяет полную кривую.

Для проектирования протоколов: даже зная, что система в критическом режиме, нельзя дать точную оценку без анализа геометрии конкретного канала.

Что практик забирает с собой

Три правила:

GDP уместен, когда локальный рандомизатор фиксирован и все выходы имеют ненулевую вероятность. В binary RR exact калибровка может дать выигрыш по сравнению с generic bounds.

GDP опасен не когда ε₀ просто растёт с n, а когда aₙ = eᵋ⁰/n переходит к критическому или суперкритическому масштабу. При субкритике гауссова картина ещё держится.

При конечном алфавите одного параметра aₙ недостаточно. Нужно смотреть на геометрию доминирующих блоков канала — перекрытие, совместимость распределений, граничные условия.

Чего статья не утверждает

XLoader не «реализует shuffle DP». Фазовая диаграмма по aₙ доказана для shuffle model с randomized response и близкими sparse-error массивами, а не для произвольных каналов. GDP-proxy на Рис. 3 — визуальный гауссов суррогат для сравнения предельных объектов, а не theorem-level calibration rule.

Зачем это знать, если вы не математик

XLoader использует ad hoc обфускацию. Это слой трудоёмкости, а не worst-case гарантия: active probing позволяет отличить реальный C2 от decoy. В shuffle model, наоборот, доверенный shuffler — часть самой модели, и различение ограничено фундаментально, а не только ресурсами аналитика.

Но даже в формальной модели есть принципиально разные режимы, и использование неправильного приближения ведёт к ложной сертификации. Гауссова интуиция в shuffle privacy — иногда просто не тот объект.

Если атакующие уже живут в мире decoy-серверов и cover traffic, защитнику мало общих оценок и фольклорной интуиции. Нужна теория режимов.

Ссылки: