On täysin selvää, että nykyisessä tietotekniikkakulttuurissa haittaohjelmat senkun yleistyvät.
Olen jo pitkään miettinyt, miten muuttaa tietotekniset taitoni rahaksi.
Yksi idea olisi tarjota tietoturvallista palvelinta ja myyntivalttina voisi olla tietoturvatakuu: jos tuotteestani löytyy yksikin omasta koodistani johtuva sellainen tietoturva-aukko, joka mahdollistaa hyökkääjälle oman koodinsa suorittamisen palvelimellani, ostaja saa koodiin korjauksen ilmaiseksi ja lisäksi kauppahinnan takaisin.
Tässä voikin sitten isommilla kilpialijoilla olla ihmettelemistä (he ilmeisesti luulevat, ettei 100% turvallista web -palvelinta voisi olla olemassa).
Mitenkö ajattelin tämän toteuttaa?
Kas näin:
1. Oikein valittu työväline. Sellainen, jonka koodirakenne ei ole omiaan houkuttelemaan vaarallisten tietoturva-aukkojen jäämistä tai edes syntymistä koodiin.
2. Jokainen koodirivi kirjoitetaan huolellisesti, ja miettien sitä, itä tapahtu, jos vastapäässä ei olekaan normaalikäyttäjä, vaan kriminaali krakkeri ja ohjelma, joka vain on ohjelmoitu näyttämään webselaimelta, mutta joka osaa erilaisia hyökkäystemppuja (yksinkertaisimpia näistä ovat varmasti 1. SQL injection ja 2. html -formin MAXLENGTH -kentän kunnioittamatta jättäminen, kenties monisata tai -tuhat kertaisesti), toki näitä keinoja on sitten muitakin...
3. Eristetyssä ympäristössä hyökkäys omaa palvelinkoodiani vastaan kaikilla tunnetuilla hyökkäysohjelmilla. Siis 2 konetta lähiverkkoon, mutta ei pääsyä nettiin. Toiseen koneeseen palvelinohjelmani ja toiseen monia tunnettuja hyökkäys -ja haittaohjelmia. Jos yksikin onnistuu hyökkäyksessä, niin seuraa debuggaus -sessio, jossa selvitetään hyöjkäyksen onnistumisen syy ja korjataan oman palvelimen koodia siten, ettei sama onnistu toista kertaa.
4. Päivitetään hyökkäävään koneeseen uusia hyökkäys- / haittaohjelmia ja päivitetään vanhat uusimpaan versioon jos uudempia versioita on saatavilla.
5. Toistetaan kohtia 3-4 kunnes yksikään hyökkäys- / haittaohjelma ei pysty murtamaan palvelimen tietoturvaa.
6. Toimitetaan koodi asiakkaalle.
Hieno suunnitelma, eikö totta?
Mutta nyt sitten se olennainen kysymys:
Mistä noita hyökkäys- / haittaohjelmia oikein löytäisi ?
Nimittäin jos tuo suunnitelma lopetaan kohdan 2 jälkeen, on olemassa vaara, että on hankittu vain väärä turvallisuudentunne. Siksi, jotta oikeasti parannettaisiin tietoturvaa, on todellakin löydettävä jostain ne vaarallisimmat hyökkäysvälineet, jotta voidaan testata, että oma palvelinkoodi on varmasti turvallinen.
Katsotaanpa, tuleeko tähän yhtään asiallista vastausta...
Tietoturva-aukothan ovat siitä mielenkiintoinen ilmiö, että niistä liikkuu julkisuudessa tietoja jatkuvasti, mutta hyökkäystapojen tekniset yksityiskohdat tuntuvat siiten olevan suuria salaisuuksia. Luulevatko eräät tietoturvaohjelmistovalmistajat, että tietoturva-asiat olisivat jotenkin heidän yksinoikeutensa ?
Olen jo pitkään miettinyt, miten muuttaa tietotekniset taitoni rahaksi.
Yksi idea olisi tarjota tietoturvallista palvelinta ja myyntivalttina voisi olla tietoturvatakuu: jos tuotteestani löytyy yksikin omasta koodistani johtuva sellainen tietoturva-aukko, joka mahdollistaa hyökkääjälle oman koodinsa suorittamisen palvelimellani, ostaja saa koodiin korjauksen ilmaiseksi ja lisäksi kauppahinnan takaisin.
Tässä voikin sitten isommilla kilpialijoilla olla ihmettelemistä (he ilmeisesti luulevat, ettei 100% turvallista web -palvelinta voisi olla olemassa).
Mitenkö ajattelin tämän toteuttaa?
Kas näin:
1. Oikein valittu työväline. Sellainen, jonka koodirakenne ei ole omiaan houkuttelemaan vaarallisten tietoturva-aukkojen jäämistä tai edes syntymistä koodiin.
2. Jokainen koodirivi kirjoitetaan huolellisesti, ja miettien sitä, itä tapahtu, jos vastapäässä ei olekaan normaalikäyttäjä, vaan kriminaali krakkeri ja ohjelma, joka vain on ohjelmoitu näyttämään webselaimelta, mutta joka osaa erilaisia hyökkäystemppuja (yksinkertaisimpia näistä ovat varmasti 1. SQL injection ja 2. html -formin MAXLENGTH -kentän kunnioittamatta jättäminen, kenties monisata tai -tuhat kertaisesti), toki näitä keinoja on sitten muitakin...
3. Eristetyssä ympäristössä hyökkäys omaa palvelinkoodiani vastaan kaikilla tunnetuilla hyökkäysohjelmilla. Siis 2 konetta lähiverkkoon, mutta ei pääsyä nettiin. Toiseen koneeseen palvelinohjelmani ja toiseen monia tunnettuja hyökkäys -ja haittaohjelmia. Jos yksikin onnistuu hyökkäyksessä, niin seuraa debuggaus -sessio, jossa selvitetään hyöjkäyksen onnistumisen syy ja korjataan oman palvelimen koodia siten, ettei sama onnistu toista kertaa.
4. Päivitetään hyökkäävään koneeseen uusia hyökkäys- / haittaohjelmia ja päivitetään vanhat uusimpaan versioon jos uudempia versioita on saatavilla.
5. Toistetaan kohtia 3-4 kunnes yksikään hyökkäys- / haittaohjelma ei pysty murtamaan palvelimen tietoturvaa.
6. Toimitetaan koodi asiakkaalle.
Hieno suunnitelma, eikö totta?
Mutta nyt sitten se olennainen kysymys:
Mistä noita hyökkäys- / haittaohjelmia oikein löytäisi ?
Nimittäin jos tuo suunnitelma lopetaan kohdan 2 jälkeen, on olemassa vaara, että on hankittu vain väärä turvallisuudentunne. Siksi, jotta oikeasti parannettaisiin tietoturvaa, on todellakin löydettävä jostain ne vaarallisimmat hyökkäysvälineet, jotta voidaan testata, että oma palvelinkoodi on varmasti turvallinen.
Katsotaanpa, tuleeko tähän yhtään asiallista vastausta...
Tietoturva-aukothan ovat siitä mielenkiintoinen ilmiö, että niistä liikkuu julkisuudessa tietoja jatkuvasti, mutta hyökkäystapojen tekniset yksityiskohdat tuntuvat siiten olevan suuria salaisuuksia. Luulevatko eräät tietoturvaohjelmistovalmistajat, että tietoturva-asiat olisivat jotenkin heidän yksinoikeutensa ?
Vastaukset 5
Vanhimmat
pari kommenttia.
Ensinnäkin, mistä tulee luulosi etteivät nykyiset palvelinohjelmat
ole koodattu mainitsemaasi huolellisuutta noudattaen?
Eräs pääongelma on
"...hyökkäys omaa palvelinkoodiani vastaan kaikilla tunnetuilla hyökkäysohjelmilla."
Et voi millään varautua uusiin hyökkäysohjelmiin jotka kehitetään palvelimen
käyttöönoton jälkeen ennenkuin on liian myöhäistä.
ja
"jos tuotteestani löytyy yksikin omasta koodistani johtuva sellainen tietoturva-aukko,"
Ei vakuuta asiakasta.
On monitoimittajaympäristön ikiongelma asiakkaan kannalta; aina vedotaan ettei virhe
minusta johdu vaan siitä ja siitä.
Tätä pompottelua on nähty liikaakin tällä alalla ja asiakkaat tietää kyllä.
Enkä oikein millään jaksa uskoa että olet parempi palvelinohjelmistokoodari kuin
vuosikymmeniä ohjelmopineet ammattokoodarit, einakaan ennenkuin heität
referenssejä kehiin.
"1. Oikein valittu työväline. Sellainen, jonka koodirakenne ei ole omiaan houkuttelemaan vaarallisten tietoturva-aukkojen jäämistä tai edes syntymistä koodiin."
Näin tehdään muutenkin.
"2. Jokainen koodirivi kirjoitetaan huolellisesti, ja miettien sitä, itä tapahtu, jos vastapäässä ei olekaan normaalikäyttäjä, vaan kriminaali krakkeri ja ohjelma, joka vain on ohjelmoitu näyttämään webselaimelta, mutta joka osaa erilaisia hyökkäystemppuja (yksinkertaisimpia näistä ovat varmasti 1. SQL injection ja 2. html -formin MAXLENGTH -kentän kunnioittamatta jättäminen, kenties monisata tai -tuhat kertaisesti), toki näitä keinoja on sitten muitakin..."
Näin tehdään muutenkin.
"3. Eristetyssä ympäristössä hyökkäys omaa palvelinkoodiani vastaan kaikilla tunnetuilla hyökkäysohjelmilla."
Näin tehdään muutenkin.
"4. Päivitetään hyökkäävään koneeseen uusia hyökkäys- / haittaohjelmia ja päivitetään vanhat uusimpaan versioon jos uudempia versioita on saatavilla."
Näin tehdään muutenkin.
"Mistä noita hyökkäys- / haittaohjelmia oikein löytäisi ?"
Erilaisia auditointiohjelmia on netti täynnä ja niitä on usein käyttöjärjestelmien mukanakin. Tietysti virheetön ohjelma on myös aina turvallinen, joten tuleehan ne testikoodit kirjoitettua myös. Ohjelmisto varmaan kannattaisi kehittää sitten tähän tapaan: http://en.wikipedia.org/wiki/Cleanroom_Software_Engineering
M-KAR valehtelee, mutta tietämättömyyttäänkö (vaikea uskoa, ottaen huomioon muut kirjoituksesi!) tai sitten tahallaan, työnantajasi taloudellisia etuja suojellaksesi !!!
Väität joka kohdasta, että "Näin tehdään muutenkin."
Jos väitteesi pitäisi oikeasti paikkansa, niin viimeiseen 10 vuoteen ei todennäköisesti olisi löytynyt yhtään uutta tietoturva-aukkoa mistään. Tämä onkin ehkä se kaikista olennaisin asia, eli se, että noita turva-aukkoja kuitenkin löytyy jatkuvasti, paljastaa väitteesi valheeksi.
Lisäksi, muutamia kohtia:
1. "1. Oikein valittu työväline. Sellainen, jonka koodirakenne ei ole omiaan houkuttelemaan vaarallisten tietoturva-aukkojen jäämistä tai edes syntymistä koodiin."
Väität näin tehtävän muutenkin. Kuitenkin, C -kieli on yksi vaarallisimmista työvälineistä. Tietoturvasyistä C -kielen käyttö pitäisi lopettaa kokonaan.
Mutta jostain syystä yrityksissä silti edelleen koodataan C:llä - ja seuraukset näkyvät juuri siinä, että turva-aukkoja saadaan koko ajan lisää aikaiseksi.
Javakin on turvallisempi, tosin vaikka Javaohjelmaa vastaan ei saa helposti työnnettyä omaa koodiaan ajettavaksi, niin Javan muistinhallinta tekee kuitenkin "Denial of Service" -hyökkäykset Javakoodia vastaan helpoksi - javaohjelma kun tukehtuu kaikista herkimmin, kun sitä kuormitetaan asiattomilla palvelupyynnöillä. Oman koodin ajaminen sitten vaatisikin sellaisen tietoturva-aukon löytämistä, jolla hyökätäänkin enemmän javan virtuaalikonetta (JVM) vastaan kuin itse ohjelmaa.
Turvallisimpia vaihtoehtoja olisivat esim. Delphi windowsissa ja FreePascal linuxissa. Todellisuudessa häviävän pieni osa yrityksistä käyttää näitä - ja näiden yritysten koodista turva-aukkoja löytyykin äärimmäisen harvoin. Ainoa tietämäni Delphillä koodattu ohjelma, josta on löytynyt turva-aukko, on Skype, ja tässäkin tapauksessa asiaa piilotellaan sikäli, että ko. aukon yksityiskohdista kertovaa tietoa ei löydy mistään.
2. Kas kummaa. Miksi sitten jopa SQL injection -aukkojakin löytyy? - Delphiohjelmassa ne ovat mahdottomia. Ai miksikö? Delphissä käytetään "parametrized query" -systeemiä. Toki, jos Delphikoodaaja on tarpeeksi hölmö, että ei toimi näin niin toki delphiohjelmaankin voi kyseisen aukon aikaansaada. Mutta tuon ansiosta oikein tehdystä delphiohjelmasta ei SQL -reikiä voi lötyä.
Mainitsemasi "Cleanroom" on täysin epärelevantti tietoturvan kannalta.
Sehän on käytäntö, jossa kilpailija B pyrkii ensin laittamaan yhden tiimin analysoimaan kilpailijan A tuotetta esim. disassemblerilla, ja sitten kirjoittaa dokumentoinnin yhteensopivuuden kannalta tärkeistä ominaisuuksista.
Tämän jälkeen toinen tiimi lukee vain em. dokumentaation kilpailijan koodia näkemättä ja kirjoittaa itse vastaavan toiminnallisuuden omaavan koodin. Näin ainakin väitetään vältettävän tekijänoikeusloukkaukset ohjelmistokehityksessä.
Mikä jättää auki kysymyksen: jos ratkaistava ongelma on triviaali, niin 2 kokenutta koodaajaa todennäköisesti kirjoittaa hyvin samantapaisen ratkaisun - ja mitä yksinkertaisempi asia on ratkaistavana, sitä suuremmaksi kasvaa todennäköisyys, että syntyvä koodi on identtinen - ja sitten tapellaa lakituvassa väitetystä tekijänoikeusloukkauksesta.
Olen esim. itse koodannut PosEx -funktion Delphi5:lle, jossa ko. funktiota ei alunperin ole.
Delphi7:sta alkaen vastaava löytyy valmiina Delphistä.
Mielenkiintoisen lisän tähän esmierkkitapaukseen antaa se, että kopioin Delphi5:ssä olevan Borlandin tuottaman Pos -funktion lähdekoodin oman PosEx -funktioni pohjaksi, ja sitten vain muokkasin koodia lisäten uuden parametrin funktioon ja kirjoitin itse tarvittavan lisätoiminnallisuuden.
Pos() - Returns the index of the first single-byte character of a specified substring in a string.
ja PosEx: muuten sama, mutta sille annetaan parametrina positio, josta alkaen etsittävästä merkkojonosta jotain etsitään. Pos -funktio taas etsii aina merkkijonon alusta.
No, käyttämäni tapa ei tosiaan ole mikään Cleanroom, mutta eipä sikäli ole tarpeenkaan, että siksihän Borland jakaa tuota lähdekoodia Delphin ostajalle, että ko. koodia voi laillisesti jakaa käännetyssä muodossaan (exe, dll ja dcu).
Ongelma tuosta tulisi vain, jos haluaisin jakaa Open Source -periaatteella jotain tekemäni ohjelmaa, jossa on tuo omatekoinen PosEx -funktio.
Mutta tietoturvaanhan tuo Cleanroom ei tosiaan liity, vaan tekijänoikeusloukkausten välttämiseen.
Ehdotan sinulle ojankaivuuta. Saat tehdä ja paikata avoaukkoja mielin määrin.
Ottamatta kantaa tuohon 100% turvalliseen palvelimeen, mutta tuohon "Mistä noita hyökkäys- / haittaohjelmia oikein löytäisi ?", veikkaisin että http://fi-sec.com/forum/ voisi olla hyvä paikka kysyä.