2014. március 1., szombat

Veil-Evasion

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. :)  

Innen tudjuk letölteni: https://github.com/Veil-Framework/Veil-Evasion 

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:

Powershellben íródott payloadok. Bővebben a powershell nyelvről.

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: