Перейти до змісту

Суперхронологія

super-timeline перетворює проаналізовані артефакти на події зі спільною схемою. Вивід за замовчуванням не сортується: він іде в порядку виявлених вхідних файлів і в порядку проєкцій кожного парсера, незалежно від того, в якій послідовності завершуються робочі потоки. Додайте --sort, щоб упорядкувати події хронологічно й консолідувати дублікати. Запис Prefetch може містити кілька часів запуску, а запис MFT — вісім і більше позначок часу файлу. Кожна з них стає окремою подією з власною міткою. Так простіше зіставляти докази з різних джерел, не втрачаючи того, що насправді означає кожна позначка часу.

Почніть із результатів auto-parse, а не з оригінального каталогу доказів:

juntei auto-parse -d evidence/ -o parsed/
juntei super-timeline -d parsed/ -o SuperTimeline.csv

Зберігайте проаналізовані файли, маніфести й оригінальні докази. Хронологія — це проєкція для аналізу: вона не замінює цих записів і не створює файлу сховища у власному форматі Plaso.

Використання

# Native CSV (default)
juntei super-timeline -d parsed/ -o SuperTimeline.csv

# Chronological CSV with duplicate consolidation
juntei super-timeline -d parsed/ -o SortedTimeline.csv --sort

# Native JSON Lines
juntei super-timeline -d parsed/ -o SuperTimeline.jsonl -t jsonl

# Combine native records and an existing Hayabusa JSONL timeline
juntei super-timeline -f NativeRecords.jsonl --hayabusa Hayabusa.jsonl \
  -o SuperTimeline.jsonl -t jsonl

# Timesketch import profile; also available with CSV
juntei super-timeline -d parsed/ -o Timesketch.jsonl -t jsonl --profile timesketch

# One standalone CSV needs an artifact identifier and, if unavailable, a computer name
juntei super-timeline -f MFT.csv --input-artifact mft --computer HOST01 \
  -o Host01Timeline.csv

# Reduce the time range, memory used by sorting, or number of workers
juntei super-timeline -d parsed/ -o IncidentTimeline.jsonl -t jsonl \
  --timeline-start "2026-10-20T06:00:00Z" --timeline-end "2026-10-20T14:00:00Z" \
  --sort --memory-limit 64 -T 4 --temp-dir scratch/

--hayabusa FILE можна вказати кілька разів або використати без інших вхідних даних. Цей параметр імпортує наявні позначки часу подій/сповіщень і контекст правил, не запускаючи Hayabusa. Підтримуються інформаційні події, у яких Details є рядком. --artifact mft,prefetch обмежує проєкцію вибраними ідентифікаторами артефактів. Межі часового діапазону враховуються включно; для них потрібне явне зміщення відносно UTC або Z.

Вибір вхідних даних

Вхідні дані Як вони ідентифікуються
-d DIR manifest.json надає успішно виконані основні завдання, ідентифікатори артефактів, комп'ютери та точні файли результатів. Вторинні завдання auto-parse -j виключаються, щоб не імпортувати обидві копії.
-f FILE Нативний JSON/JSONL використовує вбудовані поля Artifact і Comp. Для експортів без цих міток потрібен --input-artifact; для окремого CSV він обов'язковий завжди.
--computer NAME Запасне значення для випадку, коли вхідний запис не містить імені комп'ютера; без нього невідомий комп'ютер явно позначається як Unknown.
--hayabusa FILE JSONL з позначками часу Hayabusa, метаданими правил, комп'ютером і, за наявності, EvtxFile.

Поточні маніфести дозволяють переміщувати каталог результатів аналізу: записані абсолютні шляхи виводу перераховуються відносно нового каталогу. Вхідні дані мають залишатися всередині нього, зокрема й цілі символічних посилань. Підтримуються застарілі каталоги Amcache, SRUM і Jump Lists, створені окремо для кожного артефакту; для каталогів категорій потрібен явний OutputFiles.

Підтримуються поточні маніфести зі шляхами відносно каталогу виводу та сплощені експорти з кількох таблиць. Команда розпізнає кожен артефакт, який планує автоматичний аналіз, зокрема новіші таблиці браузерів, WebCache, Outlook і UAL.

Коли маніфест вказує на образ VHDX або E01, посилання на джерела містять образ і внутрішній шлях, а назва образу зберігається в контексті події. Тимчасовий проміжний робочий каталог для читання результатів аналізу не потрібен.

Необроблене джерело береться із запису або однозначної команди маніфесту. За допомогою -d посилання на необроблені джерела відносяться до каталогу доказів, а Details.ParsedFile — до проаналізованого каталогу. Таблиці SRUM CSV призначаються базі даних лише тоді, коли на хості є один зібраний SRUDB.dat, який можна унікально ідентифікувати. В іншому випадку SourceFile вказує на проаналізований файл, а Details.RawSourceAvailable — це false.

Окремі вхідні дані позначаються назвою файлу. Вхідні файли з однаковою назвою отримують різні посилання ./Inputs/<ID>/<filename>. Абсолютні шляхи сирих джерел поза відомими кореневими каталогами доказів отримують ідентифікатори ./Sources/<ID>/<filename>. Такі непрозорі посилання розрізняють джерела, не експортуючи абсолютних назв каталогів аналітика; щоб знайти початкове джерело, зверніться до нативного запису за ParsedFile і InputRecord. Шляхи, записані в самих доказах, як-от шляхи до виконуваних файлів Windows, залишаються без змін.

Спільні поля подій

Поле Значення
Timestamp UTC за RFC 3339, завжди з дев'ятьма дробовими розрядами для однакового впорядкування. Доповнення розрядами не підвищує точності.
Comp Комп'ютер, пов'язаний із вхідним записом.
Artifact Стабільний ідентифікатор артефакту, як-от mft, prefetch, srum або hayabusa.
TimestampType Опис того, що означає позначка часу, як-от MFT SI Data modified.
User Записаний обліковий запис або SID, якщо адаптер має ці дані; може бути порожнім.
Path Файл, ключ реєстру або інший специфічний для артефакту об'єкт, якого стосується подія.
Message Короткий опис для засобу перегляду хронологій.
SourceFile Посилання на сире джерело відносно каталогу доказів або відносний ідентифікатор джерела, якщо його кореневий каталог невідомий; інакше — описаний вище запасний варіант із посиланням на проаналізований файл.
SourceField Точне проаналізоване поле або вкладене розташування, з якого взято позначку часу.
RecordID Специфічний для артефакту ідентифікатор запису. Це не обов'язково Record ID з EVTX.
Details Структурований контекст: початкова позначка часу, точність, основа часу, роль часу, проаналізований файл, вхідний запис/розташування та доступні метадані відновлення/правил.

У CSV Details — це клітинка з JSON у лапках. У JSONL це об'єкт. Профіль Timesketch перейменовує Timestamp, TimestampType і Message на datetime, timestamp_desc і message відповідно, а решту полів походження зберігає. Це три поля, обов'язкові для імпорту в Timesketch.

Details навмисно містить лише вибраний контекст, а не повні двійкові дані чи кожне поле нативного запису. Довгі рядки, масиви й об'єкти обмежуються за розміром і позначаються ProjectionOmitted. Щоб переглянути повний нативний запис, знайдіть його за Details.ParsedFile, InputRecord і Location. Для CSV номер запису рахує записи CSV після заголовка, а не фізичні рядки всередині клітинок у лапках. Для JSONL це номер рядка; для JSON — номер документа верхнього рівня разом із вкладеним розташуванням.

Що означають позначки часу

Позначка часу — це свідчення про записаний об'єкт. Сама по собі вона не доводить ні виконання, ні атаки. Адаптери навмисно зберігають такі відмінності:

Артефакти Як тлумачити в хронології
MFT Окремі часи зміни даних, доступу, зміни метаданих і створення для SI та FN; кожен атрибут FN зі своїм іменем залишається окремим. З --sort повторювані поля SI в рядках імен файлів консолідуються. Спільні часи базового файлу в рядках ADS виключаються в обох режимах. Імена, відновлені зі slack записів FILE, дають окремі події з відновленими FN.
I30 Збережені метадані FN/індексу з контекстом slack/відновлення, якщо він є. Це не позначки часу запису в індекс каталогу.
Журнал USN Позначка часу запису журналу та причини оновлення. Один запис може описувати кілька змін; він не обов'язково фіксує точний час їхнього початку.
LogFile Збережені знімки позначок часу redo/undo та метадані імен файлів. Redo та undo залишаються окремими. LSN і зміщення у файлі — це ідентифікатори, які ніколи не перетворюються на дати.
Prefetch Записані часи запуску. З --sort вони консолідуються з відповідним експортом хронології Prefetch. Метадані створення томів, на які посилається файл, позначаються окремо.
Бази даних SQLite браузерів Записані відвідування, відновлені метадані останнього відвідування сторінок, початок/завершення завантажень, створення/доступ/закінчення терміну дії файлів cookie, а також перше/останнє використання записів історії форм або мітки їх видалення (tombstones). Завершення завантаження саме по собі не доводить ні його успішності, ні виконання; закінчення терміну дії cookie — це заданий кінцевий строк. Стан відновлення, рівень довіри та походження залишаються в контексті.
Internet Explorer / застарілий Edge WebCache Доступ до збережених записів, їх створення/зміна, закінчення терміну дії та синхронізація, початок завантажень, метадані файлів cookie, а також доступ до контейнерів і їх очищення. Службовий облік кешу не є автоматично доказом того, що користувач відкрив сторінку.
Outlook PST, OST, MSG і OFT Надсилання/доставка повідомлень; створення/зміна папок, елементів і вкладень; початок/завершення подій календаря та нагадування; початок/строк/завершення завдань і нагадування; а також властивості з явно заданим часовим типом. Запланований час не доводить, що зустріч відбулася, нагадування спрацювало чи програму було виконано. Збережений час доставки не доводить, що повідомлення прочитали.
Журнал доступу користувачів (UAL) Метадані першого/останнього доступу, вставлення/створення бази даних, перший/останній перегляд і збережений час завантаження операційної системи. Роль, обліковий запис, адреса джерела та щоденні лічильники залишаються в контексті. Щоденні дати/підрахунки не є придуманими опівнічними входами; untimed identity та рядки DNS залишаються у вихідних результатах аналізу.
Amcache Час останнього запису ключів інвентарю, контекст батьківського ключа тому, записані дати встановлення та метадані компонування PE. Сама лише присутність в інвентарі чи LinkDate не доводить виконання.
ShimCache Збережений час зміни файлу, метадані оновлення кешу та час останнього запису ключа кешу. Жоден із них не є автоматично часом виконання.
SRUM Позначка часу/інтервал агрегування постачальника, початок з'єднання, явні поля початку/кінця інтервалу та метадані ідентифікатора програми. Байти, тривалість та інші лічильники не є датами.
LNK Позначки часу MAC цілі, час створення ідентифікатора відстеження та часи елементів оболонки. Вони описують збережені метадані цілі, а не обов'язково момент, коли відкрили ярлик.
Jump Lists Метадані останнього використання записів, час створення ідентифікатора відстеження та часи цілей вбудованих LNK. За замовчуванням часи самого файлу-контейнера у файловій системі, де відбувалося збирання, пропускаються.
Карантин Defender Позначка часу запису та збережені часи створення/доступу/запису ресурсу. Час видобування не є доказом активності на кінцевій точці.
BAM, UserAssist, FeatureUsage Записані поля активності, якщо вони є; контекст останнього запису ключа зберігається окремо. Лічильник без часу не створює події.
RecentDocs, MRU, Open/Save MRU, ShellBags, Office Записані часи використання/довіри/елементів оболонки та контекст ключа. Час ключа списку не є часом останнього використання кожного окремого елемента цього списку.
SAM і секрети LSA Записані метадані облікових записів (вхід, пароль, закінчення терміну дії) або встановлення секретів і пов'язані з ними часи ключів. Вони не замінюють журналів подій автентифікації.
Служби, TaskCache, автозапуск через реєстр, BCD Метадані ключів/конфігурації та явно записані часи завдань. Сам лише запис у ключ служби не доводить, що службу було запущено.
Мережі та USB Поля мережевих профілів/оренди адрес і встановлення/підключення/від'єднання пристроїв разом із контекстом ключів реєстру. Нативні часи MountPoints2 користувачів для USB зберігають відповідний кущ користувача як джерело.
Відомості про систему, встановлені програми, AppCompat, історія програм Явні поля встановлення, вимкнення, інвентарю/активності та метаданих ключів. Нативні масиви профілів/версій у відомостях про систему зберігають свої вкладені часи.
Політика аудиту, параметри безпеки, MuiCache, універсальне читання реєстру Часи останнього запису ключів, якщо вони надані; значення/лічильники без часу залишаються доступними в нативних вхідних даних.
Persistence Hunter Час останнього запису ключа, що підтверджує результат, і час зіставленої з ним зміни. Результат сам по собі не є встановленням із позначкою часу чи вердиктом про компрометацію.
Hayabusa Позначка часу події/сповіщення з правилом, рівнем, каналом, ідентифікатором події та доступним контекстом подробиць. Кілька правил і різні рядки кореляцій залишаються окремими.

