Время прочтения: 5 мин.

Привычный для нас Интернет (верхушка «Интернет-айсберга») составляет лишь небольшую часть от всего Web-пространства. Его называют «TheSurfaceWeb» – «Интернет на поверхности», или ClearNet. Сайты в этом сегменте индексируются поисковыми системами, а их доля составляет примерно 4%.  Остальные 96% – это невидимая часть, или «DeepWeb» –«глубинный» Интернет. Сюда входят данные, принадлежащие компаниям, госструктурам, научным и медицинским центрам, военным и т.д. Информация в этом сегменте не индексируется. Нижнюю часть «Интернет-айсберга» составляет «DarkNet» –«теневой» Интернет, доступ к которому осуществляется с использованием специализированного ПО.

Интернет-айсберг

История DarkNet берет своё начало ещё в начале 1970-х годов, когда разрабатывался прообраз будущего Интернета, и вплоть до 2000-х годов о нем практически ничего не было известно. В 2004 году начала работу специальная система анонимизации серверов, позволяющая скрыть истинное местонахождение пользователя. Сейчас доступ к этим серверам осуществляется с помощью специального клиента Tor-сети (Тог Browser). Обмен данными в этой сети происходит в зашифрованном виде и анонимно, что позволяет передавать информацию без опасений её перехвата и гарантирует злоумышленникам безнаказанно осуществлять свою деятельность. По этой причине DarkNet стал популярной площадкой для торговли различными инструментами взлома и кибератак, а также незаконно добытой информацией, в том числе персональными данными клиентов.

За последние годы деятельность киберпреступников значительно усилилась: появление «черных рынков» в DarkNet способствовало распространению вредоносного ПО, а также инструментов и методов обхода фрод-мониторинга. Но знает ли начинающий хакер, как всем этим пользоваться и при этом действовать анонимно? Увы, знает: если в прошлом для совершения кибератаки ему требовался многолетний опыт, то сейчас многие инструменты доступны в виде пошаговых руководств, причем за незначительную плату!

Так, исследования ценообразования на «черном рынке» DarkNet показывают, что значительный набор инструментов для кибератак (вредоносные программы, готовые фишинговые страницы, взломщики паролей и др.) можно приобрести всего за несколько долларов. Команда исследователей изучила тысячи объявлений в пяти крупнейших «черных рынков» DarkNet и составила индекс цен Dark Web Market Price Index. Полученные результаты показывают, что цена осуществления кибератаки стала значительно доступнее, а существовавшие раньше барьеры для входа практически исчезли.

Ещё одним значимым фактором для развития «черного рынка» стало появление криптовалют. Цифровые монеты, в особенности BitCoin, очень популярны во многих сервисах «теневого» Интернета. Они выступают в качестве главного платежного инструмента, т.к. покупатели и продавцы стремятся добиться максимальной анонимности. Появление криптовалют дало новое дыхание «черным рынкам» в DarkNet.

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

Как пользователи, мы должны начать серьезно относиться к защите своих персональных данных. В этом помогут надежные пароли, двухфакторная аутентификация, сервисы по защите конфиденциальности, использование зашифрованных VPN-сетей и др.

Как разработчики, мы должны ставить безопасность выше удобства и заставлять пользователей соблюдать высокие стандарты защиты, нравится ли им это или нет. Безопасность должна стать неоспоримым преимуществом и весомым аргументом.

Как аудиторы, в «теневом» сегменте Интернета мы должны на регулярной основе осуществлять обзор и поиск новых киберугроз, которые потенциально могут нанести вред информационной безопасности организации. Но не стоит ограничиваться лишь одним DarkNet’ом для поиска такой информации.

В своё время посетители DarkNet пользовались зашифрованным мессенджером Jabber.
Со временем его вытеснил новый защищённый мессенджер Telegram, ставший тихой гаванью для любителей анонимности. В нем появилась возможность создавать тематические каналы, что, безусловно, способствовало появлению каналов и про DarkNet. Но как проанализировать регулярно поступающий поток информации в этих каналах?

Проведя исследование, мы выяснили, что решить эту задачу возможно двумя способами: обращаясь напрямую к Telegram API или с использованием различных агрегатов Telegram-каналов.  Главное преимущество последнего заключается в том, что подборка популярных каналов осуществляется самим агрегатором, что существенно облегчает работу. Наш выбор пал в пользу агрегатора tgstat.ru, содержащий в себе, в отличие от аналогичных сервисов, большое количество каналов. С применением языка Python 3  (библиотек django, selenium, pymorphy), а также NLTK, PostgreSQL, Nginx+Gunicorn+Supervisor, мы создали специальный инструмент, который на периодической основе фильтрует и передает сообщения из различных каналов и чатов в единую базу данных, обращаясь к которой, мы можем отследить тенденции и тренды по интересующим нас темам.

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

 С помощью регулярных выражений находим в тексте только последовательности символов длиной больше одного (эта операция также убирает предлоги длиной один символ).

1:	text_ = re.findall(r'\w+', text_)

Следующая команда убирает стоп-слова. К ним относятся все предлоги, междометия и т.д. Это делается для того, чтобы убрать незначимые слова, т.к. далее мы будем выделять самые важные слова из текста.

2:	stop_words = nltk.corpus.stopwords.words('russian')
3:	text_ = [w.lower() for w in text_ 
4:	if len(w) > 0 and w not in stop_words]

С помощью библиотеки pymorphy2 мы приводим все слова к нормальной форме (преобразование глаголов в инфинитив, существительных — в единственное число именительного падежа и т.д.).

5:	morph = pymorphy2.MorphAnalyzer()
6:	text_ = list(map(lambda w: morph.parse(w)[0].normal_form, text_))

Следующая функция выделяет из текста words_number ключевых слов (в нашем случае – 10) с помощью алгоритма TFIDF.

7:	def get_key_words(text, words_number=10):
8:			vectorizer = TfidfVectorizer(encoding='cp1251', min_df=1)
9:			_ = vectorizer.fit([text])
10:			vectorizer.transform([text])
11:			word_count = {i: j for i, j in zip(vectorizer.get_feature_names(), vectorizer.transform([text]).data)}
12:			word_count = {i: round(j, 4) for i, j in sorted(word_count.items(), key=lambda w: w[1], reverse=True)}
13:			top_words = list(word_count.keys())[:words_number]
14:			return top_words

Таким образом, мы имеем два массива: массив всех нормализованных слов и массив ключевых слов. С помощью библиотеки textdistance сравниваем этот текст с другими текстами. В качестве критериев сравнения были выбраны:

  • Сходство Джаро — Винклера,
  • Коэффициент Отиаи (косинусное расстояние),
  • Коэффициент Саккара

Про эти меры вы можете подробнее узнать в интернете. Обобщая эти оценки, мы получаем значения от 0 до 1. Значения, близкие или равные 1, говорят о том, что тексты являются идентичными, а значения, близкие или равные 0 — обратное.