Интернет-продукты с большим количеством активных пользователей в месяц с большей вероятностью станут мишенью для хакеров. В экологии безопасности WeChat именно из-за бесконечного появления и изменения черных сетевых продуктов происходит непрерывная эволюция безопасности WeChat. Эта статья даст вам представление о том, как WeChat работает как система обнаружения аномалий.
1 написано впереди
Способы обнаружения аномальных пользователей в больших объемах данных всегда были в центре внимания научных и промышленных кругов, а в реальной экологии безопасности WeChat, с одной стороны, меняются средства черного производства. вредоносные шаблоны черного производства, если с помощью контролируемых методов модель может нуждаться в частом обновлении, а стоимость обслуживания высока; с другой стороны, путем анализа вредоносных учетных записей мы обнаружили, что злоумышленники часто демонстрируют определенную «агрегацию ", поэтому нам нужно больше полагаться на неконтролируемые или полуконтролируемые средства для обнаружения злоумышленников. Тем не менее, количество ежедневных активных учетных записей WeChat в основном находится на уровне 100 млн. Как найти подозрительные учетные записи из учетных записей уровня 100 миллионов в условиях ограниченных вычислительных ресурсов создает много проблем при разработке схемы кластеризации, и эта статья направлена на решить эту проблему.Небольшая попытка решения проблемы.
2 Цели разработки и основные идеи системы обнаружения аномалий
Цели дизайнаЧтобы выполнить требования по обнаружению аномальных пользователей в реальных сценариях, на ранней стадии проектирования мы предлагаем следующие цели проектирования:
-
В основном используется для обнаружения возможной агрегации среды и агрегации атрибутов вредоносных учетных записей;
-
Решение должно быть простым для интеграции другой вспомогательной информации, такой как существующая портретная информация;
-
Решение должно иметь высокую масштабируемость и может быть непосредственно использовано для обнаружения аномалий на базе 100 миллионов пользователей.
Обычно идея обнаружения аномальных пользователей на основе кластеризации состоит в том, чтобы вычислить сходство между узлами по характеристикам пользователя и построить граф соединения сходства узлов на основе сходства между узлами, а затем выполнить кластеризацию на полученном графе для обнаружения вредоносных группы. Однако простой анализ покажет, что приведенное выше решение нереалистично в сценариях практического применения.Для расчета сходства между сотнями миллионов пользователей временная сложность и потребление пространства в принципе неприемлемы. Чтобы решить эту проблему, все пользовательское пространство можно разделить на несколько подпространств, сходство пользователей в подпространстве высокое, а сходство между пользователями между подпространствами низкое, поэтому нам нужно только Сходство узлов вычисляется на подпространство, чтобы избежать вычисления подобия между парами узлов с меньшим сходством (эти ребра имеют меньшее влияние на окончательный результат кластеризации), что может значительно сократить затраты времени и пространства, необходимые для вычисления.
Основываясь на этой идее и принимая во внимание агрегацию среды и агрегацию атрибутов, естественно сформированную злоумышленниками, мы можем разделить все пользовательское пространство в соответствии с атрибутами среды и пользователя и вычислить только сходство между узлами в этих подпространствах. граф для майнинга вредоносных групп пользователей. Кроме того, при интуитивном анализе, если измерение агрегации двух пользователей более «подозрительно», вклад этого измерения в злонамеренное агрегирование должен быть выше, например, если два пользователя находятся под одним и тем же «подозрительным» IP, по сравнению с one Для обычных IP-адресов существует более высокая вероятность злонамеренной агрегации между ними. Основываясь на этой интуиции, чтобы вычислить сходство между парами пользователей в каждом пользовательском подпространстве, каждому измерению можно присвоить разные веса в соответствии с подозрительностью измерения агрегации пользователей, а взвешенную сумму весов всех измерений агрегации можно вычислить. используется как мера сходства между пользователями.
Примечание. В соответствии с приведенными выше идеями сходство между двумя пользователями необходимо вычислять в подпространстве после разделения атрибута.Однако подпространство под конкретным значением атрибута в фактических данных будет очень большим.С точки зрения реализации мы разделим особенно большую группу в соответствии с определенным размером (например, 5000) и вычислить сходство узлов в разделенном подпространстве. (Реальные экспериментальные результаты показывают, что это приближение не окажет большого влияния на результаты.)
3 Схема проектирования системы обнаружения аномалий
Основываясь на вышеизложенных идеях, решение для обнаружения аномалий должно решать следующие проблемы:
-
Как разделить все пространство пользователя на несколько подпространств по пользовательским характеристикам/какие характеристики использовать?
-
Как измерить, являются ли пользовательские характеристики «подозрительными»?
-
Как найти аномальные группы пользователей на основе построенного графа сходства пользователей?
Для решения трех вышеперечисленных проблем после нескольких раундов экспериментов и итераций мы сформировали более общую схему обнаружения аномалий, каркас конкретной схемы обнаружения аномалий показан на рисунке 1:
Рис. 1. Система обнаружения аномальных пользователей
Как показано на рисунке 1, сначала модуль разделения пользовательского пространства делит все пользовательское пространство на несколько подпространств по «признаку разделения», и в этих подпространствах осуществляется последующий расчет сходства между узлами; модуль обнаружения вредоносных признаков на основе входных данных.Автоматически и адаптивно выявлять «подозрительные» значения в пользовательских функциях; после завершения разделения пользовательского пространства и обнаружения вредоносных атрибутов в каждом пользовательском подпространстве модуль расчета сходства пользователей основан на библиотеке вредоносных атрибутов и соответствующие веса, полученные в результате обнаружения вредоносных атрибутов. Стратегия вычисляет сходство между пользователями. Для каждой функции и соответствующей степени подозрения модуль стратегии весов присваивает соответствующее значение веса. Вес границы между пользователями — это вес всех агрегированных элементов. Чтобы избежать огромных накладных расходов, которые могут быть вызваны построением ребер, схема будет сохранять только те ребра, веса которых превышают определенный порог. обычно используемый алгоритм кластеризации графа может использоваться для кластеризации, чтобы получить подозрительные вредоносные группы пользователей.
Раздел пользовательского пространстваЧтобы вычислить сходство между узлами, сначала необходимо разделить все пространство пользователя на разные подпространства, так как же выбрать эти атрибуты для разделения? После серии экспериментов и анализа мы делим пользовательские характеристики на следующие две категории:
-
Основные функции: основные функции относятся к функциям, которые требуют относительно больших затрат, чтобы избежать агрегации учетных записей черного производства, в основном включая некоторые экологические функции;
-
Вспомогательные функции. Вспомогательные функции относятся к функциям, изменение которых требует меньших затрат, чтобы избежать агрегации.
Нетрудно обнаружить, что для вышеупомянутых основных функций стоимость предотвращения черного производства относительно велика, поэтому при выборе конкретных атрибутов разделения мы используем основные функции для разделения пользовательского пространства и вычисляем пары узлов. в разделенном подпространстве. При расчете сходства между узлами в подпространстве мы вводим функции поддержки для дополнения и используем основные функции и функции поддержки для одновременного расчета сходства между пользователями, чтобы повысить точность и охват злонамеренных суждений.
Что такое «подозрительное», извлечение подозрительных атрибутовПосле определения атрибутов раздела возникает более важный вопрос: как определить, какие значения атрибутов пользователя являются подозрительными? Здесь мы в основном анализируем информацию о среде входа в систему после десенсибилизации пользователей, полагаемся на данные портрета среды, накопленные в течение многих лет Центром безопасности WeChat, и извлекаем некоторые подозрительные значения атрибутов, анализируя частоту, распределение и другие параметры атрибута пользователя. ценности.
Многоуровневая идентификация подозрительных атрибутовВ процессе идентификации номера приемной семьи мы обнаружили, что часто невозможно достичь высокого уровня охвата, просто полагаясь на частичную информацию данных входа в систему в течение нескольких дней для определения номера приемной семьи. Чтобы решить эту проблему, в процессе извлечения подозрительных атрибутов мы объединим существующую информацию об окружающей среде центра безопасности и глобальную информацию, такую как данные защиты от спама, чтобы помочь в оценке. два следующих преимущества:
-
Слияние локальной информации и глобальной информации может повысить достоверность и охват оценки подозрительных атрибутов, а также улучшить охват алгоритма;
-
Повышает гибкость при расчете схожести пользователей.Если конкретная учетная запись связана с заблокированной учетной записью, периферии могут быть присвоены дополнительные веса, чтобы усилить атаку на известных злоумышленников и учетные записи в той же среде.
Мы рассматриваем пользователей, которые превышают определенный порог, как злонамеренных пользователей, и порог может быть выбран в соответствии с точностью и охватом алгоритма, полученного из разных порогов.
Кроме того, из соображений производительности и масштабируемости мы используем алгоритм подключенных компонентов для выявления подозрительных групп пользователей.В то же время, после получения вредоносных групп, мы проанализируем группы и извлечем значения атрибутов, которые сгруппированы в групповом измерении. для повышения масштабируемости модели.
4 От миллиона до ста миллионов — путь к оптимизации производительности системы обнаружения аномалий
В первоначальном эксперименте мы случайным образом выбрали около миллиона пользователей для эксперимента. Чтобы расширить предлагаемое решение до полных 100 миллионов пользователей уровня и выявить подозрительные группы пользователей, мы сделали следующие оптимизации:
Оптимизация производительности SparkВ процессе реализации описанного выше фреймворка обнаружения аномалий на базе фреймворка Spark мы также столкнулись с распространенной проблемой при обработке больших данных Spark — перекосом данных. Нетрудно проанализировать приведенную выше схему обнаружения аномалий, чтобы обнаружить, что в реализации схемы задействовано большое количество операций агрегирования, таких как groupByKey, агрегат по ключу, редукция по ключу и т. д. Во избежание влияния перекоса данных в агрегации производительности Spark, мы в основном внедряем следующие две стратегии в фактическую реализацию: двухэтапная агрегация и трехэтапная адаптивная агрегация.
двухэтапная агрегацияКак показано на рис. 3, двухэтапная агрегация делит операцию агрегации на две фазы: локальную агрегацию и глобальную агрегацию. Первый раз — локальная агрегация.Во-первых, каждый ключ помечается случайным числом, например случайным числом в пределах 10. В это время один и тот же ключ становится другим, например (привет, 1) (привет, 1) (привет , 1) (привет, 1) становится (1_привет, 1) (1_привет, 1) (2_привет, 1) (2_привет, 1). Затем выполните операции агрегирования, такие как reduceByKey, для данных после добавления случайных чисел, выполните локальное агрегирование и получите результаты локального агрегирования. (1_привет, 2) (2_привет, 2). Затем удалите префикс каждого ключа, чтобы получить (привет, 2), (привет, 2), и снова выполните операцию глобального агрегирования, чтобы получить окончательный результат (привет, 4).
Рис. 3 Двухэтапное агрегирование
Трехэтапная адаптивная агрегацияНа этапе разделения пользовательского пространства нам нужно разделить все пользовательское пространство на несколько подинтервалов в соответствии с атрибутами разделения.В реальном эксперименте мы обнаружили, что в случае данных уровня 100 миллионов с использованием двухэтапной агрегации, объем данных под конкретным ключом будет особенно велик, в результате чего в Spark происходит частая сборка мусора, а программа работает крайне медленно, и агрегированные результаты вообще невозможно получить. Для решения этой проблемы отмечается, что после деления атрибутов путем деления особенно большие группы все равно будут обрезаны в соответствии с определенным размером, поэтому недостаточно напрямую интегрировать этот шаг в процесс агрегирования, чтобы конкретные атрибуты могут быть решены.В случае особенно большого количества данных это также может значительно повысить эффективность алгоритма.
Трехступенчатая адаптивная агрегация делится на следующие четыре этапа:
-
Случайная локальная агрегация: установите большее число (например, 100), назначьте случайное число каждому ключу со ссылкой на операцию первого этапа двухэтапной агрегации и выполните операцию агрегации с ключом после добавления случайного числа. ;
-
Адаптивная локальная агрегация: после случайной локальной агрегации можно получить количество записей под каждым случайным ключом.Через количество записей под одним случайным ключом мы можем оценить количество записей данных под исходным ключом и адаптивно настроить случайный значение, используемое каждым исходным ключом во время второй частичной агрегации;
-
Второй раунд случайной локальной агрегации, продолжайте добавлять случайные числа к каждому ключу в соответствии со случайными числами, полученными с помощью адаптивного расчета.Обратите внимание, что случайные значения, используемые разными ключами, могут быть разными в это время, и выполняется второй раунд по ключам после добавления случайных чисел локальная агрегация;
-
Глобальная агрегация: после второго раунда случайной локальной агрегации, если количество записей по определенному ключу превышает установленный порог (например, 5000), результат будет сохранен, и глобальная агрегация на этом этапе не будет выполняться; в противном случае случайный ключ будет восстановлен до исходного значения ключа для заключительного этапа глобальной агрегации.
После вышеуказанной настройки скорость работы программы увеличилась примерно в 10 раз. Однако в ходе эксперимента мы обнаружили, что когда вычисление подобия выполняется для пользователей уровня миллиардов и ребра фильтруются по порогу, количество полученных ребер по-прежнему находится на уровне десятков миллиардов, занимая более 2T памяти. . Так можем ли мы уменьшить этот объем памяти? Ответ положительный. Благодаря подробному анализу всего процесса обнаружения ненормальных пользователей мы обнаружили, что нам не нужно вычислять сходство всех пар пользователей в подпространстве.В ходе предыдущих экспериментов мы обнаружили, что когда степень подозрительности пользователя превышает 0,7, ее в принципе можно определить. что пользователь пользователь злонамеренный пользователь. Согласно пользовательской формуле расчета степени подозрительности, когда вес ассоциированного ребра узла превышает 18,2, его вес в конечном результате превысит 18,2. 0.7, основываясь на этой идее, мы ввели динамическую стратегию дропа.
Политика динамического удаленияHashMap введен для сохранения кумулятивного значения веса каждого узла в текущем подпространстве, инициализированного 0.0, по оригинальному алгоритму пары узлов в подпространстве проходятся по очереди, если кумулятивное значение веса обоих узлов превышает пороговое значение ( 18.2), пропустите это. Вес пары узлов вычисляется, в противном случае вес пары узлов рассчитывается в соответствии с исходным алгоритмом и накапливается в HashMap для обновления совокупного значения веса связанного узла. После введения стратегии динамического отбрасывания для более крупных пользовательских подпространств программа будет пропускать расчет подобия более 90% пар узлов, что значительно сокращает объем вычислений.От исходного более 2T до примерно 50G, это также значительно уменьшает объем памяти, необходимый программе.
Стратегия разделения графаРаспределение узлов графа отношения сходства пользователей, полученного путем вычисления сходства, крайне неравномерно, большинство узлов имеют небольшую степень, а несколько узлов имеют большую степень.Производительность алгоритма графа оказывает огромное влияние. Чтобы решить эту проблему, мы используем алгоритм разделения графа HybridCut, предложенный EuroSys 2015 Best Paper, для разделения графа сходства пользователей.
Рис. 4. Алгоритм разбиения графа HybridCut
Как показано на рисунке 4, алгоритм разбиения графа HybridCut выбирает дифференцированные стратегии обработки в соответствии со степенью узлов.Для узлов с более низкими степенями, таких как узлы 2, 3, 4, 5 и 6, для обеспечения локальности алгоритм Будут ли они размещены вместе централизованно, и для узлов с более высокой степенью, такой как 1, чтобы полностью использовать возможности параллельных вычислений графовой вычислительной среды, алгоритм распространит соответствующие ребра на каждую машину. За счет дифференциальной обработки узлов в соответствии с их степенями алгоритм HybridCut обеспечивает хороший баланс между локальностью и параллелизмом алгоритма. Вышеприведенное является лишь грубым введением в основную идею алгоритма HybridCut, Для получения более подробной информации об алгоритме, пожалуйста, обратитесь к статье PowerLyra: Вычисление дифференцированного графа и разбиение асимметричных графов.
5 Резюме и обсуждение, сильные и слабые стороны
преимуществоВышеупомянутая структура обнаружения ненормальных пользователей имеет следующие преимущества:
-
Он может лучше обнаруживать возможную агрегацию среды и агрегацию атрибутов злонамеренных пользователей, а также обладает высокой точностью и охватом;
-
Он может естественным образом интегрировать портретную информацию и информацию о защите от спама.Благодаря интеграции информации с разной степенью детализации можно повысить степень охвата алгоритма, а также предоставить большее пространство для разработки алгоритма, а функции или информацию, которые будут использоваться, можно выбираться по необходимости;
-
Хорошая масштабируемость, может быть напрямую расширена до сотен миллионов пользователей для обнаружения злонамеренных пользователей, а алгоритм имеет высокую эффективность работы.
-
Невозможно обнаружить злоумышленников, не агрегированных по окружению и атрибутам (разумеется, это не входит в цель разработки решения), и не справиться с ситуацией, когда злоумышленники используют плагины и другие средства для обхода обнаружения. агрегации среды и атрибутов;
-
Стратегия веса в приведенной выше схеме требует ручного указания веса, что, несомненно, увеличивает нагрузку на ручную настройку параметров.Если есть серьезное изменение злонамеренного режима черного производства или использования характеристик, вес может потребоваться перенастроены, а стоимость обслуживания высока.
-
Изучение стратегий автоматического создания веса для устранения возможных изменений характеристик или моделей производства черного цвета;
-
Могут ли быть созданы правила на основе информации в процессе кластеризации для вредоносных атак в реальном времени;
-
Приведенная выше схема больше подходит для обнаружения возможной агрегации среды и агрегации атрибутов злоумышленников, но она бессильна для вредоносных типов, не являющихся агрегацией среды и атрибутов (возможным решением является дискретизация непрерывных атрибутов, но это слишком неэлегантно. !) , поэтому мы попытаемся проанализировать поведение пользователя с точки зрения поведения и построить соответствующую модель атаки.
-
Chen R, Shi J, Chen Y, et al. PowerLyra: differentiated graph computation and partitioning on skewed graphs[C]// Tenth European Conference on Computer Systems. ACM, 2015:1.
-
Руководство по настройке производительности Spark — расширенный https://tech.meituan.com/spark-tuning-pro.html