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

Перевірка парсерів

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

Наведені нижче твердження зберігають відомості про перевірку, які раніше містилися в основному README Juntei. Актуальні тестові дані та подробиці реалізації дивіться в репозиторіях парсерів за посиланнями.

Amcache

Juntei використовує ys-amcache-parser — форк amcache-forensic від Security Ronin під ліцензією Apache-2.0. Його документація щодо виводу визначає кожне поле виконуваних файлів, пристроїв, знахідок і зведення.

Головна файлова таблиця

Крейт mft у ys-ntfs-parser — це підтримуваний форк крейта mft Омера Бен-Амрама. На восьми файлах $MFT — зразку крейта, справі NIST про злом і шести файлах DFIR Artifact Museum — 1 048 733 рядки CSV і стовпці збіглися з еталонним парсером у тому самому порядку. Порівняння охоплювали типовий вивід, --all-times, --short-names і --cutoff; навмисною відмінністю було представлення позначок часу.

Журнал транзакцій NTFS ($LogFile)

Крейт logfile у ys-ntfs-parser підтримується на основі Sootmark ntfslog. Його перевірка охоплює шість повних журналів DFIR Artifact Museum, публічні тестові дані версій 1.1 і 2.0, декодовані метадані redo/undo, а також записи журналу, порівняні з незалежно проаналізованими даними NTFS. Докладні відомості про покриття та відомі відмінності див. у репозиторії парсера.

Juntei додає тести CLI, які порівнюють кожне поле CSV з JSON і JSONL на публічному тестовому томі go-ntfs (2 129 записів), перевіряють окремі дані redo/undo і довжини сирого корисного навантаження, тестують пошкоджені журнали, відмовляються перезаписувати докази і не дають поточним шляхам MFT слідувати за повторно використаними номерами записів. Регресійні випадки розрізняють уражені записи MFT і відкритий атрибут, через який вони записуються, перевіряють пласкі метадані записів каталогів/атрибутів даних і запобігають поєднанню MFT з різних томів. Тести auto-parse для кількох томів охоплюють окремі файли CSV і один файл JSONL із відомостями про походження.

Команду також перевірено на шести приватно зібраних журналах Windows: усі 708 465 експортованих записів CSV збіглися з JSONL поле в поле, а експорти auto-parse для кожного хоста зберегли ту саму кількість записів. Вихідні докази не поширюються разом із репозиторієм. Ці перевірки підтверджують узгодженість виводу, а не те, що кожна зареєстрована транзакція відповідає завершеній дії користувача.

Prefetch

ys-prefetch-parser — це підтримуваний форк frnsc-prefetch від ForensicRS. Його декодований вивід порівнювали з libscca — незалежною реалізацією Prefetch від libyal.

Журнал USN

Крейт usn у ys-ntfs-parser — це підтримуваний форк Sootmark usn. На шести реальних журналах шляхи батьківських каталогів Juntei, відтворені з урахуванням часу, збіглися з незалежним парсером скрізь, де той парсер розв'язав шлях. Juntei також розв'язав 4 321 запис, які порівнюваний парсер залишив нерозв'язаними. Його засіб вирізання не створив жодних хибних записів під час тестування на 880 МБ даних $MFT.

Індекси каталогів ($I30)

Модуль i30 крейта mft у ys-ntfs-parser читає записи INDX та їхній slack. На двох потоках $I30 тому, створеного за допомогою ntfs-3g (test_files/i30/ у Juntei), і на трьох публічних зразках $I30, записаних Windows, його записи, що використовуються, і записи у slack збіглися із записами dfir_ntfs Максима Суханова з тими самими іменами та часом. Там, де dfir_ntfs повідомляє батьківське посилання понад 32 біти (перезаписані байти батьківського елемента), Juntei залишає батьківський елемент порожнім.

Завантажувальний сектор ($Boot)

