A nyílt forráskódú operációs rendszer disztribúciója Az OpenBSD jól ismert a rendszeradminisztrátorok körében, különösen a szervereket kezelők körében, mivel a sebességre, a szolgáltatásokra és a divatos front-endekre összpontosít.
Talán találóan logója egy gömbhal – felfújva, tüskéivel, amelyek készen állnak arra, hogy visszaszorítsák az esetlegesen érkező ravasz hackereket.
De az OpenBSD csapata valószínűleg nem a teljes disztribúciójáról, hanem a távoli elérési eszközkészletéről ismert OpenSSH amelyet az 1990-es évek végén írtak magába az operációs rendszerbe való felvétel céljából.
SSH, a rövidítése biztonságos héj, eredetileg finn informatikus készítette Tatu Ylönen az 1990-es évek közepén annak reményében, hogy leszoktatják a rendszergazdákat a Telnet protokoll használatának kockázatos szokásáról.
Baj a Telnettel
A Telnet figyelemreméltóan egyszerű és hatékony volt: ahelyett, hogy fizikai vezetékeket csatlakoztatott volna (vagy telefonvonalon keresztül modemet használt volna) a távoli szerverekkel való teletípus-kapcsolat létrehozásához, helyette TELetype NETwork kapcsolatot használt.
Alapvetően a dedikált soros kapcsolaton vagy betárcsázós telefonvonalon oda-vissza áramló adatokat az interneten keresztül küldték és fogadták, csomagkapcsolt TCP-hálózati kapcsolat használatával áramkörkapcsolt pont-pont kapcsolat helyett. .
Ugyanaz a megszokott bejelentkezési rendszer, olcsóbb kapcsolatok, nincs szükség dedikált adatvonalra!
A Telnet óriási hibája természetesen a titkosítás teljes hiánya volt, így a pontos terminálmunkamenet kiszűrése triviális volt, lehetővé téve a feltörők számára, hogy minden begépelt parancsot láthassanak (még az elkövetett hibákat és a leütések számát is). [Backspace]
), és a kimenet minden egyes bájtja…
…és természetesen a felhasználónevét és jelszavát a munkamenet elején.
A hálózati útvonalon bárki nem csak egyszerűen, valós időben rekonstruálhatja a rendszergazdai munkameneteket a saját képernyőjén, de valószínűleg manipulálhatja is a munkamenetet azáltal, hogy módosítja a távoli szervernek küldött parancsokat, és hamisítja a válaszokat, így nem vette észre. a trükk.
Akár egy imposztor szervert is felállíthatnak, odacsábíthatják, és meglepően megnehezíthetik a megtévesztés észlelését.
Erős titkosítású FTW
Ylönen SSH-ja egy erős titkosítási és hitelesítési réteget kívánt hozzáadni a Telnet-szerű munkamenet mindkét végéhez, így biztonságos héj (ezt jelenti a név, ha valaha is elgondolkodott, bár szinte mindenki csak így hívja ess-ess-aitch ezek a napok).
Azonnali siker volt, és a protokollt gyorsan átvették a rendszergazdák mindenhol.
Hamarosan az OpenSSH következett, amint fentebb említettük, először 1999 végén jelent meg a program részeként OpenBSD 2.6 kiadás.
Az OpenBSD csapata egy ingyenes, megbízható, nyílt forráskódú megvalósítást akart létrehozni annak a protokollnak, amelyet ők és bárki más használhatná, minden olyan engedélyezési vagy kereskedelmi bonyodalma nélkül, amelyek az Ylönen eredeti megvalósítását nehezítették a megjelenést követő években.
Valójában, ha éppen most futtatja a Windows SSH-kiszolgálót, és egy Linux-számítógépről csatlakozik hozzá, akkor szinte biztos, hogy mindkét végén az OpenSSH-megvalósításra fog támaszkodni.
Az SSH-protokollt más népszerű kliens-szerver szolgáltatásokban is használják, beleértve az SCP-t és az SFTP-t, amelyek rövidítése biztonságos másolat és a biztonságos FTP illetőleg. Az SSH lazán azt jelenti, hogy „csatlakozzon biztonságosan, és futtasson egy parancs SHell-t a másik végén”, jellemzően interaktív bejelentkezéshez, mivel a parancshéjhoz használt Unix program általában /bin/sh
. Az SCP hasonló, de a fájlok másolásához, mivel a Unix file-copy parancsot általában hívják /bin/cp
, és az SFTP elnevezése nagyjából ugyanúgy történik.
Az OpenSSH nem az egyetlen SSH-eszközkészlet a városban.
További jól ismert megvalósítások: libssh2, azoknak a fejlesztőknek, akik az SSH-támogatást közvetlenül saját alkalmazásaikba szeretnék beépíteni; csepp medve, egy lecsupaszított SSH-kiszolgáló az ausztrál kódolótól Matt johnston amely széles körben megtalálható az úgynevezett IoT (dolgok internete) eszközökön, például otthoni útválasztókon és nyomtatókon; és PuTTY, az SSH-hoz kapcsolódó Windows-eszközök népszerű, ingyenes gyűjteménye független, nyílt forráskódú fejlesztőtől Simon Tatham Angliában.
De ha Ön rendszeres SSH-felhasználó, akkor szinte biztos, hogy ma már csatlakozott legalább egy OpenSSH-kiszolgálóhoz, nem utolsósorban azért, mert a legtöbb kortárs Linux-disztribúció szabványos távoli elérési eszközeként tartalmazza, a Microsoft pedig OpenSSH-ügyfelet és OpenSSH-t is kínál. szervert manapság hivatalos Windows-komponensként.
Dupla mentes hibajavítás
OpenSSH 9.2-es verzió most jött ki, és a Kiadási megjegyzések a következőképpen számoljon be:
Ez a kiadás javításokat tartalmaz […] memóriabiztonsági problémára. Úgy gondoljuk, hogy [ez a hiba] nem kihasználható, de a legtöbb hálózaton elérhető memóriahibát biztonsági hibaként jelentjük.
A hiba befolyásolja sshd
, az OpenSSH szerver (a -d
utótag jelentése démon, a Unix neve annak a háttérfolyamatnak, amelyet a Windows a szolgáltatás):
sshd(8): javítsa ki az OpenSSH 9.1-ben bevezetett előhitelesítési kettős szabad memóriahibát. Úgy gondolják, hogy ez nem kihasználható, és a nem privilegizált hitelesítés előtti folyamatban fordul elő, amelyre a chroot(2) vonatkozik, és a legtöbb nagyobb platformon tovább homokozóban van.
A duplán mentes hiba azt jelenti, hogy egy memóriablokkot, amelyet már visszavitt az operációs rendszerbe, újra felhasználja a program más részeiben…
…később visszaadja a program egy olyan része, amely már nem „tulajdonolja” ezt a memóriát, de nem tudja, hogy nem.
(Vagy szándékosan adják vissza olyan kód kérésére, amely szándékosan próbálja kiprovokálni a hibát, hogy sebezhetőség egy kihasználni.)
Ez finom és nehezen megfejthető hibákhoz vezethet, különösen, ha a rendszer a felszabadult blokkot elérhetőként jelöli meg az első free()
megtörténik, később lefoglalja a kód egy másik részéhez, amikor az ezen keresztül memóriát kér malloc(
), majd ismét szabaddá jelöli a blokkot, amikor a felesleges hívás érkezik free()
Megjelenik.
Így olyan helyzetbe kerül, mint amikor bejelentkezik egy szállodába, és azt mondja: „Ó, jó hír! Azt hittük, tele vagyunk, de egy másik vendég úgy döntött, hogy korán kijelentkezik, hogy megkaphassa a szobáját.”
Még akkor is, ha a szoba szépen ki van takarítva és fel van készítve az új lakók fogadására, amikor belép, és így úgy néz ki, mintha az Ön kizárólagos használatára lett volna kiosztva, akkor is bíznia kell abban, hogy az előző vendég kulcskártyáját valóban helyesen törölték, és korai kijelentkezés” nem volt ravasz trükk, hogy még ugyanazon a napon visszaosonjon, és ellopja a laptopját.
Hibajavítás a hibajavításhoz
Ironikus módon, ha megnézi a legutóbbi OpenSSH kódelőzményeket, látni fogja, hogy az OpenSSH szerény hibája volt az ún. compat_kex_proposal()
, amelyet annak ellenőrzésére használnak, hogy milyen kulcscsere-algoritmust használjon a kapcsolat felállításakor.
Ennek a szerény hibának a kijavítása azonban egy súlyosabb sebezhetőséget vezetett be.
Egyébként a hiba jelenléte a kapcsolat felállítása során használt szoftver egy részében az, ami ezt egy ún. hálózaton elérhető előzetes hitelesítés sebezhetőség (vagy hitelesítés előtti hiba röviden).
A duplán mentes hiba a futtatandó kódban történik után egy kliens távoli munkamenetet kezdeményezett, de előtt Bármilyen kulcsmegállapodás vagy hitelesítés megtörtént, így a sérülékenység elméletileg még azelőtt kiváltható, hogy a jelszavakat vagy kriptográfiai kulcsokat érvényesítésre bemutatták volna.
OpenSSH 9.0 esetén compat_kex_proposal
valahogy így nézett ki (itt nagyon leegyszerűsítve):
char* compat_kex_proposal(char* suggestion) { if (condition1) { return suggestion; } if (condition2) { suggestion = allocatenewstring1(); } if (condition3) { suggestion = allocatenewstring2(); } if (isblank(suggestion)) { error(); } return suggestion; }
Az ötlet az, hogy a hívó átadja a saját memóriablokkját, amely egy kulcscsere-beállításra utaló szöveges karakterláncot tartalmaz, és vagy jóváhagyást kap az általa küldött javaslat használatára, vagy egy újonnan hozzárendelt szöveges karakterláncot frissített javaslattal. .
A hiba az, hogy ha az 1. feltétel hamis, de a 2. és 3. feltétel is igaz, a kód lefoglalja kettő új szöveges karakterláncokat, de csak visszaad egy.
által lefoglalt memóriablokk allocatenewstring1()
soha nem szabadul fel, és amikor a függvény visszatér, a memóriacíme örökre elveszik, így nincs mód arra, hogy semmilyen kód free()
azt a jövőben.
Ezt a blokkot lényegében elhagyták, ami az úgynevezett a memória szivárgás.
Idővel ez problémákat okozhat, és akár leállásra is kényszerítheti a szervert, hogy helyreálljon a memória túlterheltsége miatt.
Az OpenSSH 9.1-ben a kód frissítése megtörtént annak érdekében, hogy elkerüljék két karakterlánc kiosztását, de az egyiket elhagyják:
/* Always returns pointer to allocated memory, caller must free. */ char* compat_kex_proposal(char* suggestion){ char* previousone = NULL; if (condition1) { return newcopyof(suggestion); } if (condition2) { suggestion = allocatenewstring1(); } if (condition3) { previousone = suggestion; suggestion = allocatenewstring2(); } free(previousone); } if (isblank(suggestion()) { error(); } return suggestion; }
Ebben van a duplán mentes hiba, mert ha az 1. és a 2. feltétel is hamis, de a 3. feltétel igaz, akkor a kód hozzárendel egy új karakterláncot, amelyet válaszként küld vissza…
…de helytelenül felszabadítja azt a karakterláncot, amelyet a hívó eredetileg átadott, mert a függvény allocatenewstring1()
soha nem hívják meg a változó frissítéséhez suggestion
.
Az átadott javaslati karakterlánc olyan memória, amely a hívóé, és a hívó ezért később témákat szabadít fel, ami a duplamentes veszélyhez vezet.
Az OpenSSH 9.2-ben a kód óvatosabbá vált, követve mindhárom lehetséges memóriablokkot: az eredeti suggestion
(memória valaki másé), és két lehetséges új karakterlánc, amely útközben lefoglalható:
/* Always returns pointer to allocated memory, caller must free. */ char* compat_kex_proposal(char* suggestion) { char* newone = NULL; char* newtwo = NULL; if (condition1) { return newcopyof(suggestion); } if (condition2) { newone = allocatenewstring1(); } if (condition3) { newtwo = allocatenewstring2(); } free(newone); newone = newtwo; } if (isblank(newone)) { error(); } return newone; }
Ha az 1. feltétel igaz, a rendszer az átadott karakterlánc új másolatát használja, így a hívó később is megteheti free()
átadott karakterláncuk memóriáját, amikor csak akarják.
Ha túljutunk az 1. feltételen, és a 2. feltétel igaz, de a 3. feltétel hamis, akkor az általa létrehozott alternatív javaslat allocatenewstring1()
visszakapják, és az átengedett suggestion
húr egyedül marad.
Ha a 2. feltétel hamis és a 3. feltétel igaz, akkor a rendszer egy új karakterláncot generál és ad vissza, és az átadott suggestion
húr egyedül marad.
Ha a 2. és a 3. feltétel is igaz, akkor két új karakterlánc kerül kiosztásra az út során; az első felszabadul, mert nincs rá szükség; a második visszakerül; és az átadott suggestion
húr egyedül marad.
Tudod RTxM annak megerősítésére, ha hív free(newone)
amikor newone
is NULL
, akkor „nem történik művelet”, mert ez mindig biztonságos free(NULL)
. Ennek ellenére sok programozó még mindig határozottan védekezik ellene olyan kóddal, mint pl if (ptr != NULL) { free(ptr); }
.
Mit kell tenni?
Ahogy az OpenSSH csapata javasolja, a hiba kihasználása nehéz lesz, nem utolsósorban a korlátozott jogosultságok miatt, amelyeket a sshd
a programnak van ideje, amíg beállítja a kapcsolatot a használatra.
Ennek ellenére biztonsági résként jelentették, mert ez az, ezért győződjön meg róla, hogy frissített OpenSSH 9.2.
És ha C-ben ír kódot, ne feledje, hogy bármilyen tapasztalt is legyen, a memóriakezelést könnyű elhibázni…
… szóval vigyázz odakint.
(Igen, Rust és modern barátai megteszik segít a helyes kód megírásában, de néha még mindig szükség lesz a C használatára, és még a Rust sem tudja garantálni, hogy ezt teszi ne írj helytelen kódot ha megfontolatlanul programoz!)
- SEO által támogatott tartalom és PR terjesztés. Erősödjön még ma.
- Platoblockchain. Web3 metaverzum intelligencia. Felerősített tudás. Hozzáférés itt.
- Forrás: https://nakedsecurity.sophos.com/2023/02/03/openssh-fixes-double-free-memory-bug-thats-pokable-over-the-network/
- 1
- 1999
- 9
- a
- felett
- Abszolút
- hozzáférés
- tulajdonképpen
- cím
- fogadott
- Után
- ellen
- algoritmus
- Minden termék
- elkülönített
- kiosztja
- lehetővé téve
- kizárólag
- már
- alternatív
- Bár
- mindig
- között
- és a
- Másik
- alkalmazások
- jóváhagyás
- ausztrál
- Hitelesítés
- szerző
- auto
- elérhető
- elkerülése érdekében
- vissza
- háttér
- background-image
- mert
- válik
- előtt
- úgy
- BEST
- Blokk
- Blocks
- határ
- Alsó
- Bogár
- bogarak
- épít
- hívás
- hívott
- Hívó
- kéri
- ami
- Okoz
- okozó
- óvatos
- Központ
- biztosan
- olcsóbb
- ellenőrizze
- vásárló
- kód
- coder
- gyűjtemény
- szín
- COM
- hogyan
- érkező
- kereskedelmi
- alkatrészek
- számítógép
- feltétel
- Körülmények
- megerősít
- Csatlakozás
- összefüggő
- Csatlakozó
- kapcsolat
- kapcsolatok
- tartalmaz
- kortárs
- másolás
- tudott
- tanfolyam
- terjed
- teremt
- készítette
- létrehozása
- kriptográfiai
- VESZÉLY
- dátum
- nap
- Nap
- határozott
- elszánt
- Fejlesztő
- fejlesztők
- Eszközök
- DID
- az
- nehéz
- kijelző
- terjesztés
- disztribúció
- Nem
- dupla mentes
- le-
- alatt
- minden
- Korai
- könnyen
- Hatékony
- bármelyik
- titkosítás
- vége
- Anglia
- Egész
- különösen
- lényegében
- Még
- EVER
- Minden
- mindenki
- Kizárólagos
- tapasztalat
- tapasztalt
- ismerős
- Jellemzők
- Fájlok
- vezetéknév
- Hal
- Rögzít
- hibája
- áramlási
- Összpontosít
- követ
- következik
- örökké
- talált
- Ingyenes
- barátok
- ból ből
- Tele
- funkció
- további
- jövő
- általában
- generált
- kap
- óriás
- Go
- jó
- nagymértékben
- garancia
- Őr
- Vendég
- hackerek
- megtörténik
- Kemény
- magasság
- itt
- történelem
- Találat
- Lyuk
- Kezdőlap
- remény
- szálloda
- lebeg
- Hogyan
- HTML
- HTTPS
- ötlet
- azonnal
- végrehajtás
- in
- Más
- tartalmaz
- Beleértve
- befogadás
- tévesen
- India
- azonnali
- helyette
- interaktív
- Internet
- internet a dolgok
- Bevezetett
- tárgyak internete
- Iot (a dolgok internete)
- IT
- maga
- tartás
- kulcsok
- Ismer
- ismert
- hiány
- hordozható számítógép
- Késő
- réteg
- vezet
- vezető
- Engedélyezés
- Korlátozott
- vonal
- LINK
- linux
- logo
- hosszabb
- néz
- nézett
- MEGJELENÉS
- készült
- fontos
- csinál
- KÉSZÍT
- kezelése
- vezetés
- Margó
- Anyag
- max-width
- eszközök
- Memory design
- említett
- microsoft
- esetleg
- hibákat
- modern
- több
- a legtöbb
- név
- Nevezett
- Szükség
- szükséges
- igények
- hálózat
- Mindazonáltal
- Új
- normális
- Ajánlatok
- hivatalos
- ONE
- nyitva
- nyílt forráskódú
- üzemeltetési
- operációs rendszer
- működés
- érdekében
- eredeti
- eredetileg
- Más
- saját
- tulajdonú
- rész
- alkatrészek
- Elmúlt
- bérletek
- Jelszó
- jelszavak
- múlt
- ösvény
- Paul
- talán
- telefon
- fizikai
- Hely
- Platformok
- Plató
- Platón adatintelligencia
- PlatoData
- Népszerű
- pozíció
- lehetséges
- Hozzászólások
- előkészített
- jelenlét
- bemutatott
- előző
- kiváltságok
- valószínűleg
- Probléma
- folyamat
- Program
- programozók
- megfelelően
- protokoll
- cél
- gyorsan
- kész
- igazi
- real-time
- kapott
- új
- Meggyógyul
- szabályos
- engedje
- megbízható
- eszébe jut
- távoli
- távoli hozzáférés
- jelentést
- Számolt
- visszatérés
- Visszatér
- Kockázatos
- Szoba
- futás
- Rozsda
- biztonságos
- Biztonság
- azonos
- Tudós
- Képernyő
- Második
- biztosan
- biztonság
- sorozatszám
- Szolgáltatások
- ülés
- ülések
- készlet
- beállítás
- felépítés
- szigorú
- Héj
- rövid
- Állítsa le
- hasonló
- Egyszerű
- egyszerűsített
- helyzet
- settenkedik
- So
- szoftver
- szilárd
- Valaki
- valami
- Nemsokára
- forrás
- sebesség
- tüskék
- Spot
- standard
- állványok
- kezdet
- Még mindig
- erős
- tárgy
- ilyen
- javasolja,
- támogatás
- SVG
- rendszer
- Vesz
- csapat
- terminál
- A
- A háztömb
- azok
- Ott.
- ebből adódóan
- dolgok
- gondoltam
- három
- idő
- alkalommal
- Cím
- nak nek
- Ma
- szerszám
- eszköztár
- szerszámok
- felső
- Végösszeg
- vágány
- átmenet
- átlátszó
- váltott
- baj
- igaz
- Bízzon
- FORDULAT
- jellemzően
- unix
- Frissítések
- frissítve
- URL
- használ
- használó
- rendszerint
- érvényesítés
- változat
- keresztül
- sebezhetőség
- kívánatos
- jól ismert
- Mit
- míg
- WHO
- széles körben
- lesz
- ablakok
- nélkül
- lenne
- ír
- írás
- írott
- év
- A te
- zephyrnet