Avatud lähtekoodiga operatsioonisüsteemi distributsioon OpenBSD on süsteemiadministraatorite seas hästi tuntud, eriti nende seas, kes haldavad servereid, kuna see keskendub turvalisusele kiirusele, funktsioonidele ja uhketele esiotsadele.
Võib-olla on selle logo sobiv paisukala – täispuhutud, naeltega, mis on valmis tõrjuma kavalaid häkkereid, kes võivad kaasa tulla.
Kuid OpenBSD meeskond on ilmselt kõige tuntum mitte kogu distributsiooni, vaid kaugjuurdepääsu tööriistakomplekti poolest OpenSSH mis kirjutati 1990. aastate lõpus operatsioonisüsteemi endasse lisamiseks.
SSH, lühend turvaline kest, lõi algselt Soome arvutiteadlane Tatu Ylönen 1990. aastate keskel lootuses võõrutada süsteemiadministraatorid riskantsest harjumusest kasutada Telneti protokolli.
Probleem Telnetiga
Telnet oli märkimisväärselt lihtne ja tõhus: füüsiliste juhtmete ühendamise (või telefoniliini kaudu modemi kasutamise) asemel kasutasite teletüüpi ühenduse loomiseks kaugserveritega TELetype NETwork ühendust.
Põhimõtteliselt saadeti ja võeti vastu andmeid, mis tavaliselt liiguvad spetsiaalse jadaühenduse või sissehelistamisliini kaudu edasi-tagasi, Interneti kaudu, kasutades ahelkommutatsiooniga punktist-punkti lingi asemel pakettkommutatsiooniga TCP-võrguühendust. .
Sama tuttav sisselogimissüsteem, odavamad ühendused, pole vaja spetsiaalseid andmesideliine!
Telneti hiiglaslik viga oli muidugi selle täielik krüptimise puudumine, nii et teie täpse terminali seansi nuusutamine oli triviaalne, võimaldades kräkkijatel näha iga teie sisestatud käsku (isegi teie tehtud vigu ja kõiki tabamise kordi [Backspace]
) ja iga toodetud väljundi bait…
…ja muidugi teie kasutajanimi ja parool seansi alguses.
Igaüks teie võrguteel ei saa mitte ainult hõlpsalt teie süsteemiadministraatori seansse oma ekraanil reaalajas rekonstrueerida, vaid tõenäoliselt ka teie seanssi rikkuda, muutes kaugserverisse saadetud käske ja võltsitud vastuseid, nii et te ei märganud salamõte.
Nad võivad isegi luua petisserveri, meelitada teid selle juurde ja muuta pettuse tuvastamise üllatavalt keeruliseks.
Tugev FTW krüpteering
Ylöneni SSH eesmärk oli lisada Telneti-laadse seansi igasse lõppu tugev krüptimise ja autentimise kiht, luues turvaline kest (Seda see nimi tähistab, kui olete kunagi mõelnud, kuigi peaaegu kõik lihtsalt kutsuvad seda ess-ess-aitch neil päevil).
See oli kohene hitt ja süsteemiadministraatorid võtsid protokolli kiiresti kasutusele kõikjal.
Peagi järgnes OpenSSH, nagu me eespool mainisime, ilmudes esmakordselt 1999. aasta lõpus osana OpenBSD 2.6 vabastama.
OpenBSD meeskond soovis luua tasuta, usaldusväärse ja avatud lähtekoodiga protokolli, mida nad ja keegi teine võiks kasutada, ilma litsentside või äriliste komplikatsioonideta, mis olid Ylöneni algset rakendamist vahetult pärast selle avaldamist koormanud.
Tõepoolest, kui käivitate Windowsi SSH-serveri ja loote sellega kohe ühenduse Linuxi arvutist, tuginete peaaegu kindlasti mõlemas otsas OpenSSH-rakendusele.
SSH-protokolli kasutatakse ka teistes populaarsetes klient-serveri teenustes, sealhulgas SCP ja SFTP, lühendatult turvaline koopia ja turvaline FTP vastavalt. SSH tähendab lõdvalt "ühendage turvaliselt ja käivitage teises otsas käsk SHell", tavaliselt interaktiivsete sisselogimiste puhul, kuna Unixi programm käsukesta jaoks on tavaliselt /bin/sh
. SCP on sarnane, kuid failide kopeerimiseks, kuna tavaliselt kutsutakse Unixi faili kopeerimise käsku /bin/cp
, ja SFTP-d nimetatakse samamoodi.
OpenSSH pole linnas ainus SSH-tööriistakomplekt.
Teised tuntud teostused hõlmavad järgmist: libssh2, arendajatele, kes soovivad luua SSH-toe otse oma rakendustesse; tilkkaru, Austraalia kodeerijalt eemaldatud SSH-server matt johnston mida leidub laialdaselt niinimetatud asjade Interneti (Internet of Things) seadmetes, nagu koduruuterid ja printerid; ja PuTTY, populaarne tasuta SSH-ga seotud tööriistade kogumik Windowsi jaoks sõltumatult avatud lähtekoodiga arendajalt Simon Tatham Inglismaal.
Kuid kui olete tavaline SSH-kasutaja, olete täna peaaegu kindlasti loonud ühenduse vähemalt ühe OpenSSH-serveriga, muu hulgas seetõttu, et enamik kaasaegseid Linuxi distributsioone sisaldab seda standardse kaugjuurdepääsu tööriistana ja Microsoft pakub nii OpenSSH-klienti kui ka OpenSSH-d. serverit tänapäeval ametlike Windowsi komponentidena.
Topelt-vaba veaparandus
OpenSSH versioon 9.2 just tuli välja ja väljalaske märkmed teatage järgmiselt:
See väljalase sisaldab [...] mäluohutuse probleemi parandusi. Arvatakse, et [see viga] ei ole kasutatav, kuid me teatame enamikust võrgust kättesaadavatest mäluhäiretest turvavigadena.
Viga mõjutab sshd
, OpenSSH-server ( -d
järelliide tähistab deemon, Unixi nimi taustaprotsessile, mida Windows kutsub a teenus):
sshd(8): parandage OpenSSH 9.1-s kasutusele võetud topeltvaba mälu eelautentimise tõrge. Usutakse, et seda ei saa kasutada ja see toimub privilegeerimata autentimiseelses protsessis, mis on allutatud chroot(2)-le ja on enamikel suurematel platvormidel veelgi liivakastis.
Topeltvaba viga tähendab, et mäluplokk, mille olete juba operatsioonisüsteemi tagastanud, saab seda programmi teistes osades uuesti kasutada...
…saab hiljem uuesti tagasi programmi osa, mis tegelikult enam seda mälu ei „oma”, kuid ei tea, et ta seda ei ole.
(Või antakse sihilikult tagasi koodi küsimisel, mis üritab viga tahtlikult esile kutsuda, et haavatavus sisse ära kasutama.)
See võib põhjustada peeneid ja raskesti lahtiharutavaid vigu, eriti kui süsteem märgib vabastatud ploki esmakordsel free()
juhtub, eraldab selle hiljem teie koodi mõnele teisele osale, kui see küsib kaudu mälu malloc(
) ja seejärel märgib üleliigse kõne korral ploki uuesti vabaks free()
ilmub.
See jätab teid sellisesse olukorda, mida kogete hotelli sisse registreerides, kus öeldakse: "Oh, häid uudiseid! Arvasime, et oleme täis, kuid teine külaline otsustas lihtsalt varakult välja registreerida, et saaksite oma toa saada.
Isegi kui tuba on sisse minnes korralikult puhastatud ja uute elanike jaoks ette valmistatud ning tundub, et see on teie ainsaks kasutamiseks õigesti eraldatud, peate siiski uskuma, et eelmise külalise võtmekaart tühistati tõepoolest õigesti ja et nende “ varajane kassasse jõudmine” ei olnud kaval kaval, et samal päeval hiljem tagasi hiilida ja sülearvuti varastada.
Veaparandus veaparanduseks
Irooniline, kui vaatate hiljutist OpenSSH-koodi ajalugu, näete, et OpenSSH-l oli funktsioonis nimega tagasihoidlik viga. compat_kex_proposal()
, mida kasutatakse selleks, et kontrollida, millist võtmevahetusalgoritmi ühenduse loomisel kasutada.
Kuid selle tagasihoidliku vea parandamine tõi selle asemel kaasa tõsisema haavatavuse.
Muide, vea olemasolu tarkvara osas, mida ühenduse seadistamisel kasutatakse, muudab selle nn. võrguga juurdepääsetav eelautentimine haavatavus (või autentimiseelne viga lühidalt).
Topeltvaba viga ilmneb käivitatavas koodis pärast klient on algatanud kaugseansi, kuid enne mis tahes võtmekokkulepe või autentimine on toimunud, nii et haavatavus võib teoreetiliselt käivituda enne, kui paroolid või krüptograafilised võtmed on valideerimiseks esitatud.
OpenSSH 9.0 puhul compat_kex_proposal
nägi välja umbes selline (siin oluliselt lihtsustatult):
char* compat_kex_proposal(char* suggestion) { if (condition1) { return suggestion; } if (condition2) { suggestion = allocatenewstring1(); } if (condition3) { suggestion = allocatenewstring2(); } if (isblank(suggestion)) { error(); } return suggestion; }
Idee seisneb selles, et helistaja edastab oma mäluploki, mis sisaldab tekstistringi, mis viitab võtmevahetuse seadistusele, ja saab tagasi kas loa kasutada sama soovitust, mille ta saatis, või äsja eraldatud tekstistringi koos värskendatud soovitusega. .
Viga seisneb selles, et kui tingimus 1 on vale, kuid tingimused 2 ja 3 on mõlemad tõesed, eraldab kood kaks uusi tekstistringe, kuid ainult tagastab üks.
Mäluplokk, mille eraldas allocatenewstring1()
ei vabane kunagi ja kui funktsioon naaseb, kaob selle mäluaadress jäädavalt, nii et koodil pole võimalust free()
seda tulevikus.
See plokk on sisuliselt hüljatud, põhjustades nn a mäluleke.
Aja jooksul võib see põhjustada probleeme, võib-olla isegi sundides serveri mälu ülekoormusest taastumiseks välja lülituma.
OpenSSH 9.1-s värskendati koodi, et vältida kahe stringi eraldamist, kuid ühest neist loobumist:
/* 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; }
Sellel on topeltvaba viga, sest kui tingimus 1 ja tingimus 2 on mõlemad valed, kuid tingimus 3 on tõene, eraldab kood vastusena tagasisaatmiseks uue stringi...
…aga vabastab valesti stringi, mille helistaja algselt edastas, kuna funktsioon allocatenewstring1()
seda ei kutsuta kunagi muutuja värskendamiseks suggestion
.
Edastatud soovituste string on mälu, mis kuulub helistajale, ja et helistaja vabastab seetõttu hiljem teemasid, mis toob kaasa topeltvaba ohu.
OpenSSH 9.2 puhul on kood muutunud ettevaatlikumaks, pidades silmas kõiki kolme võimalikku kasutatavat mäluplokki: originaal suggestion
(kellegi teisele kuuluv mälu) ja kaks võimalikku uut stringi, mis võidakse teel eraldada:
/* 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; }
Kui tingimus 1 on tõene, kasutatakse edasiantud stringi uut koopiat, nii et helistaja saab seda hiljem teha free()
nende edasi antud stringi mälu, kui neile meeldib.
Kui saame tingimusest 1 mööda ja tingimus 2 on tõene, kuid tingimus 3 on väär, siis on loodud alternatiivne soovitus allocatenewstring1()
tagastatakse ja edasi antud suggestion
string jäetakse rahule.
Kui tingimus 2 on väär ja tingimus 3 on tõene, genereeritakse ja tagastatakse uus string ning edastatakse suggestion
string jäetakse rahule.
Kui nii tingimus 2 kui ka tingimus 3 on tõesed, eraldatakse teel kaks uut stringi; esimene vabaneb, sest seda pole vaja; teine tagastatakse; ja edasiantud suggestion
string jäetakse rahule.
Võite RTxM selle kinnitamiseks, kui helistate free(newone)
millal newone
is NULL
, siis "toimingut ei tehta", sest see on alati ohutu free(NULL)
. Sellegipoolest kaitsevad paljud programmeerijad selle eest kindlalt koodi, näiteks if (ptr != NULL) { free(ptr); }
.
Mida teha?
Nagu OpenSSH meeskond soovitab, on selle vea ärakasutamine raske, muu hulgas piiratud õiguste tõttu, mida sshd
programmil on ühenduse seadistamise ajal aega.
Sellest hoolimata teatasid nad sellest kui turvaaugust, kuna see on just see, nii et veenduge, et olete värskendanud OpenSSH 9.2.
Ja kui kirjutate koodi C-keeles, pidage meeles, et olenemata sellest, kui kogenud olete, on mäluhalduses lihtne valesti eksida...
… nii et olge seal ettevaatlik.
(Jah, Rust ja tema kaasaegsed sõbrad teevad seda aitab teil õiget koodi kirjutada, kuid mõnikord peate siiski kasutama C-d ja isegi Rust ei saa seda garanteerida lõpetage vale koodi kirjutamine kui programmeerite läbimõtlematult!)
- SEO-põhise sisu ja PR-levi. Võimenduge juba täna.
- Platoblockchain. Web3 metaversiooni intelligentsus. Täiustatud teadmised. Juurdepääs siia.
- Allikas: https://nakedsecurity.sophos.com/2023/02/03/openssh-fixes-double-free-memory-bug-thats-pokable-over-the-network/
- 1
- 1999
- 9
- a
- üle
- absoluutne
- juurdepääs
- tegelikult
- aadress
- vastu
- pärast
- vastu
- algoritm
- Materjal: BPA ja flataatide vaba plastik
- paigutatud
- eraldab
- Lubades
- üksi
- juba
- alternatiiv
- Kuigi
- alati
- hulgas
- ja
- Teine
- rakendused
- heakskiit
- Austraalia
- Autentimine
- autor
- auto
- saadaval
- vältima
- tagasi
- tagapõhi
- background-image
- sest
- muutuma
- enne
- Arvatakse
- BEST
- Blokeerima
- Plokid
- piir
- põhi
- Bug
- vead
- ehitama
- helistama
- kutsutud
- helistaja
- Kutsub
- mis
- Põhjus
- põhjustades
- ettevaatlik
- keskus
- kindlasti
- odavam
- kontrollima
- klient
- kood
- kooder
- kogumine
- värv
- COM
- Tulema
- tulevad
- kaubandus-
- komponendid
- arvuti
- seisund
- Tingimused
- Kinnitama
- Võta meiega ühendust
- seotud
- ühendamine
- ühendus
- Side
- sisaldab
- kaasaegne
- kopeerimine
- võiks
- kursus
- cover
- looma
- loodud
- loomine
- krüptograafia
- OHT
- andmed
- päev
- Päeva
- otsustatud
- pühendunud
- arendaja
- Arendajad
- seadmed
- DID
- Surema
- raske
- Ekraan
- jaotus
- Väljamaksed
- Ei tee
- topeltvaba
- alla
- ajal
- iga
- Varajane
- kergesti
- Tõhus
- kumbki
- krüpteerimist
- lõppeb
- Inglismaa
- Kogu
- eriti
- põhiliselt
- Isegi
- KUNAGI
- Iga
- igaüks
- Eksklusiivne
- kogemus
- kogenud
- tuttav
- FUNKTSIOONID
- Faile
- esimene
- Kala
- Määrama
- viga
- voog
- Keskenduma
- Järgneb
- järgneb
- igavesti
- avastatud
- tasuta
- sõbrad
- Alates
- täis
- funktsioon
- edasi
- tulevik
- üldiselt
- loodud
- saama
- hiiglane
- Go
- hea
- suuresti
- garantii
- valvur
- külaline
- häkkerid
- juhtub
- Raske
- kõrgus
- siin
- ajalugu
- Tulemus
- Auk
- Avaleht
- lootus
- hotell
- hõljuma
- Kuidas
- HTML
- HTTPS
- idee
- kohe
- täitmine
- in
- Teistes
- sisaldama
- Kaasa arvatud
- kaasamine
- valesti
- India
- kiire
- selle asemel
- interaktiivne
- Internet
- Asjade Internet
- sisse
- asjade Interneti
- Iot (asjade internet)
- IT
- ise
- pidamine
- võtmed
- Teadma
- teatud
- puudus
- sülearvuti
- Hilja
- kiht
- viima
- juhtivate
- litsentsimine
- piiratud
- joon
- LINK
- Linux
- logo
- enam
- Vaata
- Vaatasin
- välimus
- tehtud
- peamine
- tegema
- TEEB
- juhtima
- juhtimine
- Varu
- küsimus
- max laiuse
- vahendid
- Mälu
- mainitud
- Microsoft
- võib
- vigu
- Kaasaegne
- rohkem
- kõige
- nimi
- Nimega
- Vajadus
- vaja
- vajadustele
- võrk
- Sellegipoolest
- Uus
- normaalne
- Pakkumised
- ametlik
- ONE
- avatud
- avatud lähtekoodiga
- tegutsevad
- operatsioonisüsteemi
- töö
- et
- originaal
- algselt
- Muu
- enda
- omanikuks
- osa
- osad
- Vastu võetud
- möödub
- Parool
- paroolid
- minevik
- tee
- Paul
- ehk
- telefon
- füüsiline
- Koht
- Platvormid
- Platon
- Platoni andmete intelligentsus
- PlatoData
- populaarne
- positsioon
- võimalik
- Postitusi
- valmis
- olemasolu
- esitatud
- eelmine
- privileegid
- tõenäoliselt
- Probleem
- protsess
- Programm
- Programmeerijad
- korralikult
- protokoll
- eesmärk
- kiiresti
- valmis
- reaalne
- reaalajas
- saadud
- hiljuti
- Taastuma
- regulaarne
- vabastama
- usaldusväärne
- meeles pidama
- kauge
- Remote Access
- aru
- Teatatud
- tagasipöördumine
- Tulu
- Riskantne
- ruum
- jooks
- Rust
- ohutu
- ohutus
- sama
- teadlane
- Ekraan
- Teine
- kindlalt
- turvalisus
- seeria-
- Teenused
- istung
- istungid
- komplekt
- kehtestamine
- seade
- raske
- Shell
- Lühike
- sulgema
- sarnane
- lihtne
- lihtsustatud
- olukord
- hiilima
- So
- tarkvara
- tahke
- Keegi
- midagi
- Varsti
- allikas
- kiirus
- naelu
- Kaubandus-
- standard
- seisab
- algus
- Veel
- tugev
- teema
- selline
- Soovitab
- toetama
- SVG
- süsteem
- Võtma
- meeskond
- terminal
- .
- Plokk
- oma
- Seal.
- seetõttu
- asjad
- arvasin
- kolm
- aeg
- korda
- Kapslid
- et
- täna
- tööriist
- Käsiraamat
- töövahendid
- ülemine
- Summa
- jälgida
- üleminek
- läbipaistev
- vallandas
- häda
- tõsi
- Usalda
- Pöörake
- tüüpiliselt
- unix
- Värskendused
- ajakohastatud
- URL
- kasutama
- Kasutaja
- tavaliselt
- kinnitamine
- versioon
- kaudu
- haavatavus
- tagaotsitav
- hästi tuntud
- M
- kuigi
- WHO
- laialdaselt
- will
- aknad
- ilma
- oleks
- kirjutama
- kirjutamine
- kirjalik
- aastat
- Sinu
- sephyrnet