Експорт за замовчуванням зберігає всі проєкції позначок часу, зокрема повторювані метадані. Він не виконує ні глобального сортування, ні консолідації дублікатів. З --sort дублікати проєкцій консолідуються, тож рядків може бути менше, ніж у несортованому експорті тих самих вхідних даних. Кілька однакових позначок часу з різним значенням або з різних джерел доказів зберігаються в обох режимах. Чи є подія дублікатом, визначають комп'ютер, джерело, артефакт, запис, значення часу та стан відновлення. Консолідовані рядки містять DuplicateCount і обмежений перелік альтернативних шляхів/полів джерела. Різні джерела ніколи не об'єднуються лише тому, що їхні шляхи й позначки часу схожі. Якщо сире джерело визначити не вдається, зберігається ідентичність вхідного запису, щоб не злити докупи різні зібрані копії.

Точність, місцевий час і припущення

Відомі поля UTC і позначки часу з явним зміщенням нормалізуються до UTC. Початкові значення та їхня записана точність зберігаються, зокрема FILETIME з точністю 100 нс. Парсер джерела або засіб перегляду на подальшому етапі міг уже округлити час; ця команда не може відновити втрачену точність.

Деякі поля елементів оболонки/FAT мають семантику місцевого часу, навіть коли парсер на попередньому етапі серіалізує їх із Z. Хронологія зберігає проаналізоване значення та походження поля; вона не може відновити відсутній часовий пояс кінцевої точки чи перевірити перетворення, виконане на попередньому етапі. Перш ніж використовувати такий час для точної кореляції між хостами, перевірте сирий артефакт і параметри кінцевої точки.

Наивна позначка часу без визначеного артефактом часового поясу вважається невирішеною, а не мовчки розглядається як UTC. Якщо докази виправдовують це, надайте підписане фіксоване зміщення:

juntei super-timeline -f Amcache.jsonl --input-artifact amcache \
  --assume-offset "+09:00" -o Timeline.csv

Значення, що містять лише дату, теж потребують цього параметра. Їхня прив'язка до півночі позначається як припущення з точністю до дня; це не спостережена подія опівночі. Назви часових поясів і правила переходу на літній час не приймаються. Відсутні, нульові, недійсні значення та значення поза допустимим діапазоном не створюють синтетичних подій на момент початку епохи. Явно записана дійсна дата 1970 року зберігається.

За замовчуванням виключено дві необов'язкові категорії:

  • --include-collection-times: метадані вихідних файлів LNK/Jump List у файловій системі, де відбувалися збирання чи аналіз. Ці події позначаються collection_filesystem і відокремлюються від активності на кінцевій точці.
  • --include-interpreted-times: значення QWORD з універсального читання реєстру, які засіб читання реєстру відображає як FILETIME. Вони позначаються interpreted_value, бо багато таких значень насправді є лічильниками.

Виведення та пропущені записи

Команда записує лише часову шкалу, вибрану за допомогою -o, у форматі, вибраному за допомогою -t (csv за замовчуванням або jsonl). Він не створює супутніх файлів без синхронізації, діагностики чи підсумків, а також спулів діагностики для кожного запису. Існуючі супутні файли з попередніх запусків залишаються недоторканими.

Підсумок терміналу повідомляє про кількість подій на часовій шкалі та незапланованих записів. Ненульові недійсні позначки часу та кількість невирішених часових поясів відображаються окремо. З --sort також повідомляється кількість консолідованих дублікатів. Зберігайте оригінальні результати аналізу для записів, які не створюють події на часовій шкалі, і для повного контексту артефакту.

Дійсні дати, які очікують обґрунтованого припущення щодо часового поясу, вважаються невирішеними часовими поясами, а не недійсними часовими мітками. Мітки часу не винайдено, і записи без відображеного часу не вставляються на часову шкалу як синтетичні події епохи.

Записи з дійсним часом поза запитуваним діапазоном вважаються відфільтрованими, а не невизначеними. Успішний експорт означає, що вибрані проаналізовані вхідні дані успішно оброблено; це не означає, що кожен артефакт був зібраний, кожне поле має мітку часу або кожну атаку можна виявити.

Експорти CSV можуть сплощувати вкладені метадані: профілі у відомостях про систему, точки монтування USB користувачів, елементи оболонки та інший структурований контекст у нативному JSON/JSONL можуть бути повнішими. Якщо ці поля важливі, використовуйте нативні вхідні дані. Хронологія не може відтворити дані, які експорт CSV пропустив. Непідтримувані ідентифікатори артефактів і некоректні вхідні файли спричиняють помилку, а не успішне завершення з частковими результатами.

Продуктивність і безпека виводу

Вхідні дані читаються потоково й обробляються паралельно. За замовчуванням кожен робочий потік записує відформатований фрагмент подій; фрагменти послідовно об'єднуються в порядку вхідних файлів без сортування і без повторного читання структур подій. CSV має один заголовок, навіть коли обробляється кілька файлів. Порядок виводу не залежить від кількості робочих потоків; він не означає хронологічного порядку.

