Full Stack Blues: MEAN-pinon haavoittuvuuksien tutkiminen
Full stack -kehitys on nykyään muotia, ja hyvästä syystä: kehittäjät, joilla on sekä front-end-web-kehitystaitoja että back-end/server-koodaustaitoja, tarjoavat selvästi huomattavasti enemmän arvoa organisaatioilleen. Kyky kulkea koko pinon läpi asiantuntevasti helpottaa myös vuorovaikutusta ja yhteistyötä toimintojen ja tietoturvan kanssa - DevOps-kulttuurin keskeinen periaate.
Täyden pinon lähestymistapa - ansioistaan huolimatta - vaatii kehittäjiltä kriittisiä näkökohtia, joita he eivät olisi aiemmin tehneet, erityisesti turvallisuuden ja testauksen suhteen. Esimerkiksi aiemmin omistautuneiden DBA:iden tai järjestelmänvalvojien tehtävänä saattoi olla tietokannan turvallisuuden vahvistaminen tai taustalla olevien järjestelmien kovettaminen. Full stack -kehittäjille nämä tehtävät ovat nyt avointa peliä - sen jälkeen ajattelutavan yleinen muutos kohti turvallisuutta on välttämätöntä, jotta ohjelmistoja voidaan kehittää ja toimittaa jatkuvasti turvallisesti.
Pinon kaikkien kerrosten syvällinen altistuminen asettaa täyden pinon kehittäjät etupenkille ylläpitämään sovelluksen suojaustasoa. Siksi on tärkeää, että kunkin teknologian riskit ja turvallisuusvaikutukset ymmärretään täysin. Edustavana esimerkkinä MEAN-pino on suosittu täyden pinon kehys, joka on virtaviivaistettu suorituskyvyn kannalta: MongoDB, Express.JS, Angular.JS ja Node.JS. Koska pinon kaikki kerrokset on kirjoitettu JavaScriptillä, kehittäjien tarvitsee vain kirjoittaa sovelluskoodia - edestä taakse, asiakkaalta palvelimelle - JavaScriptillä. Ja koska nämä kehittäjät ovat nyt myös koukussa toimittamaan turvallisia verkkosovelluksia, heidän on myös puututtava haavoittuvuuksiin ja validoitava sovelluksen kaikki kerrokset turvallisuuden varmistamiseksi. Mutta kuinka haavoittuvainen kukin kerros on vaarantumiselle? Katsotaanpa pintapuolisesti MEAN-pinon sisään saadaksesi selville.
MongoDB
MongoDB on JavaScript-ystävällinen, asiakirjapohjainen NoSQL-tietokanta, joka kilpailee Cassandran ja HBasen kaltaisten kanssa. Yleensä useimpiin tarkoituksiin MongoDB:tä voidaan käyttää suurelta osin samalla tavalla kuin MySQL:ää. Katso MongoDB vs. MySQL -vertailumme saadaksesi täydellisen vertailun näistä kahdesta tekniikasta.
Yleinen väärinkäsitys on, että MongoDB on immuuni SQL-injektiotyyppisille hyökkäyksille. Vaikka on totta, että MongoDB ei ole altis SQL-kielen väärinkäytöksille, sen JSON-asiakirjoja voidaan silti muuttaa samojen haitallisten tulosten saavuttamiseksi. Lisäksi MongoDB:llä on ollut oma osansa haavoittuvuuksista - esimerkiksi äskettäin havaittu laajalle levinnyt haavoittuvuus antaa hakkereille mahdollisuuden kaataa tietokantasovellus etänä. Lisäksi Common Vulnerabilities and Exposures (CVE) -tietokannan tarkastelu paljastaa joukon MongoDB:n tietoturvariskejä ja haavoittuvuuksia.
Express.JS
Express.JS on palvelinpuolen verkko- ja mobiilisovelluskehys Node.JS, samanlainen kuin Ruby-on-Rails tai Sinatra on Ruby-kielelle. Kehys perustuu Node.JS tarjota vakiokomponentteja kehityksen virtaviivaistamiseksi, ja se on itse asiassa nykyään yleisimmin käytetty Node.js kehys. Valitettavasti kehys on alttiina erilaisille injektioille ja sivustojen välisille hyökkäyksille ja on herkkä kaikille Node.js taustalla oleville haavoittuvuuksille. Express.JS sivusto ylläpitää päivitettyä luetteloa haavoittuvuuksista ja korjauksista versioittain.
Angular.JS
Googlen kehittämä ja ylläpitämä Angular.js on käyttöliittymän MVC-kehys, joka mahdollistaa modulaarisen asiakaspuolen kehityksen minimaalisella koodilla. Kehys on alttiina erilaisille sivustojen välisille komentosarjahyökkäyksille - täydellinen luettelo Angular.js haavoittuvuuksista on saatavilla Mustache Securityn projektikodissa Google Codessa.
Node.JS
Tärkeämpi ja vaikeampi kysymys ei ole miksi, vaan miten - eli miten yritykset voivat paitsi selviytyä, myös menestyä digitaalisten uhkien ympäristössä?
Node.js mahdollistaa verkkosovellusten rakentamisen laajoilla palvelinpuolen ja verkko-ominaisuuksilla sekä mahdollistaa reaaliaikaisen kaksisuuntaisen viestinnän asiakkaan ja palvelimen välillä. Googlen V8 Javascript -moottoriin perustuva Node.js on suosittu HTTP-verkkopalvelimien luomiseen lennossa. Luultavasti MEAN-pinon määrittävä komponentti, Node.js ei ole vailla omia haavoittuvuuksiaan - se ei ainoastaan peri kaikkia JavaScriptiin liittyviä haavoittuvuuksia, vaan myös saa joitain uusia hyökkäysvektoreita suorittaessaan palvelinpuolella. CVE-tietokannassa on myös kattava luettelo Node.JS haavoittuvuuksista.
Lyhyesti sanottuna full stack -kehitys voi olla DevOpsin ruumiillistuma, mutta se vaatii kuitenkin turvallisten sovelluskehityskäytäntöjen tiukkaa noudattamista. MEAN-pino, ja mikä tahansa pino - olipa se sitten LAMP tai .NET - vaatii asianmukaista valvontaa sen varmistamiseksi, että tietoturva on leivottu kaikissa kehitysvaiheissa. Tätä varten UpGuard tarjoaa kattavan haavoittuvuuksien arvioinnin ja seurannan verkkosovelluksille, tietokannoille ja palvelimille - riippumatta siitä, mikä pino on käytössä, alustamme voi skannata ja validoida jokaisen kerroksen.
Lähteistä
https://blog.websecurify.com/2014/08/hacking-nodejs-and-mongodb.html
https://www.cvedetails.com/product/22804/Nodejs-Nodejs.html?vendor_id=12113
https://code.google.com/archive/p/mustache-security/wikis/AngularJS.wiki
https://expressjs.com/en/advanced/security-updates.html
https://web.archive.org/web/20160518123231/http://blog.fortinet.com/post/widespread-mongodb-denial-of-service-vulnerability-discovered