กลับ
2026/10/27
รับมือ Tailworm: เสริมความปลอดภัยเครือข่าย Tailscale โดยไม่ทำให้ระบบ production หยุดชะงัก
วิธีที่เราตรวจสอบเครือข่าย Tailscale ตามข้อค้นพบของ Tailworm ปิดช่องโหว่จาก Tailscale SSH และให้งาน production ทุกงานทำงานต่อเนื่อง
สรุป
เมื่อวันที่ 25 ตุลาคม 2026 นักวิจัยด้านความปลอดภัยรายหนึ่งได้เผยแพร่ “Tailworm” ซึ่งเป็นข้อค้นพบ 11 รายการใน Tailscale และ headscale โดยเผยแพร่โดยไม่ผ่านกระบวนการเปิดเผยข้อมูลแบบประสานงาน (coordinated disclosure) ณ เวลาที่เขียนบทความนี้ Tailscale ยังไม่ได้เผยแพร่การแก้ไข ในเย็นวันเดียวกัน เราได้ตรวจสอบเครือข่าย Tailscale ของเราเทียบกับข้อค้นพบแต่ละรายการ เราปิดจุดเสี่ยงเพียงจุดเดียวที่เกี่ยวข้องกับเรา จำกัดสิทธิ์การเข้าถึงให้รัดกุมขึ้น และงาน production ทุกงานยังคงทำงานตลอดเวลา
บทความนี้อธิบายว่าเราตรวจสอบอะไร เปลี่ยนอะไร หลีกเลี่ยงการหยุดชะงักของระบบได้อย่างไร และได้บทเรียนอะไรบ้าง บทความนี้ไม่ใช่การตรวจสอบรายงานดังกล่าวอย่างเป็นอิสระ
สรุปสั้น ๆ ว่า Tailworm รายงานอะไร
ข้อค้นพบทั้ง 11 รายการแบ่งได้เป็นไม่กี่กลุ่ม:
- Tailscale SSH (ร้ายแรงที่สุด) เซสชัน SSH ที่ได้รับอนุญาตสามารถยกระดับสิทธิ์เป็น root บนเครื่องปลายทางได้ ในห้องทดลองของนักวิจัย การโจมตีนี้แพร่กระจายจากเครื่องหนึ่งไปยังอีกเครื่องหนึ่ง
- App connectors ไม่มีการตรวจสอบความถูกต้องของปลายทาง (destination)
- หน่วยความจำถูกใช้จนหมด ทั้งในเซิร์ฟเวอร์ควบคุมและในฝั่งไคลเอนต์
- กรณีขอบ (edge case) ของ Serve และ Funnel
ข้อค้นพบทุกรายการต้องอาศัยการที่ผู้โจมตีมีจุดตั้งหลักอยู่ในระบบแล้ว ไม่มีรายการใดเป็นการโจมตีระยะไกลจากอินเทอร์เน็ตโดยตรง ผู้เชี่ยวชาญด้านความปลอดภัยบางส่วนมองว่าการนำเสนอเกินจริงไปจากความเสี่ยงที่แท้จริง แต่จุดเสี่ยงหลักคือ Tailscale SSH นั้นมีอยู่จริงและปิดได้ง่าย
ขั้นตอนที่ 1: ตรวจสอบก่อนเปลี่ยนแปลง
เราเริ่มจากการตรวจสอบแบบอ่านอย่างเดียว และบันทึกผลไว้ก่อนแตะต้องสิ่งใด:
- เวอร์ชันของไคลเอนต์ Tailscale ที่ใช้งานอยู่
- ฟีเจอร์ที่เปิดใช้งานอยู่จริง
- บันทึกเซสชัน SSH ย้อนหลัง 60 วัน เพื่อดูว่าใครเชื่อมต่อมาจากที่ใด และมีการใช้การส่งต่อพอร์ตหรือซ็อกเก็ตหรือไม่
- รายการอุปกรณ์ รวมถึงอุปกรณ์ที่ไม่ได้ออนไลน์มาหลายเดือน
ผลการตรวจสอบ:
- Tailscale SSH เปิดใช้งานอยู่ในบางส่วนของสภาพแวดล้อมของเรา ดังนั้นข้อค้นพบ F1–F3 และ F5 จึงเกี่ยวข้องกับเรา
- ฟีเจอร์ที่ข้อค้นพบอื่น ๆ ต้องอาศัยไม่ได้ถูกใช้งาน ข้อค้นพบส่วนใหญ่จึงไม่เกี่ยวข้อง
- บันทึก SSH ไม่พบแหล่งที่มาที่ผิดปกติและไม่มีคำขอส่งต่อ
ขั้นตอนที่ 2: ปิดจุดเสี่ยงโดยไม่ทำให้ระบบหยุดชะงัก
วิธีแก้ที่เห็นได้ชัดคือปิด Tailscale SSH แล้วใช้การยืนยันตัวตนด้วยคีย์ของ OpenSSH แบบมาตรฐานแทน แต่การตรวจสอบล่วงหน้าของเราพบกับดักอยู่
Tailscale SSH ยืนยันตัวตนด้วยตัวตนใน tailnet ไม่ใช่ด้วยคีย์ SSH สคริปต์อัตโนมัติของเราระบุคีย์ SSH ไว้ในบรรทัดคำสั่ง แต่คีย์นั้นป้องกันด้วยรหัสผ่าน (passphrase) จึงไม่มีทางทำงานแบบไม่มีคนดูแลได้เลย งานต่าง ๆ ทำงานได้ก็เพียงเพราะ Tailscale SSH ไม่เคยตรวจสอบคีย์ หากเราปิด Tailscale SSH ไปเฉย ๆ งานอัตโนมัติทุกงานจะหยุดทำงาน
เราจึงสลับระบบตามลำดับนี้:
- สร้างคีย์เฉพาะสำหรับงานอัตโนมัติ จำกัดให้ใช้จากเครื่องต้นทางเพียงเครื่องเดียว และปิดการส่งต่อ
- ทดสอบเส้นทางใหม่ก่อนสลับ เราเปิดพอร์ต OpenSSH ชั่วคราวที่เข้าถึงได้เฉพาะภายใน tailnet และเชื่อมต่อจากสภาพแวดล้อมแบบเดียวกับที่งานของเราทำงาน (ไม่มี SSH agent ไม่มีเทอร์มินัล) ด้วยทุกวิธีที่สคริปต์ของเราเรียกใช้ SSH
- ทดสอบเชิงลบ คีย์ใหม่ถูกปฏิเสธเมื่อใช้จากนอกแหล่งที่อนุญาต และคำขอส่งต่อถูกปฏิเสธ
- ตั้งการย้อนกลับอัตโนมัติไว้ก่อน ก่อนปิด Tailscale SSH เราตั้งตัวจับเวลาให้เปิดกลับมาเองโดยอัตโนมัติ เส้นทางกู้คืนนี้ไม่ขึ้นกับว่า SSH ใช้งานได้หรือไม่
- สลับระบบ แล้วตรวจสอบงานอัตโนมัติทุกงานด้วยการเชื่อมต่อใหม่ ทุกงานทำงานจริงจนเสร็จหนึ่งรอบ เราไม่นับเซสชันที่เปิดค้างอยู่แล้วเป็นหลักฐาน
- ลบส่วนประกอบชั่วคราว ได้แก่ พอร์ตที่เพิ่ม กฎไฟร์วอลล์ และตัวจับเวลาย้อนกลับ แล้วตรวจสอบอีกครั้ง
ขั้นตอนที่ 3: รัดกุมส่วนที่เหลือ
- ล้างนโยบาย Tailscale SSH ให้ว่าง นโยบายเริ่มต้นอนุญาตให้อุปกรณ์ใดก็ได้ของผู้ใช้เปิดเซสชัน SSH ไปยังอุปกรณ์อื่นของผู้ใช้คนเดียวกัน รวมถึงในฐานะ root โดยต้องอนุมัติซ้ำผ่านเบราว์เซอร์สัปดาห์ละครั้งเท่านั้น เราล้างนโยบายนี้ ดังนั้นหากเผลอเปิด Tailscale SSH กลับมา ก็จะไม่ให้สิทธิ์เข้าถึงอีกต่อไป
- ปิด SSH จากอินเทอร์เน็ต ก่อนปิด เรายืนยันว่าการล็อกอินผ่านคอนโซลนอกแบนด์ (out-of-band) ใช้งานได้ เพื่อไม่ให้ล็อกตัวเองออกจากระบบ หลังจากนั้นเราตรวจสอบจากเครือข่ายภายนอกว่า SSH ไม่ตอบสนองอีกแล้ว
- บังคับให้อนุมัติอุปกรณ์ อุปกรณ์ใหม่ต้องได้รับการอนุมัติจากผู้ดูแลระบบก่อนจึงจะเข้าร่วมได้
- ตรวจสอบคีย์ลงทะเบียน ไม่มีคีย์ที่ต้องเพิกถอน
- ยืนยันว่าบัญชีผู้ดูแลระบบเปิดใช้ MFA ใครก็ตามที่ยึดการล็อกอินของผู้ดูแลระบบได้ สามารถย้อนการควบคุมในระดับเครือข่ายได้ทั้งหมด
- เริ่มสังเกตทราฟฟิกจริงระหว่างอุปกรณ์ เพื่อให้ขั้นต่อไป คือการจำกัดว่าอุปกรณ์ใดเข้าถึงบริการใดได้ อิงจากหลักฐาน ไม่ใช่การคาดเดา
Tailnet Lock และการอนุมัติอุปกรณ์ต่างก็ป้องกันไม่ให้อุปกรณ์แปลกปลอมเข้าร่วมเครือข่ายได้ แต่ใช้ร่วมกันไม่ได้ จึงควรเลือกอย่างใดอย่างหนึ่งอย่างตั้งใจ
ขั้นตอนที่ 4: แก้ runbook ไม่ใช่แค่เซิร์ฟเวอร์
ขั้นตอนกู้คืนเดิมของเราระบุให้เชื่อมต่อเซิร์ฟเวอร์ใหม่โดยเปิด Tailscale SSH ไว้ หากทำตามหลังการเปลี่ยนแปลงนี้ ฟีเจอร์ที่มีความเสี่ยงจะกลับมาโดยไม่มีใครสังเกต เราจึงเขียนขั้นตอนใหม่:
- วินิจฉัยก่อน การเชื่อมต่อเครือข่ายขาดหาย หรือปัญหาอยู่ที่ตัว SSH เอง (คีย์ การกำหนดค่า ไฟร์วอลล์) ทั้งสองกรณีมีวิธีแก้ต่างกัน
- เชื่อมต่อใหม่โดยไม่เปลี่ยนการตั้งค่า ไม่ใส่แฟล็กเพิ่ม บันทึกการตั้งค่าของโหนดก่อนเชื่อมต่อใหม่ แล้วเปรียบเทียบหลังเชื่อมต่อ
- เปิดการเข้าถึงฉุกเฉินพร้อมตัวจับเวลาเท่านั้น ขออนุมัติก่อน ตั้งเวลาปิดอัตโนมัติก่อนเปิด จำกัดแหล่งที่มา และตรวจสอบทั้ง IPv4 และ IPv6
- ห้ามเปิด Tailscale SSH กลับมา แม้ในกรณีฉุกเฉิน การเปลี่ยนนโยบายการเข้าถึงที่จำเป็นสำหรับฟีเจอร์นี้ไม่สามารถย้อนกลับอัตโนมัติได้
บทเรียนที่ได้
- รู้ให้แน่ว่าฟีเจอร์ความปลอดภัยยืนยันตัวตนด้วยอะไรจริง ๆ ก่อนจะถอดออก คีย์ที่สคริปต์ของเราระบุไว้ไม่เคยถูกใช้งานเลย
- ทดสอบเส้นทางที่จะย้ายไปใช้จริง ๆ ในสภาพแวดล้อมเดียวกับที่งานของคุณทำงาน ก่อนทำการสลับ
- เตรียมการย้อนกลับที่ไม่ขึ้นกับสิ่งที่กำลังเปลี่ยน ใช้ตัวจับเวลา ไม่ใช่ “เดี๋ยวค่อย SSH เข้าไปแก้”
- ตรวจสอบช่องทางกู้คืนก่อนปิดประตู เรายืนยันการเข้าถึงคอนโซลก่อนปิด SSH จากอินเทอร์เน็ต
- อัปเดต runbook ในการเปลี่ยนแปลงเดียวกัน ขั้นตอนกู้คืนแบบเก่าอาจย้อนการแก้ไขด้านความปลอดภัยได้ในอีกหลายเดือนต่อมา
- อ่านนโยบายเริ่มต้น “อนุญาตอุปกรณ์ของตัวเอง รวมถึง root” คือค่าเริ่มต้นที่เราใช้อยู่ตอนแรก
- แยก “การเปลี่ยนแปลงสำเร็จ” ออกจาก “ช่องโหว่ได้รับการแก้ไขแล้ว” เราไม่ได้เสี่ยงต่อข้อค้นพบเกี่ยวกับ Tailscale SSH อีกต่อไป แต่ Tailworm โดยรวมยังไม่จบจนกว่าการแก้ไขจากต้นทาง (upstream) จะออกมา เราจะอัปเดตไคลเอนต์เมื่อการแก้ไขออกมา
- วัดก่อน แล้วค่อยจำกัด มีข้อมูลทราฟฟิกที่สังเกตได้และรายการการพึ่งพาจริงก่อนจะเข้มงวดกฎการเข้าถึง เพื่อไม่ให้การเสริมความปลอดภัยทำให้ธุรกิจหยุดชะงัก
ขั้นต่อไป
เรากำลังจำกัดการเข้าถึงเครือข่ายระหว่างอุปกรณ์ให้เหลือเพียงขั้นต่ำที่แต่ละบริการต้องใช้ โดยอิงจากทราฟฟิกที่สังเกตได้ และจะติดตั้งการแก้ไขของ Tailscale ทันทีที่เผยแพร่
อ้างอิง: รายงาน Tailworm (tailworm.com) และเอกสารของ Tailscale เรื่อง Tailnet Lock
Global
Japan
Korea
China
Taiwan
Vietnam
Indonesia
Portugal
Spain
France
Germany
Egypt
Russia