14: Yfirflæði minnis Flashcards
Hlaði
Keyrsluhlaði(hámark8MB) – Fyrirstaðværarbreyturo.fl.
Kös (heap)
– Kvik úthlutun eftir þörfum
– Þegarkallaðerámalloc(),calloc(),new()
Gögn
Fyrirframúthlutuðgögn
– Víðværarbreytur,strengfastar,kyrrlegarbreytur,
Texti / sameiginleg forritasöfn
Keyranlegarvélarmálsskipanir – Óskrifanlegt(read-only)
Hlaðalöskun (stack smashing)
Skemma það sem er fyrir ofan í hlaðanum, þá crashar forritið
“yfirflæði minnis” (buffer overflow)
Þegar við förum út fyrir minnissvæðið sem er úthlutað fyrir
fylki
afhverju er yfirflæði minnis stórmál ?
Þetta er algengasta tæknilega ástæða öryggisveikleika
Algengasta útgáfa yfirflæði minnis ?
Lengd streng inntaks ekki athuguð
Árásir með hlaðalöskun
Yfirskrifa venjulegt endurkomuvistfang A með vistfangi annars falls S
Þegar Q framkvæmir ret, þá er hoppað í rangan stað
Kóðainnspýting (code injection)
- Inntaksstrengur inniheldur bætaútgáfu af keyrslukóða
- Yfirskrifa endurkomuvistfang A með vistfangi minnissvæðis B
- Þegar Q framkvæmir ret, er hoppað í árásarkóða
Varnir gegn árásum með yfirflæði minnis
Forðast yfirflæðisveikleika,
Nota stýrikerfisvarnir,
Láta þýðanda nota “kanarífugla” á hlaðanum (stack canaries)
Afhverju kanarífuglar?
Frá því að námuverkamenn fóru með kanarífugla í búrum niður í námurnar til að athuga hvort loftið væri eitrað
Forðast yfirflæðisveikleika í kóða
Nota ekki gets, nota frekar fgets. fgets takmarkar lengdina á strengnum sem við ætlum að lesa inn
strncpy í stað strcpy
Kerfisvarnir geta hjálpað, slebnar hliðranir :
Úthluta slembnu magni af minni á hlaðanum í upphafi forrits, Hliðrar hlaðavistföngum fyrir allt forritið, Gerir erfiðara fyrir tölvuþrjót að vita upphaf árásarkóða, Hlaðinn er á nýjum stað í hvert sinn sem forritið er keyrt
Kerfisvarnir geta hjálpað, Ókeyranleg minnissvæði :
Í gamla x86, var hægt að merkja minnissvæði sem annaðhvort óskrifanleg (read-only) eða skrifanleg (writeable)
Hægt að keyra öll svæði sem eru lesanleg,
x86-64 bætti við “keyrslu” (execute) heimild,
Hægt að merkja hlaða sem ókeyranlegan