Port Scanning
เป็นหนึ่งในเทคนิคที่โด่งดังที่สุดที่ผู้โจมตีใช้ในการค้นหาบริการที่พวก
เขาจะสามารถเจาะผ่านเข้าไปยังระบบได้ โดยปกติแล้วทุก ๆ
ระบบที่ต่อเข้าสู่ระบบ LAN
หรือระบบอินเทอร์เน็ตจะเปิดบริการทั้งที่อยู่บนพอร์ตที่เป็นที่รู้จักและ
ที่ไม่เป็นที่รู้จัก สำหรับการทำ Port Scanning นั้น
ผู้โจมตีจะสามารถค้นหาข้อมูลได้มากมายจากระบบของเป้าหมาย ได้แก่
บริการอะไรบ้างที่กำลังรันอยู่ ผู้ใช้คนไหนเป็นเจ้าของบริการเหล่านั้น
สนับสนุนการล็อกอินด้วย anonymous หรือไม่ และบริการด้านเครือข่ายมีการทำ
authenticat ion หรือไม่ การทำ Port Scanning
ทำได้โดยการส่งข้อความหนึ่งไปยังแต่ละพอร์ต ณ เวลาหนึ่ง ๆ
ผลลัพธ์ที่ตอบสนองออกมาจะแสดงให้เห็นว่าพอร์ตนั้น ๆ ถูกใช้อยู่หรือไม
่และสามารถทดสอบดู เพื่อหาจุดอ่อนต่อไปได้หรือไม่ Port Scanners
มีความสำคัญต่อผู้ชำนาญด้านความปลอดภัยของเครือข่ายมากเพราะว่ามันสามารถ
เปิดเผยจุดอ่อนด้านความปลอดภัยที่มีความเป็นไปได้ของระบบเป้าหมาย
ถึง
แม้ว่า Port Scans สามารถเกิดขึ้นกับระบบของคุณ
แต่ก็สามารถตรวจจับได้และก็สามารถใช้เครื่องมือที่เหมาะสมมาจำกัดจำนวนของ
ข้อมูลเกี่ยวกับบริการที่เปิดได้ ทุกๆระบบที่เปิด
สู่สาธารณะจะมีพอร์ตหลายพอร์ตที่เปิดและพร้อมให้ใช้งานได้
โดยมีการจำกัดจำนวนพอร์ตที่จะเปิดให้แก่ผู้ใช้ที่ได้รับอนุญาตและปฏิเสธการ
เข้าถึงมายังพอร์ตที่ปิด
เทคนิคต่าง ๆ ของ Port Scan
ก่อนที่
คุณจะป้องกัน Port Scans คุณก็จะต้องเข้าใจเสียก่อนว่า Port Scans
ทำงานอย่างไร เนื่องจากมีเทคนิคของ Port Scanning อยู่มากมายหลายรูปแบบ
ซึ่งมีเครื่องมือ Port Scanning ที่ทำงานโดยอัตโนมัติ เช่น Nmap และ Nessus
การ scan ต่อไปนี้เป็นรูปแบบมาตรฐานสำหรับ Nmap และ Nessus
1.
Address Resolution Protocol (ARP) scans
จะตรวจหาอุปกรณ์ที่ทำงานในเครือข่ายโดยการส่งชุดของ ARP broadcasts
และเพิ่มค่าของฟิลด์ที่บรรจุ IP address ของเป้าหมายในแต่ละ broadcast
packet การ scan ชนิดนี้จะได้รับผลตอบสนองจากอุปกรณ์ที่มี IP
บนเครือข่ายออกมาในรูปแบบของ IP address ของแต่ละอุปกรณ์ การ scan
แบบนี้จึงทำการ map out ได้ทั้งเครือข่ายอย่างมีประสิทธิภาพ
2.The
Vanilla TCP connect scan เป็นเทคนิคการ scan แบบพื้นฐานและง่ายที่สุด
คือจะใช้ connect system call
ของระบบปฏิบัติการไปบนระบบเป้าหมายเพื่อเปิดการเชื่อมต่อไปยังทุก ๆ
พอร์ตที่เปิดอยู่ การ scan ชนิดนี้สามารถจับได้ง่ายมาก โดยล็อก (log) ต่าง ๆ
ของระบบที่เป็นเป้าหมายจะแสดงการร้องขอการเชื่อมต่อ (connection requests )
และข้อความแสดงข้อผิดพลาด (error messages)
สำหรับบริการที่ตอบรับการเชื่อมต่อนั้น
3.The TCP SYN (Half Open)
scans เทคนิคนี้บางครั้งถูกเรียกว่า half open
เพราะว่าระบบที่ทำการโจมตีไม่ได้ปิดการเชื่อมต่อที่ได้เปิดไว้ scanner
จะส่ง SYN packet ไปยังเป้าหมายและรอการตอบสนอง
ถ้าพอร์ตถูกเปิดไว้เป้าหมายก็จะส่ง SYN/ACK กลับมา แต่ถ้าพอร์ตถูกปิดอยู่
เป้าหมายก็จะส่ง RST กลับมา วิธีการ scan รูปแบบนี้ยากต่อการตรวจจับ
ปกติเครื่องที่เป็นเป้าหมายจะทำหน้าที่ปิดการเชื่อมต่อที่เปิดไว้
และส่วนใหญ่จะไม่มีระบบการล็อกที่เหมาะสมในการตรวจจับการ scan ชนิดนี้
4.The
TCP FIN scan เทคนิคนี้สามารถที่จะทะลุผ่านไฟล์วอลล์ ส่วนใหญ่, packet
filters , cละโปรแกรมตรวจจับการ scan ไปได้โดยไม่ถูกตรวจพบ
เพราะระบบที่ทำการโจมตีจะส่ง FIN packets ไปยังระบบของเป้าหมาย
สำหรับพอร์ตต่าง ๆ ที่ปิดอยู่จะตอบสนองกลับไปด้วย RST
ส่วนพอร์ตที่เปิดจะไม่สนใจ packets เหล่านั้นเลย
ดังนั้นเครื่องที่ทำการโจมตีก็จะได้ข้อมูลว่ามันได้รับ RST
จากพอร์ตไหนบ้างและไม่ได้ RST จากพอร์ตไหนบ้าง
5.The TCP Reverse
Ident scan
เป็นเทคนิคที่สามารถตรวจหาชื่อของเจ้าของแต่ละโพรเซสที่เป็นการเชื่อมต่อ
ด้วย TCP บนเครื่องเป้าหมาย การ scan
ชนิดนี้จะทำให้ระบบที่ทำการโจมตีสามารถเชื่อมต่อเข้าไปยังพอร์ตที่เปิดอยู่
และใช้ ident protocol
ในการค้นหาว่าใครเป็นเจ้าของโพรเซสบนเครื่องเป้าหมายได้
6.The TCP
XMAS ถูกใช้เพื่อหาพอร์ตบนเครื่องเป้าหมายที่อยู่ในสถานะ listening
โดยจะส่ง TCP packet ที่มี flag เป็น URG, PSH และ FIN ใน TCP header
ไปยังพอร์ตของเครื่องเป้าหมาย ถ้าพอร์ต TCP ของเครื่องเป้าหมายปิดอยู่
พอร์ตนั้นก็จะส่ง RST กลับมา แต่ถ้าพอร์ตเปิดอยู่ก็จะไม่สนใจ packet
นั้นเลย
7.The TCP NULL scan เทคนิคนี้จะส่ง TCP packet ที่มี
sequence number แต่ไม่มี flag ออกไปยังเครื่องเป้าหมาย
ถ้าพอร์ตปิดอยู่จะส่ง กลับมา RST packet กลับมา แต่ถ้าพอร์ตเปิดอยู่
ก็จะไม่สนใจ packet นั้นเลย
8.The TCP ACK scan
เป็นเทคนิคที่ใช้ค้นหาเว็บไซต์ที่เปิดบริการอยู่ แต่ปฏิเสธการตอบสนองต่อ
ICMP ping หรือค้นหากฎ (rule) หรือนโยบาย ( policy) ต่าง ๆ
ที่ตั้งไว้ที่ไฟล์วอลล์เพื่อตรวจสอบดูว่าไฟล์วอลล์สามารถกรอง packet
อย่างง่าย ๆ หรือเทคนิคชั้นสูง โดยการ scan แบบนี้จะใช้ TCP packet ที่มี
flag เป็น ACK ส่งไปยังพอร์ตเครื่องปลายทาง ถ้าพอร์ตเปิดอยู่
เครื่องเป้าหมายจะส่ง RST กลับมา แต่ถ้าปิดอยู่ก็จะไม่สนใจ packet นั้น
9.The
FTP Bounce Attack ใช้โพรโตคอล ftp สำหรับสร้างการเชื่อมต่อบริการ ftp ของ
proxy วิธีการ scan แบบนี้ ผู้โจมตีจะสามารถซ่อนตัวอยู่หลัง ftp server
และ scan เป้าหมายอื่น ๆ ได้โดยไม่ถูกตรวจจับ ดังนั้น ftp servers
ส่วนใหญ่จะมีการ disable บริการของ ftp เพื่อความปลอดภัยของระบบ
10.The UDP ICMP port scan ใช้โพรโตคอล UDP ในการ scan หาพอร์ตหมายเลขสูง ๆ โดยเฉพาะในระบบ Solaris แต่จะช้าและไม่น่าเชื่อถือ
11.The
ICMP ping-sweeping scan จะใช้คำสั่ง ping
เพื่อกวาดดูว่ามีระบบไหนที่เปิดใช้งานอยู่
เครือข่ายส่วนใหญ่จึงมีการกรองหรือ disabled
โพรโตคอล ICMP เพื่อความปลอดภัยของระบบ
การปกป้องระบบจาก Port Scans
ถ้า
คุณมี server ที่เปิดให้เข้าถึงได้จากภายนอก
ระบบก็จะมีความเสี่ยงต่อการถูก scan port อย่างแน่นอน
ปัจจุบันนี้ยังไม่มีวิธีที่แน่นอนในการปราบ port scan เลย
และศาลก็พิจารณาว่าการทำ port scan นั้นไม่ผิดกฎหมาย
เพียงแต่ถ้าผู้โจมตีนำเอาข้อมูลจาก port scan
ไปใช้เจาะหรือเปิดพอร์ตของระบบจึงจะถือว่าผิดกฎหมาย
ดังนั้นจึงมีคำถามเกิดขึ้นว่า
เราจะทำอย่างไรในการจำกัดข้อมูลที่ถูกส่งออกไปจากระบบของเรา?
วิธี
หนึ่งที่จะจำกัดการเข้าถึงข้อมูลจากการทำ port scan ก็คือปิดบริการต่าง ๆ
ที่ไม่จำเป็นบนระบบ เช่น ถ้าคุณมีการเปิดบริการ web server
ก็ควรจะเปิดพอร์ตสำหรับ http เท่านั้น ในระบบ UNIX
มีวิธีที่ง่ายที่สุดในการจำกัดข้อมูลที่จะส่งให้ port scan คือ
การแก้ไขที่ไฟล์ /etc/inetd.conf โดยยกเลิกบริการที่ไม่จำเป็นออกไป
แล้วแก้ไขที่ไฟล์ของ runlevel ที่ระบบของคุณใช้อยู่
ซึ่งอยู่ภายใต้ไดเรกทอรี /etc/init.d
นอกจากนี้ระบบของคุณจะต้องไม่ได้กำลังรันในโหมด X11
มิฉะนั้นระบบของคุณก็จะส่ง broadcast ของบริการหมายเลขพอร์ต 6000
ออกไปไม่ว่าคุณจะล็อกอินหรือไม่ก็ตาม
อีกวิธีหนึ่ง คือ ใช้ TCP
Wrappers
ซึ่งช่วยให้ผู้ดูแลสามารถกำหนดการอนุญาตหรือปฏิเสธการเข้าถึงบริการต่าง ๆ
โดยอ้างอิงถึง IP addresses หรือ domain names โปรแกรม TCP Wrappers
ทำงานร่วมกับไฟล์ /etc/inetd.conf ซึ่งทำงานโดยเรียก tcpd daemon
ก่อนเพื่อจัดบริการเฉพาะให้ใช้งาน
เมื่อมีการร้องขอเข้ามาโดยตรวจได้จากพอร์ตที่อนุญาตให้เข้ามา ก่อนอื่น TCP
Wrappers ก็จะตรวจสอบไฟล์ /etc/hosts.allow เพื่อดูว่า IP addresses หรือ
domain name นั้น ๆ มีสิทธิเข้าถึงบริการหรือไม่
ถ้าไม่มีการระบุอยู่ในไฟล์นี้ TCP Wrappers ก็จะตรวจสอบที่ไฟล์
/etc/hosts.deny ถ้าไม่มีการระบุไว้อีกหรือมีข้อความเป็น ALL : ALL TCP
Wrappers ก็จะไม่สนใจการร้องขอนั้น
และไม่อนุญาตให้ใช้บริการที่ถูกร้องขอเข้ามา เมื่อระบบถูก scan port TCP
Wrapper จะยังคงอนุญาตให้ประกาศบริการออกไป แต่อย่างไรก็ตาม scanner
จะไม่ได้รับข้อมูลเพิ่มเติมใด ๆ จากพอร์ต ยกเว้นว่าจะเป็นการ scan มาจาก
host หรือ domain ที่ระบุไว้ในไฟล์ the /etc/hosts.allow เท่านั้น
เมื่อมีการ scan ระบบจะแสดงรายชื่อพอร์ตที่เปิดอยู่
และเมื่อผู้โจมตีพยายามเจาะเข้ามาทางพอร์ตที่เปิดอยู่นั้น TCP Wrapper
ก็จะปฏิเสธการเชื่อมต่อที่เข้ามาที่ไม่ได้มาจาก host หรือ domain
ที่ได้รับอนุญาต แต่ข้อเสียของ TCP Wrapper
คือไม่สามารถตรวจสอบได้ครอบคลุมทุกบริการ อย่างเช่น http และ smtp
ถ้าทำการตั้งค่าไม่เหมาะสมจะทำให้เสี่ยงต่อการถูกบุกรุกได้ TCP Wrappers
ไม่มีจุดอ่อนในเรื่องของ IP spoofing เพราะเมื่อมีการร้องขอเข้ามาTCP
Wrapper จะทำ reverse DNS lookup สำหรับ IP address ที่ร้องขอเข้ามา
ถ้าค้นพบว่ามีชื่อ domain ตรงกับ IP ที่ร้องขอเข้ามา TCP Wrapper
ก็จะอนุญาตการเชื่อมต่อนั้น แต่ถ้าไม่พบ domain ที่ตรงกับ IP TCP Wrapper
ก็จะพิจารณาว่าเป็น host
ที่ไม่ได้รับอนุญาตและจะไม่ให้ทำการเชื่อมต่อเข้ามา
และวิธีสุดท้าย
ในการจำกัดจำนวนข้อมูลที่จะให้แก่ port scans คือ การใช้ PortSentry
ผลิตโดย Psionic สำหรับ PortSentry
นั้นจะตรวจจับการเชื่อมต่อที่ร้องขอเข้ามาที่พอร์ตจำนวนหนึ่ง
และสามารถตั้งค่าให้ไม่ต้องสนใจการร้องขอเข้ามาได้โดยผู้ดูแลระบบสามารถ
เลือกว่าจะให้ PortSentry
สนใจการเชื่อมต่อเข้ามาที่พอร์ตไหนและจะปฏิเสธการร้องขอไหนบ้าง
ผู้ดูแลระบบจะต้องระบุรายการพอร์ตที่ระบบไม่สนับสนุนไว้ PortSentry
จะตรวจจับโดยการใช้ TCP Wrapper
และใส่ข้อมูลของผู้บุกรุกที่น่าสงสัยไว้ในไฟล์ /etc/hosts.deny PortSentry
จะสร้าง default route statement ให้แก่ระบบที่บุกรุก
โดยจะทำให้มีการสร้างเส้นทางให้แก่ทุก ๆ packets
จากระบบที่ทำการบุกรุกไปยังระบบอื่นหรือไม่ก็ระบบที่ไม่ได้เปิดอยู่
ทำให้ผลลัพธ์ที่ได้ คือ เสมือน ว่าเครื่องเป้าหมายไม่มีตัวตนอยู่จริง
บนระบบ Linux PortSentry สามารถตรวจจับการ scan ด้วย TCP และ UDP ทุกชนิด
ขณะที่ระบบ Solaris สามารถตรวจจับได้เพียงการ scan แบบ TCP Vanilla และ UDP
สรุป
ทุก
ๆ ระบบมีความเสี่ยงต่อการทำ port scanning ทั้งสิ้น การรุกที่ดีที่สุด คือ
การรับที่ดี
ดังนั้นอย่ายอมรับการติดตั้งระบบปฏิบัติการด้วยค่าที่ตั้งไว้ให้ตั้ง แต่ต้น
เพราะค่าเหล่านั้นส่วนใหญ่จะมีการเปิดพอร์ตไว้มากมายเพื่อให้ใช้งานได้
สะดวกขึ้น ก่อนที่จะเปิดให้บริการในระบบ จึงควรทำ port scan
ระบบคุณเสียก่อน ถ้าพบว่ามีพอร์ตที่ไม่จำเป็นต้องใช้ก็ปิดพอร์ตเหล่านั้น
เพราะยิ่งมีการบริการเปิดไว้มากก็ยิ่งทำให้ระบบมีจุดอ่อนมากขึ้นไปด้วย
ควรทำการตรวจสอบไฟล์ /etc/inetd.conf, /etc/init.d และไฟล์ run control
บนระบบของคุณอย่างสม่ำเสมอเพื่อค้นหาบริการที่ไม่จำเป็น
ถ้าระบบคุณถูกบุกรุก
ผุ้โจมตีจะพยายามเปิดพอร์ตบนระบบของคุณเพิ่มขึ้นเพื่อที่จะสามารถเจาะเข้า
มาที่จุดอ่อนของพอร์ตได้ง่ายขึ้น
ดังนั้นยิ่งผู้ดูแลระบบมีความรอบคอบมากเท่าไร
ก็ยิ่งทำให้ระบบมีความต้านทานต่อการเจาะเข้ามามากขึ้นและมีโอกาสถูกบุกรุก
น้อยลงเท่านั้น