Input files показує сукупний розмір вибраних проаналізованих вхідних даних і часових шкал Hayabusa. Results saved показує розмір збереженого файлу часової шкали. Обидва використовують ті самі зрозумілі людині KiB/MiB/GiB одиниці, що й auto-parse.

З --sort буфери скидаються в приватний тимчасовий каталог, після чого обмежені за розміром проходи злиття формують хронологічний вивід. Сортування використовує повні цілі секунди й наносекунди, зокрема для дат до 1970 року. Порядок подій з однаковим часом детермінований за будь-якої кількості робочих потоків і будь-якого бюджету сортування. Індикатор прогресу просувається з кожною подією, обробленою під час проміжних і остаточного злиття, зокрема повторних проходів. Він з'являється в терміналі й приховується, коли вивід перенаправлено.

--memory-limit діє лише з --sort: це сукупний бюджет буферів сортування, а не обмеження RSS процесу. Вхідні записи, накладні витрати на об'єкти/рядки JSON, буфери CSV і записи злиття потребують додаткової пам'яті. За малого бюджету кількість робочих потоків зменшується. --max-record-size обмежує розмір проаналізованого вхідного запису (за замовчуванням 16 МіБ); відформатований для читання масив/звіт JSON вважається одним вхідним документом верхнього рівня. Для більших документів може знадобитися вищий ліміт або, що краще, JSONL. Попереднє читання парсера CSV також враховується в цьому ліміті.

Тимчасовий дисковий простір має вміщати, окрім остаточних результатів, відформатовані фрагменти подій (за замовчуванням) або розгорнуті записи сортування та проходи злиття (--sort). В обох режимах вивід спершу готується в тимчасовому місці, а результати для вхідних даних, обробка яких завершилася невдачею, не публікуються. Один запис може дати багато подій, тому хронологія може бути значно більшою за вхідні дані. За потреби фільтруйте часовий діапазон/артефакти та вибирайте тимчасовий том із достатнім вільним місцем.

Ctrl+C скасовує кооперацію, видаляє приватні каталоги сортування/постановки та виходить із кодом 130. Для Linux і macOS це також стосується SIGTERM і SIGHUP. Скасування перевіряється під час читання, нормалізації, об’єднання та запису шкали часу перед початком публікації. Невловиме припинення або втрата живлення все ще може залишати тимчасові файли.

Існуючі виходи потребують -C. Хронологія не повинна перезаписувати вхідні дані, маніфести, локальні докази, на які посилаються, або їх захищені каталоги доказів. Помилки введення або помилки сортування залишають існуючу часову шкалу недоторканою. Завершена шкала часу розміщується поруч із місцем призначення та замінює її атомарно. Використовуйте нове ім’я вихідного файлу для кожного запуску, коли збереження попереднього повного експорту має значення.

Додаткові відомості

Поточні вхідні дані Juntei використовують скорочені мітки, такі як Comp, Filename, Args і Attr. MFT CSV також приймає поточні File, SN, ParentEntryNum, ParentSN, Type, USN, LogfileSN і Заголовки HasADS, зберігаючи генерації порядкових номерів і розрізнення DOS/ADS недоторканими. Старіші експортовані мітки залишаються прийнятними, а SourceField зберігає правопис у фактичному введенні. Вхід Hayabusa зберігає власне поле Computer. Метадані завантажувального сектора та дескриптора безпеки без позначок часу подій залишаються у вихідних результатах аналізу; він не створює подій на часовій шкалі.

Новіші багатотабличні парсери

Нативний JSON/JSONL зберігає назву кожної таблиці. Для окремого CSV адаптери браузерів, WebCache і Outlook визначають таблицю за схемою стовпців, тому перейменування CSV або суфікси джерел, які додає автоматичний аналіз, не змінюють тлумачення позначок часу. Для UAL використовуються лише його явні відомі поля позначок часу; лічильники доступу та сторонній текст, схожий на дату, не трактуються як дати навздогад.

Рядки властивостей Outlook проєктуються в події лише тоді, коли їхній оголошений тип — часовий або багатозначний часовий. Рядкове значення, що містить дату, так і залишається рядковим. Вкладені повідомлення зберігають свої ідентифікатори елементів і посилання на батьківські елементи, а час видобування вкладень не підставляється замість збережених позначок часу вкладень. Рядки файлів, одержувачів, контактів або властивостей без часу залишаються простежуваними в нативному виводі та у звіті про записи без часу.

До цих парсерів застосовуються ті самі схеми виводу CSV і JSONL; додавання нового артефакту не додає сотень стовпців CSV. Специфічний для артефакту контекст залишається в Details.