"เมื่อการรุกรานจากภายนอกเครือข่ายเป็นสิ่งที่หลีกเลี่ยงไม่ได้คงไม่ใช่เรื่องแปลกหากข้าพเจ้าจะขอโต้ตอบกลับไปบ้าง"
ในโลกไอทีของเรามีบุคคลอยู่ 2 กลุ่ม กลุ่มแรกมีความเห็นเรื่องระบบความปลอดภัยเป็นเรื่องสนุก มีค่านิยมที่ชอบเก็บเกี่ยวความสนุกสนาน ตื่นเต้น ท้าทายกับการเจาะระบบของผู้อื่น ส่วนอีกกลุ่มหนึ่งกลับต้องใช้ชีวิตด้วยความกังวล ตื่นกลัว และเบื่อหน่ายที่จะต้องเฝ้าระวังให้ระบบที่ตนเองรับผิดชอบอยู่ทำงานได้อย่างราบรื่น รอดพ้นจากผลงานจากฝีมือของคนกลุ่มแรก บางรายถึงกับนอนไม่หลับ ( หรือไม่มีโอกาสได้นอน ) ตามปรกติเลยก็มี
ในสภาพที่เราอยู่ท่ามกลางสถานการณ์ที่มีความเสี่ยงเช่นนี้ ภารกิจหน้าที่ของเหล่าผู้ดูแลระบบจะต้องเพิ่มขึ้นอย่างแน่นอน ไม่ว่าระบบเครือข่ายของคุณจะมีขนาดเล็ก กลาง หรือใหญ่ ทุกระบบก็ล้วนอยู่ในฐานะ "เป้านิ่ง" รอให้ผู้ก่อการร้ายเข้าโจมตีได้ทั้งนั้น ความพร้อมที่จะรับมือจากเหตุการณ์ร้าย ๆ ทั้งหลายนั้น เป็นสิ่งที่ผู้ดูแลระบบจะต้องรับผิดชอบ และสร้างมาตรการรองรับไว้ให้รัดกุมที่สุด
หากกล่าวถึงการสร้างความเสียหายจากการกระทำของพวกแครกเกอร์ ( Cracker ) แล้ว ขั้นตอนสำคัญอันดับต้น ๆ ที่มักจะเป็นจุดเริ่มต้นก่อนที่จะเจาะเข้าสู่ระบบของเราก็คือ "การรวบรวมข้อมูล และค้นหาช่องโหว่" ซึ่งอาจจะเริ่มต้นจากการสืบค้นข้อมูลจากโดเมนเนมที่เป้าหมายได้จดทะเบียนไว้ แกะรอยไปเรื่อย ๆ ก็จะได้หมายเลขไอพีของโฮสต์ที่สำคัญ ๆ หรือเป็นไปได้ว่าจะสามารถนำมาร่างแผนผังของเครือข่าย ( เกือบ ) ทั้งหมด ซึ่งขั้นตอนเหล่านี้ไม่ได้ยากเย็นอะไรนัก
ในด้านการป้องกันการกระทำการในขั้นตอนนี้ จะอยู่ที่ผู้ดูแลระบบจะต้องให้ความสำคัญในการวางโครงสร้างพื้นฐานของระบบเครือข่าย ( Network Infrastructure ) เป็นหัวใจสำคัญ จะอาศัยการจัดการด้านซอฟต์แวร์เพียงอย่างเดียวไม่ได้ ยกเว้นกรณีที่เป็นเครือข่ายขนาดเล็กซึ่งการจัดวางระบบที่ซับซ้อนอาจจะใช้งบประมาณสูงเกินฐานะ ก็คงต้องยอมรับความเสี่ยงดังกล่าวไว้พิจารณา
โดยอาจจะจัดวางระบบโดยอาศัยเซิร์ฟเวอร์ที่แข็งแกร่งมีการป้องกันเป็นอย่างดี หรือ Bastion Host เป็นการทดแทน

