Kirjaudu

Uutiskirje

Rekisteröidy Sektoriin ja tilaa itsellesi joko aamuisin tai iltaisin ilmestyvä uutiskirje sähköpostiisi.

Keskiviikko, 12.11.2003

Eudora-sähköpostiohjelmistossa vakava haavoittuvuus

Suositun Eudora-sähköpostiohjelmiston Windows-versiosta on löytynyt uusi puskuriylivuotohaavoittuvuus, joka voi antaa hyökkääjälle mahdollisuuden suorittaa kohdetietojärjestelmässä omia komentojaan. Haavoittuvuuteen liittyvä puskuriylivuoto tapahtuu, kun käyttäjä vastaa "Reply To All" -toiminnolla sähköpostiin, jossa "From" tai "Reply To" -kenttä sisältää ylipitkän merkkijonon. Eudorasta on jo aiemmin löydetty toinen puskuriylivuotohaavoittuvuus, joka liittyy pitkien tiedostonimien käsittelyyn.

Viestintäviraston CERT-ryhmä varoittaa haavoittuvuuksista ja suosittelee käyttäjiä päivittämään ohjelmistonsa Eudoran 6.0.1-versioon, johon haavoittuvuudet on korjattu.

Lue juttu oma, 12.11.2003 00:02. Lähde: CERT-FI, Eudora.com
Rekisteröidy ja kirjaudu sisään, jos haluat kommentoida.

Kommentit ( 15 uutta / 15 )
pistettä.
Näytä vain kommentit joilla on vähintään
Pisterajan alittavia kommentteja piilossa.
Pisterajan alittavia kommentteja piilossa.
Re: mielenkiintoista
Anonyymi kommentoija, 12.11.2003 09:31:03
Pisteet: 0
Vähän läpinäkyvä tuo sinun kommenttisi.
Pata kattilaa soimaa...

Miksei voida yksin kertaisesti myöntää, että reikiä löytyy kaikista softista (ihminen kun on erehtyväinen). Reikien korjaaminen on toinen juttu...
hanska Miksi aina puskurit vuotavat ylitse?
hanska, 12.11.2003 10:12:07
Pisteet: +1
Olen ennenkin ihmetellyt tätä, mutta miksi puskurit vuotavat ylitse? Eikö siihen voi koodata tarkistusta, että nyt menee ylitse? Sen jäleen sanoa käyttäjälle että korjaa ongelmasi itse, tätä ei tueta. Vai onko ihmiset niin laiskoja koodareita että virhetarkistus on unohtunut kokonaan. Vai eikö sitä tiedetä missä puskuri vuotaa? Noh maailma ei ole täydellinen, joten miten ohjelmat voisivatkaan olla...

Hanska
Erehtyminen on inhimillistä, mutta täydelliseen sekoiluun tarvitaan tietokone
Re: Miksi aina puskurit vuotavat ylitse?
Anonyymi kommentoija, 12.11.2003 11:52:19
Pisteet: 0
Olen ennenkin ihmetellyt tätä, mutta miksi puskurit vuotavat ylitse? Eikö siihen voi koodata tarkistusta, että nyt menee ylitse? Sen jäleen sanoa käyttäjälle että korjaa ongelmasi itse, tätä ei tueta. Vai onko ihmiset niin laiskoja koodareita että virhetarkistus on unohtunut kokonaan. Vai eikö sitä tiedetä missä puskuri vuotaa? Noh maailma ei ole täydellinen, joten miten ohjelmat voisivatkaan olla...
Kun pomo hengittää niskaa, projektin aikataulut kusevat ja koodin piti olla valmista jo kuukausia aikaisemmin, ei ole jostain syystä aikaa miettiä ja tehdä sellaisia asioita kuin virheentarkistus. Ikävää, mutta todellisuutta kun kaikki pitää tehdä entistä halvemmalla ja nopeammin, vaikka ohjelmien koko tuntuu kasvavan potenssissa.
bungle Re: Miksi aina puskurit vuotavat ylitse?
bungle, 12.11.2003 11:28:28
Pisteet: +1
Olen ennenkin ihmetellyt tätä, mutta miksi puskurit vuotavat ylitse?
Jos kiinnostusta riittää, niin tässä olisi yksi hyvä dokumentti aiheesta:

http://www.cs.fit.edu/~tr/cs-2002-12.pdf
--
"See the animal in his cage that you built, are you sure what side you're on?" -- Trent Reznor
heko Re: Miksi aina puskurit vuotavat ylitse?
heko, 13.11.2003 00:49:00
Pisteet: +337
Olen ennenkin ihmetellyt tätä, mutta miksi puskurit vuotavat ylitse? Eikö siihen voi koodata tarkistusta, että nyt menee ylitse?
Nykyään puskurien ylivuodot ovat tapetilla yksinkertaisesti siitä syystä, että ne ovat tietyllä tavalla yleisesti käytettyjen prosessori- ja käyttöjärjestelmäratkaisujen suhteen universaaleja, niitä on paljon ja ne mahdollistavat tiettyjen sellaisten jippojen suorittamisen, mitä ei monia muita tietoturva-aukkoja hyödyntämällä pääse suorittamaan. Ohjelmistoissa, joista "perinteisiä" puskuriylivuotoja on vaikea löytää, on "siirrytty" uusien ongelmien (kuten uusien kokonaislukuylivuotojen) etsimiseen niin ohjelmistojen kehittäjien kuin kräkkereidenkin keskuudessa.

Ylivuotoja ja niiden haittoja voidaan torjua olennaisesti kolmella tavalla: ohjelmointimetodiikalla, jossa vältetään ylivuotojen kirjoittamista; työkaluilla, jotka estävät ylivuotojen syntymisen; sekä työkaluilla, jotka rajoittavat ylivuodon vaikutusten eskaloitumista.

