Preljev međuspremnika: uzroci, učinkovite metode rješavanja problema i potrebna zaštita

Svi programeri svjesni su potencijalne prijetnje prekoračenja međuspremnika (oceana) u svojim programima. Postoje mnoge prijetnje povezane s njim, kako u Novom tako iu starom softveru, bez obzira na broj izvršenih zakrpa. Napadači mogu iskoristiti takvu pogrešku ubrizgavanjem koda posebno dizajniranog da uzrokuje prelijevanje početnog dijela skupa podataka, a zatim upisivanjem preostalih u memorijsku adresu uz preljev.

Podaci mogu sadržavati izvršni kod koji će napadačima omogućiti pokretanje većih, složenijih programa ili im omogućiti pristup sustavu. Pogrešku je vrlo teško pronaći i ispraviti jer se softver koda sastoji od milijuna redaka. Ispravci ovih pogrešaka prilično su složeni, a zauzvrat su i skloni pogreškama, što komplicira postupak uklanjanja.

Definicija preljeva međuspremnika

Definicija preljeva međuspremnika

Prije nego što potražite preljev, trebate znati, što je to. Kao što i samo ime govori, ove ranjivosti uključuju međuspremnike ili dodjelu memorije u jezicima koji omogućuju izravan pristup čitanju i pisanju na niskoj razini.

Kada se primjenjuju jezici asa i asa, čitanje ili pisanje takvih Distribucija ne podrazumijeva automatsku provjeru granica. S tim u vezi, ako se u određenoj aplikaciji otkrije preljev međuspremnika steka, ne postoji provjera mogućnosti stavljanja broja bajtova u dotični međuspremnik. U takvim slučajevima program može "preliti" svoj kapacitet. To uzrokuje da podaci zapisani nakon punjenja prepisuju sadržaj sljedećih adresa u stog i čitaju dodatne. Prelijevanje se može dogoditi nenamjerno zbog korisničkih pogrešaka.

Događa se da je uzrokovan zlonamjernim akterom koji šalje pažljivo izrađeni zlonamjerni ulaz u program koji ga zatim pokušava spremiti u nedovoljni međuspremnik. Ako se time otkrije preljev međuspremnika steka u određenoj aplikaciji, suvišni podaci zapisuju se u susjedni, gdje prepisuju sve dostupne podatke.

Obično sadrže povratni pokazivač funkcije koja se iskorištava-adresu na koju bi postupak trebao ići dalje. Napadač može postaviti nove vrijednosti tako da upućuju na adresu po izboru. Napadač obično postavlja nove vrijednosti kako bi označio mjesto na kojem se nalazi korisni teret. To mijenja put izvršenja procesa i trenutno prenosi kontrolu na zlonamjerni kod.

