Muistin käyttöturvallisuus

Kokeneet kirjoittajat eivät ole vielä tarkistaneet sivun nykyistä versiota, ja se voi poiketa merkittävästi 28.6.2021 tarkistetusta versiosta . tarkastukset vaativat 6 muokkausta .

Muistin käyttösuojaus  on ohjelmistokehityksen konsepti, jonka tarkoituksena on välttää vikoja , jotka johtavat tietokoneen RAM -muistin käyttöön liittyviin haavoittuvuuksiin , kuten puskurin ylivuotoon ja roikkuviin osoittimiin .

Ohjelmointikielet, joilla on alhainen abstraktiotaso, kuten C ja C++ , jotka tukevat suoraa pääsyä tietokoneen muistiin (mielivaltainen osoittimen aritmetiikka , muistin varaaminen ja purkaminen ) ja tyyppivalua , mutta joissa ei ole automaattista taulukkorajojen tarkistusta turvallisia . muistin käytön suhteen [1] [2] . C ja C++ tarjoavat kuitenkin työkaluja (kuten älykkäitä osoittimia ) muistin käytön turvallisuuden parantamiseen. Muistinhallintatekniikat palvelevat samaa tarkoitusta [3]. Muistin käyttövirheiden välttäminen, etenkään monimutkaisissa järjestelmissä, ei kuitenkaan usein ole mahdollista [4] .

Muistin käytön haavoittuvuudet

Yksi yleisimmistä ohjelmiston haavoittuvuuksista on muistin tietoturvaongelmat [5] [6] . Tämäntyyppinen haavoittuvuus on ollut tiedossa yli 30 vuoden ajan [7] . Muistin suojaus tarkoittaa, että estetään yritykset käyttää tai muokata tietoja, ellei ohjelmoija ole tarkoituksellisesti sallinut sitä ohjelmistotuotetta luodessaan [8] .

Monet suorituskyvyn kannalta kriittiset ohjelmat toteutetaan ohjelmointikielillä, joilla on alhainen abstraktiotaso ( C ja C++ ), jotka ovat alttiita tämän tyyppisille haavoittuvuuksille. Näiden ohjelmointikielten turvallisuuden puute antaa hyökkääjille mahdollisuuden saada täyden hallinnan ohjelmaan, muuttaa hallinnan kulkua ja luvatta pääsyä luottamuksellisiin tietoihin [9] . Tällä hetkellä muistiin pääsyyn liittyviin ongelmiin on ehdotettu erilaisia ​​ratkaisuja. Suojausmekanismien on oltava tehokkaita sekä turvallisuuden että suorituskyvyn kannalta [10] .

Muistivirheet julkistettiin ensimmäisen kerran vuonna 1972 [11] . Ja sitten ne olivat monien ohjelmistotuotteiden ongelma, työkalu, jonka avulla voit käyttää hyväksikäyttöä . Esimerkiksi Morris-mato käytti monia haavoittuvuuksia, joista osa liittyi muistivirheisiin [12] .

Muistivirheiden tyypit

Joissakin ohjelmointikielissä voi esiintyä monen tyyppisiä muistivirheitä (haavoittuvuuksia): [13] [14] [15]

Virheen havaitseminen

Mahdolliset muistin kanssa työskentelyn virheet voidaan havaita sekä ohjelman kääntämisen että suorituksen aikana ( virheenkorjaus ).

Kääntäjän varoitusten lisäksi staattisia koodianalysaattoreita käytetään havaitsemaan virheet ennen ohjelman rakentamista . Niiden avulla voit kattaa merkittävän osan vaarallisista tilanteista tutkimalla lähdekoodia yksityiskohtaisemmin kuin kääntäjän pinnallisen analyysin. Staattiset analysaattorit voivat havaita: [44] [45] [46] [47]

Ohjelman virheenkorjauksen aikana voidaan käyttää erityisiä muistinhallintaohjelmia. Tässä tapauksessa kasaan allokoitujen objektien ympärille luodaan "kuollut" muistialueet, ja kun debuggeri pääsee niihin, se voi havaita virheitä [48] . Vaihtoehtona ovat erikoistuneet virtuaalikoneet, jotka tarkistavat muistin käytön ( Valgrind ). Virheiden havaitsemista auttavat koodiinstrumentointijärjestelmät , mukaan lukien kääntäjän (Sanitizer [49] ) tarjoamat järjestelmät.

