Gitcolombo - OSINT в GitHub

Gitcolombo - OSINT в GitHub

@osint_mindset

Вытаскиваем через gitcolombo имена, почтовые ящики и привязанные аккаунты на GitHub. Определяем принадлежность ящиков и аккаунтов одному человеку.

Запустить очень просто:

git clone https://github.com/soxoj/gitcolombo && cd gitcolombo 

# по ссылке на репозиторий
./gitcolombo.py -u https://github.com/crinny/b0mb3r

# по никнейму
./gitcolombo.py --nickname LubyRuffy

Зачем?

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

Но всё не так просто: платформа уважает приватность и скрывает в веб-интерфейсе контактные данные. Поэтому анализ репозиториев превращается в поочерёдное клонирование каждого и ручную проверку. Это долго и нудно, особенно если их десятки. Но того стоит - мне неоднократно встречались люди, по рассеянности оставляющие в личных проектах свой корпоративный email и имя. И наоборот.

Gitcolombo упрощает эту процедуру до невозможности. Достаточно указать ссылку на git-репозиторий в Сети, путь к директории на компьютере или ник на GitHub - утилита проанализирует все репозитории, проверит контактные данные, найдёт совпадения по именам и почтовым ящикам и составит отчёт.

Например, из примеров выше утилита определяет следующее:

LubyRuffy is the owner of emails:
   LubyRuffy@mail.com
   lubyruffy@gmail.com

...

Nikita is the owner of emails:
   42045258+crinny@users.noreply.github.com
   isfellop@gmail.com

nm17 and Даниил Николаев are the same person

Вкратце о git и GitHub

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

Автором является тот, кто сделал изменения. Коммиттер эти изменения вносит в код (применяет патчи, сливает ветки, подтверждает PR). Если кто-то пишет код в одиночку, то он и автор и коммиттер. Если автор делает патчи в чужой код - неважно, через модный веб-интерфейс или через email - то коммиттером будет другой человек: владелец репозитория, тот у кого есть права применять патчи либо системный робот GitHub, применяющий изменения.

Таким образом, из цепочки взаимодействий складывается граф связей между людьми, причём с указанием контактных данных. Похоже на социальные сети, правда?

В больших репозиториях сразу видны роли и взаимодействия отдельных людей, например, для mitmproxy:

Name:                 Thomas Kriechbaumer
Email:                thomas@kriechbaumer.name
Appears as author:    666 times
Appears as committer: 711 times  // больше коммитит, но и пишет сам

Also appears with:               // с кем вместе делал правки
   Maximilian Hils git@maximilianhils.com
   Thomas Kriechbaumer Kriechi@users.noreply.github.com
   Aldo Cortesi aldo@corte.si
            ...

Подтверждённые email

В аккаунте GitHub можно привязать несколько почтовых ящиков, подтверждая их через письма. После этого в интерфейсе в коммитах с указанием этого ящика будет отображаться ссылка на профиль, а не имя текстом, что удобно при работе с чужим кодом.

При этом GitHub даёт возможность настраивать приватность email: указывать Not visible in emails. Тогда в результатах изменений кода через веб-интерефейс email будет записан как 12345+username@users.noreply.github.com. Но означает ли это, что мы не сможем получить такой "приватный" email? Вовсе нет!

Нужен хотя бы один коммит с указанием этого почтового ящика, созданный не через web. После этого необходимо открыть в интерфейсе GitHub страничку с этим изменением и проверить, на какой аккаунт отображается ссылка вместо имени. Если она там есть и человек тот, то мы получили подтверждение, что он владеет почтовым ящиком.

Пример: несколько коммитов были отредактированы с указанием неосновного скрытого email. В веб-интерфейсе у коммита виден только ник:

Утилита находит этот email и проверяет принадлежность к аккаунту:

Name:                 fakeuser
Email:                e1604921@urhen.com
Appears as author:    4 times
Appears as committer: 4 times
Verified account:
                      https://github.com/soxoj

Конкурентная разведка

На GitHub находится много аккаунтов компаний, в которых выкладываются их программные продукты, примеры интеграций с API и тому подобное.

Разумеется, это отличный старт для сбора данных по разработчикам компании.

К примеру, запрос по организации Kalanchyovskaia16:

./gitcolombo.py --nickname Kalanchyovskaia16 

запускает поиск публичных репозиториев, скачивает их, находит 65 различных людей, сравнивает их и находит 8 человек с одними и теми же ящиками.

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

user32338 and ToniLazarte and a.pshenichnikov are the same person

Alexey Starovoytov and Alexey and a.starovoytov and Aleksey Starovoytov are the same person 

alexweborama and amironov are the same person

Evgeny Andreev and e.andreev are the same person

Перспективы

Идея (и текущая реализация) этого инструмента проста. Есть много направлений, в которых утилиту можно было бы активно развивать:

  • поддержка других платформ для работы с исходным кодом;
  • экспорт результатов в отчёты / форматы других инструментов;
  • более точный и глубокий анализ совпадений (например, лексикографическая схожесть имён).

Буду рад полезному фидбеку и пожеланиям по развитию! Для обсуждения предлагаю присоединиться к чату OSINT mindset.

Report Page