เอกสารฉบับนี้เป็นการอธิบายโดยสรุปถึงคำแนะนำในการปรับแต่งค่าการทำงาน router เพื่อให้ได้รับความปลอดภัยจากการใช้งาน มุ่งเน้นให้ผู้อ่านสามารถนำไปใช้เพื่อเพิ่มระดับความความปลอดภัยในการทำงานของ router โดยอ้างอิงจากชุดคำสั่งของ Cisco อย่างไรก็ตาม ผู้อ่านสามารถนำหลักเกณฑ์เหล่านี้ไปประยุกต์ใช้กับ router อื่นๆ ได้ เนื่องจากรายละเอียดภายในเอกสารนี้ถือเป็นคำแนะนำที่ดีในการปรับแต่งค่าความปลอดภัยให้กับ router
คำแนะนำโดยทั่วไป
- ควรสร้างนโยบายความปลอดภัยของ router และปรับแต่งให้เหมาะสมอยู่เสมอ นโยบายดังกล่าวนี้ควรจะระบุว่าผู้ใดบ้างได้รับอนุญาตให้เข้าใช้งาน router และผู้ใดบ้างได้รับอนุญาตให้ปรับแต่งแก้ไขและอัพเดตการทำงานของ router รวมทั้งเก็บบันทึกค่าการเข้าใช้งานและการปรับแต่งค่าทั้งหมดที่เกิดขึ้นจริงกับ router
- ให้คำอธิบายและเก็บบันทึกไฟล์ที่ใช้กำหนดค่าการทำงานของ router การกระทำดังกล่าวนี้อาจจะดูเหมือนเป็นสิ่งง่ายเมื่อเปรียบเทียบกับความปลอดภัยที่จะได้รับ นอกจากนั้น ควรเก็บสำเนาค่าการทำงานของ router ทั้งหมดที่เหมือนกับค่าการทำงานจริงที่ใช้งานไว้ตลอดเวลา (หากมีการแก้ไขค่าการทำงานที่ router ก็จะต้องแก้ไขค่าที่เก็บสำเนาไว้ด้วย) การกระทำดังกล่าวนี้จะช่วยให้สามารถตรวจสอบความเปลี่ยนแปลงที่เกิดขึ้นเมื่อถูกบุกรุก หรือใช้กู้คืนค่าดังกล่าวมาใช้งานเมื่อเกิดความเสียหายได้
- สร้าง Access List เพื่อควบคุมการผ่านเข้าออกเครือข่าย อนุญาตให้เฉพาะโพรโตคอลและบริการที่ผู้ใช้งานเครือข่ายจำเป็นต้องใช้เท่านั้น นอกเหนือจากนั้นจะไม่อนุญาตให้ผ่านเครือข่ายทั้งหมด
- ใช้งาน IOS เวอร์ชันล่าสุดที่เป็นไปได้อยู่เสมอ โดยสอบถามข้อมูลเวอร์ชันที่เหมาะสมได้จากผู้จำหน่ายหรือจากเว็บไซต์ของผู้ผลิตโดยตรง
- ทดสอบความปลอดภัยโดยทั่วไปของ router อยู่เสมอ โดยเฉพาะอย่างยิ่งเมื่อมีการเปลี่ยนแปลงค่าการทำงานที่สำคัญของ router
คำแนะนำเฉพาะเรื่อง : Router Access
- ปิดความสามารถในการทำงานเป็นเซิร์ฟเวอร์ที่ไม่จำเป็นต้องใช้ของ 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 |
- ปิดการให้บริการที่ไม่จำเป็นต้องใช้ของ router บริการเหล่านี้ใช้เพื่อการอนุญาตให้ส่งแพ็กเก็ตหลายชนิดผ่าน router หรือส่งแพ็กเก็ตชนิดพิเศษบางชนิด หรือใช้เพื่อการปรับแต่งค่าการทำงานของ router จากภายนอก โดยทั่วไป บริการของ router ที่ควรถูกปิดไม่ให้ใช้งานและคำสั่งที่เกี่ยวข้องในการยกเลิกการทำงาน ได้แก่
• CDP | - no cdp run |
• Remote config | - no service config |
• Source routing | - no ip source-route |
- สามารถทำให้อินเทอร์เฟซของ router มีความปลอดภัยมากขึ้นได้โดยการใช้คำสั่งดังต่อไปนี้กำหนดไว้ที่ทุกอินเทอร์เฟซ ซึ่งจะต้องทำที่โหมดของการกำหนดค่าให้อินเทอร์เฟซ
• Unused interfaces | - shutdown |
• No Smurf attacks | - no ip directed-broadcast |
• Ad-hoc routing | - no ip proxy-arp |
- สามารถทำให้การติดต่อกับ console line, auxiliary line และ virtual terminal line ของ router มีความปลอดภัยมากขึ้นได้โดยการใช้คำสั่งดังต่อไปนี้กำหนดไว้ที่ console line และ virtual terminal line (ดังตัวอย่างด้านล่าง) ส่วน auxiliary line หากไม่มีการใช้งานควรถูกปิด (โดยการกำหนดค่าตามตัวอย่างด้านล่างเช่นกัน)
• Console Line |
| ||
• Auxiliary Line |
| ||
• VTY lines |
|
- ค่ารหัสผ่านควรถูกตั้งไว้ให้มีความปลอดภัยมากที่สุดเท่าที่จะทำได้ ได้แก่ การตั้งค่ารหัสผ่านแบบ Enable Secret ซึ่งทำให้รหัสผ่านถูกเข้ารหัสเพื่อเก็บไว้ด้วยอัลกอริทึม MD-5 นอกจากนี้ ควรตั้งรหัสผ่านไว้สำหรับ console line, auxiliary line และ virtual terminal line ด้วย โดยค่ารหัสผ่านที่ตั้งให้กับแต่ละ line นี้ควรได้รับการปกป้องในเบื้องต้นโดยการเรียกใช้คำสั่ง service password-encryption เพื่อให้เกิดการเข้ารหัสสำหรับรหัสผ่านทั้งหมด แสดงรายละเอียดดังตัวอย่างด้านล่าง
• Enable secret |
| ||
• Console Line |
| ||
• Auxiliary Line |
| ||
• VTY Lines |
| ||
• Basic protection |
|
- ไม่ควรเปิดเผยรายละเอียดของค่าการทำงาน router และไฟล์ที่ใช้ในการกำหนดค่าให้ผู้ที่ไม่ได้รับอนุญาตทราบโดยเด็ดขาด
คำแนะนำเฉพาะเรื่อง : Access Lists
- การสร้าง 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
East (config) # access-list 51 permit host 14.2.9.6
East (config) # access-list 51 deny any log
- กำหนดหมายเลขพอร์ตที่ต้องการควบคุมสำหรับแต่ละ 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
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 รวมทั้งเก็บค่าลงในล็อก
- อนุญาตให้เฉพาะแอดเดรสของเครือข่ายภายในส่งข้อมูลเข้าสู่ 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
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
- ไม่ควรให้แพ็กเก็ตที่มาจากภายนอก (จากเครือข่ายที่ไม่น่าเชื่อถือ) ซึ่งอาจจะเป็นแพ็กเก็ตที่มีการปลอมแปลงหรือส่งมาเพื่อโจมตีเครือข่าย สามารถทำได้โดยการแบ่งส่วนของเครือข่ายทั้งหมดตามแต่ละอินเทอร์เฟซของ router และออกแบบว่าจะเลือกให้มีการส่งผ่านข้อมูลที่มาจากเครือข่ายภายนอกและเครือข่ายที่ไม่น่าเชื่อถือจากที่ใดได้บ้าง
- แพ็กเก็ตที่ส่งมาจากภายนอกโดยมีแอดเดรสต้นทางเหมือนกับแอดเดรสของเครือข่ายภายในใดๆ (เครือข่ายที่เชื่อถือ) จัดว่าเป็นแพ็กเก็ตที่ส่งเข้ามาเพื่อโจมตีระบบโดยวิธีการ TCP sequence number guessing หรือวิธีอื่นๆ ในทำนองเดียวกัน จึงไม่ควรให้ผ่านเข้ามาในเครือข่าย ป้องกันได้โดยการสร้าง access list ขึ้นมาใช้งานที่แต่ละอินเทอร์เฟซที่ต้องติดต่อกับเครือข่ายที่ไม่น่าเชื่อถือ
- สกัดกั้นแพ็กเก็ตชนิด 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]
- หากเครือข่ายไม่จำเป็นต้องใช้ IP multicast ก็ควรจะกั้นแพ็กเก็ตชนิด multicast ด้วย
- สกัดกั้นแพ็กเก็ตชนิด broadcast (ข้อควรคำนึงถึงคือ การปิดแพ็กเก็ตชนิด broadcast อาจจะทำให้บริการ DHCP และ BOOTP ไม่สามารถใช้งานได้ด้วย อย่างไรก็ตาม บริการทั้งสองอันนี้ไม่ควรนำมาใช้ที่อินเทอร์เฟซที่ต่อกับเครือข่ายภายนอกอยู่แล้ว)
- การโจมตีเครือข่ายจากภายนอกจำนวนมากใช้วิธีการส่ง 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
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
- สกัดกั้นแพ็กเก็ตที่มีแอดเดรสต้นทางและปลายทางเหมือนกันไม่ให้เข้ามาในเครือข่าย (เพราะอาจจะเป็นการบุกรุกโดยวิธีการที่เรียกว่า '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
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
- กำหนดค่า 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
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
- นำความสามารถของ 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
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
- กำหนดค่าการทำงานของ 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
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
- หากมีการใช้งาน 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
East (config) # no snmp community private
East (config) # snmp community BTR-18+never
Checklist ความปลอดภัย
Checklist ความปลอดภัยต่อไปนี้ออกแบบขึ้นมาเพื่อเป็นเครื่องช่วยในการตรวจสอบความปลอดภัยในการกำหนดค่าการทำงานให้กับ router และช่วยทบทวนถึงรายละเอียดความปลอดภัยทั้งหมดที่เกี่ยวข้อง
Checklist ความปลอดภัยต่อไปนี้ออกแบบขึ้นมาเพื่อเป็นเครื่องช่วยในการตรวจสอบความปลอดภัยในการกำหนดค่าการทำงานให้กับ router และช่วยทบทวนถึงรายละเอียดความปลอดภัยทั้งหมดที่เกี่ยวข้อง
- มีการเขียน ตรวจสอบรับรอง และประกาศใช้งานนโยบายความปลอดภัยของ router
- ตรวจสอบเวอร์ชันของ IOS ที่ใช้งานกับ router ว่ามีความทันสมัย
- ค่าการทำงานของ router ที่ใช้งานมีความถูกต้องชัดเจน มีการแบ็กอัพ และถูกจำกัดการเข้าถึง
- รายละเอียดของค่าการทำงานของ router มีการกำหนดไว้อย่างชัดเจน มีคำอธิบายที่ครบถ้วน
- มีการกำหนด และดูแลรายชื่อผู้ใช้ router และรหัสผ่าน
- นำรหัสผ่านที่ยากต่อการเดามาใช้งาน และจำกัดผู้ที่ทราบค่ารหัสผ่าน (ถ้ายังไม่เป็นตามนี้ ควรเปลี่ยนรหัสผ่านโดยด่วน)
- จำกัดการเข้าถึง router โดยบังคับที่ Console, Aux และ VTY
- ยกเลิกบริการของเครือข่ายที่ไม่จำเป็นต้องใช้งาน
- ปิดอินเทอร์เฟซที่ไม่มีการใช้งาน
- ยกเลิกบริการที่มีความเสี่ยงที่อินเทอร์เฟซ
- ระบุชัดเจนถึงพอร์ตและโพรโตคอลที่จำเป็นต้องใช้งานในเครือข่าย พร้อมทั้งทำการตรวจสอบ
- ใช้ access list จำกัดความหนาแน่นในการใช้งานเครือข่าย โดยกำหนดจากพอร์ตและโพรโตคอลที่ใช้
- ใช้ access list เพื่อสกัดกั้นการใช้แอดเดรสที่สำรองไว้หรือแอดเดรสที่ไม่เหมาะสม
- ใช้งานการตั้งค่าการเลือกเส้นทางแบบ static หากจำเป็น
- โพรโตคอลที่ใช้ในการเลือกเส้นทางจะต้องถูกกำหนดให้ถูกต้องตามวิธีการที่ใช้
- นำการบันทึกค่าการทำงานลงในล็อกมาใช้งาน และระบุเครื่องที่ใช้ในการรับและเก็บล็อกซึ่งจะต้องได้รับการตั้งค่าให้ถูกต้อง
- ค่าเวลาของ router จะต้องมีความถูกต้องเที่ยงตรง และควรได้รับการจัดการโดย NTP
- บันทึกค่าการทำงานลงในล็อก โดยกำหนดให้รวมข้อมูลของเวลาที่เกิดเหตุการณ์ไว้ด้วย
- ตรวจสอบ พิจารณาและเก็บบันทึกการทำงานที่เกิดขึ้นในล็อกคามความเหมาะสม ตามที่ระะบุไว้ในนโยบาย
- ยกเลิกการใช้งาน SNMP หรือใช้งานโดยทำการตั้งค่า community string ให้ยากต่อการเดา
0 comments:
Post a Comment