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

การเข้าสู่ระบบครั้งเดียว หลายขอบเขต

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

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

การเขียนสี่คำถามไว้ก่อนทดสอบช่วยไม่ให้การทบทวนยุบเหลือเพียงข้อเดียว

ขอบเขตอยู่ตรงไหนจริง ๆ

สี่รูปแบบครอบคลุมเครื่องส่วนใหญ่ ได้แก่ อุโมงค์ระดับทั้งโฮสต์ การเชื่อมต่อต่อผู้ใช้ รายการอนุญาตต่อแอป และเนมสเปซเครือข่ายหรือเครื่องเสมือนแยกต่างหาก

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

ArrangementEnforced byWho can use the path
Host-wide tunnelThe routing tableAny local process using that table
Per-user connectionProfile permission listOnly the listed accounts
Per-app allowlistThe VPN client itselfOnly the selected applications
Namespace or VMThe interface boundaryOnly 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 สิทธิ์ของโปรไฟล์ หรือนโยบายเซสชันของเกตเวย์ บันทึกนั้นทำให้การเปลี่ยนแปลงครั้งถัดไปตรวจสอบได้ ยังกันไม่ให้คำถามเดิมถูกเปิดซ้ำทุกครั้งที่มีคนสังเกตเห็นหน้าจอเข้าสู่ระบบที่สอง การเข้าถึงไม่ใช่การให้สิทธิ์ และทั้งสองอย่างก็ไม่ใช่การแยกกัน

บทความที่เกี่ยวข้อง