ตัวเลือก sshd“ UseDNS” คืออะไร?


78

ฉันรู้ว่าสิ่งที่มันไม่ แต่ผมไม่ทราบว่าทำไม มันป้องกันการโจมตีอะไร?

มันเกี่ยวข้องกับวิธีการรับรองความถูกต้องทุกประเภทหรือไม่ (โฮสต์, รหัสผ่าน, publickey, แป้นพิมพ์แบบโต้ตอบ ... )


2
ฉันเพิ่มหนึ่งลงใน CoreOS ด้วยที่นี่: github.com/coreos/bugs/issues/92

คำตอบ:


65

UseDNSตัวเลือกส่วนใหญ่จะไร้ประโยชน์ หากเครื่องไคลเอนต์อยู่ที่นั่นบนอินเทอร์เน็ตมีโอกาสสูงที่พวกเขาไม่มี DNS ย้อนกลับใด ๆ DNS ย้อนกลับของพวกเขาไม่ได้แก้ปัญหาไปข้างหน้าหรือ DNS ของพวกเขาไม่ได้ให้ข้อมูลใด ๆ นอกเหนือจาก“ เป็นของสิ่งนี้ ISP” ซึ่งที่อยู่ IP แจ้งให้คุณทราบแล้ว

ในการกำหนดค่าทั่วไป DNS จะใช้สำหรับการบันทึกเท่านั้น มันสามารถใช้สำหรับการตรวจสอบ แต่ถ้าระบุไว้ในIgnoreRhosts no sshd_configนี่คือความเข้ากันได้กับการติดตั้งเก่าที่ใช้ rsh ที่คุณพูดว่า“ผู้ใช้ที่เรียกว่าbobบนเครื่องที่เรียกว่าdarkstarอาจจะเข้าสู่ระบบเป็นaliceโดยไม่ต้องแสดงข้อมูลประจำตัวใด ๆ” (โดยการเขียนdarkstar bobใน~alice/.rhosts) จะปลอดภัยเฉพาะเมื่อคุณเชื่อถือเครื่องทั้งหมดที่อาจเชื่อมต่อกับเซิร์ฟเวอร์ ssh กล่าวอีกนัยหนึ่งนี้ไม่ค่อยมีประโยชน์ในทางที่ปลอดภัย

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

อาร์กิวเมนต์สำหรับการปิดคุณลักษณะนี้ก็คือว่าทุกคุณลักษณะฟุ่มเฟือยที่ไม่จำเป็นเป็นความเสี่ยงด้านความปลอดภัย


ดังนั้น UseDNS เกี่ยวข้องเฉพาะกับการพิสูจน์ตัวจริงของโฮสต์หรือไม่ ถ้าฉันไม่ใช้การรับรองความถูกต้องของโฮสต์และฉันไม่สนใจว่าชื่อโฮสต์หรือ IP แสดงในบันทึก UseDNS ไม่สร้างความแตกต่าง?
user368507

5
@ user368507 ใช่แล้ว UseDNSไม่ได้มีประโยชน์หากคุณใช้การตรวจสอบความถูกต้องของโฮสต์ที่ใช้คีย์เฉพาะในกรณีที่คุณใช้การตรวจสอบความถูกต้องของโฮสต์ที่ใช้ชื่อโฮสต์ (เช่นการตรวจสอบที่อ่อนแอมาก)
Gilles

3
@Gilles แน่นอนถ้าคุณใช้การพิสูจน์ตัวตนแบบใช้คีย์และชื่อโฮสต์UseDNSนั้นมีประโยชน์มากและสำคัญมาก คุณตรวจสอบผู้ใช้ตามคีย์และเซิร์ฟเวอร์ตามชื่อโฮสต์ที่กำหนดให้กับที่อยู่ MAC
kara deniz

38

ฉันเพิ่มลงในรายงานข้อผิดพลาด (เก่า แต่ยังคงเป็นปัจจุบัน) ใน Ubuntu เกี่ยวกับเรื่องนี้

https://bugs.launchpad.net/ubuntu/+source/openssh/+bug/424371

ฉันเสนอให้เปลี่ยนค่าเริ่มต้นเป็นไม่ใช่และเพิ่มเอกสารใหม่ใน:

# UseDNS - Determines whether IP Address to Hostname lookup and comparison is performed
# Default value is No which avoids login delays when the remote client's DNS cannot be resolved
# Value of No implies that the usage of "from=" in authorized_keys will not support DNS host names but only IP addresses.
# Value of Yes supports host names in "from=" for authorized_keys. Additionally if the remote client's IP address does not match the resolved DNS host name (or could not be reverse lookup resolved) then a warning is logged.

2
up up upote ... นี่มีประโยชน์มากกว่าเพราะมันมีข้อมูลบางส่วนที่ฉันต้องการ
0xC0000022L

1
ในทำนองเดียวกันถ้า UseDNS ไม่ใช่ชื่อโฮสต์แล้วไม่สามารถจับคู่ในกฎ pam_access และต้องใช้ IP แทน
ColinM

1
ฉันตอบคำตอบนี้เมื่อสองสามปีที่แล้ว แต่วันนี้ฉันสังเกตเห็นว่าค่าเริ่มต้นถูกเปลี่ยนเป็น "UseDNS no" ใน OpenSSH 6.8p1 ซึ่งอยู่ใน Ubuntu 15.10ขึ้นไป
Anthony Geoghegan

RedHat (ใน RHEL7) เพิ่งเปลี่ยนค่าเริ่มต้นเป็น No เช่นกันซึ่งแบ่งการควบคุมการเข้าถึงตามชื่อโฮสต์ (ซึ่งมีประโยชน์ในการควบคุมคำแนะนำส่วนใหญ่บนอินทราเน็ตซึ่งเห็นได้ชัดว่าไม่ใช่กลไกการควบคุมการเข้าถึงเพียงอย่างเดียว)
dannysauer

8

จาก manpage ของsshd_config(5):

 UseDNS  Specifies whether sshd(8) should look up the remote host name and
         check that the resolved host name for the remote IP address maps
         back to the very same IP address.  The default is “yes”.

การเปิดใช้งานสิ่งนี้ทำให้การเข้าถึงจากตำแหน่งที่ไม่มี DNS (ไปข้างหน้าและย้อนกลับ) ที่เหมาะสมสร้างคำเตือนในบันทึก

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

แก้ไข: ปรับปรุงตามความคิดเห็นของอันเดรย์ Voitenkov


ดังนั้นจึงเป็นตัวกรองผู้ที่ได้รับอนุญาตให้เชื่อมต่อตามสิ่งที่มีอยู่ในเซิร์ฟเวอร์ DNS หรือไม่
user368507

2
ทำไมมันทำให้เข้าถึงไม่ได้? sshd เพียงสร้างคำเตือนหากระเบียน DNS A / PTR ไม่ตรงกัน ลำดับการเข้าสู่ระบบจะช้าในกรณีที่แก้ไขปัญหา
Andrey Voitenkov

วิธีนี้จะป้องกันการเข้าถึงหากคีย์ที่ได้รับอนุญาตถูกโจมตีตราบใดที่ผู้โจมตีไม่สามารถปลอมแปลงค่าในfrom=ฟิลด์ก่อนที่คีย์ที่ได้รับอนุญาต (ถ้าใช้)
Alecz

7

จำเป็นต้องใช้เมื่อคุณใช้ตัวเลือก FROM ในไฟล์ authorized_keys และคุณต้องการกรองตามชื่อไม่ใช่แค่ IP

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


3

ผมอยากจะเพิ่มว่าเมื่อวันที่ 7 CentOS (1503/07/01) และด้วยเหตุนี้ Red Hat Enterprise Linux 7 ผมก็ไม่สามารถเข้าสู่ระบบด้วยการตั้งค่าเริ่มต้นของสำหรับyes UseDNSหลังจากที่ไม่แสดงความคิดเห็นและตั้งค่าเป็นnoฉันก็สามารถเข้าสู่ระบบดังนั้นจึงปรากฏว่าหนึ่งสามารถถูกปฏิเสธการบริการถ้า DNS ทำงานไม่ถูกต้อง! ใน CentOS 6 ดูเหมือนว่าจะเป็นค่าเริ่มต้นnoและด้วยเหตุนี้ฉันจึงไม่สามารถsshใช้งาน DNS ได้!

ฉันต้องการเพิ่มว่าการทดลองของฉันอยู่ในคอนเทนเนอร์ LXC ไม่ใช่เครื่องจักรจริงในกรณีที่สร้างความแตกต่าง!

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