Scan Network ด้วย nmap
nmap คือเครื่องมือยอดนิยมสำหรับ Network Engineer และ Pen-Tester ซึ่ง nmap จะช่วยให้เราค้นหา(scan) Services หรือ Host ต่างๆที่อยู่ใน Network ได้ ที่สำคัญคือ nmap เป็น Open-Source ที่สามารถใช้งานได้ฟรี ไม่มีค่าใช้จ่าย
nmap ทำอะไรได้บ้าง?
Features ของ nmap นั้นมีดังต่อไปนี้
- ค้นหา Host ที่อยู่ใน Network โดยเลือกตาม IP Ranges หรือ Subnet
- สแกน Port ที่เปิดอยุ่(Ports scanning) ทั้ง TCP และ UDP Protocol
- ค้นหา Fingerprint หรือ Banner ของ Service และ Operating System(OS และ Service Version)
- เปลี่ยนวิธีการ Scan เพื่อให้วิ่งผ่าน Firewall หรือหลบการตรวจจับของ Intrusion Detection System(IDS)
- ทำ Trace route scan
- เขียน Script หรือใช้ nmap Script Engine(NSE) เพื่อ Attack เครื่องเป้าหมาย
__Fingerprint__ หรือ __Banner__ คือชื่อของ Service, Version และข้อมูลอื่นๆที่สามารถค้นหาได้จาก Service ที่ทำงานอยู่
การติดตั้ง nmap บน Windows
การใช้งาน nmap บน Windows จะมีวิธีติดต้ังที่ไม่ซับซ้อนอยู่ 2 วิธีคือ
- ติดตั้ง nmap ผ่านตัว Installer ซึ่งวิธีนี้เราสามารถ Download ตัว Installer ได้ที่นี่ ข้อดีของการติดตั้งด้วยตัวติดตั้งนี้คือ เราจะได้ทั้ง nmap และ Zenmap(nmap GUI) มาใช้งานทั้งคู่ด้วยการติดตั้งครั้งเดียว
- ติดต้ัง nmap โดยใช้ WSL 2.0
วิธีใช้ Nmap Command
เราสามารถนำ Nmap ไปใช้ได้หลายรูปแบบซึ่งจะแบ่งออกเป็นการ Scan ในรูปแบบต่างๆ ดังนี้
Nmap scan Hosts
เราสามารถค้นหา Host ได้ด้วย Options ต่างๆ ดังนี้
- เราสาสามารุค้นหา Host ใน Network โดยใช้การ Ping ด้วยคำสั่ง
$ nmap -sn 10.0.0/24
- เราสามารถเลือก Scan เฉพาะบาง IP ด้วยคำสั่ง
$ nmap -sn 10.0.2.1-100
- เราสามารถระบุ IP ที่ต้องการ Scan โดยใส่ไว้ใน List file(1 บรรทัด 1 IP address)
ซึ่งเนื้อหาใน target.txt จะระบุเฉพาะ IP address ที่เราต้องการ Scan เท่านั้น
$ nmap -sn -iL target.txt
10.0.2.1 10.0.2.3 10.0.2.5
- ในกรณีที่ Network เป้าหมายไม่อนุญาติให้ Ping(ปิด ICMP) เราจะต้องใส่
-Pn
เพื่อบังคับให้ Nmap ทำการ Scan ports โดยไม่ต้อง ping ก่อน$ nmap -Pn 10.0.2.0/24
Nmap scan ports
หลังจากเราพบ Host ใน Network แล้วโดยส่วนใหญ่เราจะใช้ nmap scan ports ที่เปิดอยู่เพื่อที่เราจะได้รู้ว่ามี Service อะไรเปิดให้บริการอยู่บ้าง หลังจากนั้นจะได้ค้นหาช่องโหว่จากรายชื่อของ Services เหล่านั้นต่อไป คำสั่งที่ใช้ในการ Scan ports มีดังนี้
- การทำงานของ Nmap จะ Scan ตั้งแต่ port ที่ 1-3000 แล้วหลังจากนั้นจะ Scan เฉพาะ Port ที่เรารู้จักกันเป็นอย่างดีเท่านั้น เช่น 3389(Remote Desktop), 3306(MySQL) หรือ 27017(MongoDB) เป็นต้น
$ nmap 10.0.2.5
- ถ้าเราต้องการ Scan ทุก Ports เราจะใช้คำสั่ง
$ nmap -p- 10.0.2.5
- ถ้าเราต้องการเลือกบาง Ports สามารถใช้คำสั่ง
$ nmap -p80,443 10.0.2.5
- ถ้าต้องการเลือกเฉพาะ Ports ที่มีคนใช้เยอะๆ 10 อันดับแรก เราจะใช้
$ nmap --top-ports=10 10.0.2.5
- หลังจากรู้ Ports ที่เปิดแล้วถ้าเราอยากรู้ว่เป็น Service ชื่ออะไร และใช้ Version ไหนเราจะตรวจสอบด้วย
-sV
$ nmap -sV -p80,443 10.0.2.5
Nmap Output
nmap สามารถส่ง Output ออกมาให้เราได้หลายรูปแบบดังนี้
- Stdout(-oN) เป็นผลลัพธ์ที่ออกมาทางหน้า Console ที่เราใช้(ผลลัพธ์ที่เราได้หลัง run command นั่นแหละ)
- XML(-oX) เป็นการ Export ผลลัพธ์ออกมาเป็น XML
- Grepable(-oG) เป็นการแสดงผลลัพธ์ที่สามารถนำไปกรองด้วยคำสั่ง
grep
ต่อได้ - All(-oA) เราสามารถ Export ผลลัพธ์ออกมาทั้ง 3 รูปแบบพร้อมกันได้ด้วยการใช้
-oA
วิธีการหลบเลี่ยงการตรวจจับ
ในการ Scan เราอาจถูกตรวจจับหรือถูก Block ด้วย Intrusion Detection System(IDS) หรือ Intrusion Protection System(IPS) เราจึงต้องใช้การ Delay หรือการ Scan แบบ Syn Scan(ส่งเฉพาะ Sync Packet เท่านั้นไม่ได้สร้าง Connection) ซึ่ง Nmap Options ที่เราต้องรู้จักมีดังนี้
- เราสามารถปรับเวลาของการ Scan ให้เร็วขึ้นหรือช้าลงได้ด้วยการกำหนดค่า
-T0
ถึง-T5
โดยที่-T0
จะช้าที่าสุดและ-T5
จะเร็วที่สุด$ nmap -T0 -p80,443 10.0.2.5
- การเลือกรูปแบบของ การเชื่อมต่อโดยจะแบ่งออกเป็น
# เราจะใช้ -sS สำหรับการทำ Syn Scan $ nmap -sS -p80,443 10.0.2.5 # ถ้าต้องการทำ Ack Knowledge เราจะใช้ $ nmap -sA -p80,443 10.0.2.5 # ถ้าต้องการสร้าง Connection เพื่อยืนยันว่า Service นั้นเปิดให้บริการอยู่เราจะใช้ $ nmap -sT -p80,443 10.0.2.5
Nmap Script Engine(NSE)
เป็น Script ที่เราใช้โจมตีหรือเก็บข้อมูลของ target ซึ่ง Scripts แต่ละตัวจะถูกจัดไว้เป็นกลุ่มๆ ดังนี้
- default เป็นกลุ่มของ Nmap Scripts ที่ถูกเลือกให้ run เป็น Script แรกๆ โดยจะเน้นที่ความเร็ว, มีประโยชน์, ได้ผลลัพธ์ที่มีความถูกต้องแม่นยำ และที่สำคัญคือไม่ทำร้ายระบบ
- auth กลุ่มของ Nmap Scripts ที่ต้องการ Bypass authentication เช่น ftp-anon หรือ oracle-enum-users
- boardcast กลุ่มของ Nmap Scripts ที่ใช้ค้นหา host ที่ไม่ได้อยู่ในผลลัพธ์ที่ได้จาก command-line
- brute กลุ่มของ Nmap Scripts ที่ใช้โจมตีแบบ Brute-force ใช้เพื่อค้นหา credentials สำหรับเข้าสู่ระบบ ยกตัวอย่างเช่น http-brute, oracle-brute หรือ snmp-brute
- discovery กลุ่มของ Nmap Scripts ที่ใช้ค้นหาข้อมูลเพิ่มเติมเช่น http-title ที่ใช้สำหรับดึง title ของ Web application ออกมาแสดง
- dos กลุ่มของ Nmap Scripts ที่ใช้โจมตีเพื่อทำให้ Service หยุดทำงาน(Denial of Service: DoS)
- exploit กลุ่มของ Nmap Scripts ที่ใช้โจมตีเข้าไปยังช่องโหว่ต่างๆ เช่น jdwp-exec หรือ http-shellshock
- external กลุ่มของ Nmap Scripts ที่ไปดึงข้อมูลจากบริการภายนอก เช่น whois-ip หรือ whois-domain ที่ใช้สำหรับดึงข้อมูล IP address และ Domain name ของระบบจากฐานข้อมูลของ Whois
- fuzzer กลุ่มของ Nmap Scripts ที่จะ Random Input ส่งเข้าไปยัง Service เพื่อทดสอบความแข็งแรงของ Service นั้นๆ
- intrusive กลุ่มของ Nmap Scripts ที่ทำร้ายระบบ การ run script ในกลุ่มนี้จะมีความเสี่ยงทำให้ Service หยุดทำงาน
- safe กลุ่มของ Nmap Scripts ที่ไม่ทำร้ายระบบ
- version กลุ่มของ Nmap Scripts ที่ใช้ค้นหา Version ของ Service (ที่เราเรียกด้วย
-sV
) - vuln กลุ่มของ Nmap Scripts ที่ค้นหาช่องโหว่ที่เคยเกิดขึ้นมาแล้ว เช่น skypev2-version, pptp-version และ iax2-version ซึ่งเมื่อพบช่องโหว่แล้ว Nmap จะทำการ report ออกมาโดยไม่มีการโจมตี
วิธีเรียกใช้งาน Nmap Script Engine
การเรียกใช้ Nmap script engine สามารถทำได้โดยการใส่ --script
หรือ -sC
เข้าไป ยกตัวอย่างเช่น
# run nmap script engine ในกลุ่ม default ทั้งหมด
$ nmap -sC 10.0.2.5
# run nmap script engine ในกลุ่ม auth ทั้งหมด
$ nmap --script=auth 10.0.2.5
# run nmap script engine ที่ชื่อ http-title
$ nmap --script=http-title 10.0.2.5
และถ้าเราต้องการกำหนด Arguments ให้กับ Script เราจะใช้ --script-args
แบบนี้
$ nmap -p80 --script "http-title" \
--script-args "http-title.url=/admin" \
10.0.2.5
ในตัวอย่างนี้เราจะใส่ arguments ให้กับ Script ที่ชื่อ http-title โดยที่ทำการทำหนด url ของ Web เป็น /admin (ค่า Default จะเป็น /)
Network Scanning ผ่าน GUI
นอกจากจะใช้ nmap ผ่าน command line แล้วเรายังสามารถเลือกใช้เครื่องมือที่เป็น GUI แทนก็ได้ ซึ่งถ้าใครไม่ชอบ Command line ก็สามารถเลือกเครื่องมือต่างๆเหล่านี้มาใช้แทนได้เลย
Zenmap
Zenmap เป็น GUI ที่มาจากต่ายของ nmap เอง ซึ่งด้านหลัง GUI ก็จะเป็น nmap ดังนั้นเราจึงกำหนด parameters ต่างๆ เหมือนกับการใช้งาน nmap เลย
Angry IP Scanner
Angry IP Scanner เป็น GUI อีกตัวนึงที่ใช้งานง่าย ความสามารถอาจสู้กับ nmap ไม่ได้แต่เรื่องความง่ายรับรองใช้ง่ายแน่นอน