Starije izmjene na obje strane
Starija izmjena
Novija izmjena
|
Starija izmjena
|
racfor_wiki:blockchain:rowhammer_napad [2020/01/03 15:05] bnovkovic [Sources] |
racfor_wiki:blockchain:rowhammer_napad [2024/12/05 12:24] (trenutno) |
Moderne memorijske module dijelimo u (većinom) dvije skupine: **DRAM ** (//dynamic// RAM) i **SRAM ** (//static// RAM). Obzirom da //Rowhammer// napad iskorištava mane u **DRAM** modulima, u nastavku neće biti dan opis **SRAM** modula. | Moderne memorijske module dijelimo u (većinom) dvije skupine: **DRAM ** (//dynamic// RAM) i **SRAM ** (//static// RAM). Obzirom da //Rowhammer// napad iskorištava mane u **DRAM** modulima, u nastavku neće biti dan opis **SRAM** modula. |
| |
Osnovna komponenta svakog DRAM memorijskog modula jest memorijska ćelija. Njena izvedba je vrlo jednostavna i sastoji se od jednog tranzistora i jednog kondenzatora. Ćelija pohranjuje jedan bit informacije pomoću naboja pohranjenog u kondenzatoru. VIše ćelija povezano je na dvije iste linije, //word line //koji služi za pristup pojedinom nizu ćelija i //digit line //koji služi dohvaćanju sadžaja pojedinog niza ćelija. Kada se na //word line //dovede napon tranzistor u ćeliji propušta naboj iz kondenzatora na //digit line//, čime se na toj liniji postavlja vrijednost koja je bila u ćeliji. Upisivanje podataka u ćeliju ide obrnutim redoslijedom, potrebno je dovesti željenu vrijednost na //digit line// i potom dovesti napon na //word line// i održavati ga dovoljno dugo kako bi se kondenzator unutar ćelije napunio ili ispraznio. | Osnovna komponenta svakog DRAM memorijskog modula jest memorijska ćelija. Njena izvedba je vrlo jednostavna i sastoji se od jednog tranzistora i jednog kondenzatora. Ćelija pohranjuje jedan bit informacije pomoću naboja pohranjenog u kondenzatoru. Više ćelija povezano je na dvije iste linije, //word line //koji služi za pristup pojedinom nizu ćelija i //digit line //koji služi dohvaćanju sadržaja pojedinog niza ćelija. Kada se na //word line //dovede napon tranzistor u ćeliji propušta naboj iz kondenzatora na //digit line//, čime se na toj liniji postavlja vrijednost koja je bila u ćeliji. Upisivanje podataka u ćeliju ide obrnutim redoslijedom, potrebno je dovesti željenu vrijednost na //digit line// i potom dovesti napon na //word line// i održavati ga dovoljno dugo kako bi se kondenzator unutar ćelije napunio ili ispraznio. |
| |
{{:racfor_wiki:blockchain:dramcell.png?320x320|Struktura DRAM ćelije}} | {{:racfor_wiki:blockchain:dramcell.png?320x320|Struktura DRAM ćelije}} |
| |
Važno je naglasiti da naboj pohranjen u kondenzatoru isčezava kroz određeno vrijeme. Ta činjenica uzrokuje određene probleme pri implementaciji takvih sklopova. Zbog potrebe za velikim memorijskim kapacitetima, kondenzatori u današnjim modulima moraju biti jako maleni što dodatno pospješuje probleme uzrokovane isčezavanjem naboja iz kondenzatora. Zbog male količine naboja pohranjene u ćelijama potrebno je na izlaz //digit line//-a dodati pojačalo koje će moći razlikovati vrijednosti 0 i 1 iz malih ulaznih napona.\\ | Važno je naglasiti da naboj pohranjen u kondenzatoru iščezava kroz određeno vrijeme. Ta činjenica uzrokuje određene probleme pri implementaciji takvih sklopova. Zbog potrebe za velikim memorijskim kapacitetima, kondenzatori u današnjim modulima moraju biti jako maleni što dodatno pospješuje probleme uzrokovane iščezavanjem naboja iz kondenzatora. Zbog male količine naboja pohranjene u ćelijama potrebno je na izlaz //digit line//-a dodati pojačalo koje će moći razlikovati vrijednosti 0 i 1 iz malih ulaznih napona.\\ |
Nadalje, brzina čitanja i pisanja u ćelije ograničena je brzinom punjenja i pražnjenja kondenzatora što ima velike posljedice za performanse **DRAM** modula. | Nadalje, brzina čitanja i pisanja u ćelije ograničena je brzinom punjenja i pražnjenja kondenzatora što ima velike posljedice za performanse **DRAM** modula. |
| |
{{:racfor_wiki:blockchain:cap_charge.png?400x235|Graf nabijanja i pražnjenja kondenzatora}} | {{:racfor_wiki:blockchain:cap_charge.png?400x235|Graf nabijanja i pražnjenja kondenzatora}} |
| |
Najčešća organizacija **DRAM**-a jest grupiranje više nizova (odnosno redova) ćelija u polje odnosno tzv. //bank. //Međutim, takva polja se rijetko upotrebljavaju samostalno obzirom na njihov malen kapacitet te se tako više polja grupira u tzv. //rank. //Upravljanje stanjem memorije prepuštenoj je memorijskom kontroleru, sklopu koji se tipično nalazi unutar procesora. Standard **DDR**, danas najzastupljeniji, propisuje nekoliko vrsta naredbi koje memorijski kontroler može koristiti kako bi upravljao **DRAM** modulom od kojih su najvažnije one za čitanje, pisanje i osvježavanje ćelija. Dodatno, standard garantira da će sadržaj memorije ostati konzistentan u periodu od barem 64 milisekunde. Tijekom tog perioda sve ćelije u svim poljima moraju biti osvježene. | Najčešća organizacija **DRAM**-a jest grupiranje više nizova (odnosno redova) ćelija u polje odnosno tzv. //bank. //Međutim, takva polja se rijetko upotrebljavaju samostalno s obzirom na njihov malen kapacitet te se tako više polja grupira u tzv. //rank. //Upravljanje stanjem memorije prepuštenoj je memorijskom kontroleru, sklopu koji se tipično nalazi unutar procesora. Standard **DDR**, danas najzastupljeniji, propisuje nekoliko vrsta naredbi koje memorijski kontroler može koristiti kako bi upravljao **DRAM** modulom od kojih su najvažnije one za čitanje, pisanje i osvježavanje ćelija. Dodatno, standard garantira da će sadržaj memorije ostati konzistentan u periodu od barem 64 milisekunde. Tijekom tog perioda sve ćelije u svim poljima moraju biti osvježene. |
| |
{{:racfor_wiki:blockchain:dramarray.png?400x400|Polje DRAM ćelija}} | {{:racfor_wiki:blockchain:dramarray.png?400x400|Polje DRAM ćelija}} |
| |
Pristupanje sadržaju //rank//-a se odvija u tri koraka:\\ | Pristupanje sadržaju //rank//-a se odvija u tri koraka:\\ |
^DRAM nareba^Opis| | ^DRAM naredba^Opis| |
|ACTIVATE|Podiže napon na //word line//-u željene memorijske lokacije| | |ACTIVATE|Podiže napon na //word line//-u željene memorijske lokacije| |
|READ|Isčitava vrijednost pojedinog stupca| | |READ|Iščitava vrijednost pojedinog stupca| |
|PRECHARGE|Osvježava sadržaj ćelije sa prethodno pročitanom vrijednošću| | |PRECHARGE|Osvježava sadržaj ćelije s prethodno pročitanom vrijednošću| |
| |
\\ | \\ |
|jmp code1a|Preusmjerava tok izvođenja programa nazad na prvu naredbu u tablici| | |jmp code1a|Preusmjerava tok izvođenja programa nazad na prvu naredbu u tablici| |
| |
Adrese **X** i **Y **posebno su odabrane da odgovaraju nizovima ćelija unutar istog //bank//-a kako bi memorijski kontroler morao ispoštovati proceduru čitanja i "zatvaranja" niza ćelija. Nakon pokretanja navedenog programa kroz više milijuna iteracija, autori su primjetili veliku količinu ćelija čiji je sadržaj promijenjen. Kako bi produbili razumijevanje o ovoj vrsti napada, autori su testirali 129 **DRAM **modula od tri neimenovana proivođača. Testiranja su ispitivala učestalost promjene sadržaja ćelija u ovisnosti o tri parametra: | Adrese **X** i **Y **posebno su odabrane da odgovaraju nizovima ćelija unutar istog //bank//-a kako bi memorijski kontroler morao ispoštovati proceduru čitanja i "zatvaranja" niza ćelija. Nakon pokretanja navedenog programa kroz više milijuna iteracija, autori su primijetili veliku količinu ćelija čiji je sadržaj promijenjen. Kako bi produbili razumijevanje o ovoj vrsti napada, autori su testirali 129 **DRAM **modula od tri neimenovana proizvođača. Testiranja su ispitivala učestalost promjene sadržaja ćelija u ovisnosti o tri parametra: |
| |
- Aktivacijski interval - vrijeme čekanja između ponovnog adresiranja niza ćelija | - Aktivacijski interval - vrijeme čekanja između ponovnog adresiranja niza ćelija |
- Uzorak podataka - inicijalni sadržaj ćelija prije nego što se test pokrene | - Uzorak podataka - inicijalni sadržaj ćelija prije nego što se test pokrene |
| |
Utvrđeno je da broj uočenih pogrešaka pada sa rastom aktivacijskog intervala, a raste sa povećanjem intervala osvježavanja. \\ Autori navode da na svakih 10^9 ćelija otprilike 10^5 ćelija promijene sadržaj tokom provođenja testova te da je otprilike 70% testiranih ćelija promijenilo sadržaj prilikom svih provođenja testova. | Utvrđeno je da broj uočenih pogrešaka pada s rastom aktivacijskog intervala, a raste s povećanjem intervala osvježavanja. \\ Autori navode da na svakih 10^9 ćelija otprilike 10^5 ćelija promijene sadržaj tijekom provođenja testova te da je otprilike 70% testiranih ćelija promijenilo sadržaj prilikom svih provođenja testova. |
| |
\\ | \\ |
===== Obrana od napada Rowhammer ===== | ===== Obrana od napada Rowhammer ===== |
| |
Napad Rowhammer predstavlja veliku opasnost zbog činjenice da se može izvršavati neprimjećeno i pomoću neprivilegiranog korisničkog računa. Zbog velike raširenosti **x86** arhitekture i sve većih **DRAM** modula broj korisnika koji su ranjivi na ovaj napad drastično raste. | Napad Rowhammer predstavlja veliku opasnost zbog činjenice da se može izvršavati neprimijećeno i pomoću neprivilegiranog korisničkog računa. Zbog velike raširenosti **x86** arhitekture i sve većih **DRAM** modula broj korisnika koji su ranjivi na ovaj napad drastično raste. |
| |
**ECC** (//Error-Correcting Code//) memorija nameće se kao potencijalno riješenje problema obrane. **ECC** **DRAM** moduli opremljeni su sa dodatnim memorijskim čipovima kako bi mogli ispravljati jednostruke i detektirati dvostruke pogreške unutar jedne memorijske "riječi". Međutim, napad //Rowhammer // često izaziva više pogrešaka unutar jedne riječi čime ovakva vrsta zaštite postaje beskorisna. | **ECC** (//Error-Correcting Code//) memorija nameće se kao potencijalno rješenje problema obrane. **ECC** **DRAM** moduli opremljeni su s dodatnim memorijskim čipovima kako bi mogli ispravljati jednostruke i detektirati dvostruke pogreške unutar jedne memorijske "riječi". Međutim, napad //Rowhammer // često izaziva više pogrešaka unutar jedne riječi čime ovakva vrsta zaštite postaje beskorisna. |
| |
U radu .. autori navode nekoliko potencijalnih riješenja koja su vezana uz parametre rada **DRAM** modula. Smanjivanje intervala osvježavanja uklonilo bi veliku većinu pogrešaka ali bi uvelike povećalo potrošnju energije i smanjilo performanse modula. Također bi bilo moguće provesti otkrivanje ćelija koje uzrokuju većinu pogrešaka i mapirati njihove adrese na druge, rezervne ćelije. Taj proces može provesti proizvođač ili krajnji korisnik. Međutim, dugotrajnost takvog procesa spriječava bilo kakvu praktičnu primjenu. | U radu u kojem je prvi put objavljen napad //Rowhammer// autori navode nekoliko potencijalnih rješenja koja su vezana uz parametre rada **DRAM** modula. Smanjivanje intervala osvježavanja uklonilo bi veliku većinu pogrešaka ali bi uvelike povećalo potrošnju energije i smanjilo performanse modula. Također bi bilo moguće provesti otkrivanje ćelija koje uzrokuju većinu pogrešaka i mapirati njihove adrese na druge, rezervne ćelije. Taj proces može provesti proizvođač ili krajnji korisnik. Međutim, dugotrajnost takvog procesa sprječava bilo kakvu praktičnu primjenu. |
| |
Kao najbolje rješenje autori predlažu novu tehniku, **PARA** (eng. //Probabilistic Adjacent Row Activation//). Tehnika se zasniva na probabilističkom osvježavanju susjednih nizova ćelija prilikom svakog pristupa nekom od nizova ćelija. Prilikom svakog pristupa nizu ćelija se uz neku malu vjerojatnost //p //osvježava sadržaj susjednog niza ćelija. Tako bi prilikom opetovanog pristupanja nizu ćelija vjerojatnost osvježavanja susjednih nizova ćelija rasla. Prednost ove tehnike je da ne zahtijeva nikakvo posebno sklopovolje za praćenje stanja ćelija već je dovoljno napraviti male izmjene unutar memorijskog kontrolera. | Kao najbolje rješenje autori predlažu novu tehniku, **PARA** (eng. //Probabilistic Adjacent Row Activation//). Tehnika se zasniva na probabilističkom osvježavanju susjednih nizova ćelija prilikom svakog pristupa nekom od nizova ćelija. Prilikom svakog pristupa nizu ćelija se uz neku malu vjerojatnost //p //osvježava sadržaj susjednog niza ćelija. Tako bi prilikom opetovanog pristupanja nizu ćelija vjerojatnost osvježavanja susjednih nizova ćelija rasla. Prednost ove tehnike je da ne zahtijeva nikakvo posebno sklopovlje za praćenje stanja ćelija već je dovoljno napraviti male izmjene unutar memorijskog kontrolera. |
| |
| |
===== Zaključak ===== | ===== Zaključak ===== |
| |
Napad //Rowhammer// ozbiljna je prijetnja velikom broju uređaja koja je pokrenula lavinu nove vrste napada koje se temlje na uzrokovanju neželjenih promjena stanja ćelija. Iako postoje tehnike obrane od takvih napada, one su često beskorisne ili produljuju vrijeme napada. Daljnjim proučavanjem raznih platformi iz perspektive ovakvih napada doći će do još više napada temeljenih na napadu //Rowhammer//. | Napad //Rowhammer// ozbiljna je prijetnja velikom broju uređaja koja je pokrenula lavinu nove vrste napada koje se temelje na uzrokovanju neželjenih promjena stanja ćelija. Iako postoje tehnike obrane od takvih napada, one su često beskorisne ili produljuju vrijeme napada. Daljnjim proučavanjem raznih platformi iz perspektive ovakvih napada doći će do još više napada temeljenih na napadu //Rowhammer//. |
===== Izvori ===== | |
| |
===== Sources ===== | |
| ===== Izvori ===== |
| |
[1] [[https://users.ece.cmu.edu/~yoonguk/papers/kim-isca14.pdf|Y. Kim et al., "Flipping bits in memory without accessing them: An experimental study of DRAM disturbance errors," 2014 ACM/IEEE 41st International Symposium on Computer Architecture (ISCA), Minneapolis, MN, 2014, pp. 361-372.]] | [1] [[https://users.ece.cmu.edu/~yoonguk/papers/kim-isca14.pdf|Y. Kim et al., "Flipping bits in memory without accessing them: An experimental study of DRAM disturbance errors," 2014 ACM/IEEE 41st International Symposium on Computer Architecture (ISCA), Minneapolis, MN, 2014, pp. 361-372.]] |
| |
[2] [[http://www.google.com/books?id=duWx8fxkkk0C&printsec=frontcover#v=onepage&q&f=false|Mayer, Richard E. The Cambridge handbook of multimedia learning. Cambridge University Press, 2005.]] | [2] [[https://people.freebsd.org/~lstewart/articles/cpumemory.pdf|Drepper, Ulrich. (2007). What Every Programmer Should Know About Memory. ]] |
| |
| [3] [[https://download.vusec.net/papers/throwhammer_atc18.pdf|Throwhammer: Rowhammer Attacks over the Network and Defenses. Tatar, A.; Konoth, R. K.; Athanasopoulos, E.; Giuffrida, C.; Bos, H.; and Razavi, K. In USENIX ATC, July 2018.]] |
| |
| [4] [[https://vvdveen.com/publications/drammer.pdf|Drammer: Deterministic Rowhammer Attacks on Mobile Platforms. van der Veen, V.; Fratantonio, Y.; Lindorfer, M.; Gruss, D.; Maurice, C.; Vigna, G.; Bos, H.; Razavi, K.; and Giuffrida, C. In CCS, October 2016. ]] |
| |
[3] [[http://www.cogtech.usc.edu/publications/kirschner_Sweller_Clark.pdf|Kirschner, P. A, Sweller, J. and Clark, R. E. Why minimal guidance during instruction does not work: An analysis of the failure of constructivist, discovery, problem-based, experiential, and inquiry-based teaching. Educational psychologist 41, no. 2, pp 75-86, 2006]] | [5] [[https://rambleed.com/docs/20190603-rambleed-web.pdf|RAMBleed: Reading Bits in Memory Without Accessing Them, Kwong, Andrew and Genkin, Daniel and Gruss, Daniel and Yarom, Yuval in 41st {IEEE} Symposium on Security and Privacy (S\&P) ]] |
| |
| |