---
# System prepended metadata

title: GitFive
tags: [MIREA, OSINT, MiSD]

---

# GitFive

###### tags: `MiSD`, `MIREA`, `OSINT`

# Цель работы

Разбираемся с утилитой [GitFive](https://github.com/mxrch/GitFive), определяем сильные стороны данного ПО, определяем зачем такое ПО нужно и какие полезные знания можно с ее помощью извлечь. 

В качестве примера рассмотрим несколько режимов работы утилиты, рассмотрим несколько профилей пользователей-разработчиков на [GitHub](https://github.com/).

![](https://i.imgur.com/IZWLc41.png)

# Источники информации

Основную информацию о проекте, пособие по установке и применению можно найти на официальной странице [GitFive на GitHub](https://github.com/mxrch/GitFive).

Также есть [репозиторий на Pypi.org](https://pypi.org/project/gitfive/) и страница на [offsec.tools](https://offsec.tools/tool/gitfive).

Всю информацию, которую можно использовать в GitFive необходимо брать из GitHub, так как утилита разработано исключительно для работы с ним.

# Методы сбора информации

## Виды собираемой информации

GitFive позволяет извлечь следующие данные из публичных репозиториев GitHub:

- История имен/псевдонимов пользователя
- Варианты имен/псевдонимов
- Адрес электронной почты учетной записи GitHub
- Поиск учетных записей GitHub по списку адресов электронной почты
- Списки псевдонимов и других идентификаторов, используемых целью
- Анализ репозиториев каждой цели
- Поиск электронные почтовых ящиков, привязанные к целевому аккаунту GitHub
- Поиск локальных идентификаторы (локальные учетные записи)
- Находит потенциальные вторичные учетные записи GitHub
- Cбор публичных SSH ключей

Также выделяются некоторые особенности данного ПО:

- Очень низкое потребление кредита API, не превышающее лимит
- Многопроцессорное выполнение (в обход GIL Python)
- Асинхронный скраппинг репозиториев
- Экспорт в JSON

## Принцип работы GitFive

![](https://i.imgur.com/DNrAVcT.jpg)

На изображении мало что можно разглядеть, но принцип работы следующий (выполняется параллельно):

1. Получение имени пользователя жертвы
2. Получение базовой информации с помощью API GitHub (Twitter, информация из профиля)
3. По информации из профиля собирается основная открытая информация
	1. Публичные SSH-ключи
	2. Статистика [GitHub Gist](https://gist.github.com/) (маленькие отрывки кода, которые из есть весь репозиторий)
	3. Сбор информации об организациях
		1. Сбор ссылок из всех репозиториев
		2. Сбор информации из импортов в коде *(например, org/org.gitlab.com)*
		3. Извлечение доменов из почты или сайта
	4. Определение ближайших друзей
		1. Сбор подписчиков, определение взаимной подписки
		2. Анализ звезд на репозиториях
4. Анализ репозиториев
5. Клонирование всех репозиториев жертвы (только коммиты)
	1. Извлечение любых логинов, почты и учетных данных *собираются все данные, которые хотя бы на 40% похожи на исходный логин жертвы по [расстоянию Левенштейна](https://ru.wikipedia.org/wiki/%D0%A0%D0%B0%D1%81%D1%81%D1%82%D0%BE%D1%8F%D0%BD%D0%B8%D0%B5_%D0%9B%D0%B5%D0%B2%D0%B5%D0%BD%D1%88%D1%82%D0%B5%D0%B9%D0%BD%D0%B0)*
	2. На основе собранных данные строится полное ФИО, всевозможные логины и имена пользователя
	3. Извлекаются любые домены и учетные данные организаций
6. Извлечение почты данных соавторов (contributors)
7. Извлечение всех merge-реквестов 
	1. Сбор и анализ всех авторов merge-реквестов
	2. Извлечение организаций, доменов и других идентификационных данных
8. На основе всех собранных данных организаций, доменов, различных логинов и ФИО собираются комбинации учетных данных

# Анализ информации

Можно извлечь различные полезные данные, например:

1. **Личность владельца**
   Основная цель данного ПО. Позволяет получить различные персональные данные владельца репозитория: например, почтовый адрес, ФИО, логины и домены организаций.
2. **Место работы**
   Можно точно определить где работала жертва и где сейчас работает с помощью анализа используемых доменов, учетных данных, адресов серверов и репозиториев, используемых для импорта в репозиториях. Также анализируя ближайшее окружение можно вычислить в каком конкретно окружении сотрудник находился (тип работы, область, специальность и занимаемая позиция).
2. **Ближайших знакомых** 
   По подпискам и звездам можно определить круг общения жертвы, что можно использовать в социальной инженерии. Можно также получить и их учетные данные.
3. **Различные учетные данные для перебора**
   Можно найти огромное количество забытых учетных данных, которые все еще могут быть активными. Также можно использовать их для перебора данных к реальным сервисам, если жертва не меняет логин/пароль.
4. **Ссылки и почты организаций**
   Можно найти множество ссылок на приватные репозитории организаций, где хранится корпоративный код, также найти почты других сотрудников организации.
5. **Определить интересы жертвы и род деятельности**
   Можно понять чем жертва занимается, какой код пишет, какие у него/нее есть пет-проекты. Все можно использовать в социальной инженерии.

# Пример работы

## Установка GitFive

Установка GitFive довольно простая, необходимо запустить всего несколько команд:

```
pip3 install pipx
pipx ensurepath
pipx install gitfive
```

Для установки понадобится [pipx](https://pypa.github.io/pipx/). Данный инструмент позволяет устанавливать и выполнять приложения из пакетов Python.

Бинарные файлы могут быть либо установлены глобально в изолированные виртуальные среды либо запускаться непосредственно во временной виртуальной среде.

![](https://i.imgur.com/KyJCuEL.png)

Сперва необходимо авторизироваться в GitHub, а для этого необходимо [создать API ключ]([https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token](https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token)) для работы GitFive:

```
gitfive login
```

После ввода данных можно пользоваться программой.

## Выполнение команд

### Личный пример

![](https://i.imgur.com/OLHozDO.gif)

Вышеприведенные пример работы программы выполнен на моей [учетной записи GitHub](https://github.com/Qvineox), как можно увидеть были извлечены следующие данные:
- основные данные об аккаунте и аватар
- 20 публичных репозиториев и их распределение по технологиям
- ключи SSH (или их отсутствие)
- связи с другими аккаунтами (5 аккаунтов)
- какие-либо организации отсутствуют

После проведения анализа из всех источников GitFive верно определяет почтовый адрес и имя пользователя. 

### Разработчик React Native

Попробуем поиск на одном из разработчиков React Native.

![](https://i.imgur.com/Ld8XpLL.png)

Основные данные профиля, базовая информация о репозиториях и биография. Были также извлечены несколько email, которые принадлежат компании Coinbase, где жертва на данный момент работает, согласно информации из профиля. 

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

### Разработчик GitFive

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

![](https://i.imgur.com/xYVDqyA.png)

Также найдены некоторые email с доменом организации.

![](https://i.imgur.com/vUeLExb.png)


### Разработчик NMAP

В зеркальном репозитории NMAP на GitHub можно найти одного из разработчиков NMAP - Даниела Миллера. Просканировав его профиль GitFive получены следующие данные:

![](https://i.imgur.com/3CC5dxb.png)

Например, личная почта, которой нет в профиле, а также почта nmap.org.

## Альтернативный режим работы

Также можно найти пользователя по его email.

```
gitfive.exe email yarlrusman@gmail.com
```

![](https://i.imgur.com/3eFKOhy.png)

Также полезно для нахождения пользователей на GitHub, если есть только почта или домен.

# Рекомендации

Можно использовать собранную информацию, а именно:
- любые организации, где работает/учится жертва
- любые пользователи, с которыми знаком пользователь (взаимная подписка)
- личные почтовые адреса
- корпоративные почтовые адреса и домены
- локация, расположение жертвы
- информация из репозиториев

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