รูปที่ 1 ตัวอย่างไดอะแกรมของระบบเครือข่ายที่มีระดับความเสี่ยงแตกต่างกัน
ศึกษาอาวุธของศัตรู Port Scanner
หลังจากที่แครกเกอร์ได้หมายเลขโฮสต์เป้าหมายมาแล้ว ขั้นตอนถัดไปก็คือ การตรวจสอบเพื่อให้ทราบว่าโฮสต์เหล่านั้นกำลังรันงานบริการ ( Services ) อะไรกันอยู่บ้าง เพื่อที่จะได้ค้นหาช่องโหว่ของงานบริการนั้น ๆ ในรายละเอียดต่อไป ในขั้นตอนนี้เครื่องมือที่เหล่าแครกเกอร์นิยมใช้กันมักจะเป็นโปรแกรมประเภท Port Scanner ได้แก่ โปรแกรม Nmap ( Linux/Win ) ,โปรแกรม SuperScan (Windows) เป็นต้น โปรแกรมพวกนี้จะสร้างแพคเก็ตชนิดต่าง ๆ หลากหลายชนิดแล้วส่งไปยังโฮสต์เป้าหมายโดยมีจุดประสงค์เพื่อรวบรวมรายชื่อพอร์ต ( TCP/UDP port ) ที่โฮสต์นั้นเปิดให้บริการอยู่ ผลลัพธ์ของโปรแกรมจะช่วยให้แครกเกอร์ล่วงรู้ช่องทางที่มีอยู่ทั้งหมด จากนั้นคงไม่ยากนักหากจะเลือกช่องทางที่อ่อนแอ และที่สุดมีโอกาสประสบความสำเร็จมากที่สุด

