Привет, комьюнити Codeby!
В этой части мы погрузимся в мир OSINT и рассмотрим реальную кампанию по дезинформации в одной из крупнейших польских социальных сетей – wykop.pl. Для тех, кто не знаком, Wykop очень похож на Reddit, но без сабреддитов, зато с тегами и микроблогом. Я покажу вам, как собирать информацию о пользователях, их "голосах" (положительных/отрицательных) и, конечно же, о самом контенте. Все будет максимально понятно, с диаграммами и графиками связей, чтобы вы могли визуализировать процесс.
Для новичков, только начинающих свое знакомство с OSINT, полезным стартом может стать изучение практических аспектов и доступных бесплатных ресурсов. Ознакомьтесь с подробным руководством «Как обучиться OSINT “для себя”: практический старт и бесплатные ресурсы» на нашем форуме.
Если вы пропустили прошлую статью, где мы деобфусцировали код и анализировали его для раскрытия сетей распространения нелегального контента, обязательно загляните:
Offensive OSINT часть 2 - Деобфускация и анализ исходного кода + обнаружение сети распространения нелегального контента.
OSINT и дезинформация: почему это важно?
Мы все прекрасно понимаем, что социальные сети – это не просто место для обмена мемами и фотографиями с котиками. Это мощные платформы для быстрого обмена информацией, которая, к сожалению, часто используется для манипулирования общественным мнением. Примеров масса, и один из самых громких – вмешательство в выборы 2016 года в США, подробно описанное в докладе Мюллера. Там были раскрыты тактики, включая покупку рекламы, создание фейковых групп и распространение дезинформации через специально созданные сайты. Основная работа часто ложится на бот-сети, особенно активные в Facebook и Twitter.
Учитывая предстоящие выборы в Польше, я решил применить свои OSINT-навыки к крупнейшей польской платформе обмена информацией – wykop.pl. Эту платформу постоянно обвиняют в слабой модерации, что якобы позволяет легко манипулировать голосами и распространять фейковые новости. Интересно, что часть контента на главном сайте и в Микроблоге подвергается цензуре и удаляется модераторами по причинам "политической корректности", но при этом именно такой контент часто вызывает наибольший резонанс.
Мое исследование было сфокусировано на контенте из тегов #wybory (#election, начиная с декабря 2019) и #polityka (#politics, с апреля 2020). Я также анализировал пользователей и их подписчиков, уделяя особое внимание тем, кто получил наибольшее количество отрицательных голосов в упомянутых тегах. Цель – найти аномалии, которые могут указывать на манипулирование голосами и потенциальное использование бот-сетей для блокировки контента от попадания на главный сайт.
Эффективность OSINT-расследований во многом зависит от правильно настроенной рабочей среды. Подробный обзор и сравнение операционных систем, оптимизированных для OSINT, вы найдете в нашей статье «Обзор и сравнение операционных систем для OSINT».
Методы сбора данных: от скрэпинга до графов
У Wykop, конечно, есть API (
Для начала мне понадобились статьи за предыдущие недели и даже месяцы. Используя Burp Suite во время просмотра сайта, я заметил, что при подгрузке старых статей отправляется AJAX-запрос по адресу:
Этот запрос возвращает последние 25 статей в формате HTML, которые затем можно легко парсить с помощью Python и библиотеки Beautiful Soup. Для перехода по страницам нужно просто менять
После того как мы получили данные статей и заполнили ими нашу базу данных Elasticsearch (сохранив временную метку и ID), следующим шагом было выявление всех пользователей, которые "заруинили" (дали отрицательные голоса) предыдущим статьям. Эти данные мы можем получить, обратившись к следующей конечной точке:
Здесь
Последний, но не менее важный шаг – построение графа отношений между пользователями. Для этого мне нужно было спарсить всех подписчиков для пользователей, находящихся в нашей базе данных. Примечательно, что доступ к этим данным никак не ограничен для скрэпинга:
Визуализация и интерпретация данных: где скрываются аномалии?
Как я уже упоминал, первым делом я сравнил количество добавленных статей в определенные дни с количеством отрицательных голосов в те же дни.
Вот как это выглядит для тега #wybory:
Логично предположить, что чем больше статей, тем больше негативных реакций. Этот паттерн должен быть виден и в других тегах. Однако, если статей всего несколько, но количество "минусов" аномально велико, это может указывать на целенаправленное "занижение" этих статей, чтобы они не попали в "тренд" или на главную страницу.
Например, 18 ноября была добавлена всего одна статья, но она получила 127 отрицательных голосов (при 637 положительных). В другие дни пропорции были гораздо более стабильными.
Аналогичная ситуация произошла 16 декабря: одна статья получила 58 отрицательных голосов (при 235 положительных), что не позволило ей быть в тренде.
Если присмотреться к 18 января, мы увидим, что было добавлено 4 статьи с общим количеством 166 отрицательных голосов. Имея все данные в базе, мы можем быстро определить, какие именно статьи получили наибольшее количество "минусов".
Вот самая "заниженная" статья того дня, получившая 97 отрицательных голосов:
Другие публикации в тот же день получили значительно меньше:
Тег #polityka, в силу своей универсальности, гораздо чаще используется, и каждый день там добавляется значительно больше статей. Вот график взаимосвязи количества отрицательных голосов и статей в теге #polityka:
Если мы сравним данные за апрель, то увидим следующую картину:
Вот статьи, которые выделяются на диаграмме за 5 апреля:
Рассмотрим 15 апреля: 107 добавленных статей и 1535 отрицательных голосов. При этом только 8 статей из 107 получили более половины всех отрицательных голосов — 900.
Вот эти "лидеры" по количеству "минусов":
Ищем сеть: графовый анализ пользователей
Пользователи — сердце любой социальной сети. Именно они определяют, какой контент станет вирусным и привлечет внимание. Wykop не исключение: пользователи голосуют за статьи, и все их положительные голоса видны в профиле. Совсем иначе обстоят дела с отрицательными голосами — они скрыты, и прямой доступ к этой информации невозможен. Однако, как вы уже знаете из предыдущей главы, мы можем построить целую сеть, используя данные, которые уже хранятся в нашей базе данных.
Во-первых, давайте выделим пользователей, которые проявили наибольшую активность в "занижении" контента:
Для тега #polityka:
Для тега #wybory:
Эти диаграммы четко показывают, что некоторые пользователи были значительно активнее других в голосовании "против". Из всех этих пользователей я выбрал наиболее вовлеченных в снижение голосов, проверил их подписчиков и построил на основе этих данных граф отношений.
Имея такую визуализацию, мы можем начать искать сходства между учетными записями, то есть объединять пользователей в кластеры. Этот Modus Operandi (образ действий) часто используется бот-сетями во всех социальных сетях, особенно в Twitter. Зачастую у таких аккаунтов есть своя "материнская учетная запись", которая действует как командно-контрольный сервер, отправляющий команды на выполнение.
Граф, который вы видите выше, был раскрашен по модульности, что помогает увидеть, как сеть разделяется на сообщества или кластеры. У каждого пользователя есть своя группа связей, и видны лишь несколько двухуровневых связей.
Аккаунт, помеченный здесь как 'wykop', является официальным аккаунтом Администрации платформы. За этими учетными записями, естественно, следят почти все пользователи, поэтому вполне ожидаемо, что он будет связан со многими нашими "подозрительными" аккаунтами. Визуализация данных таким способом очень помогает в работе с различной информацией о социальных связях и является мощным инструментом для отслеживания потенциальных бот-сетей.
Исходя из необработанных данных, собранных непосредственно с сайта, мы получаем диаграммы, сравнивающие отрицательные голоса и количество статей за определенный период времени, а также граф, представляющий отношения между "подозрительными" пользователями, которых мы выделили на предыдущем этапе.
В наше время на всех платформах социальных сетей проводится множество дезинформационных кампаний. Как специалистам по кибербезопасности и просто ответственным пользователям, мы должны быть готовы к потенциальному злоупотреблению деятельностью в социальных сетях, целью которой является не только распространение чьего-то мнения, но и скрытое манипулирование нашим восприятием информации. OSINT – это мощный инструмент в борьбе с этим вызовом.
Для тех, кто рассматривает OSINT как часть своей карьерной траектории в сфере информационной безопасности, будет полезно ознакомиться с личным опытом и рекомендациями экспертов. Прочитайте статью «Мой путь в кибербезопасность: советы и ресурсы» для более глубокого понимания этой сферы.
Готовы начать свое погружение в мир профессиональных OSINT-расследований и стать частью сообщества экспертов? Подробнее о программе и условиях обучения вы можете узнать на странице курса OSINT: технология боевой разведки.
В этой части мы погрузимся в мир OSINT и рассмотрим реальную кампанию по дезинформации в одной из крупнейших польских социальных сетей – wykop.pl. Для тех, кто не знаком, Wykop очень похож на Reddit, но без сабреддитов, зато с тегами и микроблогом. Я покажу вам, как собирать информацию о пользователях, их "голосах" (положительных/отрицательных) и, конечно же, о самом контенте. Все будет максимально понятно, с диаграммами и графиками связей, чтобы вы могли визуализировать процесс.
Для новичков, только начинающих свое знакомство с OSINT, полезным стартом может стать изучение практических аспектов и доступных бесплатных ресурсов. Ознакомьтесь с подробным руководством «Как обучиться OSINT “для себя”: практический старт и бесплатные ресурсы» на нашем форуме.
Если вы пропустили прошлую статью, где мы деобфусцировали код и анализировали его для раскрытия сетей распространения нелегального контента, обязательно загляните:
Offensive OSINT часть 2 - Деобфускация и анализ исходного кода + обнаружение сети распространения нелегального контента.
OSINT и дезинформация: почему это важно?
Мы все прекрасно понимаем, что социальные сети – это не просто место для обмена мемами и фотографиями с котиками. Это мощные платформы для быстрого обмена информацией, которая, к сожалению, часто используется для манипулирования общественным мнением. Примеров масса, и один из самых громких – вмешательство в выборы 2016 года в США, подробно описанное в докладе Мюллера. Там были раскрыты тактики, включая покупку рекламы, создание фейковых групп и распространение дезинформации через специально созданные сайты. Основная работа часто ложится на бот-сети, особенно активные в Facebook и Twitter.
Учитывая предстоящие выборы в Польше, я решил применить свои OSINT-навыки к крупнейшей польской платформе обмена информацией – wykop.pl. Эту платформу постоянно обвиняют в слабой модерации, что якобы позволяет легко манипулировать голосами и распространять фейковые новости. Интересно, что часть контента на главном сайте и в Микроблоге подвергается цензуре и удаляется модераторами по причинам "политической корректности", но при этом именно такой контент часто вызывает наибольший резонанс.
Мое исследование было сфокусировано на контенте из тегов #wybory (#election, начиная с декабря 2019) и #polityka (#politics, с апреля 2020). Я также анализировал пользователей и их подписчиков, уделяя особое внимание тем, кто получил наибольшее количество отрицательных голосов в упомянутых тегах. Цель – найти аномалии, которые могут указывать на манипулирование голосами и потенциальное использование бот-сетей для блокировки контента от попадания на главный сайт.
Эффективность OSINT-расследований во многом зависит от правильно настроенной рабочей среды. Подробный обзор и сравнение операционных систем, оптимизированных для OSINT, вы найдете в нашей статье «Обзор и сравнение операционных систем для OSINT».
Методы сбора данных: от скрэпинга до графов
У Wykop, конечно, есть API (
Ссылка скрыта от гостей
[/URL]), но получить к нему доступ бывает непросто. Поэтому я решил пойти по пути ручного скрэпинга (parsing), вытягивая всю необходимую информацию напрямую с сайта.Для начала мне понадобились статьи за предыдущие недели и даже месяцы. Используя Burp Suite во время просмотра сайта, я заметил, что при подгрузке старых статей отправляется AJAX-запрос по адресу:
Ссылка скрыта от гостей
Этот запрос возвращает последние 25 статей в формате HTML, которые затем можно легко парсить с помощью Python и библиотеки Beautiful Soup. Для перехода по страницам нужно просто менять
link-[ID]
на ID последней статьи. Параметр hash
здесь больше для красоты, на логику он не влияет.После того как мы получили данные статей и заполнили ими нашу базу данных Elasticsearch (сохранив временную метку и ID), следующим шагом было выявление всех пользователей, которые "заруинили" (дали отрицательные голоса) предыдущим статьям. Эти данные мы можем получить, обратившись к следующей конечной точке:
Ссылка скрыта от гостей
Здесь
ID
– это идентификатор статьи. Таким образом, мы наполнили базу данных не только статьями из политических тегов, но и всеми пользователями, которые голосовали против этих статей.Последний, но не менее важный шаг – построение графа отношений между пользователями. Для этого мне нужно было спарсить всех подписчиков для пользователей, находящихся в нашей базе данных. Примечательно, что доступ к этим данным никак не ограничен для скрэпинга:
-
Ссылка скрыта от гостей– отображает подписчиков пользователя
USERNAME
. -
Ссылка скрыта от гостей– отображает пользователей, на которых подписан
USERNAME
.
Визуализация и интерпретация данных: где скрываются аномалии?
Как я уже упоминал, первым делом я сравнил количество добавленных статей в определенные дни с количеством отрицательных голосов в те же дни.
Вот как это выглядит для тега #wybory:
Логично предположить, что чем больше статей, тем больше негативных реакций. Этот паттерн должен быть виден и в других тегах. Однако, если статей всего несколько, но количество "минусов" аномально велико, это может указывать на целенаправленное "занижение" этих статей, чтобы они не попали в "тренд" или на главную страницу.
Например, 18 ноября была добавлена всего одна статья, но она получила 127 отрицательных голосов (при 637 положительных). В другие дни пропорции были гораздо более стабильными.
Ссылка скрыта от гостей
Аналогичная ситуация произошла 16 декабря: одна статья получила 58 отрицательных голосов (при 235 положительных), что не позволило ей быть в тренде.
Ссылка скрыта от гостей
Если присмотреться к 18 января, мы увидим, что было добавлено 4 статьи с общим количеством 166 отрицательных голосов. Имея все данные в базе, мы можем быстро определить, какие именно статьи получили наибольшее количество "минусов".
Вот самая "заниженная" статья того дня, получившая 97 отрицательных голосов:
Ссылка скрыта от гостей
Другие публикации в тот же день получили значительно меньше:
-
Ссылка скрыта от гостей(16 минусов)
-
Ссылка скрыта от гостей(53 минуса)
-
Ссылка скрыта от гостей(5 минусов, вероятно, неверный тег)
Тег #polityka, в силу своей универсальности, гораздо чаще используется, и каждый день там добавляется значительно больше статей. Вот график взаимосвязи количества отрицательных голосов и статей в теге #polityka:
Если мы сравним данные за апрель, то увидим следующую картину:
- 04.04 – 83 статьи, 854 отрицательных голоса.
- 05.04 – 82 статьи, 1640 отрицательных голосов.
- 06.04 – 141 статья, 1560 отрицательных голосов.
Вот статьи, которые выделяются на диаграмме за 5 апреля:
-
Ссылка скрыта от гостей(156 отрицательных голосов, 240 положительных)
-
Ссылка скрыта от гостей(134 отрицательных голоса)
-
Ссылка скрыта от гостей(102 отрицательных голоса)
-
Ссылка скрыта от гостей(88 отрицательных голосов)
-
Ссылка скрыта от гостей(116 отрицательных голосов)
-
Ссылка скрыта от гостей(99 отрицательных голосов)
-
Ссылка скрыта от гостей(118 отрицательных голосов)
Рассмотрим 15 апреля: 107 добавленных статей и 1535 отрицательных голосов. При этом только 8 статей из 107 получили более половины всех отрицательных голосов — 900.
Вот эти "лидеры" по количеству "минусов":
-
Ссылка скрыта от гостей(177 отрицательных голосов)
-
Ссылка скрыта от гостей(143 отрицательных голосов)
-
Ссылка скрыта от гостей(66 отрицательных голосов)
-
Ссылка скрыта от гостей(240 отрицательных голосов)
-
Ссылка скрыта от гостей(77 отрицательных голосов)
-
Ссылка скрыта от гостей(63 отрицательных голосов)
-
Ссылка скрыта от гостей(61 отрицательных голосов)
-
Ссылка скрыта от гостей(73 отрицательных голосов)
Ищем сеть: графовый анализ пользователей
Пользователи — сердце любой социальной сети. Именно они определяют, какой контент станет вирусным и привлечет внимание. Wykop не исключение: пользователи голосуют за статьи, и все их положительные голоса видны в профиле. Совсем иначе обстоят дела с отрицательными голосами — они скрыты, и прямой доступ к этой информации невозможен. Однако, как вы уже знаете из предыдущей главы, мы можем построить целую сеть, используя данные, которые уже хранятся в нашей базе данных.
Во-первых, давайте выделим пользователей, которые проявили наибольшую активность в "занижении" контента:
Для тега #polityka:
Для тега #wybory:
Эти диаграммы четко показывают, что некоторые пользователи были значительно активнее других в голосовании "против". Из всех этих пользователей я выбрал наиболее вовлеченных в снижение голосов, проверил их подписчиков и построил на основе этих данных граф отношений.
Имея такую визуализацию, мы можем начать искать сходства между учетными записями, то есть объединять пользователей в кластеры. Этот Modus Operandi (образ действий) часто используется бот-сетями во всех социальных сетях, особенно в Twitter. Зачастую у таких аккаунтов есть своя "материнская учетная запись", которая действует как командно-контрольный сервер, отправляющий команды на выполнение.
Граф, который вы видите выше, был раскрашен по модульности, что помогает увидеть, как сеть разделяется на сообщества или кластеры. У каждого пользователя есть своя группа связей, и видны лишь несколько двухуровневых связей.
Аккаунт, помеченный здесь как 'wykop', является официальным аккаунтом Администрации платформы. За этими учетными записями, естественно, следят почти все пользователи, поэтому вполне ожидаемо, что он будет связан со многими нашими "подозрительными" аккаунтами. Визуализация данных таким способом очень помогает в работе с различной информацией о социальных связях и является мощным инструментом для отслеживания потенциальных бот-сетей.
Исходя из необработанных данных, собранных непосредственно с сайта, мы получаем диаграммы, сравнивающие отрицательные голоса и количество статей за определенный период времени, а также граф, представляющий отношения между "подозрительными" пользователями, которых мы выделили на предыдущем этапе.
Расширенный анализ и перспективы
Для того чтобы перейти от гипотезы о манипуляциях к уверенным выводам, эксперт по кибербезопасности будет применять более глубокие методы:- Поведенческий анализ пользователей:
- Временные паттерны: Анализ активности пользователей (частота голосования, время публикации, синхронность действий). Боты часто проявляют неестественно высокую и регулярную активность, или же их действия синхронизированы с другими аккаунтами.
- Аномалии профилей: Поиск пустых или шаблонных профилей, странных никнеймов, отсутствия реальных фотографий, необычного соотношения подписчиков/подписок.
- Взаимодействие: Анализ того, как "подозрительные" аккаунты взаимодействуют между собой (лайки, комментарии, репосты).
- Анализ контента:
- NLP (Natural Language Processing): Использование методов обработки естественного языка для выявления повторяющихся фраз, ключевых слов, тональности или согласованного нарратива в комментариях и публикациях. Это может указать на скоординированное распространение одних и тех же сообщений.
- Детекция плагиата/дубликатов: Поиск полного или частичного дублирования контента между различными аккаунтами.
- Использование машинного обучения:
- Для масштабирования анализа и автоматического выявления ботов можно обучить модели машинного обучения (например, классификаторы) на известных примерах ботов и их поведенческих паттернах.
- Этическая сторона вопроса:
- При проведении подобных исследований важно помнить об этических аспектах сбора и анализа данных из открытых источников. Всегда следует учитывать конфиденциальность пользователей и избегать действий, которые могут нарушить их права или политику платформы. Наша цель – выявление вредоносной активности, а не нарушение приватности добросовестных пользователей.
Заключение
Конечно, представленный анализ — это лишь одна часть масштабной дезинформационной кампании. Стоит также учитывать и другие аспекты: агрессивные или оффтопные комментарии и их голоса, а также широкомасштабное распространение фейковых новостей. Более того, в таких кампаниях могут участвовать и аккаунты, скомпрометированные из-за вредоносного ПО или слабых паролей. Исходя только из активности, мы не можем на 100% утверждать, что аккаунт участвует в кампании, но визуализация данных через диаграммы дает нам ценное представление обо всех учетных записях, которые были наиболее активны в определенных тегах.В наше время на всех платформах социальных сетей проводится множество дезинформационных кампаний. Как специалистам по кибербезопасности и просто ответственным пользователям, мы должны быть готовы к потенциальному злоупотреблению деятельностью в социальных сетях, целью которой является не только распространение чьего-то мнения, но и скрытое манипулирование нашим восприятием информации. OSINT – это мощный инструмент в борьбе с этим вызовом.
Для тех, кто рассматривает OSINT как часть своей карьерной траектории в сфере информационной безопасности, будет полезно ознакомиться с личным опытом и рекомендациями экспертов. Прочитайте статью «Мой путь в кибербезопасность: советы и ресурсы» для более глубокого понимания этой сферы.
Готовы начать свое погружение в мир профессиональных OSINT-расследований и стать частью сообщества экспертов? Подробнее о программе и условиях обучения вы можете узнать на странице курса OSINT: технология боевой разведки.
Последнее редактирование модератором: