Ez a cikk az AV-Bypass-nak a folytatása. A cikk vége felé említettem egy eszközt, a Veil-t, de akkor nem tértem ki rá, mert nem sikerült működésre bírnom. Azóta természetesen újra elővettem, és foglalkoztam vele egy kicsit, és most már megy tökéletesen. :) Ebben a cikkben most vele fogunk foglalkozni.
Egy pár szó először is magáról az eszközről, és arról hogy mit is tud. Olyan metasploit payloadokat tudunk generálni vele amiket a legtöbb vírusírtó nem tud felismerni. A programban jelenleg 26 féle módszer van implentálva, ami valljuk meg őszintén nem kevés! Külön öröm nekem hogy az egészet python-ban írták. :)
A telepítése pofon egyszerű. A setup mappában találunk egy setup.sh scriptet ami mindent elvégez (helyettünk). Aki nem Kali-n dolgozna annak fel kell telepíteni a python 2.7-es változatát, plusz a PyCrypto legalább 2.3 változatát.
A program elindítása után egy jól megszokott “keret rendszer forma” fogad bennünket.
Ezek a parancsok állnak a rendelkezésünkre:
use Egy meghatározott payload használata. (pl. use 3)
info Infók egy megadott payload-ról. (pl. info 22)
list Kilistázza az összes elérhető payload-ot.
update Frissíti a Veil az elérhető legfrisebb verzióra.
clean Kiüríti a payload mappát.
checkvt Leellenőrzi hogy VirusTotal-on fent vannak e a payload-ok hash-jei.
exit Bezárja a Veil-t.
Most hogy a parancsokkal tisztában vagyunk foglalkozzunk egy kicsit a payloadokkal.
1. auxiliary/coldwar_wrapper
Ezzel a payload-al .exe fájlokat tudunk .war kiterjesztésűvé konvertálni. A .war fájlokat Apache Tomcat rendszereket lehet futtatni. Tehát pl. generálunk egy .exe payload-ot utána ezzel átkonvertáljuk .war kiterjesztésűvé és máris le tudjuk le tudjuk futtatni egy Tomcat rendszeren is. Ez a modul lényegében ennyire jó.
2. auxiliary/pyinstaller_wrapper
Ezzel a payload-al python fájlokat tudunk .exe-vé fordítani a pyinstaller modul segítségével.
3. c/meterpreter/rev_tcp
Obszfukált(összezavart) C nyelvű windows/meterpreter/reverse_tcp payload-ot tudunk vele generálni. Többféle stringet generál futás közben véletlenszerűen, és így zavarja össze a kódot.
4. c/meterpreter/rev_tcp_service
Ez annyiban különbözik az előző payload-tól hogy ez kompatibilis a psexec programocskával. Bővebben a psexec-ről.
5. c/shellcode_inject/virtual
Ez a payload a jól ismert C-s VirtualAlloc technikát implementálja. Aki nem ismerné: Annyit kell róla tudni hogy a VirtualAlloc egy Windows specifikus hívás ami lefoglal egy egy memóriarészt meghatározott jogokkal.
6. c/shellcode_inject/void
Ez a payload is eléggé ismert. Az egyik első módszer amit használtak. És ráadásul nagyon egyszerű. Lényegében csak a megadott shellkódot betölti a memóriába.
(*(void (*)()) payload)();
7-9. cs/meterpreter/rev_tcp, cs/shellcode_inject/base64_substitution, cs/shellcode_inject/virtual
A C-s payloadoknak a C#-os megfelelői.
10. native/Hyperion
Ez a payload a Hyperion crypter-t hívja meg, ami szerintem egy zseniális technikát használ. Úgy működik hogy egy gyenge 128bites AES-el titkosítja a payload-ot, amit futás közben brute force technikával megtör.
11. native/backdoor_factory
A Backdoor Factory-t hívja meg. Segítségével egy meglévő .exe file-ba tudjuk beleinjectálni a mi kis káros kódunkat. :) Nagyon hasznos tud lenne, mert így nem fog gyanút az áldozat hogy miért nem lát semmit a megnyitott programból….
12. native/pe_scrambler
A PEScrambler programocskát hívja meg. Ami win32-es alkalmazásoknak az obszfukálására képes.
13-15:
16. python/meterpreter/rev_http
A windows/meterpreter/reverse_http-nek a python kódja, shellkód nélkül. Kompatibilis a Cobalt Strike-al.
17. python/meterpreter/rev_http_contained
Egy base64-el titkosított dll. Futás közben dekodólja majd egy wrapper-el a memóriába injektálja a meterpreter-t.
18. python/meterpreter/rev_https
Ugyanaz mint a 16-os csak nem http hanem https porton keresztül megy végbe a kommunikáció.
19. python/meterpreter/rev_https_contained
A 17-esnek a https-es megfelelője.
20. python/meterpreter/rev_tcp
A windows/meterpreter/reverse_tcp payloadnak a pythonban megírt változata!
21. python/shellcode_inject/aes_encrypt
Egy AES-el titkosított shellkód van a programban amit futás közben dekódol a progi, ezután beinjectálja a memóriába, majd futtatja.
22. python/shellcode_inject/arc_encrypt
Hasonló a 21-eshez csak nem AES-t használ hanem ARC-ot.
23. python/shellcode_inject/base64_substitution
Msfvenom-al legenerál egy shellkódot, majd base64-el titkosítja, és elmenti a payload-ban. Futás közben dekódolja, és betölti a memóriába a shellkódot.
24. python/shellcode_inject/des_encrypt
Hasonló a 21-eshez csak nem AES-t használ hanem DES-t.
25. python/shellcode_inject/flat
VirtualAlloc()-al foglalja le a payload helyét a memóriában. RtlMoveMemory() másolja be a shellkódot a memóriába, és végül a CreateThread()-el futtatja.
26. python/shellcode_inject/letter_substitution
Egy sima shellkód kell neki, aminek a hexkódját helyettesíti valami random hülyeségre. Futás közben a program visszaállítja a “random hülyeségből” az eredeti hex kódot.
Mint láthatjuk rengeteg féle technika van implementálva a programban. Használjuk őket bátran, hisz nagyon hasznosak tudnak lenni egy-egy pentestelés során! :)
Csináltam egy kis ízelítő videót a program működéséről: