วันอังคารที่ 20 มกราคม พ.ศ. 2552

คำแนะนำในการปรับแต่งค่าความปลอดภัยของ Router

ที่มา : NSA/SNAC Router Security Configuration Guide
เรียบเรียงโดย : มนัชยา ชมธวัช
เผยแพร่เมื่อ : 25 ธันวาคม 2544

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

คำแนะนำโดยทั่วไป

1. ควรสร้างนโยบายความปลอดภัยของ router และปรับแต่งให้เหมาะสมอยู่เสมอ นโยบายดังกล่าวนี้ควรจะระบุว่าผู้ใดบ้างได้รับอนุญาตให้เข้าใช้งาน router และผู้ใดบ้างได้รับอนุญาตให้ปรับแต่งแก้ไขและอัพเดตการทำงานของ router รวมทั้งเก็บบันทึกค่าการเข้าใช้งานและการปรับแต่งค่าทั้งหมดที่เกิดขึ้นจริง กับ router

2. ให้คำอธิบายและเก็บบันทึกไฟล์ ที่ใช้กำหนดค่าการทำงานของ router การกระทำดังกล่าวนี้อาจจะดูเหมือนเป็นสิ่งง่ายเมื่อเปรียบเทียบกับความ ปลอดภัยที่จะได้รับ นอกจากนั้น ควรเก็บสำเนาค่าการทำงานของ router ทั้งหมดที่เหมือนกับค่าการทำงานจริงที่ใช้งานไว้ตลอดเวลา (หากมีการแก้ไขค่าการทำงานที่ router ก็จะต้องแก้ไขค่าที่เก็บสำเนาไว้ด้วย) การกระทำดังกล่าวนี้จะช่วยให้สามารถตรวจสอบความเปลี่ยนแปลงที่เกิดขึ้นเมื่อ ถูกบุกรุก หรือใช้กู้คืนค่าดังกล่าวมาใช้งานเมื่อเกิดความเสียหายได้

3. สร้าง Access List เพื่อควบคุมการผ่านเข้าออกเครือข่าย อนุญาตให้เฉพาะโพรโตคอลและบริการที่ผู้ใช้งานเครือข่ายจำเป็นต้องใช้เท่านั้น นอกเหนือจากนั้นจะไม่อนุญาตให้ผ่านเครือข่ายทั้งหมด

4. ใช้งาน IOS เวอร์ชันล่าสุดที่เป็นไปได้อยู่เสมอ โดยสอบถามข้อมูลเวอร์ชันที่เหมาะสมได้จากผู้จำหน่ายหรือจากเว็บไซต์ของผู้ผลิตโดยตรง

5. ทดสอบความปลอดภัยโดยทั่วไปของ router อยู่เสมอ โดยเฉพาะอย่างยิ่งเมื่อมีการเปลี่ยนแปลงค่าการทำงานที่สำคัญของ router

คำแนะนำเฉพาะเรื่อง : Router Access

1. ปิดความสามารถในการทำงานเป็นเซิร์ฟเวอร์ที่ไม่จำเป็นต้องใช้ของ router ซึ่งจะช่วยให้มีพื้นที่ของหน่วยความจำและโพรเซสเซอร์ของ router เพิ่มขึ้น ทำได้โดยการใช้คำสั่ง show proc ที่ router แล้วสั่งปิดบริการทั้งหมดที่แน่ใจว่าไม่จำเป็นต้องใช้งาน โดยทั่วไป การทำงานเป็นเซิร์ฟเวอร์บางอย่างของ router ที่ควรถูกปิดไม่ให้ใช้งานและคำสั่งที่เกี่ยวข้องในการยกเลิกการทำงาน ได้แก่

• Small services
(echo, discard, chargen, etc.)


- no service tcp-small-servers
- no service udp-small-servers

• BOOTP


- no ip bootp server

• Finger


- no service finger

• HTTP


- no ip http server

• Identd


- no ip identd (เฉพาะบางเวอร์ชันของ IOS)

• SNMP


- no snmp-server

2. ปิดการให้บริการที่ไม่จำเป็นต้องใช้ของ router บริการเหล่านี้ใช้เพื่อการอนุญาตให้ส่งแพ็กเก็ตหลายชนิดผ่าน router หรือส่งแพ็กเก็ตชนิดพิเศษบางชนิด หรือใช้เพื่อการปรับแต่งค่าการทำงานของ router จากภายนอก โดยทั่วไป บริการของ router ที่ควรถูกปิดไม่ให้ใช้งานและคำสั่งที่เกี่ยวข้องในการยกเลิกการทำงาน ได้แก่

• CDP

- no cdp run
• Remote config

- no service config
• Source routing

- no ip source-route

