Начните с журнала, а не с догадок
Когда что-то в вашем аккаунте GitHub выглядит иначе, полезнее всего сначала получить запись, которая находится под вашим контролем, а не восстанавливать события по памяти. Именно такой записью является личный журнал безопасности GitHub.
Личный журнал безопасности GitHub содержит действия за последние 90 дней. Источник
Поскольку журнал ограничен недавним периодом, выгружайте его заранее. События, которые выйдут за пределы этого окна, позже не появятся, и восстановить их ожиданием не получится.
Где находится журнал и что можно фильтровать
Журнал доступен в настройках аккаунта в разделе «Архивы» → «Журнал безопасности» и поддерживает фильтры, например по инициатору, репозиторию и действию. Источник
Фильтры важнее, чем исходный объём. Сужение по инициатору, репозиторию или действию позволяет изолировать нужный период и область, вместо того чтобы прокручивать постороннюю рутинную активность.
Выгрузите приватную копию до анализа
Меню «Экспорт» скачивает данные в формате JSON или CSV; поддерживаемые фильтры позволяют сузить выгрузку. Источник
Относитесь к выгруженному файлу как к конфиденциальному. Он содержит запись активности аккаунта, включая инициаторов и действия, и может раскрывать личный или организационный контекст. Храните его в приватном месте, делитесь им только с теми, кто непосредственно помогает вам в расследовании, и не вставляйте его в публичные обсуждения или трекеры задач. Если позже понадобится передать копию команде поддержки платформы, поделитесь максимально узкой отфильтрованной выгрузкой, которая отвечает на их вопрос.
Составьте рабочий лист хронологии инцидента
Выгрузка журнала — это список событий, а не повествование. Превратите его в рабочий лист, чтобы наблюдения, интерпретации и открытые вопросы оставались раздельными. Подойдёт простая структура:
| Столбец | Что в него вносится | Почему это важно |
|---|---|---|
| Событие | Короткая метка того, что произошло | Позволяет быстро просматривать строку позже |
| Время | Отметка времени в том виде, как она записана, с указанием часового пояса | Предотвращает ошибки в порядке событий |
| Инициатор | Аккаунт или идентификатор, записанный как действующий | Указывает на зафиксированный источник, а не на человека |
| Действие | Что, согласно журналу, было сделано | Сохраняет строку фактической |
| Уверенность | Насколько вы уверены, что эта строка относится к делу и прочитана верно | Отделяет надёжные строки от предположительных |
| Открытый вопрос | Что вам ещё нужно проверить | Не даёт допущениям закрепиться как факты |
Заполняйте рабочий лист по выгрузке, по одной строке на каждое событие, которое вы сочтёте относящимся к делу. Используйте столбец уверенности честно: строка, которую вы прочитали непосредственно в выгрузке, надёжнее строки, выведенной из замеченного изменения. Если вы заметили изменение, но не можете найти соответствующее событие, запишите это как открытый вопрос, а не как вывод.
Отделяйте зафиксированные действия от доказательства того, кто их совершил
Именно здесь большинство хронологий ошибаются. Запись в журнале сообщает, что, согласно записи, произошло и какой идентификатор инициатора к этому привязан. Сама по себе она не устанавливает, какой именно человек был за клавиатурой. Общие устройства, переиспользованные сессии, скомпрометированные учётные данные и легитимная автоматизация — всё это может порождать записи, которые выглядят как действия человека.
При проверке держите в голове два столбца рассуждений:
- Зафиксировано: событие, время, инициатор и действие в том виде, как они записаны.
- Не установлено: кто физически это выполнил, почему и соответствует ли идентификатор инициатора тому человеку, которого вы предполагаете.
Записывайте выводы во вторую категорию только при наличии независимых доказательств. До тех пор они относятся к столбцу открытых вопросов.
Не воспринимайте отсутствующее событие как доказательство того, что ничего не было
Пустое место в выгрузке — не свидетельство бездействия. Журнал охватывает определённое недавнее окно, а выгрузка отражает применённые вами фильтры. Если вы фильтровали по репозиторию, события в других репозиториях не появятся. Если изменение, которое вас беспокоит, произошло за пределами окна, его там не будет. Записывайте отсутствие как пробел для расследования, а не как успокоение.
Если вы потеряли доступ
Если вы вообще не можете войти, чтобы открыть журнал, прекратите пытаться восстановить события извне и воспользуйтесь официальным процессом восстановления аккаунта GitHub. Восстановление — это путь, который возвращает вам возможность проверить аккаунт. Не просите третьих лиц получить доступ к аккаунту от вашего имени и не считайте один только сброс пароля завершённым расследованием; как только доступ вернётся, выгрузите журнал и постройте хронологию за период вокруг изменения.
Короткий контрольный список
- Выгрузите журнал безопасности до того, как 90-дневное окно сдвинется вперёд.
- Храните выгрузку приватно и отметьте дату и часовой пояс выгрузки.
- Примените фильтры, чтобы изолировать нужный период и область, затем при необходимости выгрузите суженный вид.
- Постройте рабочий лист со столбцами события, времени, инициатора, действия и уверенности.
- Помечайте каждую строку как зафиксированную или выведенную и держите открытые вопросы отдельно.
- Записывайте отсутствующие события как пробелы, а не как доказательство того, что ничего не было.
- Если доступ утрачен, сначала воспользуйтесь официальным восстановлением, затем вернитесь к шагу 1.
Полезный следующий шаг
Когда хронология готова, следующий вопрос часто в том, какие другие аккаунты связаны с тем же именем или идентификаторами. Это отдельная задача, отличная от чтения журнала безопасности, и у неё свой метод: см. как найти все аккаунты, связанные с именем. Держите два расследования раздельно, чтобы находки из одного не были приняты за доказательства в другом.