Statefull Firewall
เรียบเรียงโดย : ภูวดล ด่านระหาญ
เผยแพร่เมื่อ : 12 พฤศจิกายน 2544
เอกสารฉบับนี้จะอธิบายถึงความหมายและลักษณะการทำงานของคำว่า "stateful firewall" ซึ่งเป็นรูปแบบหนึ่งของไฟร์วอลล์ที่ผู้ผลิตนำมาใช้ในปัจจุบัน ในการที่จะเข้าใจถึงคำว่า stateful firewall นั้น จำเป็นต้องทำความเข้าใจคำอีก 2 คำ คือคำว่า packet filtering และ proxy server มาก่อน ท่านสามารถอ่านบทความที่อธิบายถึงพื้นฐานของไฟร์วอลล์ทั่วไปได้จาก http://thaicert.nectec.or.th/paper/firewall/fwbasics.php
ในอดีตนั้น โดยทั่วไปมักจะแยกกันโดยชัดเจนระหว่างไฟร์วอลล์แบบ statefull filtering และแบบ application-level proxy server แต่ในปัจจุบันนี้ได้มีสินค้าหลายรุ่นที่ออกมาสู่ตลาด โดยนำข้อดีของทั้งสองอย่างมารวมกัน ซึ่งเราเรียกกันว่า hybrid firewall
การที่จะทำความเข้าใจหลักการทำงานของ stateful firewall ให้ได้ดีนั้น จำเป็นต้องมีความรู้พื้นฐานเกี่ยวกับ 7-layers OSI model ซึ่งแสดงให้เห็นดังภาพที่ 1
ทั้งนี้เราจะพิจารณาเฉพาะ layer ที่ 3,4 และ 7 ซึ่งเกี่ยวข้องกับ TCP/IP เท่านั้น ส่วน layer ที่ 5,6 (session, presentation) นั้น จะใช้งานในส่วนอื่นๆ เช่น LDAP, NetBIOS, Netware ซึ่งอยู่นอกเหนือขอบเขตของเอกสารฉบับนี้
สิ่งที่สำคัญพอๆ กับ OSI model ก็คือการทำความเข้าใจภาพรวมของโครงสร้างของข้อมูลดังที่เห็นในภาพ ในชั้น application layer นั้น ชุดของข้อมูลมีแค่ส่วนของข้อมูลที่ต้องการส่งเท่านั้น แต่ใน layer ชั้นถัดๆ ลงไป ชุดของข้อมูลจะประกอบไปด้วยส่วนของ header และ body โดยส่วนของ header เป็นส่วนที่เกี่ยวข้องกับ layer ชั้นนั้นๆ ในขณะที่ส่วนของ body เป็นส่วนของ body + header ของ layer ชั้นที่อยู่ด้านบน ลักษณะของการกระทำกับข้อมูลดังกล่าวเรียกว่า encapsulation และในชั้นของ transport layer ตัว IP protocol ที่ผู้ใช้เรียกใช้ ซึ่งอาจจะเป็น TCP, UDP, ICMP ก็จะปะส่วน header ของมันรวมไปกับข้อมูล และส่งต่อ segment(ชุดของข้อมูลใน transport layer มักจะเรียกกันว่า segment) ใหม่นี้ไปยัง layer ที่อยู่ด้านล่างถัดไป และที่ชั้น IP layer ข้อมูลทุกอย่างที่มาจาก transport layer จะถูกมองว่าเป็นข้อมูล (data) มันจะแปะส่วน header รวมกับข้อมูลนั้น เพื่อส่งผ่าน packet(ชุดของข้อมูลที่อยู่ในชั้น IP layer มักจะเรยีกกันว่า packet) ไปยัง layer ที่อยู่ด้านล่างถัดไป เมื่อข้อมูลมาถึงชั้น data link layer มันจะแปะส่วน header รวมกับข้อมูลนั้น และในที่สุดข้อมูลก็จะถูกส่งออกไป เมื่อได้รับ packet กระบวนการทำงานย้อนกลับก็เริ่มขึ้น โดยข้อมูลจะถูกส่งไปยัง data link layer เพื่อเก็บข้อมูลที่มันต้องการจาก header จากนั้นก็จะลบส่วนของ header ออก พร้อมทั้งส่งข้อมูลไปยัง IP layer ตัว IP layer เองก็จะอ่านข้อมูลจาก header ลบ header ออก และส่งผ่านข้อมูลไปยัง transport layer และเป็นเช่นนี้จนกระทั่งข้อมูลถูกส่งไปยังชั้นที่ต้องการในที่สุด
กระบวนการที่กล่าวไปแล้วนั้นเป็นสิ่งที่สำคัญสำหรับ simple packet filter, application proxy และ stateful packet-filtering technology ทั้งสามตัวนี้จะต้องเข้าถึงข้อมูลในส่วนของ header ในแต่ละ layer ซึ่งบรรจุข้อมูลที่แตกต่างกันไป โดยข้อมูลเหล่านี้จะถูกใช้เพื่อพิจารณาว่ามันเป็นข้อมูลที่อนุญาตให้ผ่านไป หรือไม่
ชั้น IP layer นั้นเป็นชั้นที่ทั้ง simple packet filter และ stateful filter ใช้เป็นจุดเริ่มต้นในการพิจารณาข้อมูล ซึ่งจุดนี้ที่ผู้ผลิต packet-filtering firewall ใช้เป็นข้อโต้แย้งว่า application proxy ไม่สามารถมองเห็นข้อมูลในชั้น network และ transport layer (ตามมาตรฐานของ OSI stack) ได้ ในปัจจุบัน simple packet filter บางตัวเช่น border router สามารถทำ access filtering ได้ที่ชั้น IP layer นี้ นอกจากนี้ router ส่วนใหญ่ยังสามารถทำงานที่ชั้น transport layer ได้อีกด้วย
สิ่งที่ simple packet filter และ stateful firewall ทำเหมือนกันก็คือ ตรวจสอบข้อมูล header ของ IP packet โดยสิ่งที่ถูกตรวจสอบคือ
- source address
- destination address
- protocol
- options
policy ของไฟร์วอลล์ส่วนใหญ่มักจะตรวจสอบความถูกต้องของ address (ทั้ง source address และ destination address) ด้วย ยกเว้นกรณีที่ระบุเป็น "all" และข้อมูลในส่วนของ protocol นั้นก็จะเป็นตัวบอกว่า ส่วนของ data นั้นบรรจุข้อมูลชนิดใดอยู่ เช่น TCP, UDP, ICMP หรือบางทีอาจจะเป็น IPSEC, ESP, ISAKMP กระบวนการในการตรวจสอบรูปแบบของ header นั้นจะอยู่ที่ layer ชั้นบนถัดไป และข้อมูลในส่วน options นั้น โดยปกติมักจะไม่มีค่าอะไร แต่อาจจะมี flag ที่แสดงถึง source routing ได้ (source routing ใช้ในกรณีที่ผู้ส่งต้องการให้ผู้รับส่งข้อมูลผ่านเส้นทางที่ผู้ส่งได้กำหนด ไว้) โดยปกติแล้วมักจะถูกใช้โดยผู้บุกรุก ดังนั้น packet filter ส่วนใหญ่จะ drop packet ที่ถูกส่งมาพร้อมกับ flag ดังกล่าว โดยไม่มีการตรวจสอบข้อมูลอย่างอื่นเพิ่มเติม
TCP header บรรจุข้อมูล 3 ส่วนที่สำคัญใน transport layer ไว้คือ source port , destination port และ flags โดยในส่วนของ flag นั้น สามารถประกอบไปด้วย URG(urgent), ACK(acknowledgment), PSH(push), RST(reset), SYN(syncronize) และ FIN(finish) และยังมีส่วนที่สี่ที่บรรจุ sequence number ซึ่งผู้ผลิตบางค่ายนำมาใช้พิจารณาด้วย
สำหรับ flag นั้นเป็นส่วนที่สำคัญมากใน stateful firewall เช่น การทำ TCP 3-way handshake (โปรดอ่านรายละเอียดในหนังสือที่เกี่ยวข้อง TCP/IP ทั่วไป)
UDP header บรรจุข้อมูลเพียงแค่ source port และ destination port เท่านั้นเอง ไม่มีส่วนของ flag และ sequence number แต่อย่างใด เนื่องจาก UDP เป็น connectionless protocol อยู่แล้วนั่นเอง และใน ICMP header นั้น ไม่ได้บรรจุข้อมูล port แต่อย่างใด แต่บรรจุชนิดของ ICMP (ICMP message type) เช่น "Echo request" , "Destination unreachable"
Simple packet filter จะพิจารณา TCP packet เพื่อตรวจสอบว่า
- packet นั้น มี address ที่ถูกต้องหรือไม่
- packet นั้น ถูกสร้างมาจาก external address จริงหรือไม่
- protocol หรือ service นั้น ผ่านการตรวจสอบแล้วหรือไม่
- option หรือ flag ที่ส่งมานั้น ถูกต้องตามข้อกำหนดหรือไม่
โดยทั่วไป border router มักจะทำหน้าที่ตรวจสอบระหว่างภายในและภายนอกเครือข่าย เพราะมันเป็นอุปกรณ์ที่สามารถบอกได้ว่า packet ถูกสร้างมาจากภายในหรือภายนอก และถ้า packet ถูกส่งมาจากภายนอกแต่มี address เป็นภายใน ก็แสดงว่า packet นั้นถูก spoof address มา และ packet นั้นควรที่จะถูก drop ทิ้งไป และนอกจากนี้ simple packet filter ยังไม่มีข้อมูลที่แสดงถึงการเชื่อมต่อที่เปิดขึ้นก่อนหน้านี้หรือในขณะนี้แต่อย่างใด ดังนั้นสมมติว่ามันได้รับ ACK packet มันก็จะพิจารณาว่า packet นี้ เป็นส่วนหนึ่งของ connection ที่เกิดขึ้นแล้ว และส่วนใหญ่ก็จะส่งต่อ packet ต่อไป จุดนี้ไม่ใช่ปัญหาของ established connection แต่มันเป็นปัญหาในกรณีที่การส่ง ACK packet ดังกล่าวถูกส่งมาโดยเจตนาร้าย (มีโปรแกรมจำนวนมากที่สามารถทำเช่นนี้ได้) เพราะเมื่อเครื่องปลายทางได้รับ ACK มันมักจะส่งสัญญาณ RST กลับไป ซึ่งจะแสดงให้เห็นว่าเครื่องปลายทางนั้นยังเปิดอยู่ และเปิดให้บริการใน port ดังกล่าว(destination port ที่ส่งมาพร้อมกับ ACK packet) บางครั้งยังสามารถใช้ตรวจสอบระบบปฏิบัติการของเครื่องปลายทางได้อีกด้วย (OS fingerprint) เพราะระบบปฏิบัติการในแต่ละระบบนั้นมักจะมีวิธี response ที่แตกต่างกันออกไป
สำหรับ packet-filtering firewall (stateful) แล้วมันก็ทำเช่นเดียวกันกับ simple packet filter แต่มันจะบันทึกข้อมูลเกี่ยวกับ connection ที่เกิดขึ้นลงใน state table ก่อนที่จะส่ง packet นั้นไปยัง IP stack ตัว table นี้จะมีส่วนสำหรับบันทึกข้อมูลสำหรับแต่ละ connection ที่ถูกต้อง โดยปกติจะเก็บข้อมูล source and destination address, protocol, port, flag แต่มีไฟร์วอลล์บางยี่ห้อที่เก็บข้อมูล sequence number เพิ่มด้วย เพื่อใช้ในการตรวจสอบ packet ที่กำลังจะเข้ามาและป้องกันการทำ session hijacking
เมื่อ packet-filtering firewall ได้รับ packet มันจะตรวจสอบข้อมูลกับ state table ว่าเป็นส่วนของ connection ที่สร้างไว้แล้วหรือไม่ โดยจะพิจารณาจากข้อมูล source adderss, destination address, source port, destnation port จะต้องสอดคล้องกับ state table ซึ่งถ้าเป็นส่วนหนึ่งของ connection จริงก็ไม่มีความจำเป็นใดๆ ที่ต้องตรวจสอบซ้ำอีก แต่ในไฟร์วอลล์บางยี่ห้อนั้นจะพิจารณา sequence number ของ packet เพิ่มเติมด้วย เช่น CiscoPIX ในขณะที่ Checkpoint's Firewall-1 ไม่พิจารณา sequence number แต่อย่างใด และเนื่องจากมีการเก็บ history ไว้ใน state table ดังนั้น stateful firewall สามารถ drop/return packet ที่ผิดปกติได้ และถ้า packet ที่ส่งมาเป็นส่วนหนึ่งของ connection ที่สร้างไว้แล้ว มันก็จะส่งผ่านเลย ซึ่งทำให้ประหยัด cost มากกว่าการตรวจสอบ firewall ruleset ใหม่อีกรอบ ดังนั้นจึงทำให้ packet-filtering firewall ทำงานได้เร็วมาก
ถ้า packet ที่ส่งมาไม่ตรงกับ connection ที่สร้างไว้แล้ว และไม่ใช่ SYN packet ตัว packet นั้นๆ ก็จะถูก drop ทิ้งไป และแม้แต่ packet ที่ผสม flag แปลกๆ เช่น SYN/FIN (เป็นกระบวนการหนึ่งในการทำ port scanning) ก็จะถูก drop ทิ้งไปเช่นเดียวกัน ทั้งนี้ไฟร์วอลล์ส่วนใหญ่สามารถบันทึกล็อกได้ด้วย ซึ่งขึ้นอยู่กับการตั้งค่าของผู้ดูแลระบบเองว่าต้องการเก็บข้อมูลใด
ในกรณีที่ packet-filtering firewall ได้รับ UDP packet เนื่องจากไม่มีกระบวนการ 3-way handshake เพราะมันเป็น stateless protocol ไม่มี sequence number แต่มันก็ยังมี source port และ destination port ซึ่งจะถูกสร้างขึ้นใน state table ซึ่งรวมเอา source address , destination address มาไว้ด้วยกัน ทั้งนี้ เนื่องจาก UDP ไม่มี FIN หรือ RST ซึ่งใช้สำหรับยกเลิกการเชื่อมต่อเหมือนกับ TCP ดังนั้นมันจึงต้องมี timeout เพื่อลบข้อมูลออกจาก state table
อย่างไรก็ตามจำเป็นต้องมีวิธีในการลบข้อมูลออกจาก state table โดยเฉพาะสำหรับ TCP connection ซึ่งอาจจะถูกโจมตีโดยการส่ง SYN packet (เรียกอีกอย่างว่า SYN flood) จำนวนมากเข้ามายังไฟร์วอลล์ ซึ่งก่อให้เกิด Denial of Service ได้ เพราะมันทำให้ state table เต็ม ปัญหานี้สามารถแก้ไขได้โดยการตั้ง timeout ของ แต่ละ connection ไว้
สำหรับ application proxy จะทำการตรวจสอบข้อมูลในชั้น network layer และ transport layer และยังสามารถตรวจสอบความถูกต้องในชั้น application layer ได้อีกด้วย ซึ่งทำให้ application proxy สามารถกลั่นกรอง commands, protocol, packet length, authorization, content, invalid header หรือสามารถส่งผ่าน packet ไปได้เลย application proxy เป็น stateful firewall แต่สิ่งที่สร้างความแตกต่างคือ proxy server จะสร้าง IP packet ใหม่ เพื่อส่งต่อไปยังเป้าหมาย ทั้งนี้เพื่อป้องกัน malformed packet และ proxy จะสร้าง packet ใหม่เพื่อส่งต่อก็ต่อเมื่อ packet นั้นผ่านการตรวจสอบแล้ว
ในกรณีของ simple packet filter เราจำเป็นต้องระบุ rule ทั้ง incoming packet และ ทั้ง outgoing packet ในขณะที่ stateful firewall สามารถระบุได้แค่ข้างเดียวเท่านั้นเอง เพราะ packet ที่ return กลับมานั้น จะถือว่าเป็นส่วนหนึ่งของ connection ที่สร้างไว้ก่อนแล้ว แต่ก็มีข้อยกเว้นเหมือนกัน เช่น Checkpoit's Firewall-1 นั้นต้องการการระบุ rule แยกสำหรับการใช้งาน ICMP echo request และ ICMP echo reply
ผู้ผลิดไฟร์วอลล์แต่ละยี่ห้อนั้นมักจะสร้างจุดเด่นที่แตกต่างกัน เช่น
- Cisco's PIX จะเริ่มต้น connection ด้วยการทำ application-level authentication จากนั้นก็จะส่งต่อไปยัง layer ชั้นที่อยู่ต่ำกว่า โดยจะเริ่มทำการตรวจสอบ stateful ในชั้น network layer และจะไม่มีการตรวจสอบ packet payload ถัดไปอีกเลย ภายหลังจากที่มีการทำ authnticationใน packet แรกแล้ว ดังนั้นจึงถือได้ว่า Cisco's PIX เป็น stateful packet filter
- Checkpoint's Firewall-1 สามารถทำ application-layer login ได้ แต่ต้องได้รับการแก้ไขค่าบางอย่างเพิ่มเติม นอกจากนี้ยังมี proxy ในตัวด้วย ดังนั้นจึงถือได้ว่า Checkpoint's Firewall-1 เป็น hybrid firewall
- Axent's Raptor เป็น pure proxy firewall โดยมีคุณสมบัติคล้ายกับ PIX และ Firewall-1 แต่ได้เพิ่มการตรวจสอบระดับ application-layer เข้าไปด้วย ซึ่งทำให้มันมีราคาแพงและมีหลายอย่างที่ต้องทำมาก และยังมี protocol ที่สนับสนุนจำนวนจำกัด นอกจากนี้เนื่องจากมันเป็น application proxy จึงมีข้อจำกัดในเรื่องความยืดหยุ่น ซึ่งต่างกับ stateful firewall
- Gauntlet Firewall สามารถเป็นได้ทั้ง hybrid, stateful packet filtering หรือ adaptive proxy ได้อีกด้วย
stateful firewall เป็น stateful เพราะมันสามารถตรวจสอบ packet data โดยมีการเทียบกับ history ของแต่ละ connection ได้ ซึ่งผู้ผลิตแต่ละยี่ห้อต่างก็มีวิธีการนำมาปรับใช้ในสินค้าของตัวเองแตกต่างกันไป