ซุปเปอร์ไทม์ไลน์¶
super-timeline แปลงอาร์ติแฟกต์ที่พาร์สแล้วให้เป็นเหตุการณ์ที่ใช้ schema ร่วมกัน
เอาต์พุต ไม่ถูกเรียงลำดับโดยค่าเริ่มต้น แต่จะเป็นไปตามลำดับไฟล์อินพุตที่ค้นพบและลำดับ projection ของพาร์เซอร์แต่ละตัว
(ลำดับที่ timestamp ถูกแปลงออกมาเป็นเหตุการณ์) โดยไม่ขึ้นกับว่า worker ตัวใดทำงานเสร็จก่อน
เพิ่ม --sort เพื่อเรียงตามลำดับเวลาและรวมรายการที่ซ้ำกัน
เรคคอร์ด Prefetch หนึ่งรายการอาจมีเวลาที่เรียกใช้งานหลายค่า และเรคคอร์ด MFT หนึ่งรายการอาจมี timestamp ของไฟล์ตั้งแต่แปดค่าขึ้นไป
แต่ละค่าจะกลายเป็นเหตุการณ์หนึ่งรายการที่มีป้ายกำกับของตนเอง
วิธีนี้ช่วยให้เปรียบเทียบหลักฐานจากแหล่งต่าง ๆ ได้ง่ายขึ้น โดยไม่สูญเสียความหมายที่แท้จริงของ timestamp แต่ละค่า
ให้เริ่มจากผลลัพธ์ของ auto-parse แทนที่จะใช้ไดเรกทอรีหลักฐานต้นฉบับโดยตรง:
ให้เก็บไฟล์ที่พาร์สแล้ว manifest และหลักฐานต้นฉบับไว้ ไทม์ไลน์เป็นเพียง projection ของข้อมูลเพื่อการวิเคราะห์ ไม่ได้ใช้แทนเรคคอร์ดเหล่านั้น และไม่ได้สร้างไฟล์ storage แบบเนทีฟของ 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 ระบุซ้ำได้หลายครั้ง หรือใช้เป็นอินพุตเพียงอย่างเดียวก็ได้
ตัวเลือกนี้นำเข้า timestamp ของเหตุการณ์/การแจ้งเตือนและบริบทของกฎจากผลลัพธ์ที่มีอยู่แล้ว โดยไม่ต้องรัน Hayabusa
รองรับเหตุการณ์ระดับ informational ที่ Details เป็นสตริงด้วย
--artifact mft,prefetch จำกัด projection ไว้เฉพาะ ID อาร์ติแฟกต์ที่เลือก
ขอบเขตเวลาจะรวมค่าที่ขอบด้วย (inclusive) และต้องระบุ UTC offset หรือ Z อย่างชัดเจน
การเลือกอินพุต¶
| อินพุต | วิธีระบุอาร์ติแฟกต์และคอมพิวเตอร์ |
|---|---|
-d DIR |
manifest.json ให้ข้อมูลงานหลักที่สำเร็จ ID อาร์ติแฟกต์ คอมพิวเตอร์ และไฟล์เอาต์พุตที่แน่ชัด งานรองของ auto-parse -j จะถูกตัดออก เพื่อป้องกันการนำเข้าข้อมูลชุดเดียวกันซ้ำสองชุด |
-f FILE |
JSON/JSONL แบบเนทีฟใช้ฟิลด์ Artifact และ Comp ที่ฝังอยู่ในเรคคอร์ด ไฟล์ส่งออกที่ไม่มีแท็กเหล่านี้ต้องใช้ --input-artifact ส่วน CSV เดี่ยวต้องระบุตัวเลือกนี้เสมอ |
--computer NAME |
ค่าสำรองเมื่อเรคคอร์ดอินพุตไม่มีชื่อคอมพิวเตอร์ หากไม่ระบุ คอมพิวเตอร์ที่ไม่ทราบชื่อจะถูกระบุไว้อย่างชัดเจนว่า Unknown |
--hayabusa FILE |
JSONL ที่มี timestamp ของ Hayabusa เมทาดาทาของกฎ คอมพิวเตอร์ และ EvtxFile (ถ้ามี) |
manifest รุ่นปัจจุบันรองรับการย้ายไดเรกทอรีที่พาร์สแล้วไปไว้ที่อื่น:
พาธเอาต์พุตแบบสัมบูรณ์ที่บันทึกไว้จะถูกจับคู่ไปยังตำแหน่งภายใต้ไดเรกทอรีใหม่
อินพุตต้องอยู่ภายในไดเรกทอรีนั้น รวมถึงเป้าหมายของ symbolic link ด้วย
รองรับไดเรกทอรีรูปแบบเดิมที่แยกตามอาร์ติแฟกต์ของ Amcache, SRUM และ Jump Lists
ส่วนไดเรกทอรีที่แยกตามหมวดหมู่ต้องมี OutputFiles ระบุไว้อย่างชัดเจน
รองรับ manifest รุ่นปัจจุบันที่ใช้พาธสัมพัทธ์กับไดเรกทอรีเอาต์พุต และการส่งออกหลายตารางที่ถูกทำให้แบน (flatten) คำสั่งนี้รู้จักอาร์ติแฟกต์ทุกชนิดที่การพาร์สอัตโนมัติจัดให้ทำงาน รวมถึงตารางเบราว์เซอร์, WebCache, Outlook และ UAL ที่เพิ่มเข้ามาใหม่
เมื่อ manifest ระบุอิมเมจ VHDX หรือ E01 การอ้างอิงแหล่งที่มาจะมีทั้งอิมเมจและพาธภายในอิมเมจ และชื่ออิมเมจจะถูกเก็บไว้ในบริบทของเหตุการณ์ ไม่จำเป็นต้องมีพื้นที่ทำงานชั่วคราวที่ใช้เตรียมข้อมูล (staging) อยู่ เพื่ออ่านผลลัพธ์ที่พาร์สแล้ว
แหล่งที่มาดิบถูกนำมาจากเรกคอร์ดหรือคำสั่งรายการที่ชัดเจน ด้วย -d การอ้างอิงซอร์สดิบจะสัมพันธ์กับไดเร็กทอรีหลักฐาน และ Details.ParsedFile จะสัมพันธ์กับไดเร็กทอรีที่แยกวิเคราะห์ ตาราง SRUM CSV จะถูกกำหนดให้กับฐานข้อมูลก็ต่อเมื่อโฮสต์มี SRUDB.dat ที่รวบรวมไว้ซึ่งสามารถระบุตัวตนได้หนึ่งรายการเท่านั้น มิฉะนั้น SourceFile จะชี้ไปที่ไฟล์ที่แยกวิเคราะห์ และ Details.RawSourceAvailable คือ false
อินพุตเดี่ยวจะถูกอ้างอิงด้วยชื่อไฟล์ อินพุตที่มีชื่อไฟล์ซ้ำกันจะใช้การอ้างอิง ./Inputs/<ID>/<filename> ที่แตกต่างกัน
พาธแหล่งข้อมูลดิบแบบสัมบูรณ์ที่อยู่นอกรากหลักฐานที่รู้จักจะใช้ตัวระบุ ./Sources/<ID>/<filename>
การอ้างอิงแบบทึบ (opaque) เหล่านี้ยังคงแยกแยะแหล่งที่มาออกจากกันได้ โดยไม่ส่งชื่อไดเรกทอรีแบบสัมบูรณ์ของนักวิเคราะห์ออกไปในผลลัพธ์
หากต้องการทราบแหล่งที่มาต้นฉบับ ให้ดูเรคคอร์ดเนทีฟโดยใช้ ParsedFile และ InputRecord
ส่วนพาธที่บันทึกอยู่ในหลักฐาน เช่น พาธไฟล์ปฏิบัติการของ Windows จะคงไว้ตามเดิม
ฟิลด์ร่วมของเหตุการณ์¶
| ฟิลด์ | ความหมาย |
|---|---|
Timestamp |
UTC ตามรูปแบบ RFC 3339 เขียนทศนิยมของวินาทีเก้าหลักเพื่อให้เรียงลำดับได้สม่ำเสมอ การเติมศูนย์ให้ครบหลักไม่ได้ทำให้ความละเอียดเพิ่มขึ้น |
Comp |
คอมพิวเตอร์ที่เชื่อมโยงกับเรคคอร์ดอินพุต |
Artifact |
ตัวระบุอาร์ติแฟกต์ที่คงที่ เช่น mft, prefetch, srum หรือ hayabusa |
TimestampType |
คำอธิบายความหมายของ timestamp เช่น MFT SI Data modified |
User |
บัญชีหรือ SID ที่บันทึกไว้ หากอะแดปเตอร์มีข้อมูลนี้ อาจว่างได้ |
Path |
ไฟล์ คีย์รีจิสทรี หรืออ็อบเจกต์อื่นตามชนิดของอาร์ติแฟกต์ที่เหตุการณ์นี้เกี่ยวข้อง |
Message |
คำอธิบายสั้น ๆ สำหรับโปรแกรมดูไทม์ไลน์ |
SourceFile |
การอ้างอิงแหล่งข้อมูลดิบแบบสัมพัทธ์กับหลักฐาน หรือตัวระบุแหล่งที่มาแบบสัมพัทธ์เมื่อไม่ทราบราก หากไม่มีทั้งสองอย่างจะใช้ไฟล์ที่พาร์สแล้วเป็นค่าสำรองตามที่อธิบายไว้ข้างต้น |
SourceField |
ฟิลด์ที่พาร์สแล้วหรือตำแหน่งในโครงสร้างซ้อน ซึ่งเป็นที่มาของ timestamp นั้นอย่างเจาะจง |
RecordID |
ตัวตนของเรคคอร์ดตามรูปแบบเฉพาะของแต่ละอาร์ติแฟกต์ ไม่จำเป็นต้องเป็น Record ID ของ EVTX |
Details |
บริบทแบบมีโครงสร้าง ได้แก่ timestamp ต้นฉบับ ความละเอียด ฐานเวลา บทบาทของเวลา ไฟล์ที่พาร์สแล้ว เรคคอร์ด/ตำแหน่งในอินพุต และเมทาดาทาการกู้คืน/กฎเท่าที่มี |
ใน CSV Details เป็นเซลล์ JSON ที่อยู่ในเครื่องหมายคำพูด ส่วนใน JSONL จะเป็นอ็อบเจกต์
โปรไฟล์ Timesketch จะเปลี่ยน Timestamp, TimestampType และ Message เป็น datetime, timestamp_desc และ message ตามลำดับ
โดยยังคงฟิลด์ที่บอกที่มา (provenance) อื่น ๆ ไว้
ทั้งสามฟิลด์นี้คือฟิลด์บังคับสามฟิลด์สำหรับการนำเข้า Timesketch
Details ตั้งใจเก็บเฉพาะบริบทที่คัดเลือกแล้ว ไม่ได้เก็บข้อมูลไบนารีทั้งหมดหรือทุกฟิลด์ของเรคคอร์ดเนทีฟ
สตริง อาร์เรย์ และอ็อบเจกต์ที่ยาวจะถูกจำกัดขนาดและทำเครื่องหมาย ProjectionOmitted ไว้
หากต้องการตรวจสอบเรคคอร์ดเนทีฟฉบับเต็ม ให้ดู Details.ParsedFile, InputRecord และ Location
สำหรับ CSV หมายเลขเรคคอร์ดจะนับเรคคอร์ด CSV ที่อยู่ถัดจากส่วนหัว ไม่ได้นับบรรทัดจริงที่อาจอยู่ภายในเซลล์ที่มีเครื่องหมายคำพูด
สำหรับ JSONL คือหมายเลขบรรทัด และสำหรับ JSON คือหมายเลขเอกสารระดับบนสุดพร้อมตำแหน่งภายในโครงสร้างซ้อน
ความหมายของเวลาแต่ละชนิด¶
Timestamp เป็นหลักฐานเกี่ยวกับอ็อบเจกต์ที่ถูกบันทึกไว้ ลำพังตัวมันเองไม่ใช่ข้อพิสูจน์ว่ามีการเรียกใช้งานหรือการโจมตี อะแดปเตอร์จึงตั้งใจรักษาความแตกต่างต่อไปนี้ไว้:
| อาร์ติแฟกต์ | การตีความในไทม์ไลน์ |
|---|---|
| MFT | เวลาแก้ไข เวลาเข้าถึง เวลาเปลี่ยนเมทาดาทา และเวลาสร้างของ SI และ FN แยกเป็นคนละเหตุการณ์ แอตทริบิวต์ FN แต่ละชื่อยังคงแยกจากกัน เมื่อใช้ --sort ฟิลด์ SI ที่ซ้ำกันในแถวของแต่ละชื่อไฟล์จะถูกรวมเข้าด้วยกัน เวลาของไฟล์หลักที่แถว ADS มีซ้ำอยู่จะถูกตัดออกในทั้งสองโหมด ชื่อที่กู้คืนจาก slack ของ FILE record จะมีเหตุการณ์ FN ที่กู้คืนแยกเป็นของตนเอง |
| I30 | เมทาดาทา FN/ดัชนีที่จัดเก็บไว้ พร้อมบริบทของ slack/การกู้คืนเมื่อมี เวลาเหล่านี้ไม่ใช่ timestamp ของการเขียนดัชนีไดเรกทอรี |
| USN Journal | timestamp ของเรคคอร์ดใน journal และเหตุผลของการอัปเดต (update reason) เรคคอร์ดหนึ่งรายการอาจอธิบายการเปลี่ยนแปลงหลายอย่าง และไม่จำเป็นต้องบันทึกเวลาเริ่มต้นที่แน่ชัดของการเปลี่ยนแปลงเหล่านั้น |
| LogFile | สแนปช็อต timestamp ใน redo/undo ที่จัดเก็บไว้ และเมทาดาทาของชื่อไฟล์ redo และ undo ยังคงแยกจากกัน LSN และ offset ในไฟล์เป็นตัวระบุ จะไม่ถูกแปลงเป็นวันที่ |
| Prefetch | เวลาที่เรียกใช้งานซึ่งถูกบันทึกไว้ เมื่อใช้ --sort เวลาเหล่านี้จะถูกรวมกับรายการที่ตรงกันในไฟล์ส่งออกไทม์ไลน์ของ Prefetch เมทาดาทาเวลาสร้างวอลุ่มที่ถูกอ้างอิงจะมีป้ายกำกับแยกต่างหาก |
| ฐานข้อมูล SQLite ของเบราว์เซอร์ | การเข้าชมที่บันทึกไว้ เมทาดาทาการเข้าชมเพจครั้งล่าสุดที่กู้คืนได้ เวลาเริ่ม/สิ้นสุดการดาวน์โหลด เวลาสร้าง/เข้าถึง/หมดอายุของคุกกี้ และเวลาใช้ครั้งแรก/ครั้งล่าสุดของประวัติฟอร์ม หรือเรคคอร์ดการลบ (tombstone) เวลาสิ้นสุดการดาวน์โหลดเพียงอย่างเดียวไม่ได้พิสูจน์ว่าการดาวน์โหลดสำเร็จหรือมีการเรียกใช้งานไฟล์ ส่วนเวลาหมดอายุของคุกกี้เป็นเพียงกำหนดเวลาที่ตั้งค่าไว้ สถานะการกู้คืน ระดับความเชื่อมั่น และแหล่งที่มาของข้อมูลยังคงอยู่ในบริบท |
| WebCache ของ Internet Explorer / Edge รุ่นเก่า | เวลาเข้าถึง สร้าง/แก้ไข หมดอายุ และซิงโครไนซ์ของรายการที่จัดเก็บไว้ เวลาเริ่มดาวน์โหลด เมทาดาทาของคุกกี้ และเวลาเข้าถึง/ล้างข้อมูล (scavenging) ของคอนเทนเนอร์ ข้อมูลการดูแลแคชไม่ได้เป็นหลักฐานโดยอัตโนมัติว่าผู้ใช้เปิดเพจนั้น |
| Outlook PST, OST, MSG และ OFT | เวลาส่งและเวลาส่งถึงของข้อความ เวลาสร้าง/แก้ไขของโฟลเดอร์ รายการ และไฟล์แนบ เวลาเริ่ม/สิ้นสุด/การเตือนของปฏิทิน เวลาเริ่ม/ครบกำหนด/เสร็จสิ้น/การเตือนของงาน (task) และคุณสมบัติที่ประกาศชนิดเป็นเวลาไว้อย่างชัดเจน เวลาที่กำหนดไว้ล่วงหน้าไม่ได้พิสูจน์ว่าการประชุมเกิดขึ้นจริง การเตือนทำงานจริง หรือมีการเรียกใช้งานโปรแกรม เวลาส่งถึงที่จัดเก็บไว้ไม่ได้พิสูจน์ว่าข้อความถูกอ่านแล้ว |
| การบันทึกการเข้าถึงของผู้ใช้ (UAL) | เมตาดาต้าการเข้าถึงครั้งแรก/ครั้งสุดท้าย การแทรก/การสร้างฐานข้อมูล เวลาบูตระบบปฏิบัติการที่เห็นครั้งแรก/ครั้งสุดท้าย และที่จัดเก็บไว้ บทบาท บัญชี ที่อยู่ต้นทาง และตัวนับรายวันยังคงมีบริบทอยู่ วันที่/การนับรายวันไม่ได้เกิดจากการเข้าสู่ระบบตอนเที่ยงคืน ข้อมูลประจำตัวที่ยังไม่กำหนดเวลาและแถว DNS จะยังคงอยู่ในผลลัพธ์ที่แยกวิเคราะห์ดั้งเดิม |
| Amcache | เวลาเขียนล่าสุดของคีย์ inventory บริบทจากคีย์วอลุ่มแม่ วันที่ติดตั้งที่บันทึกไว้ และเมทาดาทาเวลาลิงก์ของ PE การปรากฏใน inventory หรือ LinkDate เพียงอย่างเดียวไม่ได้พิสูจน์การเรียกใช้งาน |
| ShimCache | เวลาแก้ไขไฟล์ที่จัดเก็บไว้ เมทาดาทาการอัปเดตแคช และเวลาเขียนล่าสุดของคีย์แคช ไม่มีค่าใดที่ถือเป็น timestamp ของการเรียกใช้งานโดยอัตโนมัติ |
| SRUM | timestamp/ช่วงเวลารวบรวม (bucket) ของ provider เวลาเริ่มการเชื่อมต่อ ฟิลด์ช่วงเวลาเริ่ม/สิ้นสุดที่ระบุไว้อย่างชัดเจน และเมทาดาทาของตัวระบุแอปพลิเคชัน จำนวนไบต์ ระยะเวลา และตัวนับอื่น ๆ ไม่ใช่วันที่ |
| LNK | timestamp MAC ของเป้าหมาย เวลาสร้างตัวระบุการติดตาม (tracking identifier) และเวลาของ shell item เวลาเหล่านี้อธิบายเมทาดาทาของเป้าหมายที่จัดเก็บไว้ ไม่จำเป็นต้องเป็นเวลาที่เปิดทางลัดนั้น |
| Jump Lists | เมทาดาทาการใช้งานครั้งล่าสุดของแต่ละรายการ เวลาสร้างตัวระบุการติดตาม และเวลาของเป้าหมายใน LNK ที่ฝังอยู่ โดยค่าเริ่มต้นจะไม่รวมเวลาของไฟล์คอนเทนเนอร์ที่มาจากฝั่งการเก็บรวบรวม |
| ข้อมูลที่ Defender กักกัน | timestamp ของรายการ และเวลาสร้าง/เข้าถึง/เขียนของทรัพยากรที่จัดเก็บไว้ เวลาที่แยกไฟล์ออกมาไม่ใช่หลักฐานของกิจกรรมบนเครื่องปลายทาง |
| BAM, UserAssist, FeatureUsage | ฟิลด์กิจกรรมที่บันทึกไว้ (ถ้ามี) โดยแยกบริบทเวลาเขียนล่าสุดของคีย์ไว้ต่างหาก ตัวนับที่ไม่มีเวลาจะไม่สร้างเหตุการณ์ |
| RecentDocs, MRU, Open/Save MRU, ShellBags, Office | เวลาใช้งาน/เวลาที่เชื่อถือเอกสาร (trust)/เวลาของ shell item ที่บันทึกไว้ และบริบทของคีย์ เวลาของคีย์ที่เก็บรายการทั้งชุดไม่ใช่เวลาใช้งานล่าสุดของแต่ละรายการในชุดนั้น |
| SAM และความลับ LSA | เมทาดาทาการเข้าสู่ระบบ/รหัสผ่าน/การหมดอายุของบัญชี หรือเวลาที่ตั้งค่าความลับ ตามที่บันทึกไว้ และเวลาของคีย์ที่เกี่ยวข้อง ข้อมูลเหล่านี้ใช้แทน event log ของการยืนยันตัวตนไม่ได้ |
| บริการ, TaskCache, persistence ในรีจิสทรี, BCD | เมทาดาทาของคีย์/การกำหนดค่า และเวลาของงาน (task) ที่บันทึกไว้อย่างชัดเจน การเขียนคีย์บริการเพียงอย่างเดียวไม่ได้พิสูจน์ว่าบริการทำงาน |
| เครือข่ายและ USB | ฟิลด์โปรไฟล์เครือข่าย/lease และฟิลด์การติดตั้ง/การเสียบ/การถอดอุปกรณ์ พร้อมบริบทของคีย์รีจิสทรี เวลา MountPoints2 ของผู้ใช้ในเอาต์พุต USB แบบเนทีฟจะคงแหล่งที่มาเป็นไฮฟ์ของผู้ใช้ที่ตรงกัน |
| ข้อมูลระบบ, โปรแกรมที่ติดตั้ง, AppCompat, ประวัติแอปพลิเคชัน | ฟิลด์เวลาติดตั้ง เวลาปิดเครื่อง inventory/กิจกรรม และเมทาดาทาของคีย์ที่ระบุไว้อย่างชัดเจน อาร์เรย์โปรไฟล์/เวอร์ชันในเอาต์พุตข้อมูลระบบแบบเนทีฟจะคงเวลาที่ซ้อนอยู่ไว้ |
| นโยบายการตรวจสอบ, การตั้งค่าความปลอดภัย, MuiCache, รีจิสทรีทั่วไป | เวลาเขียนล่าสุดของคีย์เมื่อมีให้ ค่า/ตัวนับที่ไม่มีเวลายังคงดูได้ในอินพุตแบบเนทีฟ |
| Persistence Hunter | เวลาเขียนล่าสุดของคีย์ที่ใช้เป็นหลักฐานสนับสนุน และเวลาเปลี่ยนแปลงที่เชื่อมโยงได้ ข้อค้นพบไม่ได้เป็นการติดตั้งที่มี timestamp หรือคำตัดสินว่าระบบถูกบุกรุก |
| Hayabusa | timestamp ของเหตุการณ์/การแจ้งเตือน พร้อมกฎ ระดับ แชนเนล Event ID และบริบทรายละเอียดเท่าที่มี กฎหลายข้อและแถว correlation ที่แตกต่างกันยังคงแยกจากกัน |
การส่งออกแบบค่าเริ่มต้นจะเก็บ projection ของ timestamp ไว้ทั้งหมด รวมถึงเมทาดาทาที่ซ้ำกัน
โดยไม่เรียงลำดับแบบรวมทั้งหมด (global) และไม่รวมรายการซ้ำ
เมื่อใช้ --sort projection ที่ซ้ำกันจะถูกรวมเข้าด้วยกัน จึงอาจได้จำนวนแถวน้อยกว่าการส่งออกแบบไม่เรียงลำดับจากอินพุตชุดเดียวกัน
timestamp ที่มีค่าเท่ากันหลายรายการแต่มีความหมายหรือแหล่งหลักฐานต่างกันจะถูกเก็บไว้ครบในทั้งสองโหมด
เกณฑ์ที่ใช้ตัดสินว่าซ้ำกันประกอบด้วยคอมพิวเตอร์ แหล่งที่มา อาร์ติแฟกต์ เรคคอร์ด ความหมายของเวลา และสถานะการกู้คืน
แถวที่ถูกรวมจะบันทึก DuplicateCount และพาธ/ฟิลด์แหล่งที่มาทางเลือกในจำนวนจำกัด
แหล่งที่มาที่แตกต่างกันจะไม่ถูกรวมเข้าด้วยกันเพียงเพราะพาธและ timestamp ดูคล้ายกัน
เมื่อ resolve แหล่งข้อมูลดิบไม่ได้ ตัวตนของเรคคอร์ดอินพุตจะถูกเก็บไว้ด้วย เพื่อไม่ให้ข้อมูลที่เก็บมาต่างครั้งกันถูกยุบรวมเป็นรายการเดียว
ความละเอียด เวลาท้องถิ่น และสมมติฐาน¶
ฟิลด์ที่ทราบว่าเป็น UTC และ timestamp ที่ระบุ offset ไว้ชัดเจนจะถูกแปลงให้เป็น UTC ค่าต้นฉบับและความละเอียดที่บันทึกไว้จะยังคงถูกเก็บไว้ รวมถึง FILETIME ที่ละเอียดระดับ 100 ns พาร์เซอร์ต้นทางหรือโปรแกรมดูปลายทางอาจปัดเศษเวลาไปแล้ว และคำสั่งนี้ไม่สามารถกู้ความละเอียดที่สูญเสียไปกลับคืนมาได้
ฟิลด์ shell item/FAT บางฟิลด์มีความหมายเป็นเวลาท้องถิ่น แม้พาร์เซอร์ต้นทางจะเขียนค่าออกมาพร้อม Z ก็ตาม
ไทม์ไลน์จะคงค่าที่พาร์สแล้วและที่มาของฟิลด์ไว้ แต่ไม่สามารถกู้เขตเวลาของเครื่องปลายทางที่ขาดหายไป
หรือตรวจสอบความถูกต้องของการแปลงค่าในขั้นต้นทางได้
ให้ตรวจสอบอาร์ติแฟกต์ดิบและการตั้งค่าของเครื่องปลายทางก่อนนำเวลาดังกล่าวไปใช้เชื่อมโยงเหตุการณ์ข้ามโฮสต์อย่างแม่นยำ
การประทับเวลาไร้เดียงสาที่ไม่มีเขตเวลาที่กำหนดโดยส่วนต่างจะนับว่าไม่ได้รับการแก้ไข แทนที่จะถือว่า UTC โดยไม่แจ้งให้ทราบ หากหลักฐานพิสูจน์ได้ ให้ระบุค่าชดเชยคงที่ที่ลงนามแล้ว:
juntei super-timeline -f Amcache.jsonl --input-artifact amcache \
--assume-offset "+09:00" -o Timeline.csv
ค่าที่มีเฉพาะวันที่ก็ต้องใช้ตัวเลือกนั้นเช่นกัน เวลาเที่ยงคืนที่ใช้เป็นจุดยึดของค่าเหล่านี้จะมีป้ายกำกับว่าเป็นสมมติฐานที่มี ความละเอียดระดับวัน ไม่ใช่เหตุการณ์ตอนเที่ยงคืนที่สังเกตพบจริง ไม่รองรับชื่อเขตเวลาและกฎเวลาออมแสง ค่าที่ขาดหาย เป็นศูนย์ ไม่ถูกต้อง หรืออยู่นอกช่วงจะไม่ทำให้เกิดเหตุการณ์ epoch ที่สร้างขึ้นเอง ส่วนวันที่ในปี 1970 ที่ถูกต้องและบันทึกไว้อย่างชัดเจนจะยังคงถูกเก็บไว้
มีสองหมวดหมู่ที่เป็นตัวเลือกเสริมและไม่ถูกรวมไว้โดยค่าเริ่มต้น:
--include-collection-times: เมทาดาทาของไฟล์ต้นทาง LNK/Jump List บนระบบไฟล์ที่ใช้เก็บรวบรวม/วิเคราะห์ เหตุการณ์เหล่านี้มีป้ายกำกับcollection_filesystemแยกจากกิจกรรมบนเครื่องปลายทาง--include-interpreted-times: ค่า QWORD ทั่วไปในรีจิสทรีที่ตัวอ่านรีจิสทรีแสดงผลเป็น FILETIME เหตุการณ์เหล่านี้มีป้ายกำกับinterpreted_valueเพราะค่าลักษณะนี้จำนวนมากแท้จริงแล้วเป็นตัวนับ
Output and skipped records¶
คำสั่งเขียน เฉพาะไทม์ไลน์ ที่เลือกด้วย -o ในรูปแบบที่เลือกด้วย -t (csv ตามค่าเริ่มต้น หรือ jsonl) จะไม่สร้างไฟล์ร่วมที่ยังไม่กำหนดเวลา การวินิจฉัย หรือสรุป หรือสปูลการวินิจฉัยต่อเรกคอร์ด ไฟล์ที่แสดงร่วมที่มีอยู่จากการรันครั้งก่อนๆ จะไม่ถูกแตะต้อง
สรุปเทอร์มินัลจะรายงานจำนวนเหตุการณ์ในไทม์ไลน์และบันทึกที่ไม่กำหนดเวลา การประทับเวลาไม่ถูกต้องที่ไม่ใช่ศูนย์และจำนวนเขตเวลาที่ยังไม่ได้แก้ไขจะแสดงแยกกัน ด้วย --sort ยังรายงานจำนวนรายการซ้ำที่รวมไว้ด้วย เก็บผลลัพธ์ที่แยกวิเคราะห์ดั้งเดิมไว้สำหรับเรกคอร์ดที่ไม่สร้างเหตุการณ์ไทม์ไลน์และสำหรับบริบทของสิ่งประดิษฐ์ทั้งหมด
วันที่ที่ถูกต้องซึ่งรอสมมติฐานเขตเวลาที่ถูกต้องจะนับเป็นเขตเวลาที่ยังไม่ได้รับการแก้ไข แทนที่จะเป็นการประทับเวลาที่ไม่ถูกต้อง ไม่มีการประดิษฐ์การประทับเวลา และบันทึกที่ไม่มีเวลาที่แมปที่ใช้งานได้จะไม่ถูกแทรกลงในไทม์ไลน์เป็นเหตุการณ์ยุคสังเคราะห์
บันทึกที่มีเวลาที่ถูกต้องนอกช่วงที่ร้องขอจะถูกนับว่ากรองแล้ว ไม่ใช่ไม่กำหนดเวลา การส่งออกที่สำเร็จหมายความว่าอินพุตที่แยกวิเคราะห์ที่เลือกได้รับการประมวลผลสำเร็จ ไม่ได้หมายความว่าทุกสิ่งประดิษฐ์ถูกรวบรวม ทุกสนามมีการประทับเวลา หรือทุกการโจมตีสามารถตรวจพบได้
การส่งออก CSV อาจทำให้เมทาดาทาแบบซ้อนถูกทำให้แบน: โปรไฟล์ของข้อมูลระบบ mount point ของผู้ใช้ในข้อมูล USB, shell item และบริบทแบบมีโครงสร้างอื่น ๆ อาจมีรายละเอียดมากกว่าใน JSON/JSONL แบบเนทีฟ ให้ใช้อินพุตแบบเนทีฟเมื่อฟิลด์เหล่านั้นมีความสำคัญ ไทม์ไลน์ไม่สามารถสร้างข้อมูลที่การส่งออก CSV ละไว้ขึ้นมาใหม่ได้ ID อาร์ติแฟกต์ที่ไม่รองรับและไฟล์อินพุตที่ผิดรูปแบบจะทำให้เกิดข้อผิดพลาด แทนที่จะจบแบบสำเร็จพร้อมผลลัพธ์เพียงบางส่วน
ประสิทธิภาพและความปลอดภัยของเอาต์พุต¶
อินพุตจะถูกอ่านแบบสตรีมและประมวลผลแบบขนาน โดยค่าเริ่มต้น worker แต่ละตัวจะเขียนส่วนย่อย (fragment) ของเหตุการณ์ที่จัดรูปแบบแล้ว จากนั้น fragment จะถูกนำมาต่อกันตามลำดับไฟล์อินพุต โดยไม่เรียงลำดับหรืออ่านโครงสร้างเหตุการณ์ซ้ำ CSV จะมีส่วนหัวเพียงชุดเดียวแม้จะประมวลผลหลายไฟล์ ลำดับของเอาต์พุตเป็นแบบกำหนดแน่นอน (deterministic) ไม่ว่าจะใช้ worker กี่ตัว แต่ไม่ได้หมายความว่าเรียงตามลำดับเวลา
Input files แสดงขนาดรวมของอินพุตที่แยกวิเคราะห์ที่เลือกและไทม์ไลน์ Hayabusa Results saved แสดงขนาดของไฟล์ไทม์ไลน์ที่บันทึกไว้ ทั้งสองใช้หน่วย KiB/MiB/GiB ที่มนุษย์สามารถอ่านได้แบบเดียวกับ auto-parse
เมื่อใช้ --sort บัฟเฟอร์จะถูกระบาย (spill) ลงไดเรกทอรีชั่วคราวส่วนตัว จากนั้นการ merge หลายรอบที่มีขอบเขตจำกัดจะสร้างเอาต์พุตที่เรียงตามลำดับเวลา
การเรียงลำดับใช้ค่าวินาทีแบบจำนวนเต็มเต็มช่วงร่วมกับนาโนวินาที รวมถึงวันที่ก่อนปี 1970
ลำดับของเหตุการณ์ที่มีเวลาเท่ากันเป็นแบบกำหนดแน่นอน ไม่ว่าจะใช้ worker กี่ตัวหรือกำหนดงบการเรียงลำดับเท่าใด
แถบความคืบหน้าจะเลื่อนไปตามแต่ละเหตุการณ์ที่ประมวลผลระหว่างการ merge ขั้นกลางและขั้นสุดท้าย รวมถึงรอบที่ทำซ้ำ
แถบนี้แสดงบนเทอร์มินัล และจะถูกซ่อนเมื่อเปลี่ยนทิศทาง (redirect) เอาต์พุต
--memory-limit มีผลเฉพาะเมื่อใช้ --sort: ค่านี้คือ งบบัฟเฟอร์สำหรับการเรียงลำดับ รวมทั้งหมด
ไม่ใช่ขีดจำกัด RSS ของโพรเซส เรคคอร์ดอินพุต โอเวอร์เฮดของอ็อบเจกต์/สตริง JSON บัฟเฟอร์ CSV และเรคคอร์ดสำหรับ merge
ต้องใช้หน่วยความจำเพิ่มเติม เมื่อกำหนดงบไว้น้อย จำนวน worker จะถูกลดลง
--max-record-size จำกัดขนาดของเรคคอร์ดอินพุตที่พาร์สแล้วหนึ่งรายการ (ค่าเริ่มต้น 16 MiB)
อาร์เรย์/รายงาน JSON แบบ pretty-print นับเป็นเอกสารอินพุตระดับบนสุดหนึ่งเอกสาร
เอกสารที่ใหญ่กว่านั้นอาจต้องเพิ่มขีดจำกัด หรือควรใช้ JSONL แทน
การอ่านล่วงหน้า (read-ahead) ของพาร์เซอร์ CSV ก็นับรวมในขีดจำกัดนี้ด้วย
พื้นที่ดิสก์ชั่วคราวต้องเพียงพอสำหรับ fragment ของเหตุการณ์ที่จัดรูปแบบแล้ว (ค่าเริ่มต้น)
หรือเรคคอร์ดสำหรับเรียงลำดับที่ขยายแล้วและรอบการ merge (--sort) นอกเหนือจากผลลัพธ์สุดท้าย
ทั้งสองโหมดยังคงพักเอาต์พุตไว้ในพื้นที่ชั่วคราว (staging) และป้องกันไม่ให้ผลลัพธ์จากอินพุตที่ล้มเหลวถูกเผยแพร่
เรคคอร์ดหนึ่งรายการอาจให้เหตุการณ์จำนวนมาก ไทม์ไลน์จึงอาจมีขนาดใหญ่กว่าอินพุตมาก
ให้กรองช่วงเวลา/อาร์ติแฟกต์ตามความเหมาะสม และเลือกวอลุ่มชั่วคราวที่มีพื้นที่ว่างเพียงพอ
Ctrl+C ยกเลิกการทำงานร่วมกัน ลบไดเร็กทอรีการเรียงลำดับ/การแสดงละครส่วนตัว และออกด้วยโค้ด 130 บน Linux และ macOS สิ่งนี้ยังใช้กับ SIGTERM และ SIGHUP อีกด้วย มีการตรวจสอบการยกเลิกขณะอ่าน ปรับมาตรฐาน รวม และเขียนไทม์ไลน์ ก่อนที่จะเริ่มเผยแพร่ การเลิกจ้างที่ไม่สามารถตรวจจับได้หรือการสูญเสียพลังงานยังคงสามารถทิ้งไฟล์ชั่วคราวไว้ได้
เอาต์พุตที่มีอยู่ต้องใช้ -C เส้นเวลาจะต้องไม่เขียนทับข้อมูลนำเข้า รายการ หลักฐานท้องถิ่นที่อ้างอิง หรือไดเรกทอรีหลักฐานที่ได้รับการคุ้มครอง ข้อผิดพลาดในการป้อนข้อมูลหรือการจัดเรียงล้มเหลวทำให้ไทม์ไลน์ที่มีอยู่ไม่เปลี่ยนแปลง ไทม์ไลน์ที่เสร็จสิ้นแล้วจะถูกจัดแสดงข้างจุดหมายปลายทางและแทนที่ไทม์ไลน์แบบอะตอมมิก ใช้ชื่อไฟล์เอาต์พุตใหม่สำหรับการดำเนินการแต่ละครั้งเมื่อยังคงรักษาเรื่องการส่งออกที่เสร็จสมบูรณ์ก่อนหน้านี้ไว้
รายละเอียดเพิ่มเติม¶
- การนำเข้า CSV/JSONL ของ Timesketch
- การขยาย timestamp และ CSV รูปแบบเดิม (legacy) ของ Plaso
- เอาต์พุตและการจัดรูปแบบของ Plaso
- หลักฐานและการตีความ
- รูปแบบเอาต์พุต
อินพุต 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 จะระบุตารางจาก schema ของคอลัมน์ ดังนั้นการเปลี่ยนชื่อไฟล์ CSV หรือการใช้ส่วนต่อท้ายชื่อตามแหล่งข้อมูลแบบที่การพาร์สอัตโนมัติใช้จะไม่เปลี่ยนการตีความ timestamp UAL ใช้เฉพาะฟิลด์ timestamp ที่รู้จักและระบุไว้อย่างชัดเจน ตัวนับการเข้าถึงและข้อความที่ไม่เกี่ยวข้องแต่ดูเหมือนวันที่จะไม่ถูกเดาว่าเป็นวันที่
แถวคุณสมบัติ (property) ของ Outlook จะถูก project เป็นเหตุการณ์ก็ต่อเมื่อชนิดที่ประกาศไว้เป็นชนิดเวลาหรือชนิดเวลาหลายค่าเท่านั้น สตริงที่มีวันที่อยู่ข้างในยังคงเป็นสตริง ข้อความที่ฝังอยู่ (embedded message) จะคง ID ของรายการและการอ้างอิงถึงรายการแม่ไว้ และจะไม่นำเวลาที่แยกไฟล์แนบออกมาไปใช้แทน timestamp ของไฟล์แนบที่จัดเก็บไว้ แถวไฟล์ ผู้รับ ผู้ติดต่อ หรือคุณสมบัติที่ไม่มีเวลายังคงตรวจย้อนได้ในเอาต์พุตเนทีฟและรายงานเรคคอร์ดที่ไม่มีเวลา
พาร์เซอร์เหล่านี้ใช้ schema ของเอาต์พุต CSV และ JSONL ชุดเดียวกัน การเพิ่มอาร์ติแฟกต์ใหม่จึงไม่ได้เพิ่มคอลัมน์ CSV อีกหลายร้อยคอลัมน์
บริบทเฉพาะของแต่ละอาร์ติแฟกต์จะอยู่ใน Details