Перевірка парсерів¶
Крейти парсерів, які підтримує 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, даних за межами бінів куща, а також записів, вилучених або замінених під час відтворення. Порівняння для окремих артефактів включають:
- служби, значення та дії в разі збою з кущів
SYSTEMWindows 7 і «брудних» кущів Windows 11; - RecentDocs, декодовані за допомогою yarp і libfwsi на дев'яти публічних кущах
NTUSER.DAT; - заплановані завдання, незалежно декодовані за допомогою yarp на семи публічних кущах
SOFTWARE, що охоплюють Windows 7–11, Server 2012 R2 і Server 2022; і - структури облікових записів SAM, порівняні з
dissect.targetна семи публічних кущахSAM.
Повний перелік еталонних інструментів, досліджень форматів, специфікацій і джерел публічних доказів див. у розділі Подяки.