Ohjelmointimetodiikan osaltakin voidaan puhua sekä tietystä ymmärryksestä ja asenteesta (ohjelmoija ymmärtää, mikä on osoitin, mikä on muistialue ja mikä on muistivaraus sekä yrittää pitää nämä reunaehdot mielessään ohjelmoidessaan; pyritään siihen, että ohjelmoija suunnittelee ja toteuttaa ratkaisun huolellisesti nimenomaan laatua silmällä pitäen; pyritään siihen, että useampi ohjelmoija todella lukee koodin läpi ja pyrkii nimenomaan etsimään siitä virheitä tai varmistumaan sen oikeellisuudesta) että mekaanisemmista työkaluista (C:ssä esim. konventio käyttää OpenBSD:ssä kehitettyjä strl-funktioita: http://www.courtesan.com/todd/papers/strlcpy.html tai muuten kirjoittaa koodinsa tietyllä hyvänä pidetyllä tavalla). Tällä alueella useimmissa ohjelmointiympäristöissä on parantamisen varaa syistä, joita en lähde tässä erittelemään (ja ehkäpä en jopa niitä täysin osaisikaan eritellä :-): käytännössä ohjelmoija usein miettii vain hänen kannaltaan mukavimman tavan ratkaista jokin ongelma ja pitää sitä valmiina heti, kun se näyttää toimivan jossain esimerkkitapauksessa.

Työkaluiksi, joilla pyritään estämään ylivuotojen syntyminen, voidaan lukea kaikenlaisia: "mekaaninen" blackbox-testaus (jonka kritiikkiä esitetään mm. "Writing Solid Code"-klassikossa) ja koodia analysoivat työkalut; ehkä ohjelmointikieletkin, joissa pointterit eivät näy käyttäjille. Näillä ratkaisuilla on omat heikot puolensa; yhteisinä heikkouksina voidaan pitää mm. (ensinnäkin) sitä, että ne ovat mekaanisen ja "pinnoitusmaisen" luonteensa vuoksi epätäydellisiä, mutta että ne (toisekseen ja tästä johtuen) luovat silti usein väärää turvallisuudentunnetta. Jos ohjelmoija alkaa luottaa tällaisiin työkaluihin jonkinlaisena laadun takeena, hän luultavasti keskittyy entistäkin vähemmän huolelliseen suunnittelu- ja toteutustyöhön laadun näkökulmasta. Blackbox-testauksessa ei voida käytännössä käydä läpi kaikkia mahdollisia käyttötilanteita; koodia analysoivat työkalut eivät käytännössä koskaan ole täydellisiä (käytännössä lähes kaikissa kääntäjissäkin on varoituksia, jotka on mahdollista kytkeä päälle, mutta jotka silti mahdollistavat ohjelmointivirheet, kts. esim. http://sektori.com/uutiset/5130/linux-ytimeen#k567... ); kaikki kielet itse käyttävät jollain tapaa pointtereita, ja niiden virtuaalikonetoteutuksista löytyy bugeja (jotka voivat siten olla paljon fataalimpia kuin yksittäiset bugit yksittäisissä ohjelmissa), ja lisäksi niillä toteutetuissa ohjelmissa voi olla bugeja, jotka faktisesti vastaavat "buffer overflow":ta mutta käytännössä vain näkyvät vähän eri tavalla ja aiheuttavat erilaisia ongelmia. (Javassa esim. NullPointerException ja ArrayOutOfBoundsException; vastaavia ongelmia silloin, kun tällaisiakaan ei synny, on se, että esim. jokin merkkijono vain "näkymättömästi" lyhenee ilman, että siitä käyttäjälle ilmoitetaan.)

Viimeisenä listassa pitäisin niitä retroaktiivisia työkaluja, joilla pyritään estämään overflow'n vaikutusten eskaloituminen. Tällaisia ovat esim. kääntäjän tarkistukset (jotka voidaan kiertää; kts. esim. http://www.phrack.org/show.php?p=56&a=5 ) sekä muistinhallinnan tarkastukset (jotka voidaan kiertää; kts. esim. http://secinf.net/info/unix/stack.txt ; ftp://ftp.netsys.com/pub/archives/linux_lpr.c ; http://www.nextgenss.com/papers/defeating-w2k3-sta... ). Kaikki nämä ratkaisut ovat ensinnäkin ainakin yksin ja itsessään riittämättömiä ja ne voidaan kiertää, ja ne voivat aiheuttaa samanlaista väärää turvallisuudentunnetta kuin ylempänä tarkistustyökalut. Toisekseen ne vain ehkäisevät buffer overflow'n avulla suoritettavan injektiohyökkäyksen: ne eivät korjaa bugeja (vaikka jotkut ratkaisut voivat auttaa niiden löytämisessä, koska ne virhetilanteissa kohdistavat huomion oikeaan bugiin), ne eivät ehkäise muunlaisia hyökkäyksiä (esim. DoS hyökkäys palvelimeen, joka segfaulttaa tietyssä tilanteessa), eivätkä ne ehkäise muita ongelmatiloja kuin hyökkäyksiä.

Toisin sanoen sekä toinen että kolmas kategoria ovat selkeästi retroaktiivisia toimintamalleja: ne pyrkivät minimoimaan vahinkoa, eivät estämään sitä. Ohjelmissa on niistä huolimatta muita turva-aukkoja ja ohjelmien laatu on niistä huolimatta yhä heikkoa. Yleisesti ottaen voidaan sanoa, että mikä tahansa "tietoturva-aukko" on bugi myös siinä mielessä, että se voi aiheuttaa vahinkoa silloinkin, kun sitä ei aktiivisesti yritetä hyödyntää, vaikka usein pienemmässä mittakaavassa (mutta ei välttämättä vähemmän tuhoisin seurauksin, jos se yksi vahinko sattuu kriittisessä tilanteessa). Käänteisesti keskittyminen laatuun ja oikeellisuuteen (tai "virheettömyyteen") vähentää automaattisesti myös tietoturva-aukkoja.

Kaiken kaikkiaan kuvattuja metodeja kannattaa yleensä kaikkia käyttää, jos se on mahdollista. Yksi tapa ei joko ihmisen tai koneen heikkoudesta johtuen vielä poista kaikkia ongelmia, mutta yhdessä nämä tavat vaikeuttavat todella merkittävissä määrin tietoturvanäkökulmasta hyökkääjän mahdollisuuksia saada aikaan vahinkoa tai oikeudetonta hyötyä. Jos ohjelmakoodiin on alun perin kirjoitettu 10 bugia per 1000 riviä vs. 100 per 1000 riviä, jos tarkistustyökalut löytävät näistä 9 ennen kuin bugit päätyvät ajoon versus 0 löydettyä bugia ("if it compilers, it's perfect!"), ja jos erilaiset mekaaniset työkalut saavat aikaan sen, että hyökkääjän pitäisi saada kierrettyä kääntäjän manipulointi ja stackin suojaus vs. yksinkertainen shellcode-injektio, ja ihmetellä chrootissa uidina 65534 ilman shelliä tai kääntäjää vs. uidina 0 /-nodessa, uskallettaneen arvioida, että järjestelmän tietoturvaa on kohennettu huomattavasti.
--
Heikki http://www.heikkikorpela.fi heikki@heikkikorpela.fi
weicco Re: Miksi aina puskurit vuotavat ylitse?
weicco, 12.11.2003 10:34:34
Pisteet: +1
Olen ennenkin ihmetellyt tätä, mutta miksi puskurit vuotavat ylitse? Eikö siihen voi koodata tarkistusta, että nyt menee ylitse?
Voi koodata, eikä ole mikään amerikantemppukaan. Mutta kun projektit paisuvat ja koodia on kymmeniä tuhansia rivejä, on ymmärrettävää, että jossain tapahtuu joku virhe. On olemassa myös erilaisia kirjastoja, joita käyttämällä moisista ongelmista päästään eroon. Lisäksi ainakin OpenBSD käyttöjärjestelmässä on ns. non-executable stack, joka estää vihamielisen koodin suorituksen, kun stackissa olevat puskurit vuotavat yli (paljon ohjelmointitermejä, joilla hämään lukijaa).

Itse C:tä koodanneena ymmärrän, että puskurin ylivuotovirhe on helppo tehdä, mutta pienellä harjoittelulla sitä osaa välttää. Jotkut kielet taas mahdollistavat kaikenmaailman toimintoja, joiden pitäisi automaattisesti korjata tällaisia. Kuulemma ovat toimiviakin, mutta silti näitä ongelmia vain esiintyy...

Lisäksi on myös olemassa ohjelmia, jotka tarkastavat koodin ja varoittavat mahdollisista ylivuodoista sekä muista mahdollisista bugeista. Voisikin Eudoran kehittäjätiimille suositella jotain tällaista :)
Join me! Together we can rule the galaxy as father and son.
Re: Miksi aina puskurit vuotavat ylitse?
Anonyymi kommentoija, 12.11.2003 12:24:43
Pisteet: 0
Juuri näiden inhimillisten virheiden takia kannattaa unohtaa ohjelmointikielet, joissa moiset ovat mahdollisia. Suosittelen vaihtamaan sen C:n vaikka Javaan.
bungle Re: Miksi aina puskurit vuotavat ylitse?
bungle, 12.11.2003 15:32:50
Pisteet: +1
Juuri näiden inhimillisten virheiden takia kannattaa unohtaa ohjelmointikielet, joissa moiset ovat mahdollisia. Suosittelen vaihtamaan sen C:n vaikka Javaan.
Vaikka Java:ssa ohjelmointikielenä on hyvin estetty tällaisten ongelmien ilmeneminen (esim. Exceptionit tietyillä operaatioilla), ei se poista sitä mahdollisuutta, etteikö itse Java-implementaatiosta löytyisi vastaavia ongelmia. Ja niitä on myös löytynyt ja löytyy kokoajan lisää. Myöskään muistin vuotaminen on Javassa täysin arkipäivää vaikka onkin käytössä GC:t ja muut. Vaikka muistin vuotaminen ei sinänsä aiheuta turvallisuusriskiä, on se inhottavaa esim. laitteissa joissa on vähän muistia. Itse olen löytänyt muistivuodon Nokian (ainakin 3650:n) java implementaatiosta, jonka on tosin saanut kierrettyä lataamalla esim. kuvat vain kertaalleen. Tämä tosin kasvattaa mahdollisuutta, että laitteen heap/stack vuotaisi yli.
--
"See the animal in his cage that you built, are you sure what side you're on?" -- Trent Reznor
weicco Re: Miksi aina puskurit vuotavat ylitse?
weicco, 12.11.2003 13:15:23
Pisteet: 0
Juuri näiden inhimillisten virheiden takia kannattaa unohtaa ohjelmointikielet, joissa moiset ovat mahdollisia. Suosittelen vaihtamaan sen C:n vaikka Javaan.
No prrkl. Sinähän sen sanoit. Olisikin pitänyt pomolle ehdottaa edellisessä duunissa, että vaihdetaan tuo huono C Javaan ja tehdään verkkoajurit Javalla, kun se ei vuoda puskureita.
Join me! Together we can rule the galaxy as father and son.
Re: Miksi aina puskurit vuotavat ylitse?
Anonyymi kommentoija, 14.11.2003 12:00:22
Pisteet: 0
Olen ennenkin ihmetellyt tätä, mutta miksi puskurit vuotavat ylitse? Eikö siihen voi koodata tarkistusta, että nyt menee ylitse?
Lisäksi ainakin OpenBSD käyttöjärjestelmässä on ns. non-executable stack, joka estää vihamielisen koodin suorituksen, kun stackissa olevat puskurit vuotavat yli (paljon ohjelmointitermejä, joilla hämään lukijaa).
Se, että Intelin x86-sarja aloitettiin jo 70-luvulla tarkoittaa että useimmissa kotikoneissa on edelleen käytössä arkkitehtuuria, joka on jo tuomittu vanhentuneeksi. Uudemmissa prosessoriarkkitehtuureissa (kuten PowerPC) muistinsuojaus on siten parempaa että et voi suorittaa komentoja aivan miten sattuu. Tästä on ollut juttua aikaisemmin ainakin <a href=http://www.arstechnica.com">ars technicassa</a> useampaankin otteeseen, kannattaa lukea jos aihe kiinnostaa ja on aikaa.
superhoe Kysymys kuuluukin..
superhoe, 12.11.2003 10:41:49
Pisteet: 0
.. että kuka ihme haluaa replytä viestiin jossa reply-to:ssa on 'ylipitkä merkkijono'.
--
Re: Kysymys kuuluukin..
Anonyymi kommentoija, 12.11.2003 11:31:05
Pisteet: 0
.. että kuka ihme haluaa replytä viestiin jossa reply-to:ssa on 'ylipitkä merkkijono'.
Reply-to -kenttä ei näy kaikissa e-mail -clienteissa. Ei voida olettaa, että ennen reply to all -napin painamista kävisi aina tutkailemassa e-mailin headereita, jotka on ainakin MS:n tuotteissa piilotettu hyvin käyttäjältä.