3. สามารถทำให้อินเทอร์เฟซของ router มีความปลอดภัยมากขึ้นได้โดยการใช้คำสั่งดังต่อไปนี้กำหนดไว้ที่ทุกอินเทอร์เฟซ ซึ่งจะต้องทำที่โหมดของการกำหนดค่าให้อินเทอร์เฟซ

• Unused interfaces

- shutdown
• No Smurf attacks

- no ip directed-broadcast
• Ad-hoc routing

- no ip proxy-arp

4. สามารถทำให้การติดต่อกับ console line, auxiliary line และ virtual terminal line ของ router มีความปลอดภัยมากขึ้นได้โดยการใช้คำสั่งดังต่อไปนี้กำหนดไว้ที่ console line และ virtual terminal line (ดังตัวอย่างด้านล่าง) ส่วน auxiliary line หากไม่มีการใช้งานควรถูกปิด (โดยการกำหนดค่าตามตัวอย่างด้านล่างเช่นกัน)

• Console Line
- line con 0
exec-timeout 5 0
login
transport input telnet
• Auxiliary Line
- line aux 0
no exec
exec-timeout 0 10
transport input telnet
• VTY lines
- line vty 0 4
exec-timeout 5 0
login
transport input telnet

5. ค่ารหัสผ่านควรถูกตั้งไว้ให้มีความปลอดภัยมากที่สุดเท่าที่จะทำได้ ได้แก่ การตั้งค่ารหัสผ่านแบบ Enable Secret ซึ่งทำให้รหัสผ่านถูกเข้ารหัสเพื่อเก็บไว้ด้วยอัลกอริทึม MD-5 นอกจากนี้ ควรตั้งรหัสผ่านไว้สำหรับ console line, auxiliary line และ virtual terminal line ด้วย โดยค่ารหัสผ่านที่ตั้งให้กับแต่ละ line นี้ควรได้รับการปกป้องในเบื้องต้นโดยการเรียกใช้คำสั่ง service password-encryption เพื่อให้เกิดการเข้ารหัสสำหรับรหัสผ่านทั้งหมด แสดงรายละเอียดดังตัวอย่างด้านล่าง

• Enable secret
- enable secret 0 2manyRt3s
• Console Line
- line con 0
password Soda-4-jimmY
• Auxiliary Line
- line aux 0
password Popcorn-4-sara
• VTY Lines
- line vty 0 4
password Dots-4-grorg3
• Basic protection
- service password-encryption

6. ไม่ควรเปิดเผยรายละเอียดของค่าการทำงาน router และไฟล์ที่ใช้ในการกำหนดค่าให้ผู้ที่ไม่ได้รับอนุญาตทราบโดยเด็ดขาด

คำแนะนำเฉพาะเรื่อง : Access Lists

1. การสร้าง access-list ขึ้นใหม่แต่ละครั้งควรจะเริ่มต้นด้วยคำสั่ง no access-list nnn ก่อนเสมอ เพื่อกำจัดค่าเดิมใดๆ ที่อาจมีการใช้งาน access-list ที่ nnn ให้หมด

East (config) # no access-list 51
East (config) # access-list 51 permit host 14.2.9.6
East (config) # access-list 51 deny any log

2. กำหนด หมายเลขพอร์ตที่ต้องการควบคุมสำหรับแต่ละ access list ซึ่งจะช่วยเพิ่มประสิทธิภาพการทำงานของ IOS ให้ไม่จำเป็นต้องตรวจสอบ header ทั้งหมดของแพ็กเก็ตโดยไม่จำเป็น และเพื่อให้แน่ใจว่าข้อมูลการใช้งานที่เก็บในล็อกมีข้อมูลหมายเลขพอร์ตที่ ถูกต้อง โดยการกำหนดหมายเลขพอร์ตในช่วงที่ต้องการเป็นอาร์กิวเมนต์หนึ่งของ access list ที่สร้างขึ้น ดังตัวอย่าง

no access-list 106
access-list 106 deny udp any range 1 65535 any range 1 65535 log
access-list 106 deny tcp any range 1 65535 any range 1 65535 log
access-list 106 deny ip any any log

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

East (config) # no access-list 101
East (config) # access-list 101 permit ip 10.1.1.0 0.0.0.255 any
East (config) # access-list 101 deny udp any range 1 65535 any log
East (config) # access-list 101 deny tcp any range 1 65535 any log
East (config) # access-list 101 deny ip any any log
East (config) # interface eth 1
East (config-if) # ip access-group 101 in
East (config-if) # exit
East (config) # interface eth 0
East (config-if) # ip access-group 101 out

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

5. แพ็กเก็ตที่ส่งมาจากภายนอกโดยมีแอดเดรสต้นทางเหมือนกับแอดเดรสของเครือข่ายภายในใดๆ (เครือข่ายที่เชื่อถือ) จัดว่าเป็นแพ็กเก็ตที่ส่งเข้ามาเพื่อโจมตีระบบโดยวิธีการ TCP sequence number guessing หรือวิธีอื่นๆ ในทำนองเดียวกัน จึงไม่ควรให้ผ่านเข้ามาในเครือข่าย ป้องกันได้โดยการสร้าง access list ขึ้นมาใช้งานที่แต่ละอินเทอร์เฟซที่ต้องติดต่อกับเครือข่ายที่ไม่น่าเชื่อถือ

6. สกัดกั้นแพ็กเก็ตชนิด loopback (มาจากเครือข่าย 127.0.0.0) เนื่องจากแพ็กเก็ตเหล่านี้ไม่มีทางเกิดขึ้นได้จริง นอกจากนั้น ให้กั้นแพ็กเก็ตที่มาจาก IP address ที่ถูกสำรองไว้ (ได้แก่ 10.0.0.0, 172.16.0.0 - 172.31.0.0 และ 192.168.0.0) [ตาม RFC 1918]

7. หากเครือข่ายไม่จำเป็นต้องใช้ IP multicast ก็ควรจะกั้นแพ็กเก็ตชนิด multicast ด้วย

8. สกัด กั้นแพ็กเก็ตชนิด broadcast (ข้อควรคำนึงถึงคือ การปิดแพ็กเก็ตชนิด broadcast อาจจะทำให้บริการ DHCP และ BOOTP ไม่สามารถใช้งานได้ด้วย อย่างไรก็ตาม บริการทั้งสองอันนี้ไม่ควรนำมาใช้ที่อินเทอร์เฟซที่ต่อกับเครือข่ายภาย นอกอยู่แล้ว)

9. การโจมตีเครือข่ายจากภายนอกจำนวนมากใช้วิธีการส่ง ICMP redirect จึงควรปิดบริการนี้ (วิธีการที่ดีกว่านี้แต่มีความยุ่งยากมากขึ้นคือการอนุญาตให้แพ็กเก็ตชนิด ICMP ที่จำเป็นเพียงบางชนิดผ่านเข้าออก)

ตัวอย่างที่แสดงดังต่อไปนี้ เป็นวิธีการหนึ่งที่จะนำเอาคำแนะนำด้านบนไปใช้งานจริง

North (config) # no access-list 107
North (config) # ! block internal addresses
North (config) # access-list 107 deny ip 14.2.0.0 0.0.255.255 any log
North (config) # access-list 107 deny ip 14.1.0.0 0.0.255.255 any log
North (config) # ! block loopback/reserved addresses
North (config) # access-list 107 deny ip 127.0.0.0 0.255.255.255 any log
North (config) # access-list 107 deny ip 10.0.0.0 0.255.255.255 any log
North (config) # access-list 107 deny ip 172.16.0.0 0.15.255.255 any log
North (config) # access-list 107 deny ip 192.168.0.0 0.0.255.255 any log
North (config) # ! block multicast (if not used)
North (config) # access-list 107 deny ip 224.0.0.0 0.0.255.255 any
North (config) # ! block broadcast
North (config) # access-list 107 deny ip host 0.0.0.0 any log
North (config) # ! block ICMP redirects
North (config) # access-list 107 deny icmp any any redirect log
North (config) # interface eth 0/0
North (config-if) # ip access-group 107 in

10. สกัดกั้นแพ็กเก็ตที่มีแอดเดรสต้นทางและปลายทางเหมือนกันไม่ให้เข้ามาในเครือข่าย (เพราะอาจจะเป็นการบุกรุกโดยวิธีการที่เรียกว่า 'Land' เข้ามาตัวที่ router) ทำได้โดยการสร้าง access list ขึ้นมาใช้จำกัดข้อมูลที่จะเข้ามาที่แต่ละอินเทอร์เฟซ โดยวิธีการดังที่แสดงในตัวอย่างด้านล่าง

no access-list 102
access-list 102 deny ip host 10.2.6.250 host 10.2.6.250 log
access-list 102 permit ip any any

interface Eth 0/0
ip address 10.2.6.250 255.255.255.0
ip access-group 102 in

11. กำหนดค่า access list สำหรับใช้งานที่ virtual terminal line เพื่อควบคุมการเข้าถึง router ผ่านทางการ telnet ตามตัวอย่าง

South (config) # line vty 0 4
South (config-line) # access-class 92 in
South (config-line) # exit
South (config) # no access-list 92
South (config) # access-list 92 permit 10.1.1.1
South (config) # access-list 92 permit 10.1.1.2

คำแนะนำเฉพาะเรื่อง : Logging & Debugging

