ความขัดแย้งด้านความปลอดภัยของ SSH: ทำไมไม่มีใครตรวจสอบ Host Keys และมันส่งผลต่อความปลอดภัยอย่างไร

ทีมชุมชน BigGo
ความขัดแย้งด้านความปลอดภัยของ SSH: ทำไมไม่มีใครตรวจสอบ Host Keys และมันส่งผลต่อความปลอดภัยอย่างไร

ในโลกของการเข้าถึงระยะไกลอย่างปลอดภัย SSH (Secure Shell) ถูกมองว่าเป็นมาตรฐานทองคำของการสื่อสารที่มีการเข้ารหัสมาอย่างยาวนาน แต่ภายใต้ชื่อเสียงนี้กลับมีความจริงที่ไม่น่าพอใจที่ผู้เชี่ยวชาญด้านความปลอดภัยและผู้ดูแลระบบกำลังพูดคุยกันอย่างเปิดเผยในขณะนี้: ผู้ใช้ส่วนใหญ่ยอมรับ SSH host keys อย่างสุ่มสี่สุ่มห้าโดยไม่มีการยืนยัน สร้างช่องโหว่ด้านความปลอดภัยที่สำคัญซึ่งเป็นที่ยอมรับกันอย่างกว้างขวางแต่แทบไม่เคยได้รับการแก้ไข

การอภิปรายนี้ได้รับแรงผลักดันเมื่อผู้เชี่ยวชาญด้านเทคนิคได้แบ่งปันประสบการณ์ของพวกเขาเกี่ยวกับการจัดการ SSH key ซึ่งเผยให้เห็นทั้งความท้าทายในทางปฏิบัติและผลกระทบที่อาจเกิดขึ้นจากการละเลยด้านความปลอดภัยที่แพร่หลายนี้

ช่องว่างการยืนยันในทางปฏิบัติ

ในขณะที่ SSH ถูกออกแบบมาพร้อมกับความปลอดภัยที่แข็งแกร่ง แต่ปัจจัยด้านมนุษย์กลับกลายเป็นจุดอ่อนที่สุด กระบวนการยืนยันต้องการให้ผู้ใช้เปรียบเทียบลายนิ้วมือเลขฐานสิบหกที่ยาว—งานที่ทั้งน่าเบื่อและมีโอกาสผิดพลาดสูง ดังที่ผู้แสดงความคิดเห็นหนึ่งระบุเกี่ยวกับการดำเนินงาน SFTP ขององค์กรของพวกเขา: เซิร์ฟเวอร์ SFTP องค์กรของฉันซึ่งถูกบังคับให้ใช้เมื่อหลายปีก่อนแสดงคีย์หลายอัน เห็นได้ชัดว่าเพราะมันอยู่บน DNS round robin ความซับซ้อนในโลกแห่งความจริงเช่นนี้มักนำผู้ใช้ไปสู่การยอมรับคีย์ใดๆ ก็ตามที่เซิร์ฟเวอร์นำเสนอ โดยเฉพาะเมื่อต้องจัดการกับเซิร์ฟเวอร์หลายตัวหรือสภาพแวดล้อมที่มีการกระจายโหลด

ปัญหานี้ขยายไปไกลกว่าความไม่สะดวกง่ายๆ เมื่อ host keys เปลี่ยนแปลงไปอย่างไม่คาดคิด—ไม่ว่าจะเนื่องจากการรีอิมเมจเซิร์ฟเวอร์ การเปลี่ยนแปลงการกำหนดค่า หรือการโจมตีที่อาจเกิดขึ้น—ผู้ใช้จะเผชิญกับภาวะกลืนไม่เข้าคายไม่ออก พวกเขาจะลงทุนเวลาในการยืนยัน หรือเพียงแค่ยอมรับคีย์ใหม่และทำงานต่อไป? ส่วนใหญ่เลือกอย่างหลัง สร้างโอกาสสำหรับการโจมตีแบบ man-in-the-middle

Host keys เป็นความคิดที่โง่เขลาที่สุดในประวัติศาสตร์ของสิ่งที่เรียกว่าความปลอดภัยของคอมพิวเตอร์

ความรู้สึกนี้สะท้อนไปทั่วชุมชน ซึ่งเน้นย้ำถึงความหงุดหงิดกับกลไกความปลอดภัยที่ในทางทฤษฎีควรทำงานได้อย่างสมบูรณ์แบบ แต่ในทางปฏิบัติกลับล้มเหลวเนื่องจากปัจจัยของมนุษย์และความซับซ้อนในการนำไปใช้

