Урок 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/...: рабочая папка создана вами и не является частью набора.
Часть 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.
Как вести заметки
Для каждого результата достаточно четырёх строк:
Вопрос: 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, доступный в блоке файла урока. Пять заданий образуют одно дело:
- C19 — полный путь PCAP внутри архива;
- C20 — адрес из метаданных PNG;
- C21 — путь конфигурации внутри JAR;
- C22 — SHA-256 восстановленного PDF;
- C23 — ID успешного события в CSV.
Ответы не опубликованы в тексте. Все примеры используют другие имена, адреса или идентификаторы.
Итог модуля
«Ночная смена» начинается одним ZIP, но распадается на пять разных маршрутов. PCAP определяется по фактическому типу, адрес извлекается из поля PNG, конфигурация находится в списке JAR, PDF восстанавливается из фрагмента, а успешное чтение подтверждается строкой CSV. Ни один инструмент не решает всё дело целиком.
Именно это составляет первый проход по олимпиадному набору: сохранить исходные данные, понять требования вопросов, разделить объекты по типам и получить воспроизводимые ответы наиболее прямым способом. Дальнейшие модули смогут углублять отдельные ветви — сетевой трафик, память, диски и журналы — без повторного хаотичного поиска с самого начала.
C19. Артефакт сетевого трафика
В l7_night_shift.zip найдите файл, который является PCAP. Сдайте его полный путь внутри внешнего ZIP.
C20. IOC ночной смены
Найдите PNG, прочитайте поле Incident-Data, декодируйте его и сдайте адрес в формате host:port.
C21. Конфигурация агента
Определите контейнер среди файлов и сдайте полный путь конфигурации .conf внутри него.
C22. Восстановленный документ
С помощью binwalk найдите PDF внутри case/evidence-c.bin. Извлеките его от найденного смещения до конца фрагмента и сдайте lowercase SHA-256 восстановленного документа.
C23. Доказанное событие
Какой event_id прямо подтверждает успешное чтение /srv/vault/token.txt? Сдайте точный ID.