cisco

เอกสารฉบับนี้เป็นการอธิบายโดยสรุปถึงคำแนะนำในการปรับแต่งค่าการทำงาน 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 ให้ยากต่อการเดา