ความท้าทายด้านความปลอดภัยของ SSH ที่พบบ่อย

  • ปัจจัยด้านมนุษย์: ผู้ใช้มักประสบปัญหาในการตรวจสอบลายนิ้วมือแบบเลขฐานสิบหกที่ยาวได้อย่างถูกต้อง
  • การจัดการคีย์: คีย์ของโฮสต์เปลี่ยนแปลงเนื่องจากการติดตั้งเซิร์ฟเวอร์ใหม่ การอัปเกรด หรือการเปลี่ยนแปลงการกำหนดค่า
  • ช่องทางการโจมตี: การปลอมแปลง DNS การเปลี่ยนเส้นทาง ARP และเครื่องมือโจมตีแบบ man-in-the-middle เช่น ssharpd
  • ความซับซ้อนในการนำไปใช้: เซิร์ฟเวอร์ที่มีการกระจายโหลดมักแสดงคีย์หลายตัว ทำให้ผู้ใช้สับสน
  • นโยบายขององค์กร: ข้อกำหนดด้านความปลอดภัยที่แตกต่างกันในอุตสาหกรรมและกรณีการใช้งานต่างๆ

ความปลอดภัยขององค์กรกับการใช้งานในชีวิตประจำวัน

ภาพรวมการยืนยันเผยให้เห็นความแตกแยกที่ชัดเจนระหว่างผู้ใช้ประเภทต่างๆ สถาบันการเงินและองค์กรที่จัดการข้อมูลสำคัญ เช่น ไฟล์ ACH (การชำระเงินอิเล็กทรอนิกส์รวมถึงเงินเดือน) มักจะดำเนินขั้นตอนการยืนยันที่เข้มงวด ดังที่ผู้เชี่ยวชาญที่จัดการธุรกรรมทางธนาคารอธิบาย: เราโอนย้ายไฟล์ ACH ผ่าน SSH ไปยังธนาคารหลายแห่ง คุณเชื่อได้เลยว่าฉันตรวจสอบคีย์ องค์กรเหล่านี้มักจะมีกระบวนการที่เป็นทางการสำหรับการหมุนเวียนและยืนยันคีย์ โดยมีธนาคารหนึ่งที่ถูกกล่าวถึงว่าบังคับใช้การหมุนเวียนคีย์ทุกสองปีพร้อมกับการยืนยันที่ обязаต้องทำ

อย่างไรก็ตาม สำหรับผู้ใช้ทั่วไปส่วนใหญ่และแม้แต่สภาพแวดล้อมขององค์กรหลายแห่ง ความเป็นจริงกลับต่างออกไป แนวทาง trust on first use (TOFU) ในตอนแรก กลายเป็นการเชื่อใจในทุกครั้งที่ใช้ เนื่องจากผู้ใช้เบื่ออย่างรวดเร็วกับข้อความแจ้งให้ยืนยัน สิ่งนี้สร้างโมเดลความปลอดภัยที่การเชื่อมต่อครั้งแรกมีความสำคัญอย่างยิ่ง—หากผู้โจมตีสามารถดักจับการจับมือครั้งแรกนั้นได้ พวกเขาสามารถสร้างตำแหน่ง man-in-the-middle ที่คงอยู่ได้

วิธีแก้ไขทางเทคนิคและข้อจำกัดของมัน

การอภิปรายในชุมชนเผยให้เห็นหลายแนวทางในการแก้ไขปัญหาเกี่ยวกับการยืนยัน SSH ซึ่งแต่ละวิธีก็มีข้อได้เปรียบเสียเปรียบของตัวเอง SSH certificates ที่ลงนามโดย Certificate Authority (CA) เสนอทางออกหนึ่ง ซึ่งอนุญาตให้องค์กรสร้างสายโซ่แห่งความเชื่อมั่น ดังที่ผู้แสดงความคิดเห็นหนึ่งระบุ: เอกสารดังกล่าวได้กล่าวถึงว่าคุณสามารถให้คีย์ ssh ของคุณลงนามโดย ca ได้ ดังนั้นในบริษัท พนักงานฝ่าย IT จึงสามารถกำหนดค่า OS ของทุกคนให้เชื่อถือเฉพาะคีย์ ssh ที่ลงนามโดยองค์กรเท่านั้น

อย่างไรก็ตาม แนวทางนี้ก็นำมาซึ่งความเสี่ยงของมันเอง CA ที่รวมศูนย์กลายเป็นจุดล้มเหลวเดียว—หากถูกบุกรุก มันอาจทำให้เกิดการโจมตีอย่างกว้างขวางทั่วทั้งองค์กร บางบริการ เช่น GitHub ได้ใช้แนวทางที่แตกต่างออกไปโดยการเผยแพร่ลายนิ้วมือ SSH ของพวกเขาผ่านช่องทางที่ปลอดภัย ใช้ประโยชน์จากโครงสร้างพื้นฐาน TLS ที่มีอยู่เพื่อกระจายข้อมูลคีย์อย่างน่าเชื่อถือ

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

การเปรียบเทียบวิธีการตรวจสอบ Host Key ของ SSH

