Thoth · WATKORN.ME
ผลงาน

Thoth

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

อ่าน 3 นาทีWeb#nextjs#bun#security#forensics#osint

หน้าแรกของ Thoth ธีมสว่าง: หัวข้อ 'บันทึกทุกคดี อย่างชาญฉลาด' ปุ่มเข้าสู่ระบบ และการ์ดตัวอย่างของเอกสารในสำนวน คดีที่กำลังดำเนินการ และผังความเชื่อมโยง
ธีมสว่าง
หน้าแรกของ Thoth แบบเดียวกันในธีมมืด
ธีมมืด

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 ไม่ได้เปิดเป็นสาธารณะ