How to block DDoS Attack with Cisco ASA Firewall

เมื่อพูดถึง DoS (Denial of Service attacks) หรือ DDoS (Distributed DoS attacks) เรามักจะนึกถึงการโจมตีเพื่อมีผลให้ไม่สามารถใช้งานทรัพยากรที่เรามีอยู่ในระบบเครือข่ายของเราได้ เช่น Web Server, Email Server, File Server, Database Server หรือ IP PBX Server เป็นต้น หรืออาจจะเป็นการโจมตีโดยการส่งจำนวนมากไปยังเป้าหมาย ซึ่งทำให้เกิดการใช้แบนด์วิดธ์อย่างเต็มที่และ/หรือทำให้ทรัพยากรของเป้าหมายถูกใช้ไปจนหมด

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

การป้องกันการโจมตีแบบ DoS ยังเป็นเรื่องที่ยากและต้องศึกษากันอีก การทำ rate limiting, packet filetring, หรือใช้งาน tweaking software ก็สามารถลดผลกระทบที่เกิดจากการโจมตีแบบ DoS ได้ เช่น ทำให้เกิดการใช้ทรัพยากรน้อยกว่าที่มีอยู่ ในหลายๆ กรณี การป้องกันการโจมตีที่ได้ผลคือการ block source เพื่อป้องกันการโจมตีแบบต่อเนื่อง (ในกรณีที่สามารถสืบทราบ source address) แต่ในบางครั้งการโจมตีแบบ DoS สามารถปลอมแปลง source ip address ได้หรือสร้างการโจมตีแบบกระจาย DDoS ซึ่งก่อให้เกิดความยุ่งยากในการป้องกันเป็นอย่างยิ่ง

เทคโนโลยีการโจมตีแบบ DoS ก่อนหน้านี้มักจะใช้เครื่องมือง่ายๆ สร้างแพ็กเก็ตจากเครื่องเดียวส่งออกไปยังปลายทางที่เป็นเครื่องเดี่ยวๆ เมื่อเวลาผ่านไปก็มีเครื่องมือที่สามารถโจมตีหลายๆ เป้าหมายได้จากเครื่องๆ เดียว จากหลายๆ เครื่องๆ โจมตีไปยังเป้าหมายเครื่องเดียว และจากหลายๆ เครื่องๆ โจมตีไปยังหลายๆ เป้าหมายได้

ปัจจุบัน รูปแบบการโจมตีที่ CERT/CC ได้รับแจ้ง มักจะเป็นการส่งแพ็กเก็ตจำนวนมากไปยังเครื่องเป้าหมายจนเกินขีดจำกัด ซึ่งอาจจะก่อให้เกิดการใช้งานเครือข่ายจนเต็ม เช่น การส่ง flooding packet โดยปกติมักจะพบในรูปแบบการส่งแพ็กเก็ตจากเครื่องเดียวส่งออกไปยังปลายทางที่เป็นเครื่องเดี่ยวๆ และจากหลายๆ เครื่องๆ โจมตีไปยังเป้าหมายเครื่องเดียว มักจะไม่พบรูปแบบที่โจมตีไปยังเป้าหมายหลายๆ ที่พร้อมกัน

แพ็คเก็ตที่ถูกส่งเพื่อก่อให้เกิดการ flood มักจะถูกใช้มาตั้งแต่อดีตและยังใช้กันอยู่จนถึงปัจจุบันคือ

  • TCP flood คือการส่งแพ็กเก็ต TCP ไปยังเครื่องเป้าหมาย เช่น SYN flood
  • ICMP echo request/reply คือการส่งแพ็กเก็ต ICMP จำนวนมากไปยังเครื่องเป้าหมาย เช่น ping flood, smurf
  • UDP flood คือการส่งแพ็กเก็ต UDP จำนวนมากไปยังเครื่องเป้าหมาย

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

  • การแก้ไข Source IP address – หรือเรียกอีกอย่างว่าการทำปลอมไอพี (IP spoofing) โดยอาจจะปลอมเป็นไอพีของเป้าหมาย แล้วส่งแพ็กเก็ตไปยังตัวกลางจำนวนมาก ซึ่งตัวกลางจะส่งแพ็กเก็ตตอบกลับไปยังเป้าหมายที่ต้องการ ตัวอย่างการโจมตีที่เห็นได้ชัดเจนคือ smurf หรือ fraggle
  • การแก้ไข Source/Destination port – การแก้ไขค่า port ในแพ็กเก็ตของ TCP/UDP อาจจะสร้างความยุ่งยากสำหรับ packet filtering firewall ได้
  • การแก้ไขค่า header ของ IP packet อื่นๆ – มีเครื่องมือบางตัวที่สามารถสุ่มเพื่อเปลี่ยนค่า IP header บางตัวได้

แพ็กเก็ตที่ถูกสร้างขึ้นและส่งผ่านเครือข่าย IPv4 นั้น จะสามารถส่งผ่านไปยังปลายทางได้ เนื่องจากไม่มีการตรวจสอบข้อมูลของแพ็กเก็ตในระหว่างการส่งต่อ (IPv4 เป็นส่งผ่านข้อมูลแบบ end to end) โดยทั่วไปผู้ที่สามารถสร้างแพ็กเก็ตได้จะต้องเป็นผู้ที่มีสิทธิ์สูงพอสมควรในเครื่องๆ นั้น

ตัวอย่างด้านล่าง Attacker ได้พยายามทำ DDoS โดยส่ง HTTP requests เข้ามายังระบบเรา เมื่อเรามี ASA Firewall ในระบบ Cisco ASA สามารถช่วยตรวจด้วย Modular Policy Framework โดยไป inspect HTTP ได้ โดยที่มีการ Request HTTP โดยมี url string ซ้ำ ๆ กันอย่างต่อเนื่อง เช่น http://www.website.com/xyz123 โดยที่ string ใน ณ ที่นี้คือ xyz123 ASA จะทำการ match และจะ drop packets นี้ทิ้งเสีย

เรามาดูตัวอย่างการ configure บน ASA โดยใช้ CLI (Command Line Interface) ตรง ๆ เข้าไปที่ตัวอุปกรณ์โดยไม่ต้องทำผ่าน FMC ซึ่งเป็นตัว Management ล่าสุดในการ Deploy Configuration ของ Cisco ลงไปบน Appliance

!First create a regular expression with the unique attack string
regex attackstring xyz123

!Create an ACL to match the HTTP traffic towards the target server
access-list HTTPTRAFFIC extended permit tcp any host 1.1.1.1 eq www

!Create a regular L3/L4 class to match the traffic above
class-map attackingtraffic
 match access-list HTTPTRAFFIC

!Now create an HTTP inspection policy to match on the unique attacking string
policy-map type inspect http HTTPDOS
 parameters
 match request uri regex attackstring
  drop-connection
 match request args regex attackstring
  drop-connection

!The following policy-map will include the L3/L4 class which will include the HTTP inspection policy
policy-map BLOCKDOS
 class attackingtraffic
  inspect http HTTPDOS

!Now attach the policy-map to the ASA outside interface to inspect Inbound traffic.
service-policy BLOCKDOS interface outside

หากเราต้องการที่จะดู log ในการ drop connection นี้ด้วยให้เราใช้ CLI “drop-connection log” แล้วลอง start log ดูเราจะเห็น packet ที่ถูก drop และ match เข้ากับ http string นั้น ๆ ได้นั่นเอง

ที่มา : https://www.networkstraining.com/how-to-block-http-ddos-attack-with-cisco-asa-firewall