# ความปลอดภัยและการจัดการข้อมูล

Canonical page: https://phishdestroy.github.io/TgWitness/th/docs/reference/security/

โมเดลภัยคุกคาม, โมเดลการเข้าถึง, ข้อมูลลับที่เก็บไว้, ความเสี่ยงในการเปิดเผยผ่านเครือข่าย, การนำเข้าเซสชัน และวิธีการรายงานช่องโหว่

TgWitness ทำงานบนคอมพิวเตอร์หรือเซิร์ฟเวอร์ของคุณเอง การเชื่อมต่อบัญชี การดูแลรายชื่อพร็อกซีสาธารณะ และบริการภายนอกที่เลือกใช้ได้ มีนโยบายการกำหนดเส้นทางที่ชัดเจน การแจ้งเตือน ตราประทับเวลา สำเนาที่เก็บไว้นอกระบบ และพยาน ถูกกำหนดค่าแยกกัน หน้านี้ระบุสิ่งที่ได้รับการคุ้มครอง วิธีการคุ้มครอง และสิ่งที่ เหลือให้ผู้ดำเนินการตัดสินใจ

| พื้นที่ | สรุป |
| --- | --- |
| เข้าถึง | กุญแจผู้ดูแลระบบ พร้อมสิทธิ์การเข้าถึงบัญชี/การสนทนาในขอบเขตที่กำหนด, สิทธิ์ 7 ประเภท และเซสชันที่สามารถยกเลิกได้; ตั้งค่าเริ่มต้นเป็น localhost |
| ข้อมูลลับที่เก็บไว้ | การตั้งค่าเซสชัน คู่ API กุญแจลงนาม และพร็อกซี ถูกเข้ารหัสด้วย Fernet |
| ข้อความและสื่อ | ข้อมูลถูกเก็บไว้โดยไม่เข้ารหัส: ควรใช้การเข้ารหัสดิสก์และกำหนดสิทธิ์การเข้าถึงอย่างเคร่งครัด |
| ความซื่อสัตย์ | โซ่แฮช SHA-256 และลายเซ็น Ed25519 บนทุกบันทึก |
| ไม่รวม | ผู้ดูแลระบบ, โทเค็นแผงควบคุมที่รั่วไหล, ความครบถ้วนของการบันทึก |

