Создание инструмента разведки OSINT с нуля

РЕДАКТИРОВАТЬ: Этот проект рос последние 2 года, он хорошо развивался, в особенности став веб-сервисом. Эта статья не обновлялась соответствующим образом, и предоставленная информация о техническом проектировании может быть устаревшей. Тем не менее, идея и предыстория остались прежними.

У каждого есть телефон, по крайней мере, по одному номеру. Номера телефонов - очень распространенный ресурс социальной инженерии. Это то, что мы используем почти каждый день для общения, и иногда нам, возможно, приходится иметь дело с нежелательными телефонными звонками или сообщениями. Возможно, нам придется собрать информацию о найденном нами телефонном номере компании или физического лица. Базовая информация, такая как тип линии и оператор связи, может быть очень полезной для социального инженера.

Если я знаю ваше имя и номер телефона, я могу отправить вам фишинговую угрозу, используя почтовый шаблон вашего оператора связи. Или я могу позвонить в службу поддержки вашего оператора, чтобы собрать о вас как можно больше информации. Другой пример: если номер является наземным, некоторые цифры укажут мне район, откуда он пришел. Эту информацию очень просто получить без использования инструмента, но как насчет того, чтобы пойти дальше?

Цель состоит в том, чтобы собрать как можно больше информации о данном номере телефона, включая ITSP или владельца.

Поставщик услуг Интернет-телефонии (ITSP) предлагает услуги цифровой связи на основе протокола передачи голоса по Интернет-протоколу (VoIP), которые предоставляются через Интернет. Википедия

Получение технических

Сначала я должен понять состав телефонного номера и то, как с ним обращаться. Телефонный номер имеет разные форматы:

  • E.164: + 3396360XXXX
  • Международный: +33 9 63 60 XX XX
  • Национальный: 09 63 60 XX XX
  • RFC3966: тел .: + 33–9–63–60-XX-XX
  • Формат за пределами страны из США: 011 33 9 63 60 XX XX

Форматирование телефонных номеров E.164 влечет за собой следующее:

  • Знак + (плюс)
  • Международный телефонный код страны
  • Код города
  • Местный номер телефона

Например, вот номер в США в стандартном местном формате: (415) 555–2671.

Вот тот же номер телефона в формате E.164: +14155552671.

В Великобритании и многих других странах по всему миру для местного набора номера может потребоваться добавление «0» перед номером абонента. При форматировании E.164 этот «0» обычно должен быть удален.

Другой пример. Вот номер в Великобритании в стандартном локальном форматировании: 020 7183 8750.

Вот тот же номер телефона в формате E.164: +442071838750.

Код страны важен. Без него я не могу просканировать номер телефона и определить страну. Таким образом, инструмент будет поддерживать только форматы E.164 и International.

Но подождите ... а что, если бы была библиотека для автоматического разбора информации с номера? Пока я искал ресурсы о телефонных номерах, я нашел этот волшебный репозиторий Google, который представляет собой библиотеку Java, C ++ и JavaScript для анализа, форматирования и проверки международных телефонных номеров. Библиотека также существует на Go, PHP, Ruby, Rust и Python. Ура! Мне необязательно делать всю работу в одиночку.

Чтобы получить основную информацию, я выбираю несколько поисковых сайтов, которые могу использовать бесплатно, даже если мне придется использовать «взлом», чтобы их использовать. Потому что на некоторых веб-сайтах разрешен обратный поиск бесплатно с использованием веб-страницы, но требуется ключ API, как только вы захотите использовать их API. Например, я могу обмануть вызов Ajax, чтобы выполнить вызов API в моем инструменте. Я хочу, чтобы моим инструментом можно было пользоваться без регистрации API.

Определить оператора связи довольно просто, потому что у каждого оператора есть диапазоны номеров. Например, если мы знаем, что номер +33679368314 принадлежит Orange (французский оператор связи), легко понять, что диапазон номеров + 3367936XXXX также принадлежит Orange. Google, как и многие другие сервисы, имеет огромную базу данных диапазонов номеров, связанных с их операторами связи. Однако в некоторых случаях люди меняют оператора связи, но сохраняют свой номер телефона, поэтому информация о диапазоне номеров становится недействительной.

Использование Open Source Intelligence и открытых данных

По пути изучения безопасности я обнаружил несколько месяцев назад Open Source Intelligence (OSINT). OSINT - это сбор информации из общедоступных и открытых источников данных для использования в контексте разведки.

В разведывательном сообществе термин открытый относится к открытым, общедоступным источникам (в отличие от секретных или тайных источников). Это не связано с программным обеспечением с открытым исходным кодом или общественной разведкой. - Википедия