รูปที่ 2 ผลลัพธ์ของโปรแกรม Port Scanner ( Nmap )
นอกจากการแสกนพอร์ตโดยน้ำมือของบรรดาแครกเกอร์แล้ว ไวรัสหรือหนอนอินเตอร์เน็ตหลายๆ สายพันธุ์ก็มีการทำงานคล้ายกัน แตกต่างกันที่พวกหนอนเหล่านั้นจะมุ่ง หน้าเข้าสู่พอร์ตใดพอร์ตหนึ่งโดยเฉพาะเท่านั้น พฤติกรรมเช่นนี้สามารถควบคุมและป้องกันได้ หากใช้ลีนุกซ์เป็นเกตเวย์หรือพร๊อกซี่ ซึ่งจะได้กล่าวถึงต่อไป
กลับมาที่เรื่องของโปรแกรมประเภท Port Scanner ซึ่งเป็นเครื่องมือที่ใช้ตรวจสอบค้นหาช่องทางที่จะติดต่อเข้าสู่โฮสต์ที่เป็นเซิร์ฟเวอร์ได้อย่างง่ายดาย โปรแกรมประเภทนี้ร้ายกาจนักสามารถสร้างแพคเก็ตได้หลากหลายรูปแบบ เพื่อจุดประสงค์หลักคือ ให้ทราบว่ามีการเปิดพอร์ตใดไว้บ้าง ตัวอย่างบางส่วนที่นิยมใช้งานของแพคเก็ตที่โปรแกรม Nmap สามารถสร้างได้มีดังนี้
TCP Sync Scanning : : อาศัยเทคนิคที่เรียกว่า "Half-Open" โดยโปรแกรมจะส่ง SYN Packet ออกไปยังโฮสต์เป้าหมาย ทันทีที่เกิดการคอนเน็คขึ้น โปรแกรมจะยุติการติดต่อทันที ซึ่งเทคนิคเช่นนี้จะทำให้โฮสต์เป้าหมายส่วนใหญ่ยังไม่ทันได้บันทึกเหตุการณ์นี้ไว้ใน Log จึงเป็นการแสกนที่ไม่ทิ้งร่องรอยไว้นั่นเอง
TCP connect( ) : วิธีการนี้เป็นวิธีขั้นพื้นฐานที่โปรแกรม Port Scanner ทั่วไปนิยมปฏิบัติกัน ( เช่น โปรแกรม Port Scanner ในกลุ่มวินโดวส์ ) ซึ่งเป็นการจำลองกรกะบวนการร้องขอเพื่อการติดต่อขอใช้บริการจากเครื่องลูกข่ายตามปรกติ วิธีการนี้จึงง่ายต่อการตรวจจับโดยโฮสต์ปลายทางและบันทึกเข้าสู่ Log
Stealth FIN , Xmas Tree ,Null Scanning : : เป็นวิธีแสกนพอร์ตที่มีวิธีการที่แตกต่างจาก 2 วิธีแรก เนื่องจากการส่งแพคเก็ต SYN จะถูกปฏิเสธได้โดยไฟร์วอลล์ ดังนั้นจึงอาศัยวิธีส่งแพคเก็ตด้วยแฟล็กชนิดอื่น ๆ หรือไม่มีการเซ็ตแฟลกใด ๆ เลยไปแทน ซึ่งจะมีความเป็นไปได้ว่าจะสามารถเล็ดลอดการตรวจจับและปฏิเสธของไฟร์วอลล์ไปได้ นอกจากนี้ผลการตอบสนองต่อแพคเก็ตเหล่านี้จากระบบปฏิบัติการต่าง ๆ จะมีผลลัพธ์ที่ไม่เหมือนกัน พฤติกรรมที่แตกต่างกันนี้เองจึงเป็นประโยชน์ในทางอ้อมที่ช่วยให้สามารถประเมินได้ว่าโฮสต์เป้าหมายนั้นใช้ระบบปฏิบัติการใดอยู่ นับว่าเป็นข้อมูลที่น่าสนใจอีกประการหนึ่งด้วย
UDP Scanning : การแสกนในโหมดนี้จะตรวจสอบเฉพาะพอร์ตที่ให้บริการแบบ UDP ( User Datagram Protocol ) โดยเฉพาะ ซึ่งปรกติแล้ว Nmap จะไม่รายงานเกี่ยวกับพอร์ตชนิดนี้ให้ทราบจนกว่าผู้ใช้จะกำหนดให้ทำงานในโหมดนี้
IP Protocol Scanning : ใช้เพื่อการวิเคราะห์โฮสต์เป้าหมายว่ากำลังใช้ IP Protocol ใดอยู่บ้าง เช่น icmp, igmp ,tcp ,udp ข้อมูลที่ปรากฏขึ้นจะใช้เพื่อการเดา ( Guessing ) ประเภท และหน้าที่ของโฮสต์นั้น ๆ ซึ่งอาจจะไม่ใช่เครื่องเซิร์ฟเวอร์ แต่อาจเป็นอุปกรณ์เครือข่ายบางประเภทก็เป็นได้
สำหรับโปรแกรม Nmap นี้ จะมีให้มาเป็นตัวเลือกในการติดตั้งของ Red Hat Linux อยู่แล้ว หากต้องการทราบวิธีการใช้งานในแบบ command line เพิ่มเติมกรุณาอ่านได้จาก Man Page ของโปรแกรม นอกจากนี้ยังมีโปรแกรม NmapFE เป็น Front End แบบ GUI ให้ใช้งานแบบกราฟฟิกอีกด้วย หรือถ้าต้องการดาวน์โหลดโปรแกรมรุ่นใหม่กว่าที่มาพร้อมกับ Red Hat Linux ก็สามารถไปดาวน์โหลดได้ที่ http://www.insecure.org/nmap ซึ่งมีโปรแกรม NmapWin สำหรับรันในระบบปฏิบัติการวินโดวส์อีกด้วย ขนาดของไฟล์ประมาณ 4.84 MB มีอินเทอร์เฟสเป็นกราฟฟิกใช้งานได้สะดวกเช่นเดียวกัน

