Hakeri mogu preuzeti kontrolu nad sustavom povećanjem kapaciteta pohrane usluge. Dakle, kako hakeri izvode takve napade prekoračenja međuspremnika?
Kako hakeri napadaju sustave pomoću virusa i zlonamjernog softvera? Ponekad to može biti ransomware; ponekad to može biti napad koji troši vaše sistemske zahtjeve. Prelijevanje međuspremnika jedna je od ovih metoda napada — ali što je zapravo? Kako funkcioniraju ti napadi?
Što je buffer overflow?
Dakle, što su zapravo međuspremnik i stog? Međuspremnik je polje u kojem neki ulazni podaci koje dajete računalu čekaju prije nego što dospiju u memoriju. Pozivanje podataka iz memorije je operacija koja zamara sustav. Dakle, kada ima dovoljno prostora u međuspremniku, pozivate podatke izravno odavde. To znači poboljšanje performansi vašeg uređaja. Naravno, kada je prostor dostupan za međuspremnik pun, postaje potrebno zapisati ga u memoriju.
Stog je u biti podatkovna struktura u kojoj se odvijaju operacije push (dodavanje) i pop (uklanjanje) podataka. Koncepti međuspremnika i stoga prilično su slični; međutim, međuspremnik radi kao stog koji privremeno sprema dolazne podatke.
Prelijevanje međuspremnika može biti izazovna tema, ali kao što ime sugerira, događa se kada postoji preopterećenost podacima. Na primjer, želite se prijaviti u sustav. Programeri mogu dodijeliti 250 bajtova prostora za korisničko ime. Ako unesete 300 bajtova podataka, međuspremnik se prelijeva. Ovo prekoračenje može utjecati na druge podatke u memoriji, uzrokujući štetu.
Ovo je super za hakere. Cyberkriminalci mogu kombinirati ovaj nered s različitim vektorima napada, na primjer, da hakiraju sustav i prijave se kao administrator.
Da biste razumjeli prekoračenje međuspremnika, glavne teme koje trebate prepoznati bit će Unutarnja arhitektura CPU-a, memorijski registri i kako memorija obrađuje podatke. Evo nekoliko pojmova o CPU-u koje trebate znati.
Kod sklopa |
Programski jezik niske razine, tj. blizak strojnom jeziku. |
Pufer |
Fiksna veličina dodijeljeni memorijski prostor. |
Kod bajta |
Srednjejezični oblik koda koji se može kompilirati napisan na jeziku visoke razine. |
Sastavljač |
Program koji pretvara programski jezik u strojni kod. |
Hrpa |
Dinamički, promjenjivi memorijski prostor. |
Osnove teorije pamćenja
Bez razumijevanja teorije memorije, u praksi može biti teško riješiti probleme s prekoračenjem međuspremnika. Možete to zamisliti kao da pokušavate sagraditi kuću, a da ne znate kako napraviti zid.
Zamislite da želite pokrenuti prekoračenje međuspremnika s hakerske točke gledišta. Za to morate manipulirati memorijom i natjerati CPU da izvrši vaš kod. Da ste netko sa zlonamjernim namjerama, vaš bi cilj ovdje bio preopteretiti memoriju i također manipulirati susjednim memorijskim područjima.
Ali prije svega, trebate se usredotočiti na koncepte hrpe, hrpe i segmenta teksta.
Dok se stog stvara, memorija koristi visoke memorijske adrese. Visoke memorijske adrese znače prošireno memorijsko područje. Tada se vrijednosti adrese počinju smanjivati. Memorijski stog koristi metodu zvanu LIFO (Last In, First Out) tijekom korištenja memorije. Varijable u memoriji steka valjane su samo unutar opsega u kojem su definirane. Ako su izvan ovog opsega, pojavit će se pogreška.
Stack memorija, s druge strane, radi dinamički i ne mora se pokretati na visokim adresama. Ne postoji postavljeno ograničenje hrpe memorije; sva ograničenja postavlja operativni sustav. Moguće je dinamički mijenjati memoriju hrpe i ta se ograničenja mogu mijenjati prema potrebama korisnika tijekom korištenja hrpe. Ograničenja heap memorije ovise o čimbenicima određenim operativnim sustavom i hardverom. Drugim riječima, nudi dinamičnu upotrebu unutar ovih ograničenja.
Tekstualni segment sadrži programski kod, a podatkovni segmenti sadrže globalne podatke. Visoke adrese udio stack i heap memorija između sebe. Sustav dodjeljuje obje memorije tijekom izvođenja.
Da biste bolje razumjeli prekoračenje međuspremnika, trebali biste ispitati registre podataka opće namjene koje arhitektura vašeg računala koristi za pohranu podataka. Umjesto da analizirate svaki zapis pojedinačno, usredotočite se na bitno.
- ESP (Extended Stack Pointer): Ovaj registar sadrži adresu na vrhu steka.
- EBP (pokazivač proširene baze): Ovo drži osnovni pokazivač.
- EIP (Extended Instruction Pointer): I ovaj registar sadrži adresu sljedeće instrukcije koju treba izvršiti.
Ovi tehnički izrazi mogu zvučati pomalo zbunjujuće, ali zamislite ih sve kao male particije u memoriji.
Kako funkcioniraju napadi prekoračenja međuspremnika?
Kada dodate nove podatke u bilo koji stog, ti će podaci biti umetnuti na vrhu. Svi novi podaci tada se pomiču prema dolje. ESP je na vrhu niza. Dakle, u ovom slučaju ESP ide na nižu memorijsku adresu. Zamislite da gore dodani podaci guraju ESP prema dolje.
Kada se program pokrene, sustav stvara okvir stoga s lokalnim varijablama. Glavna svrha napada prekoračenjem međuspremnika je dobivanje pristupa EIP-u ili povratnoj adresi. Haker s pristupom ovoj adresi može joj narediti da ukaže na bilo koji maliciozni kod koji želi, što će onda utjecati na širi sustav.
Sa svakim novim bitom podataka, stog raste prema EBP-u. Pravo pitanje ovdje je, ako unesemo previše podataka, možemo li pogurati EBP prema EIP-u? Na taj se način podaci ili kod koji želite nalaze na EIP-u i možete vidjeti željene rezultate. Ostaje samo pokrenuti ga. Kada pokrenete program, on pokazuje na vaš EIP kod i počinje s izvršenjem. Kao rezultat toga, ako ste bili haker, izveli biste svoj prvi napad prekoračenja međuspremnika.
Da pogledamo primjer iz drugog kuta, možete razmotriti tekućine različitih gustoća, nazvane ESP, EBP i EIP, u posudi. Zamislite da se ESP nalazi na vrhu spremnika jer je njegova gustoća manja. Baš kao maslinovo ulje i voda, ne smiju se miješati. Zlonamjerni kod je, dakle, druga tekućina - kada ga dodate u spremnik, on poremeti ovu ravnotežu, istisne nešto tekućine i pomiješa se s EIP-om. To će ukazivati na prekoračenje međuspremnika.
Kako se zaštititi od napada prekoračenja međuspremnika
Dakle, kako spriječiti da se ovo dogodi?
Prvo, važno je usvojiti dobru praksu kodiranja tijekom cijelog procesa razvoja softvera kako bi se smanjile sigurnosne ranjivosti. Pažljivo napisan kod može smanjiti vjerojatnost prekoračenja međuspremnika.
Drugi korak je korištenje obrambenih mehanizama koji omogućuju praćenje memorijskih regija, provjeru ograničenja međuspremnika i otkrivanje napada. Konačno, trebate redovito ažurirati sustave i primjenjivati zakrpe. Ažuriranja koja ispravljaju ranjivosti napadačima otežavaju iskorištavanje poznatih ranjivosti. Također, korištenje obrambenih alata kao što su softver i vatrozid pruža dodatni sloj sigurnosti.
Poduzmite mjere protiv prelijevanja međuspremnika
Napadi prekoračenja međuspremnika predstavljaju značajnu prijetnju vašoj kibernetičkoj sigurnosti i poduzimanje mjera protiv njih prirodno je važno. Srećom, te je napade moguće blokirati i ojačati obrambene mehanizme. Mnoge dobre sigurnosne prakse, kao što je ažuriranje softvera za popravke zakrpa, pomažu u zaštiti od takvih napada, kao i drugih ranjivosti.