การมีอุปกรณ์หลายเครื่องที่มีคีย์เซิร์ฟเวอร์ SSH เดียวกันนั้นมีปัญหาอย่างไร


21

ฉันกำลังทำงานกับอุปกรณ์ฝังตัวที่เรียกใช้ FreeBSD และ SSH

อย่างที่คุณทราบ sshd ชอบสร้างชุดของคีย์เซิร์ฟเวอร์แบบสุ่มเมื่อบูทครั้งแรก ปัญหาคือเราจะจัดส่งผลิตภัณฑ์ด้วยระบบไฟล์ sd การ์ดแบบอ่านอย่างเดียว (ไม่สามารถต่อรองได้)

สองตัวเลือกของฉันเมื่อฉันเห็นพวกเขาคือ:

  • จัดส่งคีย์เซิร์ฟเวอร์ sshd เดียวกันบนอุปกรณ์ทั้งหมด
  • เมานต์ระบบไฟล์หน่วยความจำและสร้างคีย์เซิร์ฟเวอร์ในการบู๊ตแต่ละครั้ง (ช้า ... )

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

ส่วนใหญ่อุปกรณ์จะไม่เชื่อมต่อกับอินเทอร์เน็ต

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

อะไรคือข้อดีของการใช้คีย์เซิร์ฟเวอร์เดียวกันบนอุปกรณ์ฮาร์ดแวร์หลายเครื่อง?

PS ใครบางคนได้โปรดสร้างแท็กสิ่งที่อินเทอร์เน็ต?

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

ฉันรู้ว่านี่อาจเป็นความคิดที่ไม่ดี ฉันต้องการที่จะรู้ว่าทำไมมันเป็นความคิดที่ไม่ดี แต่ฉันก็สามารถเข้าใจการแลกเปลี่ยน


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

ฉันกำลังพูดถึงการติดตั้งคีย์ส่วนตัวโฮสต์เดียวกันบนเซิร์ฟเวอร์ทั้งหมดถ้านั่นคือสิ่งที่คุณหมายถึง
NXT

2
การใช้ชื่อผู้ใช้ / รหัสผ่านเดียวกันบนอุปกรณ์ทั้งหมดเป็นความคิดที่แย่มาก สิ่งเหล่านี้เป็นวิธีที่ง่ายกว่าในการบังคับเดรัจฉานมากกว่าคีย์ส่วนตัวที่ใช้สำหรับการตรวจสอบสิทธิ์กุญแจสาธารณะ แม้ว่าผู้ที่อุทิศตนเหล่านี้ไม่ควรเชื่อมต่อกับอินเทอร์เน็ตโดยตรง และถ้า "ไม่ได้เชื่อมต่อโดยตรง" หมายถึง NAT พวกเขามีมากพอที่เกี่ยวโยงกัน ...
เทโร Kilkanen

7
การแชร์คีย์ SSH หมายความว่าคนที่สามารถเข้าถึงคีย์ส่วนตัวบนอุปกรณ์หนึ่งสามารถปลอมตัวเป็นอุปกรณ์เหล่านี้ทั้งหมด
user253751

3
ในขณะที่นี่เป็นคำถามที่น่าสนใจฉันไม่เห็นอะไรเกี่ยวกับเรื่องนี้ที่เกี่ยวข้องกับการบริหารระบบและเป็นเรื่องนอกเรื่องสำหรับ Server Fault คุณกำลังถามเกี่ยวกับการออกแบบอินเทอร์เฟซการตรวจแก้จุดบกพร่อง / วินิจฉัยสำหรับอุปกรณ์ฝังตัวที่คุณกำลังจัดส่งและไม่ใช่อินเทอร์เฟซที่เกี่ยวข้องกับ sysadmins คำถามนี้อาจถูกย้ายไปรักษาความปลอดภัยข้อมูล
200_success

คำตอบ:


27