Крейт boot у ys-ntfs-parser — власна розробка Yamato Security. На п'яти публічних файлах $Boot з DFIR Artifact Museum (Windows 10, 11 і Server 2012 R2) кожне поле збіглося з еталонним парсером. На томах, створених за допомогою mkntfs, із секторами 512, 1 024 і 4 096 байтів і кластерами від 4 КіБ до 64 КіБ розміри, кластери $MFT і $MFTMirr та серійні номери збіглися з fsstat з The Sleuth Kit. $Boot Windows 11 з Museum має серійний номер тому, який записує файл LNK того самого хоста, а п'ять файлів мають однаковий завантажувальний код.

Дескриптори безпеки ($Secure:$SDS)

Крейт secure у ys-ntfs-parser — власна розробка Yamato Security. На п'яти потоках $SDS з Museum (7 808 дескрипторів, 60 781 ACE) ідентифікатори безпеки, хеші, зміщення, власники, групи, прапорці керування та кількість ACE збіглися з еталонним парсером, а тип, прапорці, маска, SID і типи об'єктів кожного ACE збіглися з dissect.ntfs. Кожен записаний хеш належить своєму дескриптору, кожна дзеркальна копія збігається зі своїм записом, і кожен дескриптор має SDDL, включно з умовами його 3 384 ACE зворотного виклику (callback ACE).

SRUM

ys-srum-parser базується на крейтах ese і srum від Sootmark. На 11 реальних базах даних кожен стовпець у 45 255 виведених записах збігся з незалежним декодуванням значень, які надає dissect.esedb.

Журналювання доступу користувачів

parse-ese ual читає бази даних UAL тим самим зчитувачем ESE. На 16 реальних базах даних (308 рядків, із них 145 рядків клієнтів) кожне значення збіглося з незалежним декодуванням значень, які надає dissect.esedb. У кожному рядку клієнта першим днем із лічильником був день InsertDate за UTC, останнім — день LastAccess за UTC, а сума лічильників дорівнювала TotalAccesses.

Веб-браузери

ys-browser-parser — це підтримуваний форк крейтів browser, sqlite і plist від Sootmark, обраний після порівняння з іншою бібліотекою Rust, а також із Plaso, Velociraptor (SQLiteHunter) і Hindsight на тих самих базах даних. parse-sqlite browser порівнювали з бібліотекою sqlite3, що читала копію кожної бази даних разом із її файлом -wal, на 38 публічних базах даних: тестових файлах Plaso (Chrome від 8 до 68, Firefox від 2 до 118), профілях, створених Chromium 150 і Firefox 140, і тестових базах даних історії форм ys-browser-parser. Усі 293 відвідування, 21 завантаження, 692 файли cookie і 41 запис форм збіглися. Видалені записи було відновлено лише там, де записи справді видаляли: дві сторінки та два відвідування, видалені з історії Firefox 140, з їхнім часом, URL і заголовками, а також видалені записи форм тестових баз даних.

Internet Explorer і застарілий Edge (WebCache)

parse-ese webcache читає WebCacheV01.dat за допомогою ys-browser-parser. Його порівнювали з читачем ESE з dissect.database на двох публічних базах даних WebCache із Plaso: одній з Internet Explorer 11 та одній «брудній» з Windows 10, що містить історію, завантаження та файли cookie застарілого Edge. Усі 4 156 рядків збіглися значення в значення: 44 контейнери, 182 записи історії, 6 завантажень, 170 файлів cookie і 3 754 інші записи. Під час порівняння записи завантажень декодувалися незалежно. Записи, які бази даних позначають як видалені, було виключено з обох сторін.

Outlook

