การเข้าสู่ระบบ VPN ครั้งเดียวบนพีซีที่ใช้ร่วมกัน: ใครได้เส้นทางอีก
การเข้าสู่ระบบ VPN ยืนยันตัวบุคคลหนึ่งคน แต่เส้นทางที่ติดตั้งไว้เป็นขอบเขตอีกอย่าง เปรียบเทียบอุโมงค์ระดับทั้งโฮสต์ ระดับผู้ใช้ และระดับแอปบนเครื่องที่ใช้ร่วมกัน
การแบ่งใช้สถานีงานทำให้เกิดคำถามที่แล็ปท็อปสำหรับผู้ใช้คนเดียวไม่เคยต้องตอบ เมื่อคนหนึ่งยืนยันอุโมงค์แล้ว ใครอีกสามารถใช้มันได้ การเข้าสู่ระบบระบุตัวตนบุคคล ส่วนเส้นทางที่ติดตั้งอธิบายขอบเขต สองสิ่งนี้ไม่ใช่วัตถุเดียวกัน ระหว่างกลางมีระบบปฏิบัติการ การกำหนดค่าของไคลเอนต์ และสิ่งที่บริการส่วนตัวเรียกร้องด้วยตัวเอง การเปรียบเทียบจุดบังคับใช้เป็นวิธีเดียวที่จะตอบคำถามโดยไม่เดา
การเข้าสู่ระบบครั้งเดียว หลายขอบเขต
การยืนยันตัวตนตอบว่าใครได้รับอนุญาตให้เข้า เส้นทางตอบว่าแพ็กเก็ตใดออกผ่านอุโมงค์ได้ การให้สิทธิ์ตอบว่าบริการใดจะรับการเชื่อมต่อที่เกิดขึ้น และทั้งสามข้อไม่ได้รับรองข้อถัดไป
อุโมงค์ระดับทั้งโฮสต์เป็นค่าเริ่มต้นทั่วไป และทำให้ช่องว่างชัดเจน เส้นทางอยู่ในตารางของเคอร์เนล ทุกโพรเซสที่ใช้ตารางนั้นจึงเข้าถึงเครือข่ายส่วนตัวได้ รวมถึงโพรเซสที่ผู้ใช้ซึ่งไม่เคยเห็นหน้าต่าง VPN เริ่มขึ้น นี่ไม่ใช่ข้อบกพร่องของอุโมงค์ แต่คือความหมายของเส้นทางระดับทั้งระบบ บริการส่วนตัวยังปฏิเสธการเชื่อมต่อได้ ดังนั้น การเข้าถึงและสิทธิ์จึงต้องมีคำตอบแยกกัน
การเขียนสี่คำถามไว้ก่อนทดสอบช่วยไม่ให้การทบทวนยุบเหลือเพียงข้อเดียว
ขอบเขตอยู่ตรงไหนจริง ๆ
สี่รูปแบบครอบคลุมเครื่องส่วนใหญ่ ได้แก่ อุโมงค์ระดับทั้งโฮสต์ การเชื่อมต่อต่อผู้ใช้ รายการอนุญาตต่อแอป และเนมสเปซเครือข่ายหรือเครื่องเสมือนแยกต่างหาก
แต่ละแบบวางจุดบังคับใช้ไว้คนละที่ และความต่างสำคัญกว่าชื่อเรียก การเชื่อมต่อต่อผู้ใช้บังคับใช้ด้วยสิทธิ์ของโปรไฟล์ ไม่ใช่หน้าจอเข้าสู่ระบบของเดสก์ท็อป รายการอนุญาตต่อแอปบังคับใช้ภายในไคลเอนต์ ซึ่งตัดสินใจว่าจะบรรทุกอะไร เนมสเปซหรือ VM บังคับใช้ที่ขอบของอินเทอร์เฟซ โพรเซสข้างในจึงมองไม่เห็นเส้นทางของโฮสต์เลย จำนวนหน้าจอเข้าสู่ระบบบนเครื่องไม่ได้บอกอะไรเกี่ยวกับสิ่งเหล่านี้
| Arrangement | Enforced by | Who can use the path |
|---|---|---|
| Host-wide tunnel | The routing table | Any local process using that table |
| Per-user connection | Profile permission list | Only the listed accounts |
| Per-app allowlist | The VPN client itself | Only the selected applications |
| Namespace or VM | The interface boundary | Only processes inside it |
การอ่านตารางทีละแถวแสดงว่าคำถามจริงไม่ใช่มีขอบเขตแยกหรือไม่ แต่เป็นการนำไปใช้ที่ใด
เปรียบเทียบจุดบังคับใช้สี่จุด
บน Linux ตารางเส้นทางเป็นสิ่งแรกที่ต้องตรวจ เพราะอุโมงค์ระดับทั้งโฮสต์ปรากฏที่นั่น ส่วนเนมสเปซไม่ปรากฏ การเรียกค้นหาในฐานะผู้ใช้คนที่สองคือขั้นตอนที่คนมักข้าม คำตอบต่างจากที่ได้ในฐานะตัวเอง และนั่นอธิบายรายงาน
การตรวจสองข้อถัดไปมองนโยบายไม่ใช่การกำหนดเส้นทาง กฎไฟร์วอลล์ที่ตรงกับ UID ใช้กับทราฟฟิกที่สร้างขึ้นในเครื่อง จึงแยกผู้ใช้สองคนบนโฮสต์เดียวได้แม้ทั้งคู่ใช้เส้นทางร่วมกัน โปรไฟล์การเชื่อมต่อที่มีรายการอนุญาตชัดเจนถูกบังคับใช้โดยตัวจัดการเครือข่ายตอนเปิดใช้งาน ไม่มีการตรวจใดที่ต้องเปลี่ยนอุโมงค์ จึงคุ้มค่าที่จะทำก่อนออกแบบใหม่
ip route get 10.40.2.10
sudo -u bob ip route get 10.40.2.10
nmcli connection show vpn-work | grep -i permission
sudo nft list ruleset | grep -n skuid
หากการค้นหาครั้งที่สองแสดงเส้นทางของอุโมงค์ ขอบเขตไม่ได้อยู่ที่ที่การออกแบบสันนิษฐานไว้
กฎเซสชันพร้อมกันเป็นการควบคุมแยก
เกตเวย์มักจำกัดจำนวนเซสชันที่บัญชีหนึ่งถือได้ และขีดจำกัดนั้นไม่เกี่ยวกับผู้ใช้ในเครื่องเลย มันจำกัดบัญชี คนที่สองที่ลงชื่อเข้าใช้ด้วยข้อมูลเดียวกันจึงตัดอุโมงค์ของคนแรกได้
อ่านความล้มเหลวก่อนสันนิษฐานว่าเป็นปัญหาการแยกกันในเครื่อง ขีดจำกัดเซสชันทำให้หลุดที่เกตเวย์ ส่วนปัญหาขอบเขตทำให้ได้อุโมงค์ที่ทำงานแต่ไม่ได้บรรทุกทราฟฟิกของอีกคน อาการสองอย่างนี้นำไปสู่การแก้ที่ต่างกันโดยสิ้นเชิง เก็บข้อความจากไคลเอนต์ไว้ให้ครบ เพราะมักระบุกฎ ขอขั้นตอนที่อนุมัติแล้วจากเจ้าของโปรไฟล์แทนการหลบขีดจำกัด
เครื่องเสมือนไม่ได้ยกเว้นใครจากกฎนั้น และเพิ่มการออกแบบเครือข่ายกับข้อมูลรับรองของตัวเอง
ทดสอบบริบทที่คุณสนใจ
ทดสอบผู้ใช้และแอปที่ตั้งใจ แล้วทดสอบบริบทที่ควรถูกปฏิเสธ การทบทวนที่พิสูจน์เพียงว่ารหัสผ่านเดิมใช้ได้ ได้ทดสอบการยืนยันตัวตนและไม่ทดสอบอย่างอื่น
sudo -u bob curl -sS -m 5 https://intranet.internal/health
wg show
ss -tnp | grep -E ':443|:51820'
บันทึกจุดบังคับใช้ข้างผลลัพธ์แต่ละรายการ ตารางเส้นทาง กฎ UID สิทธิ์ของโปรไฟล์ หรือนโยบายเซสชันของเกตเวย์ บันทึกนั้นทำให้การเปลี่ยนแปลงครั้งถัดไปตรวจสอบได้ ยังกันไม่ให้คำถามเดิมถูกเปิดซ้ำทุกครั้งที่มีคนสังเกตเห็นหน้าจอเข้าสู่ระบบที่สอง การเข้าถึงไม่ใช่การให้สิทธิ์ และทั้งสองอย่างก็ไม่ใช่การแยกกัน