วิธีการ ระดับความปลอดภัย ความสะดวกในการใช้งาน กรณีการใช้งานทั่วไป
การตรวจสอบ Fingerprint ด้วยตนเอง สูง ต่ำ สถาบันการเงิน สภาพแวดล้อมที่มีความปลอดภัยสูง
Trust On First Use (TOFU) ปานกลาง สูง วัตถุประสงค์ทั่วไป สภาพแวดล้อมการพัฒนา
Certificate Authority (CA) Signed สูง ปานกลาง-สูง สภาพแวดล้อมองค์กร โครงสร้างพื้นฐานที่มีการจัดการ
Published Fingerprints ปานกลาง-สูง ปานกลาง บริการสาธารณะ (เช่น GitHub) การตั้งค่าที่มีเอกสารประกอบ
ไม่มีการตรวจสอบ ต่ำ สูงมาก การทดสอบ สถานการณ์ที่มีความเสี่ยงต่ำ

ผลกระทบด้านความปลอดภัยในภาพรวม

ปัญหาเกี่ยวกับการยืนยันคีย์ SSH สะท้อนให้เห็นถึงประเด็นที่ใหญ่กว่าในความปลอดภัยของคอมพิวเตอร์ ดังที่ผู้แสดงความคิดเห็นหนึ่งชี้ให้เห็น: การจับมือครั้งแรกมักจะเต็มไปด้วยปัญหาด้านความปลอดภัย ความท้าทายนี้ไม่ได้มีเฉพาะใน SSH—ปัญหาที่คล้ายกันมีอยู่ใน TLS/SSL ถึงแม้ว่าโมเดล web PKI (Public Key Infrastructure) จะให้แนวทางที่แตกต่างในการสร้างความไว้วางใจก็ตาม

การอภิปรายยังกล่าวถึงความแตกต่างระหว่างโมเดลการยืนยันตัวตนของ SSH และเว็บ ในขณะที่ SSH รองรับการยืนยันตัวตนสองทาง (ทั้งเซิร์ฟเวอร์และไคลเอ็นต์สามารถยืนยันซึ่งกันและกันได้) แอปพลิเคชันเว็บส่วนใหญ่พึ่งพาการยืนยัน TLS แบบทางเดียว การเกิดขึ้นของ WebAuthn และ passkeys แสดงถึงความพยายามที่จะนำการยืนยันตัวตนที่แข็งแกร่งยิ่งขึ้นมาสู่เว็บ แม้ว่าเทคโนโลยีเหล่านี้จะเผชิญกับความท้าทายในการนำไปใช้ของตัวเองก็ตาม

สิ่งที่ทำให้สถานการณ์ของ SSH น่ากังวลเป็นพิเศษคือธรรมชาติของการเข้าถึงที่มีมูลค่าสูงซึ่งมันให้มา ไม่เหมือนกับการท่องเว็บที่เซสชันอาจมีความเสี่ยงที่จำกัด การเชื่อมต่อ SSH มักจะให้สิทธิ์การเข้าถึงในระดับผู้ดูแลระบบแก่ระบบที่สำคัญ การโจมตีแบบ man-in-the-middle ที่สำเร็จสามารถทำให้โครงสร้างพื้นฐานทั้งหมดเสียหายได้

ก้าวไปข้างหน้า: ความปลอดภัยในทางปฏิบัติในโลกที่ไม่สมบูรณ์แบบ

แม้จะมีความเสี่ยงในทางทฤษฎี หลายองค์กรยังคงดำเนินงานได้สำเร็จด้วยโมเดลความปลอดภัย SSH ในปัจจุบัน แนวทาง trust on first use แม้จะไม่สมบูรณ์แบบ แต่ก็พิสูจน์แล้วว่าเพียงพอสำหรับกรณีการใช้งานหลายอย่าง ดังที่ผู้แสดงความคิดเห็นหนึ่งสังเกตอย่างสมจริง: มันเป็นเรื่องธรรมดามากที่จะตรวจสอบ host keys เปรียบเทียบได้กับการล็อกประตูแม้จะไม่มีเหตุการณ์ลักขโมยเกิดขึ้นเมื่อไม่นานนี้

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

การอภิปรายอย่างต่อเนื่องเกี่ยวกับการยืนยันคีย์ SSH ทำหน้าที่เป็นเครื่องเตือนใจว่าความปลอดภัยเป็นเรื่องของปัจจัยของมนุษย์ไม่น้อยไปกว่าความแข็งแกร่งของการเข้ารหัส ในขณะที่ภูมิทัศน์ทางเทคโนโลยีพัฒนาขึ้น การหาความสมดุลที่เหมาะสมระหว่างความปลอดภัยและความสะดวกในการใช้งานยังคงเป็นหนึ่งในความท้าทายพื้นฐานในด้านความปลอดภัยทางไซเบอร์

อ้างอิง: Do Users Verify SSH Keys?