Open Source Intelligence (OSINT) принимает три формы: пассивный, полупассивный и активный. Есть несколько способов работы с информацией в контексте разведки. Особенно если речь идет о отпечатках ног. Я буду практиковать пассивный сбор информации (или пассивную разведку), это означает, что я не буду хранить собранные данные и в основном буду использовать сторонние источники. Но я собираю информацию из многих источников и фильтрую результаты, чтобы найти владельца или ITSP.

Узнайте больше о методах OSINT-разведки и отслеживании следов здесь.

Прежде всего, я хочу, чтобы мой инструмент OSINT проверял:

  • Репутация телефонного номера (отчеты о телефонном мошенничестве)
  • Следы на сайтах VoIP и провайдеров временных номеров
  • Страницы социальных сетей (facebook, twitter, linkedin, instagram) и результаты телефонных книг

Большинство моих ресурсов взяты из OSINT framework и IntelTechniques с открытым исходным кодом.

Для поиска документов и веб-страниц, связанных с номером телефона, я использую запросы Google Dork. Я составляю список всех найденных мной поставщиков одноразовых номеров. Некоторые из них выставляют свои номера, и все это индексируется поисковыми системами. Например, если я прошу у Google веб-страницу на одном из этих сайтов с номером, включенным в содержание, и нашел результат, это обычно означает, что номер является частью их диапазона номеров. Поскольку моя OSINT-разведка довольно проста, я никогда не считаю результат успешным.

Список источников мошенничества с телефонными номерами

  • scamcallfighters.com
  • signal-arnaques.com

Список поставщиков одноразовых номеров

  • receive-sms-online.com
  • receive-sms-now.com
  • hs3x.com
  • twilio.com
  • freesmsverification.com
  • freeonlinephone.org
  • sms-receive.net
  • smsreceivefree.com
  • receive-a-sms.com
  • receivefreesms.com
  • freephonenum.com
  • receive-smss.com
  • receivetxt.com
  • temp-mails.com
  • receive-sms.com
  • получаетmsonline.net
  • receivefreesms.com
  • sms-receive.net
  • pinger.com (= ›textnow.com)
  • receive-a-sms.com
  • k7.net
  • kall8.com
  • faxaway.com
  • получаетmsonline.com
  • receive-sms-online.info
  • sellaite.com
  • getfreesmsnumber.com
  • smsreceiving.com
  • smstibo.com
  • catchsms.com
  • freesmscode.com
  • smsreceiveonline.com
  • smslisten.com
  • sms.sellaite.com

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

Ага. Есть много поставщиков одноразовых номеров. Используя поисковую систему Google, я могу искать следы, указывая имя домена и номер телефона в разных форматах.

сайт: «домен» intext: «международный_номер» | «Local_num»

В Интернете есть множество открытых источников данных, которые могли бы быть очень полезны для этого проекта. При поиске источников данных я обнаружил базу данных страны в формате JSON, связанную с их ISO и телефонными кодами. Затем я нашел базу данных кодов городов для каждой страны. К сожалению, это не будет использоваться, поскольку библиотека телефонных номеров уже проверяет эту информацию, а также оператора связи и местоположение.

Сбор информации о физических лицах

Однако найти информацию о людях немного проще, чем ожидалось. Существует множество открытых источников данных (с API или просто функцией обратного поиска), которые позволяют мне выполнять поиск по номеру телефона. Согласно Intel Techniques, это средний рабочий процесс с использованием инструментов поиска телефонных номеров:

Список собственников, собирающих информацию из открытых источников

  • Facebook
  • Истинные люди
  • Быстрые люди
  • Проверка фона
  • Пипл
  • Spytox
  • Макелия
  • IvyCall
  • ТелефонПоиск
  • 411
  • USPhone
  • WP Plus
  • Вот они
  • Истинный звонящий
  • Sync.me
  • WhoCallsMe
  • ЗабаПоиск
  • DexKnows
  • WeLeakInfo
  • ОК вызывающий
  • SearchBug
  • numinfo.net

Однажды кто-то, кого я не знал, прислал мне электронное письмо. Мне было любопытно, поэтому я набрал его адрес электронной почты в Google. Я обнаружил, что профиль на numinfo.net был связан с его адресом электронной почты, и отсюда я смог узнать его номер телефона, местонахождение (включая страну, штат и город), его имя и даже его физический адрес! Я не знал, верна ли информация или нет, но все же. Чтобы проверить, я задал ему несколько вопросов о его местонахождении и угадал, что… все совпало.