สำหรับรายงานช่องโหว่ โปรดดู[นโยบายความปลอดภัย](https://github.com/phishdestroy/TgWitness/blob/main/.github/SECURITY.md)

## แบบการเข้าถึง

โทเค็นของแผงหลักให้สิทธิ์ควบคุมอย่างเต็มที่ ผู้ใช้อื่นสามารถรับสิทธิ์การเข้าถึง [ที่จำกัดตาม](https://phishdestroy.github.io/TgWitness/th/docs/reference/access/)ขอบเขตของตนเองได้: พื้นที่ทำงานและแชทที่เลือกไว้ สิทธิ์การเข้าถึง ระยะเวลาหมดอายุ ข้อจำกัด IP ขีดจำกัดการเข้าสู่ระบบ และเซสชันที่สามารถเพิกถอนได้ สิทธิ์การเข้าถึงที่จำกัดเฉพาะแชท ไม่สามารถดำเนินการกับพื้นที่ทำงานทั้งหมดได้ แม้สิทธิ์การเข้าถึงจะถูกเลือกไว้แล้วก็ตาม พื้นที่ทำงานใช้กระบวนการร่วมกันและไม่แยกข้อมูลออกจากผู้ดูแลระบบหลัก

แผงควบคุมจะรับฟังบน localhost ตามค่าเริ่มต้น การลงชื่อเข้าใช้ผ่านเบราว์เซอร์จะแลกเปลี่ยน token เข้าถึงเป็นข้อมูลรับรองเซสชัน; เบราว์เซอร์จะส่งมันไปในรูปแบบ bearer token ข้อมูลนี้ถูกเก็บ ไว้ใน sessionStorage แทนที่จะเป็นคุกกี้การยืนยันตัวตน การล็อก/ลงชื่อออกจะล้าง เซสชันเบราว์เซอร์ การปิดเบราว์เซอร์หรือสิ้นสุดเซสชันจะไม่หยุดการเก็บข้อมูล

โทเค็นที่ออกและข้อมูลรับรองเซสชันถูกเก็บไว้เป็นแฮชในคลังข้อมูลที่เข้ารหัส การเพิกถอนสิทธิ์จะยุติเซสชันที่เกี่ยวข้อง; การเปลี่ยนแปลงสิทธิ์จะส่งผลต่อ คำขอในครั้งถัดไป ไฟล์ที่ดาวน์โหลดแล้วไม่สามารถเรียกคืนได้ ผู้ดูแลระบบสามารถจำกัด เซสชันเบราว์เซอร์ของตนเองได้เช่นกัน แต่สคริปต์ที่ใช้โทเค็นของแผงควบคุมหลักโดยตรงจะยังคง มีสิทธิ์เข้าถึงเต็มรูปแบบและข้ามข้อจำกัดของเซสชันเบราว์เซอร์เหล่านั้น

การตรวจสอบความถูกต้องที่ล้มเหลวจะถูกจำกัดอัตราตามที่อยู่ของลูกค้า การจำกัด IP ใช้ ที่อยู่ซึ่งแอปพลิเคชันมองเห็น; ตรวจสอบพฤติกรรมของ reverse-proxy ก่อนที่จะพึ่งพา มัน ข้อมูลรับรองของ Witness ยังคงเป็นข้อมูลรับรองแบบอ่านอย่างเดียวที่แยกต่างหากสำหรับจุดตรวจสอบ/สถานะการทำงาน

### เข้าถึงเวอร์ชันทดลอง

`/api/demo-access` เป็นบูตสแตรปที่ไม่ได้ผ่านการตรวจสอบความถูกต้องโดยเจตนา สำหรับ การสาธิตสังเคราะห์ที่ถูกเริ่มต้นอย่างชัดเจนและแยกเป็นอิสระ มันจะออกความสามารถที่มีอายุการใช้งานของกระบวนการแยกต่างหาก ไม่เคยออกโทเค็นแผงควบคุมจริงหรือการแทนที่ TGWITNESS_TOKEN การออกและใช้งานจำเป็นต้องมี peer loopback และ Host, ไม่มี header ที่ถูกส่งต่อ และไม่มีการขอข้ามต้นทาง (cross-origin request) พื้นที่ทำงานเพิ่มเติม หรือเซสชันที่ได้รับอนุญาตจะปิดใช้งานเส้นทางนี้ พื้นที่ทำงานแบบสด (Live workspaces) ไม่เคยออก ความสามารถนี้เลย การสาธิตนี้ไม่สามารถเชื่อมต่อบัญชีหรือเปลี่ยนการตั้งค่าการเก็บข้อมูลได้

## เนื้อหาของแผงควบคุมและการส่งออกข้อมูล

หน้าเว็บนี้ไม่ใช้ฟอนต์ภายนอก ระบบวิเคราะห์ข้อมูล ทรัพยากร CDN หรือสื่อระยะไกลที่ฝังไว้ ข้อความจาก Telegram ถูกแทรกเป็นข้อความธรรมดา ไม่ใช่ HTML ไฟล์แนบที่ดาวน์โหลดมา ถูกส่งเป็นไฟล์แนบแบบไบนารี การส่งออก JSONL จะรักษาสตริงต้นฉบับไว้ ส่วน HTML จะทำการหลบหลีก สตริงเหล่านั้น และเซลล์ CSV ที่อาจกลายเป็นสูตรคำนวณจะถูกเพิ่มเครื่องหมายอพอสทรอฟีไว้ด้านหน้า

ไฟล์ที่ส่งออกจะไม่รวมข้อมูลลับสำหรับการยืนยันตัวตนและการลงนาม แต่จะรวม ข้อมูลเมตาดาต้าต้นทางที่เก็บรวบรวมไว้ ตัวระบุ และอาจรวมถึงเนื้อหาส่วนตัวหรือข้อมูลที่ละเอียดอ่อน แฮชการเข้าถึง Telegram และข้อมูลอ้างอิงไฟล์อาจปรากฏในข้อมูลเมตาดาต้าต้นทางแบบดิบ

## ข้อมูลลับที่เก็บไว้

ข้อมูลรับรอง API ของ Telegram, StringSession และกุญแจส่วนตัว Ed25519 ได้รับการเข้ารหัส โดยใช้ Fernet โดยค่าเริ่มต้น กุญแจจะถูกเก็บไว้ในไดเรกทอรีข้อมูลที่ได้รับการป้องกันเดียวกัน วิธีนี้ช่วยลดความเสี่ยงจากการเปิดเผยข้อความแบบข้อความธรรมดาโดยไม่ได้ตั้งใจ; แต่ไม่ใช่การป้องกันต่อผู้โจมตี ที่สามารถอ่านไดเรกทอรีทั้งหมดได้ เนื้อหาข้อความและสื่อไม่ได้รับการ**เข้าร** หัสโดย TgWitness ให้ใช้การเข้ารหัสดิสก์และสิทธิ์ระบบปฏิบัติการที่จำกัด ไฟล์กุญแจส่วนตัวของ Unix ถูกสร้างด้วยโหมด 0600; ไดเรกทอรีข้อมูลที่สร้างใหม่ใช้โหมด 0700. สิทธิ์ของไดเรกทอรีที่มีอยู่จะไม่ถูกเปลี่ยนแปลง Windows จะสืบทอด ACL ของไดเรกทอรี: ให้จำกัดสิทธิ์ ไว้เฉพาะบัญชีบริการและผู้ดูแลระบบที่ได้รับอนุญาตเท่านั้น

### กุญแจหลักภายนอก

สำหรับไดเรกทอรีข้อมูลใหม่ TGWITNESS_VAULT_KEY_FILE สามารถจัดหา กุญแจหลักแบบสุ่มจากภายนอกได้ HKDF-SHA256 และ salt แบบสุ่มที่แยกต่างหากจะสร้างกุญแจ Fernet ที่ต่างกัน สำหรับแต่ละพื้นที่ทำงาน (workspace) ไฟล์ vault.external.json ต้องถูกเก็บรักษาไว้เพื่อการกู้คืน หากกุญแจหลักขาดหายหรือ ผิดพลาด ระบบจะปิดการทำงานโดยอัตโนมัติ Vault ท้องถิ่นที่มีอยู่จะไม่ถูกย้ายโดยอัตโนมัติ กระบวนการที่กำลังทำงานอยู่สามารถเข้าถึงกุญแจได้; นี่ไม่ใช่การแยก HSM แผงควบคุมจะรายงาน โหมดที่เลือกไว้และระบุอย่างชัดเจนว่าการจัดเก็บข้อความ/สื่อไม่ได้รับการเข้ารหัส โดยแอปพลิเคชัน ดู[ส่วนการเชื่อมต่อ, พร็อกซี และการป้องกันข้อมูล](https://phishdestroy.github.io/TgWitness/th/docs/reference/connection/) เพื่อดูโมเดลภัยคุกคามอย่างครบถ้วน

## พร็อกซีและเส้นทางเครือข่าย

การตั้งค่าพร็อกซีถูกเข้ารหัสไว้ใน vault รหัสผ่านและข้อมูลลับของ MTProxy ไม่ถูกส่งกลับโดย API หรือบันทึกไว้ในบันทึกหลักฐาน แต่ละพื้นที่ทำงานจะเลือก เส้นทาง Telegram และโ[หมด IP](https://phishdestroy.github.io/TgWitness/th/docs/reference/connection/#ip-modes) ของตนเอง

โหมดซ่อน IP ปฏิเสธการเปลี่ยนไปใช้ Telegram แบบโดยตรง และต้องการพร็อกซีสำหรับ คำขอ HTTP จากภายนอก โหมดเปลี่ยนไปใช้ที่เลือกอย่างชัดเจนอนุญาตให้เข้าถึง Telegram โดยตรงหลังจากช่วงเวลาหน่วง; โหมดอุโมงค์/VPN อนุญาตให้ใช้เส้นทางโดยตรง การเลือกโหมด tunnel ไม่ติดตั้งหรือตรวจสอบ VPN การตั้งค่าเหล่านี้ไม่ควบคุม การรับส่งข้อมูลทั้งหมดของเครื่อง, เบราว์เซอร์, ผู้จัดการแพ็กเกจ หรือการแก้ไข DNS ของโฮสต์พร็อกซีท้องถิ่น

MTProxy รับส่งข้อมูลการสื่อสารของ Telegram เท่านั้น คำขอจากภายนอกสามารถใช้ พร็อกซี SOCKS5/HTTP แยกต่างหาก เส้นทาง SOCKS5/HTTP ของพื้นที่ทำงาน หรือเส้นทางตรงที่ได้รับอนุญาต; หรือสามารถปิดการใช้งานได้ ผู้สังเกตการณ์อิสระมีตั้งค่าการส่งข้อมูลของตัวเอง การยืนยันตัวตนแบบ SOCKS5/HTTP CONNECT ทั่วไปไม่ได้รับการเข้ารหัสโดย โปรโตคอลพร็อกซีเหล่านั้นเอง ความลับ TLS MTProxy ปลอมยังไม่ได้รับการสนับสนุน

## การลงชื่อเข้าใช้และการนำเข้าเซสชัน

ไฟล์ .tgwitness-session ที่แปลงแล้วจะเก็บรหัสลับการอนุญาตในรูปแบบข้อความธรรมดาไว้จนกว่า จะถูกโหลดและเก็บไว้ใน vault CLI แบบออฟไลน์รองรับ schema Telethon ที่ได้รับการตรวจสอบแล้ว การนำเข้าผ่านแผงควบคุมยังรองรับ Pyrogram SQLite, TData ZIP แบบบัญชีเดียวสมัยใหม่, และข้อมูลเข้า JSON ที่มีเอกสารประกอบ มันได้รับการยืนยันตัวตน จำกัดที่ 4 ไฟล์ / 8 MiB, และประมวลผลการอัปโหลดในหน่วยความจำโดยไม่จำเป็นต้องแยกไฟล์จากอาร์ไคฟ์หรือบันทึกไฟล์ต้นฉบับ ข้อมูลรับรองที่ผ่านการปรับให้เป็นมาตรฐานจะถูกส่งกลับเฉพาะไปยังเบราว์เซอร์ที่ผ่านการตรวจสอบสิทธิ์และส่งคำขอเท่านั้น; ข้อมูลเหล่านี้จะถูกเก็บไว้ใน vault ที่เข้ารหัสหลังจากการอนุญาตผ่าน Telegram สำเร็จ ปกป้องไฟล์ต้นฉบับและไฟล์ที่แปลงแล้ว และป้องกันไม่ให้ไคลเอนต์ที่ทำงานพร้อมกันคัดลอกข้อมูลการอนุญาต

การประมวลผลข้อมูล TData ตรวจสอบค่าเช็กซัมของคอนเทนเนอร์ ค่าแฮชการถอดรหัสในเครื่อง และความยาว ของโครงสร้าง รหัสผ่านท้องถิ่นของ Desktop ที่ได้รับมาจะถูกใช้ชั่วคราวและไม่ถูกเก็บไว้ ตัววิเคราะห์ที่มีขอบเขตนี้ไม่รับประกันว่าทุกเวอร์ชันของ Desktop จะเข้ากันได้ ภาพ QR ถูกสร้างขึ้นในเครื่องท้องถิ่น มีโทเค็นการเข้าสู่ระบบ Telegram ที่มีอายุการใช้งานสั้น และ ไม่เคยถูกส่งไปยังบริการเรนเดอร์ภายนอก การล็อกเครื่อง การเปลี่ยนพื้นที่ทำงาน การเข้าสู่ระบบใหม่ และการเปลี่ยนเส้นทาง จะยกเลิกความพยายามสร้าง QR ที่กำลังรอการดำเนินการ การรีโหลด/ปิดแท็บอาจทำให้ ความพยายามสร้าง QR ยังคงรอการดำเนินการจนกว่าจะหมดอายุ การเข้าสู่ระบบด้วย QR ที่สำเร็จยังคงบังคับใช้การผูกบัญชี เนื้อหา API ปกติยังคงถูกจำกัดไว้ที่ 16 KiB; เส้นทางการนำเข้าที่ผ่านการยืนยันตัวตนจะรับ JSON ที่เข้ารหัสได้สูงสุด 12 MiB โดยบังคับใช้ขีดจำกัดไฟล์ที่ถอดรหัสแล้วที่เล็กกว่านี้แยกต่างหาก

รหัสเข้าสู่ระบบและรหัสผ่านสำหรับการยืนยันสองขั้นตอนของ Telegram ไม่ถูกเก็บไว้อย่างถาวร สถานะของหมายเลขโทรศัพท์/รหัสแฮชถูก เก็บไว้ในหน่วยความจำระหว่างกระบวนการอนุญาต เซสชัน Telegram ให้สิทธิ์การเข้าถึงบัญชี; ห้าม อัปโหลดไดเรกทอรีข้อมูล เซสชัน โทเค็น กุญแจ vault หรือกุญแจลงนามส่วนตัวไปยัง GitHub

## บันทึกและระบบส่งข้อมูล

การตอบสนองการตรวจสอบความถูกต้องของ API ตามค่าเริ่มต้นถูกแทนที่เพื่อไม่ให้แสดงค่าข้อมูลรับรอง การบันทึกการเข้าถึงแอปพลิเคชันถูกปิดใช้งาน อย่าตั้งค่าพร็อกซีแบบย้อนกลับ เพื่อบันทึกส่วนหัว Authorization หรือเนื้อหาคำขอ HTTP ส่งโทเค็นและข้อมูลลับการเข้าสู่ระบบ ในรูปแบบข้อความธรรมดา: ให้ใช้ HTTPS หรืออุโมงค์ SSH ทุกครั้งที่ส่งข้อมูลออกจาก localhost

## ข้อจำกัดด้านความสมบูรณ์

โซ่แฮช (hash chain), ไตรเกอร์ฐานข้อมูล (database triggers) และลายเซ็นสามารถตรวจจับการแก้ไขบางอย่างได้; แต่ไม่สามารถป้องกันผู้ดูแลระบบท้องถิ่นจากการเขียนทับและลงลายเซ็นใหม่ในบันทึกได้ เก็บรักษาจุดตรวจสอบที่ลงลายเซ็นแล้ว (signed checkpoints) และลายนิ้วมือกุญแจสาธารณะ (public-key fingerprint) บนระบบที่แยกต่างหาก โหมดหลักฐานและสำเนาที่อยู่นอกไซต์ (ทั้งสองถูกปิดไว้ตามค่าเริ่มต้น) จะส่งแฮชของจุดตรวจสอบไปยัง บริการประทับเวลา และสำเนาที่เข้ารหัสไปยังพื้นที่จัดเก็บข้อมูลที่เข้ากันได้กับ S3; ดู [รูปแบบหลักฐาน](https://phishdestroy.github.io/TgWitness/th/docs/reference/evidence/) บันทึกความโปร่งใส การลงนามที่ได้รับการสนับสนุนจาก HSM และการรับรอง ห่วงโซ่การดูแลรักษาอย่างเป็นทางการ ยังไม่ได้รับการนำไปใช้

## หากคุณสงสัยว่ามีปัญหา

รักษาไดเรกทอรีข้อมูลต้นฉบับไว้ และใช้สำเนาแยกต่างหากสำหรับการวิเคราะห์ อย่า รวมข้อมูลส่วนตัวของ Telegram หรือข้อมูลรับรองการเข้าสู่ระบบไว้ในประเด็นสาธารณะ ไม่มีการ อ้างสิทธิ์การรับรองความปลอดภัยจากหน่วยงานอิสระ
