La seguretat d’internet requereix imposar controls humans i informàtics

La seguretat d’internet requereix imposar controls humans i informàtics

Aquest any tres errors informàtics han deixat al descobert contrasenyes, correus, dades financeres i altres tipus d’informació sensible potencialment connectada amb milers de milions de persones. Les fallades van aparèixer en tres llocs diferents: el programari dels servidors web, els iPhones i el sistema operatiu Windows, però tots tenien el mateix origen: errors per distracció dels programadors.
Cadascun d’aquests errors: Heartbleed en un programa anomenat OpenSSL, el “error goto” en els sistemes operatius d’Apple, i el que s’ha anomenat “exploit de dia zero” descobert a Internet Explorer de Microsoft, els van crear fa anys programadors que escrivien en llenguatge C, un llenguatge conegut per la seva potència, la seva expressivitat i per la facilitat amb que condueix als programadors a cometre tota mena d’errors. Utilitza C per escriure programari clau per a internet és com utilitzar una fulla de moll per obrir caixes, és molt xulo fins que et rebanas els dits.
Lamentablement, per molt perillós que sigui, no hi ha aspectes que ens anem a desfer de C en un futur proper. Els programes escrits en C i el seu llenguatge relacionat, C + +, componen una gran part del programari que mou internet. I segueixen començant nous projectes en aquests llenguatges, perquè els programadors creuen que necessiten la velocitat de C i es creen prou bons per evitar les trampes i travetes que els posa.
Encara que no puguem desfer-nos del llenguatge, sí que podem obligar que el fan servir a fer-ho millor. Ho faríem prenent prestat un concepte quotidià del món físic.
Evident a posteriori
Dels tres errors, el més important amb diferència ha estat Heartbleed. És un error en un programa que posa en marxa un protocol conegut com Secure Sockets Layer / Transport Layer Security (SSL / TLS), que és el mètode de xifratge fonamental utilitzat per protegir la gran majoria de la informació financera, mèdica i personal que es envia a través d’internet. El protocol SSL original va possibilitar l’aparició del comerç electrònic en la dècada de 1990. OpenSSL és una posada en pràctica de codi obert de SSL / TLS que porta gairebé el mateix temps en funcionament. El programa ha anat creixent i ampliant al llarg dels anys.
Es creu que els protocols criptogràfics actuals són tan forts que en la pràctica no hi ha cap forma de trencar-los. Però Heartbleed va fer que el encriptat SSL resultés irrellevant. A través d’aquesta bretxa informàtica, un atacant d’arreu d’internet podia accedir al cor de la memòria d’un servidor web i extreure un trosset de dades privades. El nom de la decisió no prové d’aquesta metàfora, sinó del fet que Heartbleed (cor sagnant) és un error en el protocol de “batec” que fan servir els navegadors web per comunicar als servidors web que encara estan connectats. Bàsicament, l’atacant podia enviar un senyal als servidors de manera que no només confirmava la connexió, sinó que també aconseguia que el servidor deixés anar part dels seus continguts. És com registrar en un hotel que oblida buidar les papereres de les habitacions d’un hoste a un altre. A vegades aquestes poden contenir informació molt valuosa.
La decisió Heartbleed es va donar per una combinació de factors, entre ells un error comès per un voluntari treballant sobre el programa OpenSSL en posar en marxa el protocol de batec. Encara qualsevol dels errors es podrien haver comès si OpenSSL estigués escrit en un llenguatge de programació modern com Java o C #, hi havia més probabilitats que succeïssin perquè OpenSSL està escrit en C.
La decisió d’Apple va sorgir perquè algun programador duplicar, sense adonar-se’n, una línia de codi que irònicament deia “goto fail” [veu a la fallada]. El resultat va ser que, en determinades condicions, els iPhones i Macs ignoraven errors que sorgien en intentar comprovar la legitimitat d’un lloc web i no avisaven d’ells. Coneixent aquesta fallada, un atacant podia establir un punt d’accés sense fils capaç d’interceptar la comunicació amb internet dels usuaris d’iPhone amb els seus bancs, i robar noms d’usuaris i contrasenyes, tornar a encriptar les comunicacions i llançar de nou. Aquest atac es coneix com atac “d’intermediari” i just per evitar-ho és per al que es va dissenyar SSL / TLS.
Sorprenentment, la sentència “goto” va ocórrer per una característica del llenguatge de programació C que sabia resultava problemàtica fins i tot abans que C s’inventés! L’ordre “goto” fa que un programa d’ordinador salti d’un lloc a un altre. Encara que aquest tipus d’ordres són habituals dins del codi màquina dels ordinadors, durant més de 40 anys els informàtics han intentat evitar utilitzar ordres “goto” en programes escrits en el denominat “llenguatge d’alt nivell”. Java (dissenyant a principis de la dècada de 1990), no té una ordre “goto”, però C (dissenyat a principis de la dècada de 1970), sí que la té. Encara que el programador d’Apple responsable del problema “error goto” podria haver comès un error semblant sense utilitzar l’ordre “goto”, és una cosa molt menys probable.
Sabem menys del tercer decisió perquè el codi font subjacent, part de l’Internet Explorer de Microsoft, encara no s’ha fet públic. El que sí sabem és que va ser un error “utilitzar quan estigui lliure”: el programa informa al sistema operatiu que ha acabat d’usar un tros de memòria i aquest a continuació torna a fer servir aquesta memòria. Segons l’empresa de seguretat FireEye, que va ser qui va trobar la decisió després que els pirates comencessin a aprofitar contra objectius d’alt valor, l’error portava a Internet Explorer des de l’agost del 2001 i afectava més de la meitat dels que es connectaven a la web a través d’un PC tradicional. La decisió era tan important que el Departament de Seguretat Nacional dels EUA va prendre la mesura poc habitual de dir-li a la gent que deixés d’utilitzar Explorer temporalment. (Microsoft va presentar un pegat per la decisió l’1 de maig).
Inspectors automatitzats
Sempre hi haurà problemes amb qualsevol cosa dissenyada o construïda per un humà, evidentment. Per això tenim lleis al món físic que minimitzen la possibilitat que es donin aquests errors, i també procediments dissenyats per enxampar els errors que se’ns colen.
Els constructors han de complir la llei d’edificació, que regula quins materials de construcció es poden usar i governa determinats aspectes de l’arquitectura de l’edifici, per exemple que els passadissos han de tenir una amplada mínima i que les sortides d’incendis són obligatòries. Hi ha inspectors que visiten l’obra per revisar la feina feta i assegurar-se que compleix amb la norma. Els inspectors obligaran als constructors a obrir una paret si s’ha instal · lat abans que s’hagi pogut inspeccionar la feina que s’ha fet dins.
El món del desenvolupament de programari és completament diferent. És habitual que els desenvolupadors escullin el llenguatge i les eines que faran servir. Molts desenvolupadors dissenyen els seus propis tests de fiabilitat i els executen ells mateixos! Les grans empreses es poden permetre tenir equips de control de qualitat, però moltes empreses petites treballen sense ells. Fins i tot en les grans empreses, el codi que sembla funcionar bé no se sol provar a la recerca d’errors de seguretat ocults perquè la comprovació manual feta per humans és molt cara, de vegades més fins i tot que escriure el programari original, atès que les proves poden revelar problemes que a continuació els desenvolupadors hauran d’arreglar. Aquests errors es denominen “deute tècnica”, ja que són costos d’enginyeria presos prestats contra el futur per l’interès a llançar el codi ja.
La solució és establir normes de construcció de programari i fer-les complir amb un exèrcit d’inspectors sense sou.
La clau és que aquests inspectors sense sou no haurien de ser persones, o almenys no només persones. Alguns defensors del programari de codi obert recolzen la teoria del desenvolupament de programari amb “molts ulls”: la idea que si un tros de codi el revisa una quantitat suficient de persones, es trobaran les vulnerabilitats de seguretat. Desgraciadament, Heartbleed demostra el fal · laç d’aquest argument: encara OpenSSL és un dels programes de seguretat de codi obert més utilitzat, van fer falta enginyers de seguretat a sou a Google ia l’empresa de seguretat finlandesa Codenomicon per trobar la decisió, i no el van trobar fins a dos anys després que els molts ulls que ronden per internet obtinguessin accés al codi.
Aquest exèrcit d’inspectors de construcció de programari haurien de ser les eines de desenvolupament de programari, els programes que els desenvolupadors fan servir per crear programes. Aquestes eines poden animar, convèncer i obligar els programadors a fer el correcte.
I és una cosa que ja ha succeït. El 1988, per exemple, el principal vector d’infecció per al primer internet era altre programa escrit en C. Usava una funció anomenada “gets ()” que era habitual llavors, però és inherentment insegura. Quan es va descobrir el cuc, els enginyers que mantenien les biblioteques nucli del sistema operatiu Linux (que ara fan servir Linux i MacOS), van modificar la funció gets () perquè fes aparèixer el missatge: “Avís: aquest programa fa servir gets (), que no és segur “. Poc després, els desenvolupadors de tot el món van retirar gets () dels seus programes.
El mateix tipus d’enfocament es pot utilitzar per prevenir fallades futures. Actualment hi ha moltes eines de desenvolupament de programari capaços d’analitzar els programes i avisar-nos de nyaps estilístiques (per exemple, l’ús d’una ordre “goto”), fallades de memòria (com la decisió “utilitzar quan estigui lliure”), o codi que no segueix els estàndards de bona programació. No obstant això, moltes vegades aquests avisos estan desactivats per defecte, perquè resulten irritants; exigeixen que el codi es reescrigui i netegi sense que es produeixi una millora corresponent en la seguretat. Altres eines per trobar errors ni tan sols s’inclouen en les col · leccions d’eines de desenvolupament estàndards, sinó que cal descarregar per separat, instal · lar i executar-les. En conseqüència, molts desenvolupadors ni tan sols saben que existeixen, i evidentment no les usen.
Perquè internet sigui més segur, les proves més exhaustives hauran d’activar per defecte, cosa que obligarà els programadors a escriure millor codi per començar. I com les eines d’anàlisi de programes funcionen millor amb llenguatges moderns com C i Java i pitjor amb programes escrits en C, els programadors haurien d’evitar començar nous projectes en C o C + +, igual que és poc assenyat començar projectes de construcció utilitzant materials i tècniques antiquats.
Els programadors són humans i tothom comet errors. Les empreses de programari han d’acceptar aquest fet i fer que sigui més fàcil prevenir les fallades.

Leave a Reply