Suojausmenetelmät

Useimmat korkean tason kielet ratkaisevat nämä ongelmat poistamalla osoittimen aritmetiikkaa kielestä, rajoittamalla suoratoistoa ja ottamalla roskienkeruun käyttöön ainoana muistinhallintajärjestelmänä [50] . Toisin kuin matalan tason kielet , joissa nopeus on tärkeä, korkean tason kielet suorittavat enimmäkseen lisätarkistuksia [51] , kuten rajojen tarkistuksia käytettäessä taulukoita ja objekteja [52] .

Nykyaikainen C++ käyttää älykkäitä osoittimia välttääkseen muisti- ja resurssivuotoja ja varmistaakseen poikkeuksellisen turvallisuuden . Yleensä ne ovat luokka, joka jäljittelee tavallisen osoittimen käyttöliittymää ja lisää lisätoimintoja [53] , kuten taulukoiden ja objektien rajojen tarkistamista, automaattisesti hallitsevan muistin varauksen ja purkamisen käytettävälle objektille. Ne auttavat toteuttamaan Resource Acquisition is Initialization (RAII) -ohjelmointiidiomin, jossa objektin hankinta liittyy erottamattomasti sen alustukseen ja julkaisu on erottamattomasti yhteydessä sen tuhoamiseen [54] .

Kirjastofunktioita käytettäessä tulee kiinnittää huomiota niiden palautusarvoihin , jotta voidaan havaita mahdolliset rikkomukset niiden toiminnassa [55] . Toiminnot dynaamisen muistin kanssa työskentelyyn C:ssä ilmoittavat virheestä (pyynnön kokoisen vapaan muistin puute) palauttamalla nollaosoittimen muistilohkoon osoittavan osoittimen sijaan [56] ; C++ käyttää poikkeuksia [57] . Näiden tilanteiden asianmukainen käsittely mahdollistaa ohjelman virheellisen (epänormaalin) lopettamisen välttämisen [58] .

Rajatarkistukset osoittimia käytettäessä parantavat turvallisuutta. Tällaiset tarkistukset lisätään käännösvaiheessa ja voivat hidastaa ohjelmia; erityisiä laitteistolaajennuksia (esim. Intel MPX [59] ) on kehitetty nopeuttamaan niitä .

Abstraktion alemmilla tasoilla on erityisiä järjestelmiä, jotka tarjoavat muistin turvallisuuden. Käyttöjärjestelmätasolla tämä on virtuaalisen muistin hallintaohjelma , joka erottaa käytettävissä olevat muistialueet yksittäisille prosesseille ( moniajotuki ) ja synkronointitoiminnot monisäikeen tukemiseksi [60] . Laitteistokerros sisältää myös joitain mekanismeja, kuten suojarenkaita [61] .

Muistiinpanot

  1. Erik Poll. Luentomuistiinpanot kielipohjaisesta turvallisuudesta . - Radboud University Nijmegen, 2016. - 21. tammikuuta. / "Muistin turvallisuutta rikkovia kieliominaisuuksia ovat..."
  2. Laszlo Szekeres, Mathias Payer, Dawn Song. SoK: Eternal War in Memory . — 2013 IEEE Symposium on Security and Privacy, 2013. / "Muistin vioittumisvirheet alhaisilla kielillä kirjoitetuissa ohjelmistoissa, kuten C tai C++, ovat yksi vanhimmista tietoturvaongelmista."
  3. ISO-standardi C++ Foundation. C++ UKK:  Muistinhallinta . isocpp.org . Haettu 10. helmikuuta 2022. Arkistoitu alkuperäisestä 10. syyskuuta 2018.
  4. ISO-standardi C++ Foundation. C++ UKK:  Muistinhallinta . isocpp.org . Haettu 10. helmikuuta 2022. Arkistoitu alkuperäisestä 10. syyskuuta 2018. / "On selvää, että jos koodissasi on uusia operaatioita, poistotoimintoja ja osoittimen aritmetiikkaa kaikkialla, olet menossa sotkemaan jonnekin ja saat vuotoja, harhaanjohtavia osoittimia jne." Tämä pätee riippumatta siitä, kuinka tunnollinen olet allokoinnissasi: lopulta koodin monimutkaisuus voittaa ajan ja vaivan, johon sinulla on varaa."
  5. Victor van der Veen, Nitish dutt-Sharma, Lorenzo Cavallaro, Herbert Bos. Muistivirheet: menneisyys, nykyisyys ja tulevaisuus . — RAID'12; Amsterdam, Alankomaat, 2012 - 12.-14.9. / "… ja edelleen kolmen vaarallisimman ohjelmistovirheen joukossa."
  6. Aamunkoittolaulu. Muistin turvallisuus – hyökkäykset ja puolustukset . - Berkeley CS161 Computer Security, 2015. - Kevät. / "Itse asiassa toteutusvirheet ovat konfigurointivirheiden jälkeen luultavasti suurin yksittäinen käytännössä hyödynnetty tietoturvavirheluokka."
  7. Laszlo Szekeres, Mathias Payer, Dawn Song. SoK: Eternal War in Memory . — 2013 IEEE Symposium on Security and Privacy, 2013. / «Tämä ongelma on ollut olemassa yli 30 vuotta…»
  8. Aamunkoittolaulu. Muistin turvallisuus – hyökkäykset ja puolustukset . - Berkeley CS161 Computer Security, 2015. - Kevät. / "... estää hyökkääjiä lukemasta tai kirjoittamasta muistipaikkoihin, jotka eivät ole ohjelmoijan tarkoittamia."
  9. Laszlo Szekeres, Mathias Payer, Dawn Song. SoK: Eternal War in Memory . — 2013 IEEE Symposium on Security and Privacy, 2013. / Alhaisilla kielillä, kuten C tai C++, kirjoitetut sovellukset ovat alttiita tällaisille virheille. Muistin turvallisuuden puute antaa hyökkääjille mahdollisuuden hyödyntää muistivirheitä muuttamalla ohjelman toimintaa haitallisesti tai jopa ottamalla täyden hallinnan hallintavirtaan."
  10. Laszlo Szekeres, Mathias Payer, Dawn Song. SoK: Eternal War in Memory . — 2013 IEEE Symposium on Security and Privacy, 2013 .
  11. Victor van der Veen, Nitish dutt-Sharma, Lorenzo Cavallaro, Herbert Bos. Muistivirheet: menneisyys, nykyisyys ja tulevaisuus . — RAID'12; Amsterdam, Alankomaat, 2012 - 12.-14.9. / "Muistivirheistä keskusteltiin ensimmäisen kerran julkisesti vuonna 1972 Computer Security Technology Planning Study Panelissa."
  12. Victor van der Veen, Nitish dutt-Sharma, Lorenzo Cavallaro, Herbert Bos. Muistivirheet: menneisyys, nykyisyys ja tulevaisuus . — RAID'12; Amsterdam, Alankomaat, 2012 - 12.-14.9. / "Internet-mato käytti hyväkseen useita haavoittuvuuksia, mukaan lukien muistivirheisiin liittyvät."
  13. Laszlo Szekeres, Mathias Payer, Dawn Song. SoK: Eternal War in Memory . — 2013 IEEE Symposium on Security and Privacy, 2013.
  14. Aamunkoittolaulu. Muistin turvallisuus – hyökkäykset ja puolustukset . - Berkeley CS161 Computer Security, 2015. - Kevät.
  15. Katrina Tsipenyuk, Brian Chess, Gary McGraw. Seitsemän tuhoisaa kuningaskuntaa: Ohjelmiston suojausvirheiden taksonomia . - NIST Workshop on Software Security Assurance Tools, Techniques ja Metrics, Long Beach, CA, 2005. - Marraskuu.
  16. Edsger W. Dijkstra. Miksi numeroinnin pitäisi alkaa nollasta (EWD 831) . - Plataanstraat 5, 5671 AL NUENEN, Alankomaat, 1982. - 11. elokuuta. / "...kolmen muun tavan käyttö on ollut jatkuva kömpelön ja virheiden lähde..."
  17. Richard Jones ja Paul Kelly. C:n rajojen tarkistaminen . - Imperial College, 1995. - Heinäkuu. / "Yksi vastaus tähän analyysiin on hylätä C, koska tämä tehokkaan tarkistettavuuden puute on syynä moniin ohjelmistovirheisiin."
  18. John Erickson. Hakkerointi. Hyväksikäytön taito . - Pietari. : Symbol-Plus, 2010. - S.  139 . — ISBN 978-5-93286-158-5 .
  19. John Erickson. Hakkerointi. Hyväksikäytön taito . - Pietari. : Symbol-Plus, 2010. - S.  142 . — ISBN 978-5-93286-158-5 .
  20. David A. Wheeler. Turvallinen ohjelmointi OHJEET . - Julkaistu v3.72. — 2015. / "Puskurin ylivuoto on erittäin yleinen ja vaarallinen tietoturvavirhe..."
  21. Yleisten heikkouksien luettelo. CWE-126: Puskurin ylilukeminen (08.12.2015). Haettu 24. marraskuuta 2016. Arkistoitu alkuperäisestä 27. syyskuuta 2016. / "Tämä tapahtuu tyypillisesti, kun osoitinta tai sen indeksiä kasvatetaan puskurin rajojen ulkopuolelle..."
  22. Steve Christey. 2011 CWE/SANS 25 vaarallisinta ohjelmistovirhettä . MITER (13. syyskuuta 2011). Haettu 24. marraskuuta 2016. Arkistoitu alkuperäisestä 12. huhtikuuta 2018.
  23. Guy Keren. Unix ja C/C++ Runtime Memory Management for Programmers (linkki ei ole käytettävissä) (2001-2002). Haettu 24. marraskuuta 2016. Arkistoitu alkuperäisestä 27. syyskuuta 2016.   / "Ajonaikainen ympäristö määrittelee paitsi kuinka muistia varataan ja vapautetaan..."
  24. Robert C. Seacord. Suojattu koodaus C- ja C++-kielellä . - Addison-Wesley, 2013. - s  . 162 . - ISBN 978-0-321-82213-0 .
  25. Jonathan Afek, Adi Sharabani. Riippuva osoitin. Osoittimen murskaaminen huvin ja voiton vuoksi . – Watchfire Corporation, 2007.
  26. Tietokonelehti. Linkki ei minnekään tai rikkinäinen osoitin . Haettu 24. marraskuuta 2016. Arkistoitu alkuperäisestä 22. kesäkuuta 2018. / "... haavoittuvuuksia, jotka voivat aiheutua osoittimien ja viittausten väärinkäytöstä."
  27. Yleisten heikkouksien luettelo. CWE-416: Käytä After Free (8. joulukuuta 2015). Haettu 24. marraskuuta 2016. Arkistoitu alkuperäisestä 18. heinäkuuta 2019. / "Muistiin viittaaminen sen vapauttamisen jälkeen voi aiheuttaa ohjelman kaatumisen, odottamattomien arvojen käytön tai koodin suorittamisen."
  28. Juan Caballero, Gustavo Grieco, Mark Marron, Antonio Nappa. Undangle: Roikkuvien osoittimien varhainen havaitseminen käytön jälkeen vapaassa ja kaksoisvapaassa haavoittuvuudessa . — IMDEA Software Institute; Madrid, Espanja. / "Use-after-free-haavoittuvuuksien suosio kasvaa nopeasti, erityisesti verkkoselaimien hyväksikäytössä."
  29. comp.lang.c. Kysymys 5.1 . Haettu 24. marraskuuta 2016. Arkistoitu alkuperäisestä 27. syyskuuta 2016. / "Kielimäärittelyssä todetaan, että jokaiselle osoitintyypille on erityinen arvo..."
  30. Oracle. Java-alusta, Standard Edition 7 -sovellusliittymän määritykset . Haettu 24. marraskuuta 2016. Arkistoitu alkuperäisestä 23. huhtikuuta 2018. / "Heitetään, kun sovellus yrittää käyttää tyhjää tapauksessa, jossa objektia vaaditaan."
  31. Yleisten heikkouksien luettelo. CWE-415: Double Free (08.12.2015). Haettu 24. marraskuuta 2016. Arkistoitu alkuperäisestä 27. syyskuuta 2016. / "Kun ohjelma kutsuu free() kahdesti samalla argumentilla..."
  32. Yan Huang. Kasan ylivuodot ja kaksinkertaiset hyökkäykset . Haettu 24. marraskuuta 2016. Arkistoitu alkuperäisestä 17. huhtikuuta 2018. / "Jos free(p):tä on jo kutsuttu aiemmin, tapahtuu määrittelemätöntä toimintaa."
  33. Andrei Alexandrescu. Moderni C++-suunnittelu: yleisiä ohjelmointi- ja suunnittelumalleja sovellettu . - Addison Wesley, 2001.  (ei saatavilla linkki) / "... se on yleensä toteutettu ohuena kääreenä C-keon allokaattorin ympärillä..."
  34. Guy Keren. Unix ja C/C++ Runtime Memory Management for Programmers (linkki ei ole käytettävissä) (2001-2002). Haettu 25. marraskuuta 2016. Arkistoitu alkuperäisestä 27. syyskuuta 2016.   / "Esimerkiksi GNU C++ -kääntäjän uusi operaattori itse asiassa kutsuu C-ajonaikaisen malloc()-funktion."
  35. Muistinhallinta . Haettu 25. marraskuuta 2016. Arkistoitu alkuperäisestä 10. syyskuuta 2018. / "C++-operaattorit new ja delete takaavat oikean rakentamisen ja tuhoamisen... C-tyylin funktiot... eivät takaa sitä."
  36. OWASP. muistivuoto . Haettu 25. marraskuuta 2016. Arkistoitu alkuperäisestä 23. marraskuuta 2016.
  37. Osoittimiin liittyvät ongelmat . Käyttöpäivä: 25. marraskuuta 2016. Arkistoitu alkuperäisestä 26. helmikuuta 2013. / "Mikään ei ole häiritsevämpää kuin "villit" osoittimet!"
  38. Halvar Flake. Hyökkäykset alustamattomiin paikallisiin muuttujiin (2006). Haettu 25. marraskuuta 2016. Arkistoitu alkuperäisestä 3. kesäkuuta 2016. / "Katsotaan seuraavaa tilannetta sitten..."
  39. Yleisten heikkouksien luettelo. CWE-457: Alustamattoman muuttujan käyttö (8. joulukuuta 2015). Haettu 25. marraskuuta 2016. Arkistoitu alkuperäisestä 2. lokakuuta 2016. / "Hyökkääjä voi joskus hallita tai lukea tätä sisältöä."
  40. GNU Fortranin käyttö ja portointi . James Craig, Burley (1. kesäkuuta 1991). Käyttöpäivä: 25. marraskuuta 2016. Arkistoitu alkuperäisestä 5. lokakuuta 2012.
  41. Danny Kalev. Understanding Stack Overflow (5. syyskuuta 2000). Käyttöpäivä: 25. marraskuuta 2016. Arkistoitu alkuperäisestä 5. lokakuuta 2012. / "Kaksi yleisintä pinon ylivuodon syytä..."
  42. John Boyland. Aseta paperi: "Muisti loppu" -virheiden käsittely . — Wisconsin-Milwaukeen yliopisto, Yhdysvallat. Arkistoitu alkuperäisestä 22. maaliskuuta 2016. / "Muisti lopussa" -virhe voi olla katastrofaalinen ohjelmalle, varsinkin sellaiselle, joka on kirjoitettu kielellä, kuten Java, joka käyttää usein muistin varausta."
  43. Mulyadi Santosa. Kun Linuxin muisti loppuu (30.11.2006). Haettu 15. marraskuuta 2016. Arkistoitu alkuperäisestä 14. huhtikuuta 2018. / "... et voi enää varata lisää muistia ja ydin tappaa tehtävän (yleensä nykyisen käynnissä olevan)."
  44. Anders Moller ja Michael I. Schwartzbach. Staattinen ohjelmaanalyysi . - Tietojenkäsittelytieteen laitos, Århusin yliopisto, 2015. - Toukokuu.
  45. Cppcheck - Työkalu staattiseen C/C++-koodin analysointiin . Haettu 25. marraskuuta 2016. Arkistoitu alkuperäisestä 18. tammikuuta 2016. / "Havaitse erilaisia ​​virheitä koodistasi..."
  46. Semanttiset mallit. Muistin turvallisuusanalyysi CheckPointerilla . Haettu 25. marraskuuta 2016. Arkistoitu alkuperäisestä 18. huhtikuuta 2018. / "Ohjaimia sisältävät ohjelmat voivat tehdä erilaisia ​​virheitä käytettäessä muistia..."
  47. PVS-studio. Staattinen koodianalyysi (25.3.2015). Haettu 25. marraskuuta 2016. Arkistoitu alkuperäisestä 25. tammikuuta 2018.
  48. Emery D. Berger, Benjamin G. Zorn. DieHard: Todennäköisyyspohjainen muistiturvallisuus vaarallisille kielille . — PLDI'06; Ottawa, Ontario, Kanada, 2006. 11.-14. kesäkuuta.
  49. Konstantin Serebrjany, Dmitri Vyukov. Kilpailujen ja muistivirheiden etsiminen kääntäjäinstrumenteilla . GNU Tools Cauldron (10. heinäkuuta 2012). Haettu 25. marraskuuta 2016. Arkistoitu alkuperäisestä 12. maaliskuuta 2016.
  50. Erik Poll. Kielipohjainen suojaus: "Turvalliset" ohjelmointikielet (downlink) . Radboud Universiteit Nijmegen . Haettu 25. marraskuuta 2016. Arkistoitu alkuperäisestä 5. marraskuuta 2016.   / "Manuaalinen muistin hallinta voidaan välttää..."
  51. Dinakar Dhurjati ja Vikram Adve. Taaksepäin yhteensopivat taulukon rajat C:n tarkistaminen erittäin alhaisella ylärajalla . — Tietojenkäsittelytieteen laitos Illinoisin yliopistossa Urbana-Champaignissa. / "...ratkaisematon ongelma huolimatta pitkästä työhistoriasta taulukkorajojen rikkomusten tai puskurin ylitysten havaitsemiseksi, koska tähän mennessä parhaat olemassa olevat ratkaisut ovat joko aivan liian kalliita käytettäväksi käyttöönotetussa tuotantokoodissa..."
  52. Bruce Eckel. Javalla ajattelua. Neljäs painos . / "Sekä taulukot että säiliöt takaavat, että et voi käyttää niitä väärin. Käytätpä taulukkoa tai säilöä, saat RuntimeExceptionin, jos ylität rajat, mikä tarkoittaa ohjelmointivirhettä."
  53. David Kieras. C++11:n älykkäiden osoittimien käyttäminen . - EECS-osasto, Michiganin yliopisto, 2016. - kesäkuu. / "Älykkäät osoittimet ovat luokkaobjekteja, jotka toimivat kuten sisäänrakennetut osoittimet, mutta myös hallitsevat luomiasi objekteja..."
  54. Microsoft Developer Network. Älykkäät osoittimet (moderni C++) . Haettu 25. marraskuuta 2016. Arkistoitu alkuperäisestä 5. joulukuuta 2017. / "Ne ovat erittäin tärkeitä RAII-ohjelmointikielelle tai Resource Acquisition Is Initialization..."
  55. Yleisten heikkouksien luettelo. CWE-252: Tarkistamaton palautusarvo (08.12.2015). Haettu 25. marraskuuta 2016. Arkistoitu alkuperäisestä 18. heinäkuuta 2019. / "Ohjelmisto ei tarkista menetelmän tai funktion palautusarvoa, mikä voi estää sitä havaitsemasta odottamattomia tiloja ja olosuhteita."
  56. Microsoft Developer Network. malloc . Haettu 25. marraskuuta 2016. Arkistoitu alkuperäisestä 5. lokakuuta 2016. / "malloc palauttaa kirjoittamattoman osoittimen varattuun muistialueeseen tai NULL, jos muistia ei ole tarpeeksi."
  57. operaattori uusi, operaattori uusi[ ] . Haettu 25. marraskuuta 2016. Arkistoitu alkuperäisestä 29. maaliskuuta 2018. / "heittää std::bad_alloc tai muun poikkeuksen, joka on johdettu std::bad_allocista (C++11:stä lähtien), jos muistin varaaminen epäonnistuu"
  58. Paul ja Harvey Deitel. C: kuinka ohjelmoida .
  59. Intel Developer Zone. Intel® Memory Protection Extensions -laajennusten esittely (16. heinäkuuta 2013). Haettu 25. marraskuuta 2016. Arkistoitu alkuperäisestä 5. toukokuuta 2019.
  60. Sarah Diesburg. Muistin suojaus: Ydin ja käyttäjän osoiteavaruudet . Haettu 25. marraskuuta 2016. Arkistoitu alkuperäisestä 9. elokuuta 2017.
  61. Michael D. Schroeder ja Jerome H. Saltzer. Laitteistoarkkitehtuuri suojarenkaiden toteuttamiseen . - Kolmas ACM Symposium on Operating Systems Principles, Palo Alto, Kalifornia, 1971. - 18.-20. lokakuuta.

Kirjallisuus

Linkit

Yleiset julkaisut

Temaattiset julkaisut