แทนที่จะเก็บข้อมูลเฉพาะของโฮสต์เช่นคีย์โฮสต์ ssh บนการ์ด SD หรือสื่อแบบอ่านอย่างเดียวคุณสามารถจัดเก็บข้อมูลนี้ใน NVRAM ซึ่งเป็นสิ่งที่ใช้กับระบบฝังตัว คุณจะต้องใช้สคริปต์ที่กำหนดเองเพื่อจัดเก็บและเรียกใช้คีย์ในเวลาบูต แต่สคริปต์จะเหมือนกันทุกอุปกรณ์


12

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

ในทางกลับกันการสร้างคีย์ในการบู๊ตแต่ละครั้งจะทำให้เกิดการแจ้งเตือนลูกค้า

สำหรับการอ้างอิงจากman ssh(1):

sshรักษาและตรวจสอบฐานข้อมูลที่มีการระบุตัวตนโดยอัตโนมัติสำหรับโฮสต์ทั้งหมดที่เคยใช้งานด้วย คีย์โฮสต์จะถูกเก็บไว้ใน~/.ssh/known_hostsไดเรกทอรีบ้านของผู้ใช้ นอกจากนี้ไฟล์/etc/ssh/ssh_known_hostsจะถูกตรวจสอบโดยอัตโนมัติสำหรับโฮสต์ที่รู้จัก โฮสต์ใหม่ใด ๆ จะถูกเพิ่มลงในไฟล์ของผู้ใช้โดยอัตโนมัติ หากการระบุตัวตนของโฮสต์เปลี่ยนแปลงอยู่ตลอดเวลาให้sshเตือนเกี่ยวกับสิ่งนี้และปิดใช้งานการตรวจสอบรหัสผ่านเพื่อป้องกันการปลอมแปลงเซิร์ฟเวอร์หรือการโจมตีแบบกึ่งกลางซึ่งอาจใช้เพื่อหลีกเลี่ยงการเข้ารหัส StrictHostKeyCheckingตัวเลือกที่สามารถใช้ในการเข้าสู่ระบบการควบคุมไปยังเครื่องที่มีโฮสต์ที่สำคัญไม่เป็นที่รู้จักหรือมีการเปลี่ยนแปลง


2
ฉันไม่เข้าใจว่าทำไมพวกเขาไม่สามารถสร้างเพียงครั้งเดียว (ในแต่ละอุปกรณ์ในการบู๊ตครั้งแรก) จากนั้นจะไม่สร้างอีกครั้ง (เว้นแต่พวกเขาจะถูกลบ)
djsmiley2k - CoW

ทำได้อย่างสมบูรณ์แบบ แต่ OP ระบุว่าเขา / เธอต้องการ: 'ติดตั้งระบบไฟล์หน่วยความจำและสร้างคีย์เซิร์ฟเวอร์ในการบู๊ตแต่ละครั้ง' ดังนั้นคำตอบของฉันถือว่า
dawud

อ่าฉันเข้าใจว่าเมื่อฉันอ่านครั้งแรก
djsmiley2k - CoW

5

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

วิธีนี้จะช่วยให้การโจมตีแบบ Man-in-the-middle ดังต่อไปนี้:

  1. ผู้ใช้ตั้งค่าเซิร์ฟเวอร์ SSH ด้วยคีย์ส่วนตัวที่ได้รับจากอุปกรณ์ของคุณและมอบที่อยู่ IP นั้นให้กับช่างเทคนิคของคุณ
  2. ช่างเทคนิคของคุณป้อนรหัสผ่านรูทผ่านการเชื่อมต่อ SSH
  3. ตอนนี้ผู้ใช้รู้รหัสผ่านรูทที่ใช้ได้สำหรับอุปกรณ์ทั้งหมดของคุณ

อย่างไรก็ตามคุณไม่ควรใช้รหัสผ่านรูทตั้งแต่แรกให้ใช้คีย์ ssh เพื่อตรวจสอบสิทธิ์แทน ผลกระทบของคีย์เซิร์ฟเวอร์ที่ใช้ร่วมกันนั้นค่อนข้างเล็กถ้าคุณเข้าสู่ระบบจาก LAN เท่านั้น

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


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