รูปที่ 3 Nmap for Window
ไม่ว่าการรุกล้ำเข้ามาของแพคเก็ตแปลกปลอมจะมีที่มาจากมนุษย์ ( Crackers ) หรืออมนุษย์ ( Viruses / Worms ) ก็ตาม ย่อมเป็นพฤติกรรมที่ไม่พึงประสงค์อย่างแน่นอน การป้องกันในเชิงรับเป็นสิ่งแรกที่ผู้ดูแลระบบสมควรพิจารณาหาไฟร์วอลล์ประเภท Packet Filter มาป้องกันระบบของคุณ นอกเหนือจากข้อควรปฏิบัติพื้นฐานทั่วไปที่ทราบกันดีอยู่แล้ว เช่น การปิดงานบริการที่ไม่ได้ใช้งาน กำหนดเงื่อนไขประเภท Host Access Control List ไปจนถึงเรื่องของการอัพเดตซอฟต์แวร์งานบริการที่ใช้งานอยู่ให้ทันสมัยและมีข้อบกพร่องน้อยที่สุด
อย่างไรก็ตามการติดตั้งไฟร์วอลล์ไม่ว่าจะเป็นในส่วนของเกตเวย์ หรือการรัน Packet Filter ภายในโฮสต์ที่เป็นเซิร์ฟเวอร์ก็ตาม อาจจะยังไม่คำตอบสุดท้ายก็ได้ เพราะเครื่องมือแสกนพอร์ตและไวรัสยังคงสามารถเจาะเข้ามาได้ในที่สุดอยู่ดี แนวคิดของการหลอกล่อให้คนร้ายปรากฏตัวจึงถูกนำมาใช้ และเป็นที่มาของโปรแกรมรักษาความปลอดภัยที่มีปฏิกริยาตอบสนองต่อการโจมตี
Psionic PortSentry
โปรแกรม PortSentry เป็นโปรแกรมสำหรับลีนุกซ์และโอเอสตระกูลยูนิกซ์ที่ออกแบบขึ้นเพื่อตรวจสอบการแสกนพอร์ตจากภายนอก และสามารถตอบสนองต่อการกระทำนั้น ๆ ได้หลายรูปแบบ พัฒนาขึ้นโดยเป็นส่วนหนึ่งของ Abacus Project ซึ่งริเริ่มโดย Craig H. Rowland โดยลักษณะแล้วถือว่าเป็นซอฟต์แวร์ประเภท Network based Intrusion Detection ( NIDS ) ซึ่งนอกจากจะมีโหมดการดีเทคการแสกนพอร์ตให้เลือกใช้งานถึง 6 โหมดแล้ว ยังสามารถโต้ตอบการแสกนพอร์ตนั้นได้อีกด้วย ดังนี้
- บันทึกข้อมูลของการแสกนพอร์ตที่เกิดขึ้น และรายงานผ่านบริการ syslogd ซึ่งโดยปรกติจะสามารถย้อนตรวจดูเหตุการณ์ย้อนหลังได้ที่ไฟล์ /var/log/messages หรืออาจจะเปลี่ยนไปบันทึกที่ไฟล์อื่นแยกออกไปก็ได้ตามต้องการ

รูปที่ 4 รายงานการถูกแสกนพอร์ตโดย Syslogd
- ปิดกั้นโฮสต์ฝ่ายตรงข้ามโดยอัตโนมัติ หรือ Automatic Real time blocking ด้วย TCP Wrappers โดยจะอัพเดตที่ไฟล์ /etc/hosts.deny ให้เองทันที เช่น เมื่อถูกเครื่อง 203.182.16.1 แสกนเข้ามา ไฟล์ /etc/hosts.deny จะมีข้อความเกิดขึ้นเองดังนี้
ALL:203.182.16.1
- คอนฟิก kernel route table โดยอัตโนมัติ เพื่อตัดการติดต่อกับโฮสต์ฝ่ายตรงกันข้าม

รูปที่ 5 Kernel Routing Table ภายหลังจากถูกเครื่อง 192.168.0.6 แสกนเข้ามา
- ระบบ History เป็นการบันทึกผลการบล๊อกที่ได้กระทำไปแล้ว โดยมีข้อมูลเกี่ยวกับวันเวลาที่มีการแสกนพอร์ตเกิดขึ้น ชื่อและไอพีแอดเดรสของโฮสต์ฝ่ายตรงข้าม ( สามารถกำหนดให้ใช้ระบบ DNS Lookup หรือไม่ใช้ได้ตามต้องการ ) โดยจะเก็บไว้ที่ไฟล์ portsentry.history

