|
|
|||||||
Secure Shell Security Checklist
เรียบเรียงโดย : อัมรินทร์ เผ่าสวัสติ์,
ดร. บรรจง หะรังษี และ ชวลิต
ทินกรสูติบุตร
เรียบเรียงเมื่อ : 24 พฤษภาคม 2547
กล่าวนำ
โปรแกรม Secure shell (ssh) เป็นโปรแกรมที่นิยมใช้ในการติดต่อกับเครื่องระยะไกล (remote access) เพราะมีความปลอดภัยมากกว่าโปรแกรม rlogin เดิมที่เคยใช้อยู่ แต่อย่างไรก็ตาม ถึงตัวโปรแกรมจะมีความปลอดภัย แต่ถ้าไม่ทำการเสริมสร้างความแข็งแกร่งปลอดภัย (hardening) ให้แก่ ssh ก็อาจจะมีโอกาสที่ผู้ไม่ประสงค์ดี จะเจาะระบบโดยอาศัยช่องโหว่จากโปรแกรม ssh ได้
หมายเหตุ เนื้อหาในเอกสารนี้ใช้ได้กับ openSSH 3.6.1p2
เนื้อหาโดยรวม
หัวข้อต่อไปนี้เป็นรายการ (checklist) ที่จะต้องทำเพื่ออุดช่องโหว่ของโปรแกรม ssh
ทั่วๆไป
1. ได้ลง ssh เวอร์ชัน ล่าสุดแล้วหรือยัง
คำตอบ ssh เวอร์ชันใหม่ๆได้ทำการอุดช่องโหว่ ที่พบเจอในเวอร์ชันเก่าๆ จึงควรแน่ใจว่าได้ลงเวอร์ชันใหม่แล้ว สามารถดาวน์โหลดโปรแกรม ssh ได้ที่เอกสารอ้างอิง [1]
สำหรับไฟล์ sshd_config
2. ได้ตั้งค่า ServerKeyBits มากกว่า 1024 แล้วหรือยัง
คำตอบ server key เป็นคีย์ที่ใช้ในการเข้ารหัส session key และ session key เป็นคีย์ที่จะใช้ในการสื่อสารทั้งหมดหลัง log in ถ้า server key สั้นเกินไป จะทำให้ session key ถูกเจาะได้ ให้ตั้งค่าดังนี้
ServerKeyBits 1024
3. ได้ตั้งค่า LoginGraceTime ที่เหมาะสมแล้วหรือยัง (น้อยกว่า 2 นาที)
คำตอบ ค่า login grace time คือ เวลาที่จะให้ใส่ชื่อผู้ใช้ กับ รหัสผ่าน ถ้าเลยเวลานี้ การติดต่อจะถูกยกเลิกไป ถ้าเวลานี้สูงเกินไปจะทำให้ผู้ประสงค์ร้ายทำ brute-force (ไล่สุ่มรหัสผ่านจนกว่าจะถูก) ได้ ให้ตั้งค่าดังนี้
LoginGraceTime 120
4. ได้ตั้งค่า KeyRegenerationInterval ที่เหมาะสมแล้วหรือยัง
คำตอบ ค่า key generation interval คือ เวลาในการสร้าง server key ใหม่ ถ้าค่านี้สูงเกินไป ผู้ประสงค์ร้ายจะมีเวลาในการเจาะ key มากขึ้น จึงไม่ปลอดภัย ควรสร้าง key ใหม่ ในเวลาที่ไม่นานเกินไป ให้ตั้งค่าดังนี้
KeyRegenerationInterval 3600
5. ได้ทำการห้าม root log in แล้วหรือยัง
คำตอบ ถ้า root ทำการ log in ได้ จะมีความไม่ปลอดภัยสูง เพราะว่า ถ้า root ถูกเจาะได้ ก็จะทำให้สามารถใช้ root ในการเจาะเครื่องระยะไกลได้ ให้ตั้งค่าดังนี้
PermitRootLogin no
6. ได้ทำการปิดบริการ log in ผ่านทางชื่อโฮสต์แล้วหรือยัง
คำตอบ ssh สามารถให้ผู้ใช้ log in ผ่านทางชื่อโฮสต์โดยไม่ต้องใส่รหัสผ่านได้ เหมือน rlogin เดิม ซึ่งเสี่ยงมาก ดังนั้นจึงควรปิดบริการนี้ ให้ตั้งค่าดังนี้
RhostsAuthentication no
IgnoreRhosts yes
RhostsRSAAuthentication no
HostbasedAuthentication no
IgnoreUserKnownHosts yes
7. ได้ใช้การ log in ด้วยรหัสผ่านแล้วหรือยัง
คำตอบ ความปลอดภัยขั้นต่ำสุดที่ควรมี คือ การใช้รหัสผ่านในการ log in และห้ามใช้รหัสผ่านที่ว่างเปล่าด้วย ให้ตั้งค่าดังนี้
PasswordAuthentication yes
PermitEmptyPasswords no
8. ได้ปรับให้ ssh พิมพ์ message of the day แล้วหรือยัง
คำตอบ message of the day ใช้แสดงข้อความอะไรก็ได้หลังจาก log in เข้ามา อยู่ที่ /etc/motd ควรจะแสดงข้อความเกี่ยวกับการใช้ ssh เช่น เตือนว่า อย่าพยายามเข้าไดเรคทอรี ที่ไม่ได้รับอนุญาต ฯลฯ ดังนั้นควรจะเปิด message of the day ไว้ ดังนี้
PrintMotd yes
9. ได้ใช้ strict mode ในการติดต่อแล้วหรือยัง
คำตอบ การใช้ strict mode คือ การให้ ssh ช่วยตรวจสอบสิทธิ์ (permission) ในการเข้าถึงไฟล์ในโฮมไดเรคทอรีของผู้ใช้ก่อนจะทำการ log in ได้ จึงเป็นสิ่งที่เสริมความปลอดภัย เพราะ ผู้ใช้อาจเผลอให้โฮมไดเรคทอรีมีสิทธิ์ในการเขียนได้ ฉะนั้นควรเปิด strict mode ไว้ ให้ตั้งค่าดังนี้
StrictModes yes
เรื่อง ssh tunneling
10. ได้ปิดการใช้ ssh tunneling แล้วหรือยัง
คำตอบ ssh tunneling คือการใช้การเชื่อมต่อที่ไม่เข้ารหัส ภายใต้ ssh เพื่อเสริมความปลอดภัย แต่ก็ยังมีความเสี่ยงอยู่ โดย ssh tunneling อาจเป็นจุดที่จะให้ผู้บุกรุกเจาะได้ ดูรายละเอียดเพิ่มเติมได้ใน เอกสารอ้างอิง [4] การปิด ssh tunneling ให้ตั้งค่าใน /etc/ssh/sshd_config ดังนี้
AllowTcpForwarding no
11. ในกรณีที่ต้องการใช้ ssh tunneling ได้จำกัดขอบเขตการให้บริการที่เหมาะสมแล้วหรือยัง
คำตอบ ในการทำ ssh tunneling สามารถจำกัดการให้บริการเฉพาะกลุ่มหรือเฉพาะบุคคลได้ โดยการตั้งค่าของตัวแปรเหล่านี้ใน /etc/ssh/sshd_config ตามที่เราต้องการ
AllowTcpForwardingForUsers ชื่อผู้ใช้
DenyTcpForwardingForUsers ชื่อผู้ใช้
AllowTcpForwardingForGroups ชื่อกลุ่ม
DenyTcpForwardingForGroups ชื่อกลุ่ม
ForwardACL (ดูเพิ่มเติมใน เอกสารอ้างอิง
[4])
เรื่อง ssh key authentication
12. ได้เปิดการใช้ key authentication แล้วหรือยัง
คำตอบ การใช้ key authentication เป็นการเพิ่มความปลอดภัยให้ ssh อีกระดับหนึ่ง ดูรายละเอียดได้ใน เอกสารอ้างอิง [3] การใช้ key authentication ให้ตั้งค่าใน /etc/ssh/sshd_config ดังนี้
RSAAuthentication yes
PubkeyAuthentication yes
13. ในการสร้างคีย์ ได้ใช้ passphrase ที่ดีแล้วหรือยัง
คำตอบ ในขั้นตอนการสร้างคีย์ จะต้องใส่ passphrase ที่ใช้ในการป้องกันคีย์ ซึ่ง passphrase ที่ดี ควรเป็นประโยคที่ยาวและมีตัวเลขและเครื่องหมายผสมอยู่ด้วย
14. ได้ตั้งค่าสิทธิของ public key และ private key ไว้เหมาะสมแล้วหรือยัง
คำตอบ public key และ private key ควรมีแต่เจ้าของเท่านั้นที่สามารถอ่าน,เขียนได้ โดยเฉพาะ private key ดังนั้น ควรตั้งสิทธิ (permission) ให้เหมาะสม เช่น 600 สำหรับ private key หรือ 644 สำหรับ public key
15. กรณีที่ใช้ ssh agent และ keychain ได้ทำการลงโปรแกรม ssh agent และ keychain เฉพาะบนเครื่องที่เชื่อถือได้หรือไม่
คำตอบ โปรแกรม ssh agent และ keychain ใช้ ในการจัดการเก็บคีย์ในแคช เพื่อจะได้ไม่ต้องใส่ passphrase ทุกครั้งที่ log in ถ้าโปรแกรม ssh agent และ keychain อยู่ในเครื่องที่เชื่อถือไม่ได้แล้ว ผู้ไม่ประสงค์ดีอาจมีโอกาสถอดรหัสคีย์ได้ จึงไม่ปลอดภัย ดังนั้นจึงควรลงโปรแกรม ssh agent และ keychain เฉพาะบนเครื่องที่เชื่อถือได้และเปิดกลไก agent forwarding ไว้แทน โดยการเปิดกลไก agent forwarding ให้ตั้งค่าใน /etc/ssh/ssh_config ดังนี้
ForwardAgent yes
สำหรับรายละเอียดเพิ่มเติม ดูได้ที่ เอกสารอ้างอิง [3]
บทส่งท้าย
โปรแกรม ssh เป็นโปรแกรมที่ปลอดภัย แต่ก็ยังมีช่องทางให้ผู้ไม่ประสงค์ดีเจาะเข้ามาได้ ดังนั้น จึงควรแน่ใจว่าได้ตั้งค่าต่างๆเหมาะสมแล้ว อย่างน้อยตามรายการที่ได้กล่าวไปแล้วข้างต้น ทั้งนี้ ทางผู้เขียนเอกสารฉบับนี้ได้แนบไฟล์ตารางตรวจสอบความมั่นคงปลอดภัยของระบบ ssh (SSH Security Checklist) ให้ผู้ที่มีความต้องการนำไปใช้ โดยสามารถดาวน์โหลดได้ที่ เอกสารอ้างอิง[5]
เอกสารอ้างอิง
| Home
|| เอกสารเผยแพร่ || Encryption
ThaiCERT Disclaimer | Copyright © 2001 ThaiCERT(NECTEC). All rights reserved. |