Slijede razlike između dviju inačica stranice.
Starije izmjene na obje strane Starija izmjena Novija izmjena | Starija izmjena | ||
racfor_wiki:seminari2024:malware_u_pypi_ekosustavu [2024/12/28 10:04] Brlek Marko Dodan sectioning |
racfor_wiki:seminari2024:malware_u_pypi_ekosustavu [2024/12/29 19:16] (trenutno) Brlek Marko [Malware u PyPI ekosustavu] |
||
---|---|---|---|
Redak 1: | Redak 1: | ||
+ | ===== Malware u PyPI ekosustavu ===== | ||
+ | [[https:// | ||
+ | ==== Sažetak ==== | ||
+ | |||
+ | PyPI, centralni repozitorij za Python pakete, ključan je za ubrzani razvoj softvera, ali njegova otvorenost čini ga ranjivim na maliciozne pakete. Napadači koriste različite metode za distribuciju zlonamjernog koda, poput manipulacije verzijama ovisnosti, imitacije popularnih biblioteka (typosquatting) ili implementacije skrivene maliciozne funkcionalnosti. Primjeri poput incidenta s PyTorchom i lažnih paketa poput " | ||
+ | |||
+ | |||
+ | |||
==== Uvod ==== | ==== Uvod ==== | ||
Redak 14: | Redak 22: | ||
U svojoj srži, PyPI paketi su arhive, uglavnom .tar.gz ili .whl, koje možemo shvatiti slično kao .zip arhive. One u sebi sadrže Python kod, metapodatke te druge resurse potrebne za distribuciju. Kada korisnik želi instalirati neki paket, poziva naredbu "pip install ime_paketa" | U svojoj srži, PyPI paketi su arhive, uglavnom .tar.gz ili .whl, koje možemo shvatiti slično kao .zip arhive. One u sebi sadrže Python kod, metapodatke te druge resurse potrebne za distribuciju. Kada korisnik želi instalirati neki paket, poziva naredbu "pip install ime_paketa" | ||
- | Za kreiranje paketa, ukratko, potrebno je imati određenu strukturu direktorija gdje se nalazi kod koji želimo pretvoriti u paket. | + | Za kreiranje paketa, ukratko, potrebno je imati određenu strukturu direktorija gdje se nalazi kod koji želimo pretvoriti u paket (Slika 1). Primjer |
+ | |||
+ | {{racfor_wiki: | ||
+ | Slika 1. Struktura direktorija Python paketa | ||
Više o kreiranju paketa možete pronaći [[https:// | Više o kreiranju paketa možete pronaći [[https:// | ||
- | Za objavljivanje paketa na PyPI, potrebno je napraviti korisnički račun na PyPI te preuzeti API token za autentifikaciju. Za sami upload, preporuča se koristiti alat twine iz komandne linije kojem predajemo putanju do arhiva paketa te api ključ. Nakon uspješne objave, paket postaje dostupan drugim korisnicima putem PyPI repozitorija. | + | Za objavljivanje paketa na PyPI, potrebno je napraviti korisnički račun na PyPI te preuzeti API token za autentifikaciju. Za sami upload, preporuča se koristiti alat twine iz komandne linije kojem predajemo putanju do arhiva paketa te API ključ. Nakon uspješne objave, paket postaje dostupan drugim korisnicima putem PyPI repozitorija. |
Redak 25: | Redak 36: | ||
Kako bismo bolje razumjeli što maliciozni PyPI paketi mogu učiniti, osvrnut ćemo se na jedan nedavno otkriveni primjer. | Kako bismo bolje razumjeli što maliciozni PyPI paketi mogu učiniti, osvrnut ćemo se na jedan nedavno otkriveni primjer. | ||
- | U srpnju 2024. FortiGuard Labs je otkrio PyPI paket koji je pri svojoj inicijalizaciji preuzimao datoteke sa malicioznog URL-a (slika), jedna od kojih je bila izvršna datoteka koja se automatski pokušavala pokrenuti. Forenzičkom analizom otkriveno je da je izvršna datoteka zapakirana koristeći PyInstaller te su reverznim inženjerstvom došli do izvornog koda programa. U izvornom kodu su se nalazile tri sumnjive datoteke: " | + | U srpnju 2024. FortiGuard Labs je otkrio PyPI paket koji je pri svojoj inicijalizaciji preuzimao datoteke sa malicioznog URL-a (Slika 2), jedna od kojih je bila izvršna datoteka koja se automatski pokušavala pokrenuti. Forenzičkom analizom otkriveno je da je izvršna datoteka zapakirana koristeći PyInstaller te su reverznim inženjerstvom došli do izvornog koda programa. |
+ | |||
+ | {{https:// | ||
+ | Slika 2. Preuzimanje datoteka pri inicijalizaciji paketa | ||
+ | |||
+ | U izvornom kodu su se nalazile tri sumnjive datoteke: "**Discord_token_grabber.py**", "**get_cookies.py**" i "**password_grabber.py**". Cilj svakog programa je bio ukrasti određene osjetljive informacije s korisnikovog računala te ih poslati na udaljeni poslužitelj. Primjerice, "**Discord_token_grabber.py**" je po " | ||
+ | |||
+ | {{https:// | ||
+ | Slika 3. Dohvaćanje osjetljivih informacija preko Discord API-ja | ||
+ | |||
+ | Dohvaćene informacije se zatim šalju na maliciozni poslužitelj koji ih sprema. "**Get_cookies.py**" i "**password_grabber.py**" su se fokusirali na krađu kolačića i spremljenih lozinki iz lokalnih preglednika. | ||
Ovaj primjer ističe jedan od najočitijih oblika malicioznih aktivnosti – izvršavanje zlonamjernog koda odmah pri inicijalizaciji paketa. Međutim, ovo nije jedini način na koji maliciozni paketi mogu djelovati. | Ovaj primjer ističe jedan od najočitijih oblika malicioznih aktivnosti – izvršavanje zlonamjernog koda odmah pri inicijalizaciji paketa. Međutim, ovo nije jedini način na koji maliciozni paketi mogu djelovati. | ||
Redak 39: | Redak 60: | ||
Maliciozni paketi često koriste kreativne tehnike kako bi ostali neprimijećeni i proširili se na što veći broj korisnika. Evo nekoliko primjera takvih strategija: | Maliciozni paketi često koriste kreativne tehnike kako bi ostali neprimijećeni i proširili se na što veći broj korisnika. Evo nekoliko primjera takvih strategija: | ||
- | Manipulacijama verzijama ovisnosti | + | **Manipulacijama verzijama ovisnosti** |
U prosincu 2022., PyTorch, popularan radni okvir za strojno učenje, je objavio da je u sebi imao uključenu malicioznu ovisnost. Način na koji se maliciozni paket uvukao u ovisnosti je tako što je zbunio PyPI jer je paket imao isto ime kao i interni, neobjavljeni, | U prosincu 2022., PyTorch, popularan radni okvir za strojno učenje, je objavio da je u sebi imao uključenu malicioznu ovisnost. Način na koji se maliciozni paket uvukao u ovisnosti je tako što je zbunio PyPI jer je paket imao isto ime kao i interni, neobjavljeni, | ||
- | Imitacija legitimnih paketa | + | **Imitacija legitimnih paketa** |
Jedna od najčešćih taktika je stvaranje paketa s imenom koje nalikuje nekom popularnom i legitimnom paketu. Primjerice, napadač može paket umjesto " | Jedna od najčešćih taktika je stvaranje paketa s imenom koje nalikuje nekom popularnom i legitimnom paketu. Primjerice, napadač može paket umjesto " | ||
- | Maskiranje u korisne biblioteke s malicioznim skrivenim funkcionalnostima | + | **Maskiranje u korisne biblioteke s malicioznim skrivenim funkcionalnostima** |
Maliciozni paketi mogu se predstaviti kao korisne biblioteke koje zaista obavljaju određeni zadatak, dok istovremeno izvode i zlonamjerne aktivnosti. Na primjer, napadač može kreirati biblioteku koja olakšava rad s bazama podataka, ali u pozadini presreće i šalje podatke na udaljeni poslužitelj prije nego što ih pohrani u bazu korisnika. Ovo čini paket naizgled legitimnim i teže ga je otkriti. | Maliciozni paketi mogu se predstaviti kao korisne biblioteke koje zaista obavljaju određeni zadatak, dok istovremeno izvode i zlonamjerne aktivnosti. Na primjer, napadač može kreirati biblioteku koja olakšava rad s bazama podataka, ali u pozadini presreće i šalje podatke na udaljeni poslužitelj prije nego što ih pohrani u bazu korisnika. Ovo čini paket naizgled legitimnim i teže ga je otkriti. | ||
Redak 53: | Redak 77: | ||
==== Detekcija malicioznih paketa ==== | ==== Detekcija malicioznih paketa ==== | ||
- | Zbog ranjivog ekosustava, određene tvrtke specijalizirane za kibernetičku sigurnost kontinuirano skeniraju PyPI repozitorij i traže maliciozne pakete. | + | Zbog ranjivog ekosustava, određene tvrtke specijalizirane za kibernetičku sigurnost kontinuirano skeniraju PyPI repozitorij i traže maliciozne pakete. |
- | < | + | {{https:// |
+ | Slika 4. Primjer GuardDog upozorenja | ||
Te značajke su: | Te značajke su: | ||
- | Prazan opis paketa: | + | **Prazan opis paketa**: Legitimni paketi gotovo uvijek uključuju opise kako bi pojasnili svoju svrhu, dok maliciozni često ostavljaju opis prazan. |
- | Jedna python datoteka: Paketi koji sadrže samo jednu Python datoteku mogu biti sumnjivi jer većina legitimnih paketa ima složeniju strukturu. | + | |
- | Prepisivanje komandi: Ako paket prepisuje ponašanje prilikom izvršenja komande install, to može ukazivati na potencijalnu malicioznu namjeru. | + | **Jedna python datoteka**: Paketi koji sadrže samo jednu Python datoteku mogu biti sumnjivi jer većina legitimnih paketa ima složeniju strukturu. |
- | Izvršavanje sustavnih komandi: Paketi koji pozivaju komande operacijskog sustava izuzetno su sumnjivi jer to omogućava pokretanje zlonamjernog koda. | + | |
+ | **Prepisivanje komandi**: Ako paket prepisuje ponašanje prilikom izvršenja komande install, to može ukazivati na potencijalnu malicioznu namjeru. | ||
+ | |||
+ | **Izvršavanje sustavnih komandi**: Paketi koji pozivaju komande operacijskog sustava izuzetno su sumnjivi jer to omogućava pokretanje zlonamjernog koda. | ||
No, ove značajke nisu dovoljne da bi mogli sa sigurnošću reći da je paket maliciozan, već nam samo kažu da moramo obaviti detaljniju analizu. | No, ove značajke nisu dovoljne da bi mogli sa sigurnošću reći da je paket maliciozan, već nam samo kažu da moramo obaviti detaljniju analizu. | ||
- | Koraci detaljnije analize | ||
- | 1. Pregled datoteke setup.py | ||
- | Detaljnija analiza bi trebala započeti tako da analiziramo " | + | Koraci detaljnije analize: |
+ | |||
+ | **1. Pregled datoteke setup.py** | ||
+ | |||
+ | Detaljnija analiza bi trebala započeti tako da analiziramo " | ||
- | < | + | {{racfor_wiki: |
+ | Slika 5. Prepisivanje instalacijske komande paketa | ||
- | 2. Analiza izvornog koda | + | **2. Analiza izvornog koda** |
Nakon pregleda konfiguracijskih datoteka, potrebno je proučiti izvorni kod paketa kako bi se identificirale sumnjive funkcije, hardkodirani URL-ovi, ili druge neuobičajene aktivnosti. | Nakon pregleda konfiguracijskih datoteka, potrebno je proučiti izvorni kod paketa kako bi se identificirale sumnjive funkcije, hardkodirani URL-ovi, ili druge neuobičajene aktivnosti. | ||
- | 3. Testiranje u sandbox okruženju | + | **3. Testiranje u sandbox okruženju** |
Preuzimanje i pokretanje paketa u izoliranom sandbox okruženju omogućuje sigurno promatranje ponašanja paketa. Ovo uključuje praćenje mrežnih aktivnosti, pokrenutih procesa i promjena na datotečnom sustavu. | Preuzimanje i pokretanje paketa u izoliranom sandbox okruženju omogućuje sigurno promatranje ponašanja paketa. Ovo uključuje praćenje mrežnih aktivnosti, pokrenutih procesa i promjena na datotečnom sustavu. | ||
- | 4. Prijava malicioznih paketa | + | **4. Prijava malicioznih paketa** |
Ako analiza potvrdi da je paket maliciozan, potrebno je obavijestiti PyPI tim. Oni će poduzeti potrebne korake kako bi uklonili paket iz repozitorija i spriječili daljnju štetu. | Ako analiza potvrdi da je paket maliciozan, potrebno je obavijestiti PyPI tim. Oni će poduzeti potrebne korake kako bi uklonili paket iz repozitorija i spriječili daljnju štetu. | ||
Redak 99: | Redak 130: | ||
==== Literatura ==== | ==== Literatura ==== | ||
- | https:// | + | [1] [[https:// |
- | https:// | + | |
- | https:// | + | [2] [[https:// |
- | https:// | + | |
- | https:// | + | [3] [[https:// |
+ | |||
+ | [4] [[https:// | ||
+ | |||
+ | [5] [[https:// | ||