Els millors consells per al desenvolupament segur d'aplicacions

Millorar la integració de la seguretat en el cicle de desenvolupament de programari produeix aplicacions molt més robustes.

martes, 5 de noviembre de 2019 • 6 min de lectura • Equip Q2BSTUDIO

consells-seguretat-web-desenvolupament

la seguretat en els productes de programari constitueix una propietat emergent dictaminada per la cohesió de múltiples factors al llarg del procés de desenvolupament, des de la seva mateixa concepció fins a la mort del producte. Quan parlem d'avaluar la seguretat dels programes informàtics, fem referència a un conjunt d'activitats al llarg del cicle de desenvolupament que neix amb la idealització del sistema, i s'estén sobre el disseny, la codificació i l'enfortiment del mateix.

No hem de caure en l'error de confondre la seguretat del sistema amb les característiques d'aquest, com ara la utilització de certs protocols com SSL. Tampoc l'hem de confondre amb els components de seguretat que estan immersos en l'arquitectura del sistema, com la presència de tallafocs, o limitar-la al compliment d'una normativa o certificació en particular.

La seguretat del producte és una propietat dinàmica que varia en el temps, i que resulta crítica si considerem el rol que cobreixen aquestes aplicacions en la societat moderna. Sorgeix en reconèixer que hi ha atacants, i que aquests es troben sempre disposats a provar cada potencial camí d'entrada per aconseguir el control del sistema, i per tant forcen les empreses de desenvolupament de programari a pensar mecanismes de control per resistir aquests atacs.

s'estima que actualment, el 50% de les vulnerabilitats en els sistemes tenen el seu origen en fallades de disseny. Aquestes últimes es diferencien de les fallades d'implementació –comunament conegudes com a bugs, sorgides en la codificació o prova- per néixer de manera primerenca en el procés de desenvolupament i posseir un impacte tan profund en el sistema que demanda la reenginyeria del mateix. És per això mateix que resulta crucial desplegar els recursos necessaris per identificar i arreglar aquestes fallades de disseny de manera primerenca, a fi de reduir el cost que aquestes produeixen en arrelar-se al producte que s'està creant.

Com guiem el desenvolupament segur?

Per ajudar a l'avaluació de la maduresa de la seguretat en el procés de desenvolupament de programari, el ponent presenta una llista de problemàtiques comunes a l'hora de dissenyar aplicacions, que poden arribar a afectar la seguretat en el producte final. Vegem quins són aquests consells per al disseny segur.

1. Cap component és fiable fins que demostri el contrari

Un error comú en el desenvolupament de programari és englobar funcionalitat sensible en un ambient d'execució sobre el qual no tenim cap mena de control. No és degut suposar que els components del sistema són fiables fins que això pugui ser demostrat.

Per exemple, si tenim un entorn de client-servidor, s'han de prendre les precaucions contra possibles clients adulterats desplegant mecanismes de verificació. Hem de pensar que aquest es troba en el domini de l'usuari, qui no sempre tindrà les millors intencions.

2. Delinear mecanismes d'autenticació difícils d'eludir

L'autenticació és el procés que ens permet acreditar la identitat de l'usuari i assignar-li un identificador únic. El desenvolupament de mètodes d'autenticació centralitzats que cobreixin cada possible camí d'ingrés és un dels pilars en la construcció d'aplicacions segures.

Si es tracta de pàgines web, hem de pensar quins llocs requeriran la gestió d'usuaris autenticats, i cuidar que tercers indeguts no s'entremetin en el sistema des d'URLs no protegides. La utilització de múltiples factors d'autenticació ens permetrà reforçar el sistema comprovant no només el que l'usuari sap sinó, per exemple, també el que aquest posseeix.

3. Autoritzar, a més d'autenticar

L'autorització és el procés que designa si un usuari autenticat pot o no realitzar una acció que canvia l'estat del sistema. Els processos d'autorització sobre usuaris autenticats han de ser pensats des del disseny i prevenen contra sessions que han caigut en les mans equivocades.

4. Separar dades d'instruccions de control

Aquest punt és clau quan es treballa amb codi capaç de modificar-se a si mateix, o llenguatges que compilen aquest codi en temps d'execució -com ara JavaScript-, on les mateixes instruccions es reben com a dades. Llavors, esdevé de suma importància sanejar les entrades que rep el sistema per evitar que atacants puguin manipular el flux d'execució introduint dades malicioses.

5. Validar totes les dades explícitament

Les entrades al sistema s'han d'avaluar amb una filosofia de llista blanca per sobre de llista negra: determinar què es permetrà, i denegar tot allò que no es correspongui. Hem de pensar que un atacant interpreta les dades com a possibles llenguatges de programació, amb la intenció de manipular l'estat del sistema. Per això, es torna necessari inspeccionar aquestes dades d'entrada, generant els procediments automàtics per portar-les a formes canòniques ben conegudes.

A més, aquesta validació d'entrades s'ha de donar propera al moment en què les dades són efectivament utilitzades, ja que el desfasament entre la validació i la utilització ofereix una finestra d'oportunitat per a la generació d'atacs.

Per implementar això, es poden dissenyar components comuns que centralitzin validacions tant sintàctiques –estructurals– com semàntiques –de significat–, i aprofitar els tipus de dades presents en el llenguatge de programació sobre el qual s'està treballant.

6. Utilitzar criptografia correctament

La comprensió de les nocions criptogràfiques que apliquen al sistema en desenvolupament és necessària per poder entendre quins elements i quina característica dels mateixos es busca protegir, contra quines formes d'atac, i conseqüentment, quina és la millor manera d'aconseguir aquest objectiu.

La creació de solucions criptogràfiques pròpies, com sempre, és una decisió arriscada que pot derivar en un sistema defectuós, i per tant és rotundament desaconsellada. En canvi, s'ha de recórrer al correcte assessorament per trobar les llibreries i eines que ens permetin augmentar el cost d'atac per al cibercriminal.

7. Identificar dades sensibles i com s'haurien de gestionar

Resulta complicat protegir la nostra informació si no tenim clar què és el que realment busquem cuidar. La definició de les dades la protecció de les quals resulta fonamental per al funcionament del sistema és crítica, ja que a partir d'ella podrem començar a esbossar els processos per al disseny de la seguretat des del mateix començament del cicle de desenvolupament, i no com un afegit en les etapes d'implementació o desplegament.

La definició dels requeriments d'anonimat i les metadades que es manegen donarà peu a la presa de decisions quant als camins que fan a la seva protecció.

8. Considerar sempre els usuaris del sistema

Un sistema tècnicament perfecte que no cobreix les necessitats dels usuaris és un sistema inservible. La seguretat utilitzable ha de ser una de les metes a assolir quan es plantegen els objectius de seguretat per al sistema. D'una banda, no és prudent transferir a l'usuari qüestions de seguretat que poden resoldre els mateixos desenvolupadors, a fi d'evitar la fatiga.

D'altra banda, és necessari mantenir una comunicació amb l'usuari per atorgar cert grau de transparència sobre com opera el sistema. La configuració per defecte ha de ser la configuració segura, sempre.

9. La integració de components canvia la superfície d'atac

Les aplicacions actuals constitueixen sistemes complexos amb molts components interactuant de manera simultània. Cada vegada que es realitza un canvi en el sistema, el panorama de seguretat canvia i ha de ser reavaluat. Aquesta reexaminació és el resultat de la coordinació entre les àrees i projectes.

Els components han de ser analitzats de manera unitària i en conjunt, tenint en compte com es combinen, mantenen o reemplacen.

10. Considerar canvis futurs en objectes i actors

Des del disseny, hem de considerar que les propietats del sistema i els seus usuaris canvien constantment. Alguns factors a considerar són el creixement de la població d'usuaris, com les migracions afecten el sistema, o com afectaran vulnerabilitats futures sobre components que s'han desplegat a gran escala.

Els procediments d'actualització de manera segura s'han de dissenyar amb un horitzó a futur de mesos, anys o fins i tot dècades.

ELS NOSTRES SERVEIS

Com et podem ajudar

Tens un projecte en ment?

Explica'ns la teva visió i la convertim en una solució de programari. Sigui quin sigui l'abast, fem realitat la teva idea.