OpenConnect csd-wrapper: ตรวจสคริปต์ก่อนเข้าสู่ระบบ
ถือว่า --csd-wrapper เป็นขอบเขตของการรันโค้ด: ตรวจสคริปต์ เลือกผู้ใช้ csd โดยเฉพาะ และยืนยันว่าเกตเวย์เห็นอะไรจริง ๆ
การเพิ่ม --csd-wrapper ลงในโปรไฟล์คือการมอบสคริปต์ภายในเครื่องให้แดมอนที่รันมันตอนเข้าสู่ระบบ ดังนั้นการตัดสินใจที่อยู่ตรงหน้าคุณคือการรีวิวโค้ด ไม่ใช่สวิตช์ตั้งค่า ตัวเลือกนี้มีอยู่เพื่อให้สามารถเปลี่ยนคอมโพเนนต์ตรวจสอบโฮสต์ของเกตเวย์ได้ และมันรับพาธไปยังสคริปต์ที่คุณจัดหาเอง ทุกอย่างด้านล่างถือว่าเจ้าของการติดตั้งได้บอกแล้วว่าต้องใช้การตรวจสอบสถานะแบบใด หากส่วนนั้นยังเปิดอยู่ ให้จัดการส่วนนั้นก่อน คู่มือมีสี่ขั้นตอน: หาขั้นตอนที่ล้มเหลว อ่านสคริปต์ เลือกตัวตนที่ใช้รัน และพิสูจน์ผลลัพธ์
ขั้นตอนที่ 1: หาขั้นตอนที่ล้มเหลว
ข้อความสุดท้ายของไคลเอนต์มักเกี่ยวกับคุกกี้ ซึ่งเป็นปลายของห่วงโซ่ ไม่ใช่จุดเริ่มต้น การล็อกอินผ่าน HTTPS การตรวจสอบใบรับรองเซิร์ฟเวอร์ การแลกเปลี่ยนการยืนยันตัวตน และคอมโพเนนต์สถานะ ล้วนอยู่ก่อนข้อความนั้น
บันทึกเวอร์ชันและที่อยู่ล็อกอินที่ใช้อยู่ จากนั้นทำซ้ำความพยายามโดยเก็บเอาต์พุตแบบละเอียดไว้บนเทอร์มินัลของคุณเอง อ่านข้อผิดพลาดแรกที่ไม่ใช่การลองใหม่ ไม่ใช่บรรทัดสุดท้ายของบันทึก หากล็อกหยุดก่อนที่จะมีการระบุคอมโพเนนต์การประเมินใด ๆ แสดงว่าตัวห่อยังไม่ใช่ปัญหาของคุณ การเพิ่มมัน ณ จุดนั้นเพียงขยายพื้นผิวที่คุณต้องป้องกันในภายหลัง
openconnect --version
openconnect --verbose --user="$VPN_USER" vpn.example.com </dev/nullเก็บบันทึกไว้ในเครื่อง เพราะคุกกี้และการตอบกลับการยืนยันตัวตนเป็นวัสดุเข้าถึง ร่องรอยที่วางในแชตคือการรั่วไหลของข้อมูลรับรอง แม้ขั้นตอนการประเมินจะดูไม่เป็นอันตราย แบ่งปันข้อความข้อผิดพลาดและจุดในโฟลว์ที่มันปรากฏ ไม่ใช่เพย์โหลดเด็ดขาด
ขั้นตอนที่ 2: อ่านสคริปต์ก่อนที่มันจะเข้าสู่โปรไฟล์
ตัวห่อจะน่าเชื่อถือเท่ากับการแก้ไขที่คุณตรวจสอบ ดังนั้นปักหมุดการแก้ไขนั้นและเก็บแฮชไว้ข้างบันทึกการอนุมัติ สองคำสั่งด้านล่างให้ลายนิ้วมือและการตรวจสอบไวยากรณ์ราคาถูกก่อนที่คุณจะอ่านสักบรรทัด ยังให้ข้อมูลอ้างอิงที่แน่นอนแก่คนถัดไป ซึ่งสำคัญเมื่อไฟล์อาศัยอยู่นอกการจัดการแพ็กเกจ ไม่มีคำสั่งใดบอกว่าสคริปต์ทำอะไร ดังนั้นให้รันมันแล้วอ่านต่อ
sha256sum ./vpn-csd-wrapper.sh
bash -n ./vpn-csd-wrapper.shอ่านทั้งไฟล์โดยคำถามสี่ข้อในใจ: มันเรียก HTTP ขาออกหรือไม่ อ่านไฟล์ข้อมูลรับรองหรือตัวแปรสภาพแวดล้อมหรือไม่ เขียนนอกไดเรกทอรีชั่วคราวหรือไม่ และมีสาขาใดรายงานสถานะผ่านโดยไม่วัดอะไรเลยหรือไม่ รูปแบบสุดท้ายนั้นคือการหลบเลี่ยงนโยบายพร้อมบรรทัดล็อกที่แนบมา ตัวห่อที่คัดลอกมามักลักลอบใส่มันไว้หลังการตรวจสอบที่ดูน่าเชื่อถือ หากสคริปต์ตัดสินว่าเครื่องปลอดภัยก่อนที่จะดูเครื่อง ให้หยุดตรงนั้น
ตรวจสอบเพย์โหลดที่ถูกแพ็กด้วย เพราะส่วนหัวที่อ่านได้ไม่ได้พิสูจน์อะไรเกี่ยวกับส่วนที่เหลือของไฟล์ การดาวน์โหลดสคริปต์จากกระทู้ฟอรัมไม่ได้ทำให้มันน่าเชื่อถือเพียงเพราะชื่อของมันสะท้อนคอมโพเนนต์ตรวจสอบโฮสต์จริง บันทึกว่าใครติดตั้ง มันมาจากไหน และจะอัปเดตอย่างไร
grep -nE 'base64 -d|xxd -r|eval |curl |wget ' ./vpn-csd-wrapper.shขั้นตอนที่ 3: เลือกตัวตนที่ตัวห่อใช้รัน
--csd-user ลดสิทธิ์ขณะที่โปรแกรม CSD, TNCC หรือ HIP ทำงาน บัญชีนั้นเป็นส่วนหนึ่งของการจัดเรียงการรันภายในเครื่อง ไม่ใช่ชื่อผู้ใช้ที่ส่งให้เกตเวย์
ให้ตัวห่อมีบัญชีเฉพาะโดยไม่มีเชลล์แบบโต้ตอบ ไม่มีสิทธิ์ sudo และไม่มีสมาชิกกลุ่มที่ไม่จำเป็น ให้สิทธิ์อ่านสคริปต์และไฟล์เฉพาะที่มันตรวจสอบ จากนั้นทดสอบการลดสิทธิ์ก่อนแตะโปรไฟล์ VPN การหาเจอปัญหาที่นี่ถูกกว่าการหาเจอในไคลเอนต์
sudo -u vpn-csd /usr/local/libexec/vpn-csd-wrapper.shการลดสิทธิ์จำกัดความเสียหายที่สคริปต์แย่ ๆ อาจก่อได้ แต่ไม่ได้รีวิวโค้ด ไม่ได้ทำให้รายงานเป็นความจริง และไม่ได้ยืนยันว่าผู้ดูแลเกตเวย์ยอมรับการติดตั้งนี้ว่าตรงตามนโยบายอุปกรณ์
ขั้นตอนที่ 4: ทำให้การเปลี่ยนแปลงย้อนกลับได้
สำรองโปรไฟล์ก่อนแก้ไข และเก็บตัวห่อไว้ในระบบควบคุมเวอร์ชัน เพื่อให้การย้อนกลับคืนค่าแฮชที่รู้จักแทนการตามหาสำเนา จดพาธสคริปต์ แฮช ผู้ใช้ที่ใช้รัน และผู้อนุมัติไว้ในที่เดียว
หากต้องการย้อนกลับ ให้ลบตัวเลือกออก รีสตาร์ตไคลเอนต์ และยืนยันว่าข้อผิดพลาดเดิมกลับมา หากเกตเวย์ยังปฏิเสธการล็อกอินหลังย้อนกลับ แสดงว่ามีอย่างอื่นเปลี่ยนด้วย และการหาความต่างนั้นมาก่อนการลองตัวห่ออีกครั้ง เก็บสำเนาก่อนหน้าไว้ตลอดหน้าต่างการเปลี่ยนแปลง ซึ่งสำหรับทีมส่วนใหญ่หมายถึงจนกว่าหน้าต่างบำรุงรักษาถัดไปจะผ่านไป
หลังการทยอยใช้งานสำเร็จ ให้ตรวจสองอย่างไม่ใช่อย่างเดียว: อุโมงค์ขึ้น และอุปกรณ์ที่ควรล้มเหลวในการตรวจสอบสถานะยังคงถูกปฏิเสธ การเชื่อมต่อที่ใช้ได้กับทุกคนไม่ใช่หลักฐานว่าการประเมินอยู่รอดจากการเปลี่ยนแปลงของคุณ
ทางลัดที่สร้างปัญหาที่สอง
อย่าให้ตัวช่วยรายงานสถานะที่สอดคล้องโดยไม่รันการตรวจสอบที่กำหนด และอย่าเขียนทับตัวตนแพลตฟอร์มเพื่อให้ตรงกับระบบปฏิบัติการอื่น การอ้างว่าเป็นแพลตฟอร์มอื่นไม่ใช่หลักฐานว่าอุปกรณ์จริงตรงตามนโยบาย มันทิ้งไคลเอนต์ที่โกหกทุกครั้งที่ล็อกอินในอนาคตไว้กับคุณ
การปิดการตรวจสอบเซิร์ฟเวอร์ การเล่นคุกกี้เก่าซ้ำ และการซ้อนสคริปต์ที่ยังไม่ตรวจสอบ ล้วนแลกความล้มเหลวที่มองเห็นได้กับสิ่งที่มองไม่เห็น หากไคลเอนต์ที่ติดตั้งไม่สามารถทำโฟลว์ที่รองรับให้เสร็จได้ ให้ขอทางเลือกที่ได้รับอนุมัติแทนการดัดสิ่งที่คุณมี
คู่มือ OpenConnect จัดทำเอกสาร --csd-wrapper และ --csd-user แยกจากกัน และนั่นคือเบาะแสที่สำคัญ: สคริปต์กับตัวตนเป็นการตัดสินใจสองอย่าง ตรวจทั้งสองแยกกันและจดทั้งคู่ จากนั้นพรอมป์ล็อกอินก็เลิกเป็นปริศนาที่คุณแก้ด้วยการวางโค้ด