Проблемы

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

Во-первых, Google занесет в черный список IP-адрес клиента и попросит вас ввести код после нескольких запросов. Когда вы практикуете сложные пользовательские запросы, Google просит вас ввести капчу. После некоторых исследований я узнал, как Google обрабатывает капчу и обнаружение ботов.

Когда вы выполняете поиск в Google с использованием пользовательских запросов (Google Dorks), вы очень легко попадаете в черный список. Итак, Google показывает страницу, на которой вам нужно ввести капчу, чтобы продолжить. Как только код проверки завершен, Google создает файл cookie с именем «GOOGLE_ABUSE_EXEMPTION», который используется для внесения вашего браузера и IP-адреса в белый список на несколько минут. Этого временного белого списка достаточно, чтобы вы могли собрать много информации из многих источников. Поэтому я решил добавить простую пользовательскую манипуляцию, чтобы обойти это обнаружение ботов. Сначала я составляю список пользовательских агентов, чтобы запрос был как можно более случайным. Я не буду использовать прокси, так как Google мгновенно заносит бесплатные прокси в черный список. Я буду использовать те же заголовки, что и обычный пользователь, использующий браузер, и, конечно же, файл cookie GOOGLE_ABUSE_EXEMPTION. Конечно, я не могу сгенерировать новый токен, так как Google генерирует его по времени и IP-адресу. Поэтому я просто попробую сделать запросы и подожду, пока не получу ошибку 503, что означает, что я попал в черный список. Затем я прошу пользователя перейти по URL-адресу, чтобы вручную ввести капчу, и скопировать токен белого списка, чтобы вставить его в интерфейс командной строки. Теперь инструмент может продолжить сканирование! На данный момент это не совсем обходной путь, а скорее обходной путь.

Во-вторых, ITSP не раскрывают свои диапазоны телефонных номеров. На данный момент очень сложно собрать телефонные номера всех провайдеров в мире, или, может быть, это просто еще один уровень OSINT. Также номера телефонов меняются слишком часто. Очень сложно найти ITSP, используя только футпринт. Но я заметил, что некоторые поисковые сайты (например, 411.com) смогли восстановить ITSP, которому принадлежит номер.

Делаем инструмент достаточно «умным»

На данный момент мой инструмент просто сканирует все, используя все источники. Но поскольку мы знаем страну и тип линии в начале сканирования, мы не должны использовать источники, которые предоставляют результаты для другой страны. Например, если я собираю информацию о французском номере (+33), бесполезно искать результаты в базе данных телефонных номеров для мошенничества в США, не так ли? Кроме того, моя OSINT-разведка не должна возвращать бесполезные результаты, такие как анонимные телефонные книги, в которых есть несколько отпечатков телефонных номеров, и мудро выбирать, какой из них я верну конечному пользователю. Итак, последнее, что нужно сделать, - это провести быстрый рефакторинг, чтобы ограничить количество вызовов API и использовать только полезные источники.

Наконец, я должен позволить конечному пользователю больше контролировать результаты. Иногда номер телефона имеет следы, но используется в другом формате. Это проблема, потому что, например, если мы ищем «+15417543010», мы не найдем веб-страницы, которые пишут это так: «(541) 754–3010» . Таким образом, инструмент будет использовать (необязательно) настраиваемое форматирование, указанное пользователем, для получения более точных результатов.

Давайте код!

Я предпочитаю использовать Python. Использование некоторых библиотек, таких как phonenumbers для анализа информации с телефонных номеров, запросов для вызовов API, argparse для анализа параметров cli и других библиотек, связанных с форматирование. Код доступен в этом репозитории GitHub.

Заключение

OSINT - очень эффективный способ сбора информации и расследования. Особенно с использованием открытых источников, таких как поисковые системы, которые имеют огромное количество проиндексированных страниц. Помните, я говорил о самой основной части OSINT, а именно о следах (или пассивной разведке). Но с его помощью мы могли бы сделать гораздо больше. Также помните, что цель OSINT - не автоматизировать все, а автоматизировать сбор информации. Возможно, этот инструмент не сможет восстановить ваше имя или адрес, отсканировав ваш номер (к счастью), в любом случае, это не цель. Цель состоит в том, чтобы предоставить простой способ исследования и анализа информации с любого номера телефона.

Мы использовали только бесплатные ресурсы, если вы хотите углубиться в OSINT, имейте в виду, что существует множество ресурсов премиум-класса, которые, вероятно, уже делают эту работу за вас. Обычно у них есть очень ценная информация, но за нее придется заплатить.