การส่งต่อเอเจนต์ SSH กับการคัดลอกคีย์: อะไรที่รั่วไหลจริง
การเข้าสู่ระบบด้วยคีย์สาธารณะส่งลายเซ็น ไม่ใช่คีย์ส่วนตัว การส่งต่อเอเจนต์ยังให้ความสามารถในการลงนามแก่โฮสต์อื่น และนั่นคือการเปิดเผยแยกต่างหาก
เหตุการณ์สองอย่างที่แตกต่างกันถูกเรียกว่า คีย์ SSH ที่รั่วไหล และทั้งสองต้องรับมือต่างกัน การพิสูจน์ตัวตนด้วยคีย์สาธารณะส่งคีย์สาธารณะและลายเซ็นที่สร้างด้วยคีย์ส่วนตัว ดังนั้นคีย์ส่วนตัวจึงไม่เคยเป็นฟิลด์ในคำขอ การส่งต่อเอเจนต์เปิดเผยอีกสิ่งหนึ่ง เพราะโฮสต์ระยะไกลที่เข้าถึงเอเจนต์ที่ส่งต่อของคุณได้สามารถขอให้มันลงนามโดยไม่เคยถือคีย์เลย การมองทั้งสองเป็นเหตุการณ์เดียวจะลงเอยด้วยการเปลี่ยนคีย์ที่ไร้ประโยชน์หรือการมอบหมายที่ยังทำงานอยู่
การเข้าสู่ระบบด้วยคีย์สาธารณะส่งลายเซ็น ไม่ใช่คีย์
การแลกเปลี่ยนการพิสูจน์ตัวตนบรรทุกคีย์สาธารณะของผู้ใช้และลายเซ็นเหนือข้อมูลเซสชัน เซิร์ฟเวอร์ตรวจลายเซ็นนั้นด้วยคีย์ที่มันเชื่อถืออยู่แล้ว เพราะฉะนั้นครึ่งที่เป็นส่วนตัวจึงอยู่ที่ไคลเอนต์ได้แม้ผ่านเครือข่ายที่ไม่น่าเชื่อถือ ผู้ให้บริการ VPN ที่เฝ้าดูอุโมงค์ก็เห็นเซสชัน SSH ที่เข้ารหัสอยู่ดี
นั่นอธิบายโปรโตคอล ไม่ใช่ความน่าเชื่อถือของทุกปลายทางบนเส้นทาง รักษาการตรวจสอบตัวตนของโฮสต์ไว้ให้ครบ เพราะไคลเอนต์ที่ยอมรับคีย์โฮสต์ใดก็ได้ได้ละทิ้งการควบคุมอื่นที่ไม่ใช่สิ่งที่กำลังพูดถึง เซสชันที่ถูกดักจับและคีย์ที่ถูกดักจับเป็นข้อค้นพบแยกกัน และมีเพียงอย่างเดียวเท่านั้นที่เป็นการสูญเสียข้อมูลประจำตัว เก็บทั้งสองไว้ในประโยคแยกกันของรายงาน
ssh-keygen -lf ~/.ssh/id_ed25519.pub ssh -o StrictHostKeyChecking=yes [email protected]
คำสั่งแรกพิมพ์ลายนิ้วมือสาธารณะเพื่อให้คุณเทียบกับรายการที่เซิร์ฟเวอร์แสดง คำสั่งที่สองทำให้การตรวจสอบคีย์โฮสต์ชัดเจนแทนการพึ่งค่าเริ่มต้นที่ไม่มีใครอ่าน รันทั้งสองก่อนเปลี่ยนอะไรเกี่ยวกับคีย์ เพื่อให้มีการบันทึกเส้นฐาน
การส่งต่อเอเจนต์มอบความสามารถในการลงนาม
เมื่อเปิดการส่งต่อ ซ็อกเก็ตจะปรากฏบนโฮสต์ระยะไกล และเอเจนต์ในเครื่องตอบคำขอที่เข้ามาผ่านมัน ใครก็ตามที่ใช้ซ็อกเก็ตนั้นได้ระหว่างเซสชันสามารถพิสูจน์ตัวตนเป็นคุณต่อโฮสต์ที่ยอมรับตัวตนที่โหลดไว้ ไม่มีคีย์ส่วนตัวใดข้ามเครือข่ายเพื่อให้สิ่งนี้ทำงาน
สิ่งที่เปิดเผยคือความสามารถ ไม่ใช่ไฟล์ เพราะฉะนั้นการส่งต่อจึงเป็นของงานที่ระบุชื่อและโฮสต์ที่ระบุชื่อ ไม่ใช่ทุกการเชื่อมต่อที่แล็ปท็อปทำ โฮสต์กระโดดที่ส่งต่อการเชื่อมต่อโดยไม่มีเอเจนต์ที่ส่งต่อมักขจัดความจำเป็นทั้งหมด
ssh-add -l ssh -o ForwardAgent=no [email protected] ssh -J [email protected] [email protected]
รายการแรกแสดงว่าปัจจุบันเอเจนต์ถือตัวตนใดบ้าง ซึ่งควรรู้ก่อนมอบซ็อกเก็ตให้เครื่องอื่น รายการที่สองเชื่อมต่อโดยไม่มอบหมาย รายการที่สามแสดงรูปแบบโฮสต์กระโดดที่มักแทนที่การส่งต่อทั้งหมด
เลือกการตอบสนองจากหลักฐานที่คุณมี
ตัวตนสำหรับลงนามที่เชื่อว่าเปิดเผยแล้วต้องใช้กระบวนการเปลี่ยนและเพิกถอน และถอนการยอมรับออกจากบริการที่เคยเชื่อถือมัน การลบสำเนาในแล็ปท็อปของคุณทำให้สำเนาอื่นทั้งหมดไม่ถูกแตะต้อง เริ่มจากบริการ แล้วจึงทำความสะอาดไคลเอนต์
ปัญหาการมอบหมายชั่วคราวแคบกว่า หยุดการส่งต่อที่ไม่จำเป็น และทบทวนกับเจ้าของเหตุการณ์ว่าเซสชันและตัวตนใดที่มันครอบคลุม การเปลี่ยนคีย์อาจตามมา แต่หลักฐานเป็นตัวตัดสิน ไม่ใช่ความกังวล
การที่ไม่มีการส่งออกที่สังเกตเห็นได้พิสูจน์เพียงว่ากลไกที่คุณกลัวไม่ปรากฏขึ้น มันไม่ได้บอกอะไรเกี่ยวกับสิ่งที่โฮสต์อีกด้านของซ็อกเก็ตนั้นอาจทำได้
แยกการควบคุมออกจากกันในรายงาน
ปกป้องวัสดุส่วนตัว จำกัดว่าใครขอให้มันลงนามได้ รักษาตัวตนของอีกฝ่ายให้ตรวจสอบแล้ว ทั้งสามคือการควบคุมที่เสริมกัน และไม่มีอันใดแทนที่อีกอันเมื่อคุณอธิบายว่าเกิดอะไรขึ้น
แล็ปท็อปที่ถูกบุกรุกหรือแอปพลิเคชันที่มีสิทธิพิเศษบนเครื่องนั้นเป็นกรณีที่สามที่มีรัศมีผลกระทบกว้างกว่ามาก การเปลี่ยนเส้นทาง VPN ไม่ได้แก้ไขและไม่ได้คืนความเชื่อถือในคีย์ที่อาจถูกอ่านจากดิสก์
จดว่าองค์ประกอบใดได้รับความเชื่อถือ การส่งต่อเปิดอยู่หรือไม่ และสิ่งที่สังเกตเห็นจริง บันทึกนั้นคือสิ่งที่ทำให้การตัดสินใจครั้งถัดไปป้องกันได้ แทนที่จะเป็นการเดาว่าการรั่วไหลหมายถึงอะไร