WRT # 2 ไม่ควรส่งรหัสผ่านรูทผ่านการเชื่อมต่อ SSH มันควรจะถูกป้อนเข้าสู่ไคลเอนต์เทอร์มินัลและใช้สำหรับครึ่งโลคัลของโปรโตคอลการตรวจสอบที่พิสูจน์การครอบครองความลับโดยไม่ต้องส่งความลับ ("การพิสูจน์ความรู้") แม้แต่ระบบที่มีอายุหลายสิบปีก็รู้ที่จะส่งรหัสแฮชและไม่ใช่รหัสผ่าน รวมถึง nonce ในโปรโตคอลการตอบสนอง / การท้าทายและผู้โจมตีไม่ทราบรหัสผ่านดั้งเดิมหรือโทเค็นใด ๆ ที่สามารถใช้แทนได้
Ben Voigt

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

2

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

ดูเถิดเราบอกความจริงแก่ท่านว่าใครประนีประนอมอย่างใดอย่างหนึ่งกับอุปกรณ์ทุกชิ้น เมื่อได้รับแล้วคาดหวังว่าคนเลวจะกระโดดจากที่หนึ่งไปยังอีกที่หนึ่งและความปลอดภัยจะย้อนกลับราวกับว่ามันเป็นกระดาษบาง


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

@jpa: สำหรับคีย์โฮสต์โดยการสกัดกั้นและขโมยรหัสผ่าน ฯลฯ นอกจากนี้การตั้งค่านี้ดูเหมือนจะเสนอให้ทำสิ่งเดียวกันกับรหัสผู้ใช้
joshudson

1

เนื่องจากคุณพูดถึงว่าการเข้าถึง SSH ไม่ได้ถูกใช้โดยผู้ใช้ / ลูกค้าคุณอาจต้องการปิดการเข้าถึง SSH โดยค่าเริ่มต้นและเปิดใช้งานชั่วคราวเมื่ออุปกรณ์ถูกนำเข้าสู่โหมด "debug"

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

หรือคุณมีคีย์ใหม่ที่สร้างขึ้นเมื่ออุปกรณ์เข้าสู่โหมด "debug" - ดังนั้นคุณไม่ต้องเสียเวลาบูตในการสร้างคีย์ในแต่ละครั้งที่เปิดอุปกรณ์


ฉันชอบความคิดนี้
NXT

1

นี่คือสถานการณ์การโจมตีตัวอย่างจากข้อ จำกัด ที่คุณมี:

หากอุปกรณ์ของคุณพูดตัวอย่างของ Raspberry Pi หากฉันเดินขึ้นและดึงการ์ด SD ออกมาจากอันใดอันหนึ่งฉันสามารถใส่การ์ด SD ในคอมพิวเตอร์ของฉันเองค้นหาคีย์ sshd และคัดลอกไปยังที่ใดก็ได้ที่ฉันต้องการ บางทีฉันอาจคว้าราสเบอร์รี่ pi และการ์ดอีเธอร์เน็ต USB ของฉันเอง ตอนนี้ฉันสามารถติดที่ระหว่างอุปกรณ์เป้าหมายและทุกที่ที่พวกเขาไปและตรวจสอบการเชื่อมต่อ ssh เมื่อฉันเห็นว่าอุปกรณ์เป้าหมายพยายามเชื่อมต่อ ssh ฉันจะทำสิ่งนี้:

(target) <---> (my evil sshd <--> decrypted traffic <--> ssh) <---> (real server)
                                       |
                                       V
                                    log file

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

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

แต่ทำในสิ่งที่คุณมีอยู่แล้วนำเสนอ แต่แก้ไขได้ ก่อนที่คุณจะเขียนรูปของคุณให้ทำสิ่งนี้:

ssh-keygen -f some-new-server
cp some-new-server /path/to/the/mounted/image/sshd/key
cp some-new-server.pub /path/to/the/mounted/image/sshd/key.pub

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


1
หากใครบางคนสามารถเข้าถึงฮาร์ดแวร์ของคุณและคุณล้มเหลวในการเข้ารหัสข้อมูลที่เหลือการเดิมพันทั้งหมดจะถูกปิด
user9517 รองรับ GoFundMonica
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.