1. นำความสามารถของ router ในการเก็บบันทึกค่าการทำงานมาใช้งาน เพื่อใช้เก็บบันทึกค่าความผิดพลาดที่เกิดขึ้นและส่งแพ็กเก็ตไปยังเครื่องที่ ใช้ในการเก็บ syslog ภายในเครือข่าย (ต้องเป็นเครือข่ายที่มีการเชื่อถือ) โดยจะต้องแน่ใจถึงเส้นทางที่ส่งข้อมูลไม่ผ่าน เครือข่ายที่ไม่น่าเชื่อถือ มีวิธีการดังต่อไปนี้

Central (config) # logging on
Central (config) # logging 10.1.1.200
Central (config) # logging buffered
Central (config) # logging console critical
Central (config) # logging trap debugging
Central (config) # logging facility local1

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

service timestamps log datetime localtime show-timezone
clock timezone EST -5
clock summer-time EDT recurring
ntp source Ethernet 0/1
ntp server 192.5.41.40
ntp server 192.5.41.41

3. หาก มีการใช้งาน SNMP ใช้เลือกใช้ SNMP community string ที่ยากต่อการเดา คำสั่งที่ได้แสดงไว้ดังตัวอย่างด้านล่างแสดงให้เห็นถึงวิธีการในการลบค่า community string ที่ router กำหนดไว้ขณะเริ่มต้น และควรกำหนดให้ community string เป็นแบบอ่านอย่างเดียว

East (config) # no snmp community public
East (config) # no snmp community private
East (config) # snmp community BTR-18+never

Checklist ความปลอดภัย
Checklist ความปลอดภัยต่อไปนี้ออกแบบขึ้นมาเพื่อเป็นเครื่องช่วยในการตรวจสอบความปลอดภัยในการกำหนดค่าการทำงานให้กับ router และช่วยทบทวนถึงรายละเอียดความปลอดภัยทั้งหมดที่เกี่ยวข้อง

* มีการเขียน ตรวจสอบรับรอง และประกาศใช้งานนโยบายความปลอดภัยของ router
* ตรวจสอบเวอร์ชันของ IOS ที่ใช้งานกับ router ว่ามีความทันสมัย
* ค่าการทำงานของ router ที่ใช้งานมีความถูกต้องชัดเจน มีการแบ็กอัพ และถูกจำกัดการเข้าถึง
* รายละเอียดของค่าการทำงานของ router มีการกำหนดไว้อย่างชัดเจน มีคำอธิบายที่ครบถ้วน
* มีการกำหนด และดูแลรายชื่อผู้ใช้ router และรหัสผ่าน
* นำรหัสผ่านที่ยากต่อการเดามาใช้งาน และจำกัดผู้ที่ทราบค่ารหัสผ่าน (ถ้ายังไม่เป็นตามนี้ ควรเปลี่ยนรหัสผ่านโดยด่วน)
* จำกัดการเข้าถึง router โดยบังคับที่ Console, Aux และ VTY
* ยกเลิกบริการของเครือข่ายที่ไม่จำเป็นต้องใช้งาน
* ปิดอินเทอร์เฟซที่ไม่มีการใช้งาน
* ยกเลิกบริการที่มีความเสี่ยงที่อินเทอร์เฟซ
* ระบุชัดเจนถึงพอร์ตและโพรโตคอลที่จำเป็นต้องใช้งานในเครือข่าย พร้อมทั้งทำการตรวจสอบ
* ใช้ access list จำกัดความหนาแน่นในการใช้งานเครือข่าย โดยกำหนดจากพอร์ตและโพรโตคอลที่ใช้
* ใช้ access list เพื่อสกัดกั้นการใช้แอดเดรสที่สำรองไว้หรือแอดเดรสที่ไม่เหมาะสม
* ใช้งานการตั้งค่าการเลือกเส้นทางแบบ static หากจำเป็น
* โพรโตคอลที่ใช้ในการเลือกเส้นทางจะต้องถูกกำหนดให้ถูกต้องตามวิธีการที่ใช้
* นำการบันทึกค่าการทำงานลงในล็อกมาใช้งาน และระบุเครื่องที่ใช้ในการรับและเก็บล็อกซึ่งจะต้องได้รับการตั้งค่าให้ถูกต้อง
* ค่าเวลาของ router จะต้องมีความถูกต้องเที่ยงตรง และควรได้รับการจัดการโดย NTP
* บันทึกค่าการทำงานลงในล็อก โดยกำหนดให้รวมข้อมูลของเวลาที่เกิดเหตุการณ์ไว้ด้วย
* ตรวจสอบ พิจารณาและเก็บบันทึกการทำงานที่เกิดขึ้นในล็อกคามความเหมาะสม ตามที่ระะบุไว้ในนโยบาย
* ยกเลิกการใช้งาน SNMP หรือใช้งานโดยทำการตั้งค่า community string ให้ยากต่อการเดา

ไม่มีความคิดเห็น:

แสดงความคิดเห็น