Olen kehitellyt skriptiä, jonka adminsivusta voi tallentaa asetuksia asetus.php
tiedostoon. Kun salasana kentästä syötetään salasana, salasana salataan md5-funkkarilla, ja tallennetaan sitten asetus.php tiedostoon tyyliin $salasana = salattu salasana.
Onko tässä olemassa riskejä, että joku voisi jollain tavalla päästä käsiksi tiedostoon? Onko tälläinen keino takuuvarma? Itselläni ei ole kokemuksia tälläisestä, joten pyytäisin selvitystä asiasta kokeneemmilta.
käsittääkseni md5-salauksen voi purkaa vain bruteforcella, eli jos käyttäjillä on hyvät salasanat voi niiden arvaus kestää tosi kauan.
Jos olen väärässä voitte korjata..
Siis juu eihän tuota md5-tiivistefunktion 32 -merkkistä hexadesimaalilukua tosiaan pysty muuten purkamaan kuin brute forcettamalla, mutta nykyään koneiden tehot on sitä luokkaa, että sillä saa varsin nopeasti brute forcetettua ne... Senpä takia se txt-tiedosto jossa tunnukset on tulisi suojata htacceessilla tai sitten tehdä se tietokannalla.
Voithan tehdä varmuuden vuoksi vielä jonkinmoista lisäsalausta, vaikka esim. niin että salasanan joka toiselle merkille teet ensin rot13-muunnoksen ja vaikka vielä käännät sen takaperin ja sitten vasta md5 niin murtaminen menee vielä muutamaa pykälää hankalammaksi.
Ei taida vielä ihan tavalliset konetehot riittää md5-hashien purkamiseen, jos vain alkuperäinen salasana on tarpeeksi pitkä ja sisältää sekä isoja, että pieniä merkkejä ja erikoismerkkejä vielä lisäksi. Lyhyet pelkistä pienistä kirjaimista koostuvat salasanat tosin taitaa voida jo järkevässä ajassa murtaa.
Oikea ratkaisu on ns. suolata nuo salasanahashit.
Eli sen sijaan, että lasket hashin pelkästään käyttäjän antamasta salasanasta, arvot jokaiselle käyttäjälle uniikin merkkijonon, eli suolan, ja lasket hashin tuosta suolasta + käyttäjän antamasta salasanasta.
En nyt jaksa/jouda kirjottaa pitempää selitystä, niin esitän asian vaan koodina. Pitääkin myöhemmin kirjottaa aiheesta vaikka koodivinkki. Tätä tunnutaan kysyttävän aika usein.
Kiitoksia vastauksista.
Kysynkin vielä että onko olemassa riskiä että joku pääsisi tarkastelemaan
asetus.php tiedoston sisältöä, jos tiedoston osoite on selvillä?
Voiko joku siis saada selville mikä salasana on määritetty asetus.php:n
muuttujaan?
Jos serveri päättää jostain syystä lähettää .php-tiedostot selkokielisinä (ajamatta siis tulkin läpi, nähty on) niin kyllä voi. Tallenna mieluummin vaikka tekstitiedostoon webrootin ulkopuolelle. PHP-tiedostoihin kirjoittaessa tulee väkisinkin mieleen ohjelma, joka muokkaa itseään, mitä pidetään yleensä huonona käytäntönä.
Kuuluuko noiden suolojen olla aina uniikkeja vai riittääkö jos käyttää aina samaa suolaa? Varmasti uniikki suola on turvallisempi, mutta eikö samallaisenkin suolan käyttäminen jo vaikeuta hakkerin työtä paljon.
Uniikki, satunnainen suola: Työläin toteuttaa, turvallisin.
Uniikki, muista käyttäjätiedoista muodostettu suola: Mahdollisuus arvata suolan kaava riippuen kaavan ja salakalojen yksinkertaisuudesta.
Staattinen suola: Mahdollisuus arvata suola, mikä helpottaa kaikkien salakalojen bruteforcetusta. Vaikutuksen taso on suoraan kytköksissä suolan ja salakalojen yksinkertaisuuteen.
Aina voi vielä yhdistää sivustokohtaisen suolan uniikkeihin ja iteroida lisäturvan saavuttamiseksi. Ja nyt kun hash-lisäosa on oletusarvoisesti päällä, käyttäkää ihmeessä jotain jykevämpää summa-algoritmia kuin md5.
Tuosta md5:n bruteforcetuksesta... Käytetään ns. Sateenkaaritaulukoita. http://en.wikipedia.org/wiki/Rainbow_table, joilla voidaan rankasti laskea hommaan tarvittavaa aikaa. Näissä toki miinuksena on taulujen suuri koko ja esilaskenta-aika.
No sitä vartenhan se suola siihen laitetaan, ettei sateenkaaritauluja voi käyttää.
Grez kirjoitti:
No sitä vartenhan se suola siihen laitetaan, ettei sateenkaaritauluja voi käyttää.
Kunhan koitan osoittaa että suola on tärkeä, ja miksi se on tärkeä. Tuota asiaa kun ei vielä oltu tässä keskustelussa mainittu :)
Niinjoo, jos murtautuja pääsee niin pitkälle että saa käsiinsä itse hashit, on hyvin mahdollista että suola(t) löytyvät myös nopsaan. Sen jälkeen bruteforce on taas astetta helpompaa.
Mielestäni suolauksessa ei ole millään tavalla edes ideanakaan, että se suola olisi jotenkin salaisuus.
Editoin itsekin tätä. Täytyy varmaan lukea tuo wikiartikkeli tarkemmin ennen kuin kommentoin sitä lisää.
Kerrotaan siis suola kaikille, mitäs hyötyä siitä sen jälkeen on ?
Edit: Joo, lopetetaan editointisota, anteeksi että aloitin. Sitä vaan ajattelee että "ei tätä kuitenkaan kukaan vielä lukenut".
Edit2: JA vielä itseäni paikaten: jos pommitetaan kirjautumis-skriptaa suoraan, silloin toki on hyötyä. Mutta siis ajattelen tässä nyt sitä että jos saadaan suoraan hashit käsiin :)
Niin siis suolastahan on rainbow-tauluja vastaan käsittääkseni se hyöty, että jos rainbow-tauluun on laskettu vaikka kaikki max 10 merkkiä pitkät merkkijonot, niin sen avulla löytyy helposti vastaus vaikka kysymykseen: Mistä merkkijonosta tulee MD5 hash 9B64FCEDEB392E3374F468E102B0BF3A? (Vastaus: c8McDeKL)
Eli jos järjestelmässä tallennetaan tietokantaan vain käyttäjän antamasta salasanasta muodostettu MD5-tiiviste, on sitä vastaava selväkielinen salasana helppoa etsiä rainbow-taulun avulla (olettaen että käyttäjä ei sitten ole esim. edellä mainitsemani taulun tapauksessa syöttänyt 11 merkin salasanaa)
Jos sen sijaan käyttäjätietokantaan tallennetaankin pitkähkö satunnainen suola ja sitten suolasta ja salasanasta muodostettu tiiviste, niin on melkolailla varmaa, että tuota yhdistelmää ei ole laskettu valmiiksi mihinkään rainbowtauluun ja näin ollen rainbow-taulusta ei ole mitään hyötyä.
Nyt kun luin tuon artikkelin, joka oli mielestäni hieman hämärä, niin en ole varma mikä tuon redusointifunktion tehtävä on tarkalleen ottaen. Minulla on ollut aikaisemmin käsitys, että rainbow-taulu sisältäisi siis vaan ison listan valmiiksi laskettuja tiivisteitä joista sitten haettaisiin vastaava salasana. Tuossa artikkelissa tuli uutena juttuna tuo redusointifunktio. Tulkitsin sen nyt niin (saa korjata jos olen väärässä) että sen ideana on lähinnä tiivistää tuota taulun kokoa. Eli jos kaikki 10 merkin ja lyhyemmät A-Za-z0-9 salasanat tallennettaisiin peräkkäin, niin siitä tulisi 25201 petatavun kokoinen tietokanta. Mutta jos tehdäänkin vaikka miljardin redusoinnin ketjuja, niin sama mahtuisikin 25 gigatavuun.
Jos ymmärsin tuon redusointihomman oikein, niin silloin tuosta redusoinnista ei ole mitään hyötyä sen suhteen, jos suolattu salasana on sellainen, jota ei ole laskettu mukaan sateenkaaritaulua tehtäessä. Jo pelkästään se, että annetaan kaikille käyttäjille yhteinen suola olisi se hyöty, että mitään valmista sateenkaaritaulua ei voisi käyttää. Tuskin sellaisen laskemisestakaan yhtä saittia varten olisi mitään hyötyä.
Eli siis vaikka suola tunnettaisiin, niin silti bruteforcettamiseen menisi ihan täysi aika.
Ilman suolaa taas (eli jos tunnetaan pelkkä tiiviste) ei edes voi bruteforcettaa.
Tiedän mitä hyötyä suolasta on rainbowtableja vastaan -- tuolla artikkelissahan se aikas selkeästi mainitaan. Kunhan toin taulut esille esimerkkinä suolan hyödyllisyydestä.
Muilla viesteilläni tarkoitin taas sitä, että jos joku pääsee suoraan käsiksi tietokantaan joissa on salasanan hash + uniikki suola, ei suolasta ole enää mitään hyötyä, koska summa voidaan laskea tyyliin md5($suola.$jokin_merkkijono), jota sitten vertaillaan kannassa olevaan hashiin. Tämä on tietenkin edelleen hidasta jos salasana on pitkä ja monimutkainen, mutta suolan tuoma hyöty voidaan poistaa täysin. Tämä esimerkki nyt koittaa hämärästi osoittaa sen, että on tärkeää suolauksesta huolimatta suojata hashit kunnolla.
Tuotahan voi toki auttaa jo paljon sillä että laittaa vielä jonkin yksittäisen suolan nettiin jaetun hakemiston ulkopuolelle, tai laskee summan jollain tietyllä kaavalla muista tiedoista (kuten tsuriga jo yllä mainitsi).
Edit: Eli vastaanpa vielä noista sateenkaaritauluista:
Grez kirjoitti:
Jos ymmärsin tuon redusointihomman oikein, niin silloin tuosta redusoinnista ei ole mitään hyötyä sen suhteen, jos suolattu salasana on sellainen, jota ei ole laskettu mukaan sateenkaaritaulua tehtäessä. Jo pelkästään se, että annetaan kaikille käyttäjille yhteinen suola olisi se hyöty, että mitään valmista sateenkaaritaulua ei voisi käyttää. Tuskin sellaisen laskemisestakaan yhtä saittia varten olisi mitään hyötyä.
"The table content does not depend on the input of the algorithm. It is created once and then repeatedly used for the lookups unmodified.". Homman ideahan on siis nimenomaan se, että rainbow-taulukot tarvitsee laskea vain kerran määritellylle kasalle merkkejä joita oletetaan salasanoissa olevan (esim [a-z][A-Z] jne. whatever). Mitä enemmän merkkejä -> enemmän työtä laskennassa, suurempi tilankäyttö.Suolan tarkoituksenahan on lisätä hashin monimutkaisuutta, jolloin sateenkaaritaulujen pitäisi olla vastaavasti tarpeeksi monimutkaisia jotta hashi voitaisiin purkaa. Nykyisellä prossuteholla ja kovotilalla tällaisten taulujen teko vaan pukkaa olemaan aikas hankalaa. Mutta mikäli siis tarpeeksi monimutkainen sateenkaaritaulu _on_ laskettu, voidaan suolattu hashi edelleen purkaa. Teoriassa.
Turatzuro kirjoitti:
ei suolasta ole enää mitään hyötyä
En kyllä sanoisi, että "ei ole [a]mitään[/a] hyötyä", kun se estää rainbow-taulujen käytön.
Tietenkin aina paras jos suolassa on myös osa, joka ei ole tietokannassa. Esim. omissa järjestelmissäni näin on aina.
Edit: Pakko kai tässä on editoida, kun ei voi uuttakaan viestiä kirjoittaa..
Niin, johan mä sanoin, että jos esim. on 10 pituisille A-Za-z0-9 merkkijonoille laskettu rainbow-taulu, jonka laskeminen on sinänsä iso homma, niin vaikka 20 merkkiä pitkän suolan lisääminen kaikkien salasanojen alkuun estää täysin tällaisen valmiin taulun käytön. Jos tämä 20 merkkiä pitkä suola on uniikki tälle järjestelmälle, niin kukaan tuskin lähtee laskemaan mitään rainbow taulua jossa on suola + 10 * [A-Za-z0-9] koska siitä ei olisi hyötyä kuin tähän yhteen järjestelmään ja pienemmällä vaivalla (kuin laskea se taulu) bruteforceaa ko. järjestelmän kaikki salasanat, jotka ylipäätään avautuisivat tuolla taululla.
No tietty jos tosiaan olis olemassa 30*[anychar] rainbowtaulu (jota tuskin on tai ihan heti tulee), niin silloin sitä voisi käyttää.
Turatzuro kirjoitti:
Muilla viesteilläni tarkoitin taas sitä, että jos joku pääsee suoraan käsiksi tietokantaan joissa on salasanan hash + uniikki suola, ei suolasta ole enää mitään hyötyä, koska summa voidaan laskea tyyliin md5($suola.$jokin_merkkijono), jota sitten vertaillaan kannassa olevaan hashiin.
Eikai tämä nyt ihan näin mene suoraan? Itse ainakin laittaisin suolan käyttäjän antaman salasanan eteen ja taakse. Haen tällä vain sitä, että uskon www-sivustojen käyttävän monenlaisia menetelmiä tähän. Tuskinpa jokaisella sivustolla laitetaan kiltisti suola + jokin_merkkijono => md5-hash ..?
Tämä oli mainittava, sillä se hankaloittaa mielestäni jonkun verran tätä bruteforcea.
reca kirjoitti:
Eikai tämä nyt ihan näin mene suoraan? Itse ainakin laittaisin suolan käyttäjän antaman salasanan eteen ja taakse. Haen tällä vain sitä, että uskon www-sivustojen käyttävän monenlaisia menetelmiä tähän. Tuskinpa jokaisella sivustolla laitetaan kiltisti suola + jokin_merkkijono => md5-hash ..?
Joo, itse tehdyt skriptit ovat yleensä _paremmin_ suojassa niin pitkään kun lähdekoodi ei ole nähtävillä ja toteutus on asiallinen. Yleensä murtautumisyritykset taitavat suuntautua enemmänkin valmiisiin, julkisiin lähdekoodeihin perustuviin ratkaisuihin (vaikkapa erilaiset keskustelupalstat). Tämä tosin on mutua, en ole statistiikoihin tutustunut :)
Grez: Sanoit aikaisemmassa viestissäsi tosiaan että _mitään_ valmista sateenkaaritaulua ei voi käyttää, joten koitin osoittaa että näin ei välttämättä ole. Vaikkakin vain teoriassa. En väsyneenä enää kyennyt tulkitsemaan viestejäsi loppuun asti, joten vastasin vaan sen enempää harkitsematta viestin tunnepainotuksia & yleistä kohteliaisuutta.
Harva tosiaan viitsii lähteä noita tauluja yhtä sivustoa varten laskemaan, mutta löytynee niitäkin jos tarpeeksi isoista rahoista puhutaan... tai sitten tarpeeksi isoista huvituksista. Eräitä boardeja löytyy joilla porukka huvittelee välillä valtaamalla muita keskustelufoorumeita :) Se raakaan bruteen vs. sateenkaaritauluihin lopulta kuluva aika riippunee sitten tietenkin salasanojen määrästä ja vaadituista pituuksista.
Itse olen käyttänyt tämän tyyppistä ratkaisua.
Tuon luulisi ainakin olevan tarpeeksi vahva salaus, koska ei kukaan jaksa alkaa tekemään uniikkeja rainbow tauluja joka käyttäjälle. Yhdenkin tekemiseenhän menee hyvälläkin koneella päiviä.
Niin, siis korjatkaa nyt jos olen väärässä, mutta eikö rainbow-taulun tekemiseen mene yhtä paljon aikaa kun niiden salasanojen bruteamiseen, jotka sillä saa auki, mikäli hashit on tiedossa.
Siis jos oletetaan nyt 20 merkkinen saittikohtainen suola ja vaikka 10000 salasanaa, joista vaikka 5000 olisi sellaisia, jotka on max 8 merkkiä ja koostuu merkeistä A-Za-z0-9, niin tehokkaalla nykykoneella ne 5000 bruteforceaa kahdessa viikossa. Vaihtoehtoisesti voisi tehdä rainbow-taulun, jolla saisi avattua tietyllä saittikohtaisella suolalla tehdyt salasanat, joiden pituus on max 8 merkkiä ja jotka koostuvat merkeistä A-Za-z0-9 reilussa kahdessa viikossa.
Eli ainoa hyöty rainbow taulun teosta olisi, jos haluttaisiin pystyä purkamaan nopeasti samalle saitille mahdollisesti myöhemmin luodut salasanat.
Jos jokaiselle käyttäjälle on oma suolansa, niin sitten se pari viikkoa menisi kullekin tunnukselle ja siltikään ei saisi auki yli 8 merkkiä pitkiä tai etsinnän ulkopuolisia merkkejä sisältäviä salasanoja.
Toki useammalla koneella tai lisäraudalla saa nopeammin haettua noita. Silti jos käyttäjän salasanan pituus kasvaa, niin sen avaaminen käy nopeasti vaikeammaksi.
Putkalaisen salaus vaan vaatii sen, että käyttäjänimeä ei muuteta ilman salasanan uudelleentallennusta.
Harvoinpa sitä käyttäjätunnusta saakaan vaihtaa.
Alkuperäiseen viestiin vastaten.
pallo kirjoitti:
Onko tässä olemassa riskejä, että joku voisi jollain tavalla päästä käsiksi tiedostoon?
Kyllä, esim. 1. kaverit joiden annat käyttää tietokonettasi.
2. Tietojärjestelmistä löytyy päivittäin uusia aukkoja jotka mahdollistavat
milloin mitäkin, kuitenkin useita vuodessa jossa hyökkääjä saa koko tietokoneen hallintaansa.
pallo kirjoitti:
Onko tälläinen keino takuuvarma? Itselläni ei ole kokemuksia tälläisestä, joten pyytäisin selvitystä asiasta kokeneemmilta.
Takuuvarmaa ei ole olemassa. Pankkienkin järjetelmiin murtaudutaan.
Grez kirjoitti:
Niin, siis korjatkaa nyt jos olen väärässä, mutta eikö rainbow-taulun tekemiseen mene yhtä paljon aikaa kun niiden salasanojen bruteamiseen, jotka sillä saa auki, mikäli hashit on tiedossa.
Eipä ole korjattavaa. Jos salasanoja on vain muutama ja ne ovat kaikki kohtalaisen yksinkertaisia, aukeavat ne nopeammin bruteforcella kuin sateenkaaritauluilla, joita varten joudutaan laskemaan salasanojen pahimmassa tapauksessa bruteforcella murtamiseen kuluva aika.
Nuo sateenkaaritaulut tuntuvat kuitenkin olevan suosiossa tosiaan siinä vaiheessa, jos saadaan jonkin palvelun hasheihin jatkuva pääsy. Sitten kun boardia vallataan tms. ja porukka hädissään vaihtelee salasanoja, on ne helppo murtaa uudelleen. Tämän olen nähnyt tapahtuvan ainakin kertaalleen, tosin kyseessä oli sivusta jota piti yllä taitamaton ylläpitäjä (ei ymmärtänyt mitä oli tapahtumassa). Toinen tapaus mitä voisin ajatella, että saadaan jatkuva yhteys salasanoihin jota ylläpitäjä ei huomaa, jonka jälkeen voidaan varastaa kaikkien rekisteröityvien salasanat / vaihdetut salasanat.
Aihe on jo aika vanha, joten et voi enää vastata siihen.