Korištenje preljeva međuspremnika omogućuje napadaču kontrolu ili prekid procesa ili promjenu njegovih unutarnjih varijabli. Ovo kršenje svrstava se u top 25 najopasnijih softverskih pogrešaka na svijetu (2009. Iako su dobro istraženi, i dalje štete popularnim programima.

Jednostavan vektor upotrebe međuspremnika

Kada radite s izvornim kodom, morate obratiti posebnu pozornost na to gdje se međuspremnici koriste i modificiraju. Posebno se ističu funkcije koje se odnose na ulaz koji pruža korisnik ili drugi vanjski izvor, jer pružaju jednostavan vektor za upotrebu kada se otkrije preljev međuspremnika steka. Na primjer, kada korisnik postavi pitanje " da " ili "ne", pametno je pohraniti korisničke podatke niza u mali ocean za niz "da", kao što je prikazano u sljedećem primjeru.

Jednostavan vektor upotrebe međuspremnika

Gledajući kod, možete vidjeti da provjera granica ne uspijeva. Ako korisnik unese "možda", tada će se program srušiti, umjesto da od njega traži odgovor, koji je zapisan u ocean, bez obzira na njegovu duljinu. U ovom primjeru, budući da je ocean jedina deklarirana varijabla, sljedeće vrijednosti na stogu bit će vrijednost povratne adrese ili mjesto u memoriji na koje će se program vratiti nakon izvršavanja funkcije Ocean.

To znači da ako korisnik unese četiri bajta podataka, što je dovoljno za prelijevanje međuspremnika naredbi klijenta, uslijedit će valjana povratna adresa koja će se promijeniti. To će uzrokovati da program napusti funkciju na drugoj točki koda nego što je prvotno zamišljeno i može dovesti do toga da se softver ponaša na opasan i nenamjeran način.

Ako je prvi korak za otkrivanje preljeva međuspremnika u izvornom kodu razumijevanje njihovog rada, drugi korak je učenje vanjskog unosa i manipulacije međuspremnikom, tada bi treći korak bio znati koje su značajke podložne ovoj ranjivosti i koje bi mogle djelovati kao "crvene zastave". Značajka ipaina izvr na je za nimanje izvan onoga što joj pruža ipaina. U stvarnosti, ova se kvaliteta proteže na cijelu obitelj povezanih mogućnosti, uključujući prijenose, prijelaze i prijelaze / prijelaze, gdje god se koristi jedna od ovih značajki ranjivosti preljeva.

Uklanjanje iz baze koda

Ako se u izvornom kodu otkrije preljev međuspremnika steka, bit će potrebno dosljedno uklanjanje iz baze. Da biste to učinili, morate biti upoznati sa sigurnim metodama rada. Najlakši način da spriječite ove ranjivosti je korištenje jezika koji ih ne dopušta. Jezik Interneta ima ove ranjivosti zahvaljujući izravnom pristupu memoriji i nedostatku strogog tipkanja objekata. Jezici koji ne dijele ove aspekte obično su neranjivi. To su A-i, A-I i .Uz druge jezike i platforme koji ne zahtijevaju posebne provjere ili promjene.

Naravno, nije uvijek moguće potpuno promijeniti jezik razvoja. U ovom se slučaju koriste sigurne metode za rad s preljevom međuspremnika naredbi. U slučaju funkcija obrade nizova, puno se raspravljalo o tome koje su metode dostupne, koje su sigurne za upotrebu, a koje treba izbjegavati. Funkcije Ina Ina kopiraju niz u međuspremnik i dodaju sadržaj jednog u drugi. Ove dvije metode pokazuju nesigurno ponašanje, jer ne provjeravaju granice ciljanog oceana, i zapisuju izvan granica ako za to ima dovoljno bajtova.

Alternativna zaštita

Jedna od često predloženih alternativa su povezane verzije koje zapisuju u maksimalnu veličinu ciljnog međuspremnika. Na prvi pogled izgleda kao savršeno rješenje. Nažalost, ove značajke imaju malu nijansu koja uzrokuje probleme. Kad se dosegne ograničenje, ako završni znak ne stane u zadnji bajt, javljaju se ozbiljni kvarovi na čitanje međuspremnika.

Alternativna zaštita

U ovom pojednostavljenom primjeru vidljiva je opasnost od nizova koji ne završavaju nulom. Kad se postavi u aipsin, završava na nuli jer ima dodatni prostor. To je najbolji scenarij. Ako su bajtovi u preljevi međuspremnika na stogu bit će u drugom znakovnom znaku ili drugom retku za ispis, funkcija ispisa Nastavite čitati dok se ne postigne završni znak tog retka.

Nedostatak je u tome što jezik na Internetu ne pruža standardnu, sigurnu alternativu tim značajkama. Ipak, postoji i pozitivna-dostupnost nekoliko implementacija za određenu platformu. AMAP pruža AMAP i AMAP koji rade na sličan način kao i AMAP funkcije, osim što skraćuju niz jedan znak ranije kako bi se oslobodili mjesto za nulti Terminator.

Slično Microsoft nudi svoje vlastite sigurne provedbe često se koriste funkcije za obradu stringova: strcpy_s, strcat_s i sprintf_s.

Poželjna je upotreba gore navedenih sigurnih alternativa. Kad to nije moguće, izvršite ručnu provjeru granica i nulti završetak prilikom obrade međuspremnika niza.

Ranjivosti kompilacije

Ranjivosti kompilacije

U slučaju da nesigurna značajka ostavlja otvorenu mogućnost prelijevanje međuspremnika za vas, tada nije sve izgubljeno. Kad se program pokrene, kompajleri često stvaraju slučajne vrijednosti poznate kao kanarinci (oceani) i stavljaju ih u stog, pa predstavljaju opasnost. Provjerom vrijednosti kanarinca u odnosu na njegovu izvornu vrijednost može se utvrditi je li došlo do prelijevanja međuspremnika. Ako je vrijednost promijenjena, program će se zatvoriti ili preći u stanje pogreške, a ne na potencijalno promijenjenu povratnu adresu.

Neki moderni operativni sustavi pružaju dodatnu zaštitu od prelijevanja međuspremnika u obliku neizvršivih stogova i randomiziranog postavljanja adresnog prostora (oceans). Neizvršivi stogovi-sprječavanje izvršavanja podataka (oceani) - označavaju stog, a u nekim slučajevima i druge strukture kao područja u kojima se kod neće izvršiti. To znači da napadač ne može ubrizgati eksploatacijski kod u stog i očekivati da će se uspješno izvršiti.

Prije nego što popravite preljev međuspremnika, raspakirajte se na računalu. Dizajniran je za zaštitu od programiranja usmjerenog na povratak kao zaobilazno rješenje za neizvršive hrpe, gdje su postojeći dijelovi koda lančani na temelju pomaka njihovih adresa.

Djeluje randomiziranjem memorijskih područja struktura tako da je teže odrediti njihove pomake. Da je ta zaštita postojala krajem 1980-ih, Morrisov crv mogao bi biti spriječen. To je zato što je djelomično funkcionirao tako što je punio međuspremnik u OCEANOVOM protokolu eksploatacijskim kodom, a zatim ga prelijevao kako bi promijenio povratnu adresu i usmjerio na ispunjeni međuspremnik.

IAS i IAS otežavaju točno određivanje adrese koju treba navesti izvršavanjem ovog memorijskog područja potpuno neradnog. Ponekad ranjivost klizi kroz pukotine otvorene za napad prelijevanja međuspremnika, unatoč tome što ima kontrole na razini razvoja, kompajlera ili operativnog sustava.

Statička analiza pokrivenosti

U situaciji prepunjenosti, postoje dva ključna zadatka. Prvo, treba definirati ranjivost i promijeniti bazu koda za rješenja problema. Drugo, osigurati zamjenu svih verzija koda ranjivosti preljeva međuspremnika. U idealnom slučaju, ovo će započeti automatskim ažuriranjem svih sustava povezanih s internetom.

Ne može se pretpostaviti da će takvo ažuriranje pružiti dovoljnu pokrivenost. Organizacije ili pojedinci mogu koristiti softver na sustavima s ograničenim pristupom internetu koji zahtijevaju ručno ažuriranje. To znači da bi se vijesti o ažuriranju trebale distribuirati svim administratorima koji mogu koristiti softver, a zakrpa bi trebala biti lako dostupna za preuzimanje. Stvaranje i distribucija zakrpa izvodi se što je moguće bliže otkrivanju ranjivosti, čime se osigurava minimiziranje vremena ranjivosti.

Korištenjem sigurnih značajki obrade međuspremnika i odgovarajućih sigurnosnih značajki kompajlera i operativni sustav moguće je stvoriti robusnu zaštitu od prelijevanja. S obzirom na ove korake, dosljedna identifikacija nedostataka presudan je korak za sprečavanje eksploatacije.

Kombiniranje linija izvornog koda u potrazi za potencijalnim prijetnjama može biti zamorno. Osim toga, uvijek postoji mogućnost da ljudske oči mogu propustiti nešto važno. Alati za statičku analizu koji se koriste za osiguranje kvalitete koda dizajnirani su posebno za otkrivanje sigurnosne ranjivosti tijekom razvoja.

Statička analiza pokrivenosti postavlja "crvene oznake" za potencijalne preljeve od oceana. Zatim se obrađuju i ispravljaju odvojeno kako ne bi ručno pretraživali bazu podataka. Ovi alati, u kombinaciji s redovitim pregledima i znanjem kako ukloniti preljeve, omogućuju prepoznavanje i rješavanje velike većine nedostataka prije nego što se softver završi.

Izvođenje napada putem interneta

Pogreške kodiranja obično su uzrok preljeva u vezi s oceanom. Uobičajene pogreške u razvoju aplikacija koje bi mogle dovesti do toga uključuju neuspjeh u dodjeli dovoljno velikih međuspremnika i nedostatak mehanizma za provjeru tih problema. Takve su pogreške posebno problematične u Ina/Ina++ jezicima koji nemaju ugrađenu zaštitu od prelijevanja i često su meta napada preljeva međuspremnika.

U nekim slučajevima napadač ubrizgava zlonamjerni kod u memoriju koja je oštećena zbog prelijevanja međuspremnika steka. U drugim slučajevima samo iskoristite prednost oštećenja susjedne memorije. Na primjer, program koji traži korisničku lozinku kako bi mu omogućio pristup sustavu. U donjem kodu, ispravna lozinka daje privilegije za ocean. Ako je lozinka netočna, program korisniku ne daje privilegije.

Program korisniku ne daje privilegije

U navedenom primjeru, program korisniku daje privilegije na internetu, čak i ako je unio netočnu lozinku. U ovom slučaju, napadač pruža ulaz koji je duži nego što međuspremnik može primiti, stvarajući preljev koji prepisuje memoriju cijelog broja. Stoga, unatoč netočnoj lozinci, vrijednost AIP-a postaje ne-nula i napadač dobiva prava AIP-a.

Napad privremenog prostora za pohranu

Međuspremnik je privremeno područje za pohranu podataka. Kada program ili sistemski proces ugošćuje više podataka nego što je izvorno dodijeljeno za pohranu, dodatni se prelijevaju. To dovodi do toga da neki od njih procure u druge oceane, oštete ili prepišu podatke.

U napadu prelijevanja, dodatni podaci sadrže posebne upute za radnje koje je namjeravao haker ili zlonamjerni korisnik, na primjer, pokreću odgovor koji oštećuje datoteke, mijenja podatke ili otkriva osobne podatke.

Napadač koristi preljevni iskorištavanje kako bi iskoristio program koji čeka unos korisnika. Postoje dvije vrste preljeva u vezi s internetom: na temelju stogova i hrpe. Na temelju hrpe teško je izvršiti i najmanje je uobičajeno, dok napadaju aplikaciju popunjavajući prostor rezerviran za program.

Stog-memorijski prostor koji se koristi za pohranu običaj ulaz. Takvo prelijevanje češće je kod napadača koji koriste aplikacije.

Moderni kompajleri obično pružaju mogućnost provjere preljeva u vrijeme sastavljanja/povezivanja, ali tijekom izvođenja prilično je teško provjeriti ovaj problem bez nekog dodatnog mehanizma zaštite za rukovanje iznimkama.

Izvođenje napada putem interneta

Mogućnosti rada programa:

  1. Ulaz: 12345678 (8 bajtova), program radi glatko.
  2. Ulaz: 123456789 (9 bajtova), pojavit će se poruka "greška segmentacije", program završava.

Ranjivost postoji zbog prelijevanja ako je unos korisnika od 8 bajtova. Za 32-bitni sustav (4 bajta) ispunjava memoriju dvostrukom riječju (32 bita). Veličina znaka je 1 bajt, pa ako se zatraži međuspremnik s 5 bajtova, sustav će dodijeliti 2 dvostruke riječi (8 bajtova). Zbog toga će, ako unesete više od 8 bajtova, biti pretrpan.

Postoje slične standardne značajke koje su tehnički manje ranjive. Na primjer, (), () I () i (). Problem s tim značajkama je, što je odgovornost za određivanje veličine međuspremnika leži na programeru, a ne na kompajleru.

Svaki programer Ina / Ina++ trebao bi znati problem prije početka kodiranja. Mnogi generirani problemi mogu se u većini slučajeva zaštititi od prelijevanja.

Opasnosti u Ainz/Ainzin++

http://blogs.grammatech.com/eliminating-the-danger-of-uninitialized-variables

Korisnici Interneta trebali bi izbjegavati primjenu opasnih značajki koje ne testiraju granice, osim ako nisu sigurni da granice neće biti prekoračene. Značajke koje treba izbjegavati u većini slučajeva kako bi se osigurala zaštita uključuju značajke. Trebali bi ih zamijeniti značajkama kao što su oceani. Treba izbjegavati upotrebu funkcije IP ako je korisnik siguran da će se pronaći završni znak IP. Obitelj scanf (): scanf (3), fscanf (3), sscanf (3), vscanf (3), vsscanf (3) i vfscanf (3) - opasno za korištenje, da ga ne koristi za slanje podataka u nizu bez kontrole maksimalne dužine, "format % " je posebno čest neuspjeh.

Službeno, ainas () nije standardna značajka ainas u klasifikaciji ainas 1990. Ovi sustavi ne štite od prelijevanja međuspremnika, oni samo izravno pozivaju na internet. Poznato je da trenutna verzija interneta radi ispravno, što znači da zapravo poštuje postavljenu granicu. Mijenja se i povratna vrijednost () .

Verzija 2 SPECIFIKACIJE Acepa (Acepa) i ACEPA STANDARD99 razlikuju se po tome što vraćaju acepa (). Neke verzije IAS-ovi ` s IAS-ovi jamče da će niz završiti u AAS-ovi, a ako je niz predug, uopće neće sadržavati AAS-ovi. Biblioteka ACE ima ace_ ACE () sa sekvencijalnom povratnom semantikom, uvijek završava s ACE i, što je najvažnije, uvijek uzima u obzir duljinu međuspremnika.

Preljev međuspremnika komunikacijskog porta

Preljev međuspremnika komunikacijskog porta

Ponekad serijski port izvještava o prenapučenosti. Ovaj problem može biti uzrokovan nekoliko čimbenika. To uključuje brzinu računala, brzinu prijenosa podataka koji se koriste, veličinu serijskog porta i veličinu uređaja koji prenosi podatke na serijski port.

Kontrola protoka pričekat će dok se u međuspremniku ne pojavi određeni broj bajtova prije nego što procesor pošalje poruku ili signal drugom uređaju da prekine prijenos. Pri većim brzinama prijenosa, serijski port će primiti nekoliko bajtova od trenutka kada dosegne razinu kontrole protoka međuspremnika i prestane prijenos instrumenta.

Ti dodatni bajtovi bit će veći ako proces visokog prioriteta kontrolira ciljni procesor u stvarnom vremenu. Budući da postupak prelijevanja međuspremnika komunikacijskog porta ima veći prioritet od prekida u vezi s prijenosom, procesor neće poduzimati ništa dok se takav ne dovrši u stvarnom vremenu.

Zadane postavke za 16-bajtne i 14-bajtne postavke su 14 bajtova, ostavljajući 2 bajta u AIP - u kada uređaj pokuša poslati poruku od izvora. Pri većim brzinama prijenosa na sporim računalima moguće je dobiti više od 4 bajta u trenutku kada serijski port zatraži procesor, šaljući signal za zaustavljanje prijenosa.

Da biste riješili problem kada se otkrije preljev međuspremnika steka u Opin-u 10, morate otvoriti Upravitelj uređaja. Zatim pronađite priključak za internet za koji se mijenjaju postavke i otvorite svojstva. Zatim kliknite karticu "Napredno", pojavit će se klizač kojim se mijenja veličina preljeva međuspremnika kako bi se omogućilo brže upravljanje protokom.

Zadana vrijednost je u većini slučajeva dovoljna. Međutim, ako dođe do pogreške u preljevu, smanjite vrijednost. To će uzrokovati da se CPU-u pošalje više prekida, usporavajući bajtove, u ocean.

Metode sigurnog razvoja

Metode sigurnog razvoja

Sigurne razvojne prakse uključuju redovito testiranje radi otkrivanja i uklanjanja prelijevanja. Najpouzdaniji način da se to izbjegne ili spriječi je upotreba automatske zaštite na razini jezika. Drugi popravak je provjera granica tijekom izvođenja, koja sprječava prelijevanje automatskim provjerom jesu li podaci zapisani u međuspremnik unutar valjanih granica.

Usluga oblaka u oblaku otkriva ranjivosti koda, kao što je prelijevanje interneta, tako da ih programeri rješavaju prije nego što se iskoriste. Jedinstvena u industriji, patentirana tehnologija za testiranje sigurnosti binarnih statičkih aplikacija (IAS), IASNI je analizira, uključujući komponente otvorenog koda i treće strane, bez potrebe za pristupom.

IASNI nadopunjuje modeliranje prijetnji i preglede koda koje provode programeri bržim i jeftinijim otkrivanjem pogrešaka i propusta u kodu putem automatizacije. Obično se pokreće rano u životnom ciklusu razvoja softvera, jer je lakše i jeftinije riješiti probleme prije nego što se krene u proizvodnu implementaciju.

Internet identificira kritične ranjivosti kao što su uvođenje interneta, skriptiranje na više mjesta (Oceanside), pogreška prekoračenja međuspremnika, neobrađena stanja pogrešaka i potencijalni čvorovi i čvorovi. Osim toga, binarna tehnologija na internetu pruža korisne informacije koje određuju prioritete na temelju ozbiljnosti i pružaju detaljne upute ispravkom.

Ranjivost prenapučenosti na internetu postoji već gotovo 3 desetljeća, ali je i dalje opterećujuća. Hakeri širom svijeta i dalje ga smatraju svojom zadanom taktikom zbog velikog broja osjetljivih internetskih aplikacija. Programeri i Programeri troše ogromne napore u borbi protiv ovog zla IAC tehnologije, smišljajući sve više i više novih načina.

Osnovna ideja potonjeg pristupa je implementacija alata za popravak koji izrađuje više kopija povratnih adresa na stogu, a zatim nasumično raspoređuje sve lokacije kopija uz broj. Svi se duplikati ažuriraju i provjeravaju paralelno, tako da svako odstupanje između njih ukazuje na mogući pokušaj napada i baca iznimku.

Članci o toj temi