Урок 7. Самостоятельное расследование: Ночная смена

Применяем изученные приёмы к новому набору без подсказанного порядка действий.

В предыдущих уроках заголовок подсказывал главный приём: посмотреть архив, определить тип, прочитать метаданные или восстановить файл. В олимпиадном наборе такой подсказки обычно нет. Вы получаете несколько объектов и сами решаете, какой способ подходит к каждому вопросу.

Этот урок объединяет материал модуля в одно расследование. Глубоко разбирать сетевые протоколы, Java-код или файловую систему пока не требуется. Задача — уверенно выполнить первый проход и получить те ответы, для которых уже достаточно изученных методов.

Обычный порядок работы с новым набором

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

1. Прочитать все вопросы

Отметьте, что требуется сдать:

  • имя файла;
  • путь внутри архива;
  • адрес в формате host:port;
  • SHA-256;
  • идентификатор события.

Это разные типы ответа. Найденный адрес нельзя сдавать вместо имени файла, а сумму всего архива — вместо суммы восстановленного документа.

2. Посмотреть состав набора

unzip -l l7_night_shift.zip
mkdir -p work/l7
unzip l7_night_shift.zip -d work/l7

Сначала список, затем извлечение в отдельную папку. Исходный ZIP остаётся без изменений.

3. Определить настоящие типы

file work/l7/case/*

Если один путь является каталогом, file сообщит об этом; вложенные файлы можно проверить отдельно. Имена evidence-a.dat и evidence-b.txt ничего не обещают.

Составьте короткую таблицу в заметках:

Файл Настоящий тип Какой вопрос может закрыть
evidence-a.dat метаданные и адрес
evidence-b.txt путь внутри контейнера
evidence-c.bin встроенный документ
evidence-d.log имя сетевой записи
events.csv CSV успешное событие

4. Выбрать самый прямой способ

  • Для архива или JAR — unzip -l.
  • Для метаданных — exiftool.
  • Для встроенного файла — binwalk, затем dd.
  • Для CSV — просмотр таблицы или короткий точный фильтр.

На олимпиадной машине все эти инструменты уже установлены. Список программ окружения помогает выбрать готовое средство, но не определяет содержание курса.

Один файл может содержать другой

Схема набора выглядит так:

l7_night_shift.zip
├── PNG под неправильным расширением -> метаданные -> Base64 -> адрес
├── JAR под неправильным расширением -> конфигурация внутри
├── фрагмент данных -> встроенный PDF -> SHA-256
├── PCAP под неправильным расширением -> точное имя файла
└── CSV -> успешное чтение -> event ID

Каждый обнаруженный внутренний объект получает собственную строку в рабочей таблице: фактический тип, связанный вопрос и следующий инструмент.

Как понять, что ответа уже достаточно

Остановитесь, когда прямой источник полностью отвечает на вопрос.

Например:

  • если C19 просит имя PCAP, распознавания через file достаточно; разбор пакетов не нужен;
  • если C21 просит путь .conf внутри JAR, списка unzip -l достаточно; запуск или декомпиляция JAR не нужны;
  • если C23 просит успешное чтение, нужна строка CSV, где одновременно совпадают действие, объект и результат.

Сложный инструмент не делает ответ лучше, если простой уже дал точное доказательство.

Часть 1. Найти сетевой файл

После извлечения набора:

file work/l7/case/*

Один из файлов будет определён как pcap capture file. В C19 сдаётся полный путь этого файла относительно корня архива, например case/name.bin. Не сдавайте путь work/l7/...: рабочая папка создана вами и не является частью набора.

Набор урока с примером и самостоятельным делом
С чего лучше начать набор из нескольких незнакомых файлов? · 4 б.

Часть 2. Получить адрес из PNG

Найдите объект, который file определил как PNG:

exiftool -G -s work/l7/case/<ИМЯ-PNG>

В поле Incident-Data находится Base64. Декодируйте значение:

printf '%s' '<ЗНАЧЕНИЕ>' | base64 -d

Из JSON возьмите host и port, затем запишите их как host:port. Именно такой формат просит C20.

Часть 3. Посмотреть JAR без запуска

Найдите объект, который на самом деле является ZIP/JAR:

unzip -t work/l7/case/<ИМЯ-JAR>
unzip -l work/l7/case/<ИМЯ-JAR>

C21 просит путь рабочей конфигурации .conf внутри контейнера. Сравните имена и содержимое, если вариантов несколько:

unzip -p work/l7/case/<ИМЯ-JAR> <ПУТЬ-К-КОНФИГУРАЦИИ>

Не запускайте JAR. Для списка ресурсов Java вообще не требуется.

Часть 4. Восстановить PDF

Внутри одного бинарного фрагмента находится PDF. Как и в шестом уроке, используйте готовые утилиты:

binwalk work/l7/case/evidence-c.bin

binwalk покажет десятичное смещение PDF. В учебном наборе документ занимает все данные от найденного места до конца фрагмента:

dd if=work/l7/case/evidence-c.bin of=work/l7/recovered-report.pdf \
  bs=1 skip=<СМЕЩЕНИЕ> status=none
file work/l7/recovered-report.pdf
pdfinfo work/l7/recovered-report.pdf
sha256sum work/l7/recovered-report.pdf

Если pdfinfo отсутствует, достаточно подтверждения file и открытия рабочей копии в просмотрщике. C22 принимает SHA-256 восстановленного PDF, а не исходного evidence-c.bin.

Часть 5. Найти доказанное событие в CSV

case/events.csv удобно открыть в Visual Studio Code. Расширение CSV Table уже установлено на олимпиадной машине и показывает таблицу по столбцам.

Можно выполнить и точный фильтр через Python:

import csv

with open("work/l7/case/events.csv", newline="") as source:
    rows = csv.DictReader(source)
    found = [
        row for row in rows
        if row["action"] == "read"
        and row["object"] == "/srv/vault/token.txt"
        and row["result"] == "success"
    ]

print(found)

У нужного пути есть и отказ, и успешное действие. Поэтому поиск только по пути даст два разных события. В C23 сдаётся event_id строки, где одновременно указаны read и success.

В архиве также есть worked_example/events_demo.csv с другими путями и ID. Он нужен для тренировки фильтра и не содержит ответ C23.

Вопрос просит только имя файла сетевого захвата, и PCAP уже найден. Что делать? · 4 б.

Как вести заметки

Для каждого результата достаточно четырёх строк:

Вопрос: C22, SHA-256 восстановленного PDF
Источник: case/evidence-c.bin
Действия: binwalk -> dd -> file -> sha256sum
Ответ: <64 шестнадцатеричных символа>

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

Реальная задача ВСОШ: NEUROIMPLANT Storage Recovery

Открыть исходный PDF с условием и решением. Это задача регионального этапа 2024–2025 для 9 класса.

Подробный разбор многослойной задачи ВСОШ

На входе был traffic.pcap. В Wireshark участник видел передачу файла по FTP. Управляющий обмен показывал имя implant.img, а отдельный поток FTP-DATA содержал его байты.

Первый файл, PCAP, оказался контейнером передачи второго объекта. Извлечение выполнялось через меню Wireshark:

File -> Export Objects -> FTP-DATA

В авторском решении образ передавался дважды. После экспорта полезно подписать копии по номеру потока и посчитать SHA-256: одинаковые суммы подтверждают, что получены одинаковые байты.

Далее:

file implant.img

Команда определяла образ файловой системы Linux. Обычное подключение не сработало, поэтому автор перешёл к простому чтению строк без изменения объекта:

strings implant.img | less

Среди читаемых данных находился флаг.

Полная цепочка решения:

PCAP -> FTP-DATA -> implant.img -> file -> strings -> флаг

Задача важна не конкретными кнопками Wireshark, а переходом между слоями. Каждый найденный объект становится входом для следующего шага. При этом strings нашёл нужный текст, но не восстановил файловую систему целиком — для ответа этого было достаточно.

Самостоятельное дело «Ночная смена»

Используйте l7_night_shift.zip, доступный в блоке файла урока. Пять заданий образуют одно дело:

  1. C19 — полный путь PCAP внутри архива;
  2. C20 — адрес из метаданных PNG;
  3. C21 — путь конфигурации внутри JAR;
  4. C22 — SHA-256 восстановленного PDF;
  5. C23 — ID успешного события в CSV.

Ответы не опубликованы в тексте. Все примеры используют другие имена, адреса или идентификаторы.

Итог модуля

«Ночная смена» начинается одним ZIP, но распадается на пять разных маршрутов. PCAP определяется по фактическому типу, адрес извлекается из поля PNG, конфигурация находится в списке JAR, PDF восстанавливается из фрагмента, а успешное чтение подтверждается строкой CSV. Ни один инструмент не решает всё дело целиком.

Именно это составляет первый проход по олимпиадному набору: сохранить исходные данные, понять требования вопросов, разделить объекты по типам и получить воспроизводимые ответы наиболее прямым способом. Дальнейшие модули смогут углублять отдельные ветви — сетевой трафик, память, диски и журналы — без повторного хаотичного поиска с самого начала.

C19

C19. Артефакт сетевого трафика

12 б.

В l7_night_shift.zip найдите файл, который является PCAP. Сдайте его полный путь внутри внешнего ZIP.

C20

C20. IOC ночной смены

12 б.

Найдите PNG, прочитайте поле Incident-Data, декодируйте его и сдайте адрес в формате host:port.

C21

C21. Конфигурация агента

12 б.

Определите контейнер среди файлов и сдайте полный путь конфигурации .conf внутри него.

C22

C22. Восстановленный документ

12 б.

С помощью binwalk найдите PDF внутри case/evidence-c.bin. Извлеките его от найденного смещения до конца фрагмента и сдайте lowercase SHA-256 восстановленного документа.

C23

C23. Доказанное событие

12 б.

Какой event_id прямо подтверждает успешное чтение /srv/vault/token.txt? Сдайте точный ID.