Thoth
ระบบจัดการสำนวนคดีและชุดเครื่องมือสืบสวนที่ทำงานในเบราว์เซอร์ สำหรับพนักงานสอบสวน ใช้งานจริงแล้ว มี MFA และผ่านการตรวจความปลอดภัยทุกครั้งก่อนปล่อยเวอร์ชัน


Thoth คือเว็บแอปจัดการสำนวนคดี พร้อมชุดเครื่องมือสืบสวนสำหรับพนักงานสอบสวน รวมสำนวน เอกสารทางกฎหมายภาษาไทย และการวิเคราะห์ข้อมูลโทรศัพท์ รายการเดินบัญชี และ log จากผู้ให้บริการไว้ในที่เดียว ตอนนี้ใช้งานจริงแล้ว และงานวิเคราะห์หนักๆ ส่วนใหญ่ทำในเบราว์เซอร์ ไฟล์หลักฐานดิบจึงไม่จำเป็นต้องออกจากเครื่องของเจ้าหน้าที่
อยู่นอกขอบเขต Thoth ใช้กับคดีจริง จึงไม่ใช่ส่วนหนึ่งของ CTF ในเว็บนี้ ขอความร่วมมืออย่าทดสอบเจาะระบบนี้ ถ้าคิดว่าเจอปัญหา แจ้งผมเป็นการส่วนตัวแทน ช่องทางติดต่ออยู่ใน security.txt
เป้าหมาย
- ทุกอย่างของคดีอยู่ในที่เดียว: สำนวน บุคคล เอกสาร และผลวิเคราะห์หลักฐาน
- เก็บไฟล์หลักฐานไว้ฝั่งเครื่องผู้ใช้ให้มากที่สุด
- ความปลอดภัยที่ใช้ได้จริงในการทำงาน ไม่ใช่แค่บนกระดาษ
- ใช้บนมือถือในแอป LINE ได้ เพราะนั่นคือที่ที่เจ้าหน้าที่ใช้งานจริง
ฟีเจอร์
- สำนวนคดีพร้อมสร้างเอกสารภาษาไทย (.docx) และหนังสือขอข้อมูลถึงผู้ให้บริการ
- วิเคราะห์ข้อมูลการใช้โทรศัพท์ (CDR) พร้อมกราฟ ตำแหน่งเสาสัญญาณ และ export เป็น i2 (.anx)
- วิเคราะห์รายการเดินบัญชี พร้อมผังเส้นทางการเงินที่แก้ไขได้ และ export เป็น i2
- เครื่องมือสำหรับ log ของผู้ให้บริการ: ค้นหาผู้ให้บริการ/ASN จาก IP และแบบฟอร์มขอข้อมูล
- บันทึกผลวิเคราะห์เข้าสำนวน: บัญชีธนาคาร รายการโอน และประวัติบุคคล
- เข้าสู่ระบบด้วย LINE (LIFF) และหน้าจอที่ออกแบบมาสำหรับมือถือ
ความปลอดภัย
ขอเล่าแค่หลักการ รายละเอียดตั้งใจไม่เปิดเผยบนอินเทอร์เน็ต
- MFA ทุกบัญชี และต้องยืนยันตัวตนเพิ่มก่อนให้สิทธิ์ผู้ดูแลระบบกับใคร
- ให้สิทธิ์เท่าที่จำเป็นทุกจุด: แอปได้สิทธิ์ฐานข้อมูลเท่าที่ต้องใช้ และแอปแก้ไขประวัติการใช้งานย้อนหลังไม่ได้
- ตรวจสอบข้อมูลขาเข้าอย่างเข้มงวด จำกัดจำนวนคำขอ และมี security header (HSTS, Content-Security-Policy, nosniff และอื่นๆ)
- แยกสภาพแวดล้อมการ deploy และเข้ารหัสไฟล์สำรอง ขั้นตอนปล่อยเวอร์ชันสำรองข้อมูลก่อนเสมอ และย้อนกลับได้ในขั้นตอนเดียว
- export อย่างปลอดภัย: กัน formula injection ในไฟล์ CSV, XLSX และ i2 ทุกไฟล์
- ตรวจความปลอดภัยก่อนปล่อยทุกเวอร์ชัน ถ้าเจอปัญหา ต้องแก้ให้เสร็จก่อนถึงจะปล่อยได้
ดีไซน์
หน้าจอออกแบบโดยยึดภาษาไทยเป็นหลัก มี design system ที่เขียนเป็นเอกสาร มีธีมสว่างและมืด และตรวจ layout ที่ความกว้าง 375 px และในเบราว์เซอร์ของแอป LINE การตรวจ accessibility ด้วย axe รันอยู่ในชุด end-to-end test
ตัวเลข
วัดเมื่อ 26 กันยายน 2569:
- unit test ประมาณ 3,200 ตัว ผ่านทั้งหมด (backend 1,956 · frontend 1,238)
- Playwright end-to-end test 412 ตัว บนเดสก์ท็อป มือถือ 375 px และ LINE
- axe: ไม่มีปัญหาระดับ serious หรือ critical ในราว 55 หน้าและ dialog สำคัญ
สิ่งที่ได้เรียนรู้
- แก้สิทธิ์ไฟล์จากข้างในตัวที่เป็นเจ้าของมัน การเปลี่ยนสิทธิ์แบบ recursive ทีเดียวบนเครื่อง host ทำให้ฐานข้อมูลใช้งานไม่ได้ไปหลายชั่วโมง
- สคริปต์ deploy อัปเกรดตัวเองไม่ได้ ไฟล์บนเซิร์ฟเวอร์ยังเป็นตัวเก่าจนกว่าจะ checkout รุ่นใหม่ การอัปเกรดครั้งแรกเลยต้องใช้สคริปต์ของรุ่นใหม่
- แยกกันที่ระดับบัญชีผู้ใช้ ไม่ใช่ที่ตัวโค้ด การบีบสิทธิ์ไฟล์ของ source ทำให้ build พังแบบคาดไม่ถึง แยกบัญชีออกมาต่างหากเรียบร้อยกว่ามาก
Stack
Next.js · TypeScript · Bun · Elysia · PostgreSQL · Playwright · axe
ต่อไป
- วิเคราะห์รายการเดินบัญชีขนาดใหญ่มาก (หลายหมื่นแถว) ให้เร็วขึ้น
- ใช้แผนที่ (map tiles) ที่โฮสต์เอง
- "โหมดทำงาน" สำหรับเครื่องมือวิเคราะห์ที่ออกแบบมาเพื่อมือถือโดยเฉพาะ
source code ไม่ได้เปิดเป็นสาธารณะ