รูปที่ 6 ไฟล์ History ของ PortSentry
- Prioritize Response เป็นความสามารถใหม่มีตั้งแต่เวอร์ชั่น 1.1 ขึ้นไป คือ สามารถจัดระดับความสำคัญของการจัดการต่อการแสกนพอร์ตได้ และยังสามารถรันคำสั่งภายนอกได้ตามต้องการ จึงมีประโยชน์มากต่อการสร้างระบบแจ้งเตือน ( Alert and Alarm ) ในรูปแบบที่ผู้ดูแลระบบสามารถกำหนดขึ้นได้เอง
เป็นอย่างไรบ้างครับ สำหรับคุณสมบัติของซอฟต์แวร์ประเภท NIDS ตัวนี้ ไม่น่าเชื่อเลยว่าจะมีขนาดของไฟล์ source code เพียงแค่ 32KB เท่านั้น แน่นอนครับโปรแกรมที่นำมาเสนอนี้จะต้องเป็น Open Source Software เช่นเดิม ( แต่มี License restriction ) สามารถหาดาวน์โหลดได้ที่ http://www.psionic.com ส่วนการติดตั้งก็ทำได้ไม่ยาก เนื่องจากมีไฟล์เอกสาร README.install ให้คำแนะนำในการติดตั้งไว้อย่างตรงไปตรงมาสามารถปฏิบัติตามได้เลย ซึ่งผู้เขียนได้ทดลองนำเวอร์ชั่น 1.0 มาติดตั้งบน Red Hat Linux 9.0 ก็สามารถติดตั้งได้อย่างราบรื่นไม่ติดขัดอะไร หากไม่ได้แก้ไขค่าคอนฟิกใด ๆ ทั้งตัวโปรแกรม ไฟล์คอนฟิก และ ไฟล์ History จะอยู่รวมกันที่
# cd /usr/local/psionic/portsentry
เมื่อต้องการเรียกใช้งานจะใช้คำสั่งดังนี้
# ./portsentry -atcp
จะเป็นการกำหนดให้ PortSentry ทำงานในโหมด Advanced Stealth Detection ซึ่งจะซ่อนการทำงานไว้ได้ แม้แต่ Localhost เองก็ไม่รู้ว่ามีการเปิด Socket จาก PortSentry ไว้ ( โหมดนี้ทำงานได้เฉพาะ Linux Kernel เท่านั้นครับ หากนำไปรันบนระบบอื่น ๆ จะไม่สามารถทำงานได้ )
ส่วนการที่จะให้ PortSentry เริ่มต้นทำงานตั้งแต่เริ่มต้นระบบนั้น ผู้ติดตั้งจะต้องนำคำสั่งไปไว้ในสคริปต์ที่เหมาะสมเอง เช่น อาจจะเพิ่มคำสั่งไว้ที่ไฟล์ /etc/rc.local ก็ได้
อย่าปล่อยให้ Cracker ลอยนวล
หลาย ๆ ท่านอาจจะคิดว่าเพียงแค่ติดตั้งไฟร์วอลล์เอาไว้ ก็อาจจะทำให้พวกแครกเกอร์ตัวแสบทั้งหลายเลิกคิดที่จะเข้ามาก่อกวน และเลิกตอแยไปในที่สุด แต่พวกเขาก็จะมองหาเหยื่อรายใหม่ต่อไปอีกเรื่อย ๆ ผู้เขียนเชื่อว่าคนประเภทนี้นอกจากจะเป็นโรคจิตบกพร่องแล้ว ส่วนหนึ่งจะต้องเป็นผู้ที่ทำงานเกี่ยวข้องกับระบบเครือข่ายระดับแบคโบนจึงเที่ยวเจาะระบบคนอื่นเล่นได้ตามอำเภอใจ แต่ด้วยซอฟต์แวร์ที่ผู้เขียนนำเสนอในครั้งนี้คงพอช่วยให้ผู้ดูแลระบบลีนุกซ์เซิร์ฟเวอร์สามารถย้อนรอยไปยังต้นตอที่สร้างปัญหายุ่งยากให้แก่เราได้ อย่างน้อยก็รู้ได้ว่ามีใครประสงค์ร้ายกับเราบ้าง เพื่อจะได้บริหารระบบด้วยความไม่ประมาท และเพิ่มความระมัดระวังให้มากยิ่งขึ้น หากท่านผู้อ่านมีข้อสงสัยหรือต้องการแลกเปลี่ยนประสบการณ์ด้านซอฟต์แวร์โอเพ่นซอร์ส ขอเชิญได้ที่เว็บไซต์ของผู้เขียน http://www.itdestination.com/webboard สวัสดีครับ
|