parse-file outlook читає файли PST, OST, .msg і .oft за допомогою ys-outlook-parser, чий читач PST і OST — це форк outlook-pst-rs від Microsoft, а читач .msg написано за відкритими специфікаціями Microsoft.

  • PST і OST: 66 публічних файлів PST і OST (Apache Tika, artemis, приклади Aspose.Email, DFIR Artifact Museum, Enron, приклади GroupDocs, java-libpst, тестові дані libyal, outlook-pst-rs і pst-extractor) порівняли з libpff властивість за властивістю: кожну властивість кожного сховища, папки, повідомлення, одержувача й вкладення, а також дані кожного вкладення. 324 175 фактів збіглися, і жоден не відрізнявся без пояснення. Решта — це те, що читає лише ys-outlook-parser (15 846 фактів про повідомлення, одержувачів і вкладення, на яких libpff зазнає невдачі, і про сховище, яке він не може відкрити; 8 223 — про приховані елементи), клітинки одержувачів, які libpff подає порожніми або нульовими, хоча їхні рядки вказують, що їх немає (49 077), ідентифікатори записів (entry ids) і типи папок, обчислені так, як це робить MAPI (2 004), а також об'єкти та вбудовані повідомлення, які libpff подає як необроблені дані (480). Два з цих файлів не може прочитати взагалі жоден із двох читачів.
  • .msg і .oft: 214 публічних файлів із 2 404 повідомленнями, одержувачами й вкладеннями та 41 002 властивостями порівняли з extract-msg: 110 114 фактів збіглися, і кожен із 791 відмінного має пояснення: 601 — це помилки extract-msg із часом, 35 походять із файлів ANSI, які він декодує не в тій кодовій сторінці, а решта — це те, що він пропускає або додає.
  • Пошкоджені вхідні дані: понад 260 000 мутованих файлів .msg і 160 000 мутованих PST, а також спеціально сформовані файли прочитано без збоїв, зависань і необмеженого споживання пам'яті.

Ярлики LNK

ys-lnk-parser — це підтримуваний форк крейта shell від Sootmark. Його порівнювали на 1 118 публічних ярликах. Із 30 стовпців CSV, спільних з еталонним парсером, відрізнялися 16 окремих значень: 13 цільових шляхів, що стосувалися пошкоджених, обрізаних, заповнювальних елементів, MTP або елементів панелі керування; два списки блоків додаткових даних, що стосувалися невідомих або обрізаних блоків; і одне посилання MFT, яке еталонний парсер прочитав з інших байтів. Juntei повідомляє про пошкоджені структури замість того, щоб мовчки їх нормалізувати.

Jump Lists

ys-jump-lists-parser використовує напрацювання Sootmark щодо складених файлів і Jump Lists, а вбудовані посилання декодує ys-lnk-parser. На 77 публічних Jump Lists усі 13 057 спільних комірок порівняння — включно з позначками часу з точністю до 100 нс — збіглися з еталонним парсером. Шість файлів, які еталон відхилив (порожні користувацькі списки, відсутній кінцевий блок або файл, який не був Jump List), Juntei або декодував, або явно повідомив про них.

ShimCache

ys-shimcache-parser — це підтримуваний форк shimcache-forensic від Security Ronin з підтримкою кущів реєстру та журналів транзакцій. На 20 публічних кущах SYSTEM (24 набори керування та 7 290 записів) плюс 17 окремих значеннях AppCompatCache кожен запис збігся за шляхом, часом, прапорцем виконання, прапорцями та позицією з виводом еталонного парсера.

Карантин Microsoft Defender

ys-defender-history-parser — це підтримуваний форк крейта defender від Sootmark. Папку карантину, записану у форматі Defender тестовими засобами парсера, послідовно декодує незалежний засіб читання карантину dissect.target.

Артефакти, отримані з реєстру

ys-registry-parser порівнюється з yarp щодо розподілених ключів, значень, відтворення транзакцій «брудного» куща, відновлення з вільних комірок, cell slack, даних за межами бінів куща, а також записів, вилучених або замінених під час відтворення. Порівняння для окремих артефактів включають:

  • служби, значення та дії в разі збою з кущів SYSTEM Windows 7 і «брудних» кущів Windows 11;
  • RecentDocs, декодовані за допомогою yarp і libfwsi на дев'яти публічних кущах NTUSER.DAT;
  • заплановані завдання, незалежно декодовані за допомогою yarp на семи публічних кущах SOFTWARE, що охоплюють Windows 7–11, Server 2012 R2 і Server 2022; і
  • структури облікових записів SAM, порівняні з dissect.target на семи публічних кущах SAM.

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