Ищем по email в GitHub

Ищем по email в GitHub

@osint_mindset

Сложно не иметь репозитория на GitHub, если ты хоть сколько-нибудь занимаешься разработкой. Разумеется, с кодом человек оставляет в репозитории email -- чаще всего личный, иногда рабочий, иногда оба вместе.

Ранее я уже писал небольшую утилиту gitcolombo для анализа почт из коммитов репозитория и выявления всех ящиков одного человека. Но это работает, когда нам известен аккаунт или хотя бы проект. А что делать, когда у нас на руках только email-адрес?

Внутренний поиск

Поиск на GitHub по "test@example.com"

Поиск по коду на самом GitHub имеет ряд ограничений и неочевидностей. Но всё равно даёт большой шанс наткнуться на совпадение -- нередко в коде фигурирует контакт автора.

Искать по email в коммитах, к сожалению, нельзя. Зато есть поиск по публичному ящику с помощью модификатора вида test in:email. Бесполезный по большей части, потому что ящик из профиля с большой вероятностью проиндексируется в Google.

Да, и расстраивает нечёткий поиск -- например, на скрине выше GitHub почему-то искал не по строке test@example.com , а по трем подстрокам test, example и com.

grep.app

Поиск в grep.app по "test@example.com"

Проблему с нечётким поиском точно решит сайт grep.app. Он производит поиск по 500К популярных репозиториев, поддерживает регулярные выражения и, разумеется, поиск по точному вхождению.

Как видно из скриншота, результатов в сравнении на два порядка меньше. И по коммитам искать он также не умеет. Но для сложного поиска сайт подходит идеально, так что когда у вас будет известна только часть email, то обязательно загляните сюда.

Пример ниже: поиск по корпоративному ящику, для которого известен формат имя.фамилия@домен.ru, имя "Влад" и конец фамилии "ов".

Поиск в grep.app по части email с помощью регулярного выражения

Самый большой минус -- это, конечно, малое количество данных. Сомнительно, что сайт когда-нибудь сможет в реалтайме делать поиск по всем репозиториям (потому что GitHub попросту не предоставит такого API), но будем надеяться на скорейшее увеличение базы.

Google BigQuery

Поиск по коммитам GitHub через BigQuery по хэшу имени ящика

Самым перспективным инструментом я всё же считаю датасет свободных репозиториев GitHub, выложенный в Google BigQuery.  2,8 млн репозиториев, больше 2 млрд файлов, 145 млн коммитов, общий размер -- около 3 терабайт.

И для всего этого доступен интерфейс SQL-запросов, что позволяет делать точечные запросы по email, имени, кускам кода, и с самой изощрённой логикой.

Для оценки всех возможностей советую почитать вот эту статью и посмотреть на примеры по ссылкам. А мы перейдём к нашей цели -- поиск по почтовому ящику.

Датасет немного деперсонализирован. Это значит, что в метаданных коммитов мы найдём не ящик test@example.com , а a94a8fe5ccb19ba61c4c0873d391e987982fbbd3@example.com. Нас это не остановит, поскольку имя ящика у нас должно быть на руках. Следовательно, достаточно сделать SHA1 от начала email -- и выражение для поиска готово.

Да, и ссылка на коммит всегда хранится рядом, так что email можно посмотреть вручную, если репозиторий до сих пор доступен на GitHub.

Алгоритм поиска

1. Допустим, мы уверены, что ник человека используется и в имени ящика. Берём его для поиска (на моём примере -- soxoj).

2. Хэшируем SHA1 -- онлайн или через консоль:

echo -n "soxoj" | sha1sum

Получаем 4b9e910872a66d9b7d7e137ad70e3abfaad7eda7.

3. Идём в интерфейс для запросов. Нас попросят создать проект, если у вас его ещё нет -- создаём.

4. Вводим следующий запрос:

select
    repo_name, commit,
    author.name, author.email,
    committer.name,  committer.email
from
    bigquery-public-data.github_repos.commits
where
  author.email like '4b9e910872a66d9b7d7e137ad70e3abfaad7eda7%'
  or 
  committer.email like '4b9e910872a66d9b7d7e137ad70e3abfaad7eda7%'

Что мы делаем этим запросом?

Запрашиваем имя репозитория, хэш коммита, имя и email для автора и коммиттера. Ищем в таблице с коммиттами. Фильтруем по email, указывая его начало -- хэшированное имя.

5. Нажимаем "Выполнить", ожидаем, получаем таблицу из репозиториев, коммитов и "обезличенных" email-адресов.

Результат запроса

Email очевиден (теперь мы видим домен), а остальное можно посмотреть прямо в репозитории. Cсылка формируется как repo_name+commit:

https://github.com/rs/domcheck/commit/b0d1a1427e22805cea2cedc49039facbb5e516e4

Надо учитывать квоты. Именно для этого нам предлагали создать проект. Подразумевается, что при массовых запросах в API нам бы хорошо и денег занести в Google. У меня, например, быстро исчерпалась квота в 1 TB из-за региональных ограничений -- считается она на каждый проект.

Таким образом можно производить поиск и по более сложным кейсам -- в зависимости от вашего случая и полёта фантазии.


Разумеется, ни один инструмент не универсален и может не решить вашу поисковую проблему. Всегда имеет смысл по-новому взглянуть на привычные вещи и попробовать нестандартно их использовать. Если вас это интересует -- добро пожаловать на канал OSINT mindset и в одноимённый чат.

Report Page