La peur et la haine de DevSecOps

Nous avions 2 analyseurs de code, 4 outils de test dynamique, nos propres créations et 250 scripts. Ce n'est pas que tout cela était nécessaire dans le processus actuel, mais comme j'ai commencé à intégrer le DevSecOps, il fallait aller jusqu'au bout.

La peur et la haine de DevSecOps

Source. Les créateurs des personnages : Justin Roiland et Dan Harmon.

Qu'est-ce que SecDevOps ? Et DevSecOps ? Quelle est la diffĂ©rence ? La sĂ©curitĂ© des applications - de quoi s'agit-il ? Pourquoi l'approche classique ne fonctionne-t-elle plus ? Toutes ces questions ont des rĂ©ponses. Youri Chabaly de Swordfish Security. Youri rĂ©pondra Ă  toutes ces questions et analysera les problĂšmes de transition du modĂšle classique de la sĂ©curitĂ© des applications vers le processus DevSecOps : comment bien intĂ©grer le processus de dĂ©veloppement sĂ©curisĂ© dans le processus DevOps sans rien casser, comment passer par les principales Ă©tapes de test de sĂ©curitĂ©, quels outils peuvent ĂȘtre utilisĂ©s, en quoi ils diffĂšrent et comment les configurer correctement pour Ă©viter les piĂšges.

Lire la vidéo

À propos de l'intervenant : Youri Chabaly - Chief Security Architect dans l'entreprise Swordfish Security. Il est responsable de l'implĂ©mentation du SSDL, de l'intĂ©gration gĂ©nĂ©rale des outils d'analyse d'applications dans un Ă©cosystĂšme unifiĂ© de dĂ©veloppement et de test. 7 ans d'expĂ©rience en sĂ©curitĂ© informatique. A travaillĂ© chez Alfa-Bank, Sberbank et Positive Technologies, qui dĂ©veloppe des logiciels et fournit des services. Intervenant lors de confĂ©rences internationales telles que ZerONights, PHDays, RISSPA, OWASP.

Sécurité des applications : de quoi s'agit-il ?

SĂ©curitĂ© des applications — est un domaine de la sĂ©curitĂ© qui est responsable de la sĂ©curitĂ© des applications. Cela ne concerne pas l'infrastructure ou la sĂ©curitĂ© du rĂ©seau, mais spĂ©cifiquement ce que nous Ă©crivons et sur quoi travaillent les dĂ©veloppeurs — il s'agit des dĂ©fauts et des vulnĂ©rabilitĂ©s de l'application elle-mĂȘme.

Direction SDL ou SDLC — Cycle de vie de dĂ©veloppement de la sĂ©curité — a Ă©tĂ© dĂ©veloppĂ© par Microsoft. Sur le schĂ©ma se trouve le modĂšle canonique SDLC, dont l'objectif principal est d'impliquer la sĂ©curitĂ© Ă  chaque Ă©tape du dĂ©veloppement, des exigences jusqu'Ă  la sortie en production. Microsoft a rĂ©alisĂ© qu'il y avait trop de bogues dans le produit, que leur nombre augmentait et qu'il fallait faire quelque chose Ă  ce sujet, et a proposĂ© cette approche, qui est devenue canonique.

La peur et la haine de DevSecOps

La sécurité des applications et le SSDL ne visent pas à détecter les vulnérabilités, comme on le pense souvent, mais à prévenir leur apparition. Au fil du temps, l'approche canonique de Microsoft a été améliorée et développée, offrant une immersion plus profonde et détaillée.

La peur et la haine de DevSecOps

Le SDLC canonique est fortement détaillé dans différentes méthodologies - OpenSAMM, BSIMM, OWASP. Les méthodologies diffÚrent, mais dans l'ensemble, elles se ressemblent.

ModÚle de Maturité pour la Sécurité Intégrée

Ce qui me convient le mieux BSIMM — ModĂšle de MaturitĂ© pour la SĂ©curitĂ© IntĂ©grĂ©e. La base de la mĂ©thodologie consiste Ă  diviser le processus de sĂ©curitĂ© des applications en 4 domaines : Gouvernance, Intelligence, Points de Contact SSDL et DĂ©ploiement. Dans chaque domaine, il y a 12 pratiques, reprĂ©sentĂ©es sous forme de 112 activitĂ©s.

La peur et la haine de DevSecOps

Chacune des 112 activitĂ©s a 3 niveaux de maturitĂ©: dĂ©butant, intermĂ©diaire et avancĂ©. Les 12 pratiques peuvent ĂȘtre Ă©tudiĂ©es par sections, en sĂ©lectionnant les Ă©lĂ©ments importants pour vous, en apprenant comment les intĂ©grer et en ajoutant progressivement des Ă©lĂ©ments, tels que l'analyse statique et dynamique du code ou la revue de code. Vous Ă©laborez un plan et travaillez tranquillement dans le cadre de l'implĂ©mentation des activitĂ©s choisies.

Pourquoi DevSecOps

DevOps est un grand processus global, dans lequel il est nécessaire de se soucier de la sécurité.

À l'origine DevOps de prĂ©visions de sĂ©curitĂ©. En pratique, le nombre d'Ă©quipes de sĂ©curitĂ© Ă©tait beaucoup plus faible qu'aujourd'hui, et elles intervenaient non pas en tant que participants au processus, mais comme un organe de contrĂŽle et de supervision, qui impose des exigences et vĂ©rifie la qualitĂ© du produit Ă  la fin de la sortie. C'est l'approche classique, oĂč les Ă©quipes de sĂ©curitĂ© Ă©taient sĂ©parĂ©es du dĂ©veloppement et n'intervenaient pas dans le processus.

La peur et la haine de DevSecOps

Le problĂšme principal est que la cybersĂ©curitĂ© est sĂ©parĂ©e du dĂ©veloppement. Cela prend gĂ©nĂ©ralement la forme d'un certain cadre de cybersĂ©curitĂ© comprenant 2-3 grands et coĂ»teux outils. Une fois tous les six mois, le code source ou l'application Ă  vĂ©rifier arrive, et une fois par an des tests de pĂ©nĂ©tration. Tout cela conduit Ă  des retards dans le passage Ă  la production, et un grand nombre de vulnĂ©rabilitĂ©s issues des outils automatisĂ©s s'accumulent sur les dĂ©veloppeurs. Il est impossible de tout dĂ©chiffrer et de corriger, car les rĂ©sultats des six mois prĂ©cĂ©dents n'ont mĂȘme pas Ă©tĂ© analysĂ©s, et une nouvelle sĂ©rie arrive.

Dans le cadre de notre travail, nous constations que la sĂ©curitĂ© dans tous les secteurs et industries reconnaĂźt qu'il est temps de s'adapter et de s'aligner sur le dĂ©veloppement dans un mĂȘme cycle - dans l' Agile. La paradigme DevSecOps s'intĂšgre parfaitement Ă  la mĂ©thodologie de dĂ©veloppement agile, Ă  l'implĂ©mentation, au soutien et Ă  la participation Ă  chaque version et itĂ©ration.

La peur et la haine de DevSecOps

La transition vers DevSecOps

Le mot le plus important dans le cycle de vie du développement sécurisé est « processus ». Vous devez comprendre cela avant de penser à acheter des outils.

Il ne suffit pas d'intĂ©grer des outils dans le processus DevOps — l'interaction et la comprĂ©hension entre les participants au processus sont cruciales.

Les gens sont plus importants que les outils

Souvent, la planification d'un processus de développement sécurisé commence par le choix et l'achat d'un outil, puis se termine par des tentatives d'intégration de l'outil dans le processus existant, qui n'aboutissent souvent qu'à des échecs. Cela conduit à des conséquences malheureuses, car chaque outil a ses spécificités et limitations.

Un cas frĂ©quent est celui oĂč le dĂ©partement de sĂ©curitĂ© choisit un bon outil coĂ»teux avec de grandes capacitĂ©s et vient voir les dĂ©veloppeurs pour l'incorporer dans le processus. Mais cela ne fonctionne pas — le processus est construit de maniĂšre Ă  ce que les limitations de l'outil dĂ©jĂ  achetĂ© ne s'intĂšgrent pas dans la paradigme actuel.

Commencez par décrire quel résultat vous voulez et à quoi ressemblera le processus. Cela aidera à comprendre le rÎle de l'outil et de la sécurité dans le processus.

Commencez par ce qui est déjà utilisé

Avant d'acheter des outils coĂ»teux, regardez ce que vous avez dĂ©jĂ . Chaque entreprise a des exigences de sĂ©curitĂ© qui s'appliquent au dĂ©veloppement, il y a des vĂ©rifications, des pentests — pourquoi ne pas transformer tout cela en une forme comprĂ©hensible et utile pour tous ?

En gĂ©nĂ©ral, les exigences sont un long document qui traĂźne sur une Ă©tagĂšre. Il y a eu un cas oĂč nous sommes allĂ©s dans une entreprise pour examiner les processus et avons demandĂ© Ă  voir les exigences de sĂ©curitĂ© pour le logiciel. Le spĂ©cialiste responsable a cherchĂ© longtemps :

— Maintenant, je sais qu'il y a quelque part dans mes notes le chemin vers ce document.

Au final, nous avons obtenu le document aprĂšs une semaine.

Pour les exigences, les vĂ©rifications et autres, crĂ©ez une page, par exemple sur Confluence — c'est pratique pour tout le monde.

Il est plus facile de reformater ce qui existe déjà et de l'utiliser comme point de départ.

Utilisez des Security Champions

En gĂ©nĂ©ral, dans une entreprise moyenne, pour 100-200 dĂ©veloppeurs, il y a un spĂ©cialiste de la sĂ©curitĂ© qui remplit plusieurs fonctions et qui ne peut physiquement pas tout vĂ©rifier. MĂȘme s'il fait de son mieux — il ne peut pas inspecter tout le code gĂ©nĂ©rĂ© par le dĂ©veloppement tout seul. Pour de tels cas, le concept de Security Champions.

Les Champions de la Sécurité sont des personnes au sein de l'équipe de développement qui se soucient de la sécurité de votre produit.

La peur et la haine de DevSecOps

Le Champion de la Sécurité est un point d'entrée dans l'équipe de développement et un évangéliste de la sécurité en une seule personne.

En général, lorsque quelqu'un de l'équipe de développement vient avec un expert en sécurité et signale une erreur dans le code, il reçoit une réponse étonnée :

— Et vous ĂȘtes qui ? Je vous vois pour la premiĂšre fois. Tout va bien pour moi — mon senior a validĂ© lors de la revue de code, nous continuons !

C'est une situation typique, car il y a beaucoup plus de confiance envers les seniors ou simplement les collÚgues avec qui le développeur interagit constamment au travail et lors des revues de code. Si c'est un Champion de la Sécurité qui indique une erreur et ses conséquences, sa parole aura plus de poids.

Les dĂ©veloppeurs connaissent Ă©galement mieux leur code qu'un expert en sĂ©curitĂ©. Pour une personne ayant au minimum 5 projets dans un outil d'analyse statique, il est gĂ©nĂ©ralement difficile de se souvenir de toutes les nuances. Les Champions de la SĂ©curitĂ© connaissent leur produit : ce qui interagit avec quoi et quoi surveiller en premier — ils sont plus efficaces.

RĂ©flĂ©chissez donc Ă  la possibilitĂ© d'implĂ©menter des Champions de la SĂ©curitĂ© pour Ă©largir l'influence de l'Ă©quipe de sĂ©curitĂ©. Pour le champion lui-mĂȘme, c'est Ă©galement bĂ©nĂ©fique : dĂ©veloppement professionnel dans un nouveau domaine, Ă©largissement des connaissances techniques, amĂ©lioration des compĂ©tences techniques, managĂ©riales et de leadership, augmentation de la valeur sur le marchĂ©. C'est un Ă©lĂ©ment de l'ingĂ©nierie sociale, vos « yeux » dans l'Ă©quipe de dĂ©veloppement.

Étapes de test

La rĂšgle des 20 sur 80 stipule que 20 % des efforts gĂ©nĂšrent 80 % des rĂ©sultats. Ces 20 % concernent les pratiques d'analyse des applications qui peuvent et doivent ĂȘtre automatisĂ©es. Des exemples de telles activitĂ©s sont l'analyse statique — SAST, l'analyse dynamique — DAST, et le contrĂŽle Open Source. Je vais expliquer plus en dĂ©tail les activitĂ©s, ainsi que les outils, et les spĂ©cificitĂ©s auxquelles nous faisons gĂ©nĂ©ralement face lors de leur intĂ©gration dans le processus, et comment le faire correctement.

La peur et la haine de DevSecOps

ProblĂšmes principaux des outils

Je vais mettre en évidence les problÚmes pertinents pour tous les outils qui nécessitent une attention particuliÚre. Je vais les examiner plus en détail pour ne pas avoir à me répéter.

Longue durée d'analyse. Si le temps écoulé entre le commit et le passage en production est de 30 minutes pour tous les tests et la compilation, alors les vérifications de sécurité prendront une journée. Personne ne fera traßner le processus. Prenez en compte cette spécificité et tirez-en des conclusions.

Niveau élevé de faux négatifs ou de faux positifs. Tous les produits sont différents, chaque équipe utilise différents frameworks et son propre style de codage. Sur différentes bases de code et technologies, les outils peuvent montrer un niveau varié de faux négatifs et de faux positifs. Donc, regardez ce qui est pertinent dans votre entreprise et pour vos applications qui montrera un bon et fiable résultat.

Pas d'intégrations avec les outils existants. Examinez les outils en fonction des intégrations avec ce que vous utilisez déjà. Par exemple, si vous utilisez Jenkins ou TeamCity, vérifiez l'intégration des outils précisément avec ce logiciel, et non avec GitLab CI que vous n'utilisez pas.

Absence ou complexitĂ© excessive de personnalisation. Si un outil n'a pas d'API, Ă  quoi bon ? Tout ce qui peut ĂȘtre fait dans l'interface doit ĂȘtre accessible via l'API. IdĂ©alement, l'outil devrait permettre de personnaliser les vĂ©rifications.

Pas de feuille de route pour le dĂ©veloppement du produit. Le dĂ©veloppement ne stagne pas, nous utilisons toujours de nouveaux frameworks et fonctionnalitĂ©s, et réécrivons l'ancien code dans de nouveaux langages. Nous voulons ĂȘtre sĂ»rs que l'outil que nous achĂšterons supportera de nouveaux frameworks et technologies. Il est donc important de savoir que le produit a une vĂ©ritable et correcte feuille de route de dĂ©veloppement.

Particularités du processus

En plus des particularitĂ©s des outils, prenez Ă©galement en compte les spĂ©cificitĂ©s du processus de dĂ©veloppement. Par exemple, gĂȘner le dĂ©veloppement est une erreur classique. Voyons quelles autres particularitĂ©s doivent ĂȘtre prises en compte et sur quoi l'Ă©quipe de sĂ©curitĂ© doit se concentrer.

Pour ne pas retarder les dĂ©lais de dĂ©veloppement et de mise en production, crĂ©ez diffĂ©rentes rĂšgles et diffĂ©rents show stoppers — des critĂšres d'arrĂȘt du processus de compilation en cas de vulnĂ©rabilitĂ©s — pour diffĂ©rents environnements. Par exemple, nous comprenons que la branche actuelle est destinĂ©e Ă  un environnement de dĂ©veloppement ou UAT, donc nous ne devons pas arrĂȘter et ne pas dire :

— Vous avez ici des vulnĂ©rabilitĂ©s, vous n'irez nulle part !

À ce stade, il est important d'informer les dĂ©veloppeurs qu'il existe des problĂšmes de sĂ©curitĂ© auxquels il convient de prĂȘter attention.

La présence de vulnérabilités n'est pas un obstacle à des tests ultérieurs.: manuel, intégration ou manuel. D'un autre cÎté, nous devons somehow améliorer la sécurité du produit, et pour que les développeurs ne négligent pas ce que la sécurité trouve. C'est pourquoi parfois nous procédons ainsi : sur le stand, lorsque cela est publié dans l'environnement de développement, nous informons simplement le développement :

— Les gars, vous avez des problĂšmes, veuillez y prĂȘter attention.

À l'Ă©tape UAT, nous montrons Ă  nouveau les avertissements sur les vulnĂ©rabilitĂ©s, et Ă  l'Ă©tape de lancement, nous disons :

— Les gars, nous avons averti plusieurs fois, vous n'avez rien fait — nous ne vous laisserons pas sortir avec ça.

En parlant de code et de dynamique, il faut montrer et avertir uniquement au sujet des vulnĂ©rabilitĂ©s des fonctionnalitĂ©s et du code qui viennent d'ĂȘtre Ă©crits dans cette fonctionnalitĂ©. Si le dĂ©veloppeur a dĂ©placĂ© un bouton de 3 pixels et que nous lui disons qu'il a une injection SQL et qu'il doit donc corriger cela immĂ©diatement — c'est incorrect. Regardez uniquement ce qui a Ă©tĂ© Ă©crit maintenant, et le changement qui arrive dans l'application.

Supposons que nous ayons un certain dĂ©faut fonctionnel — comment l'application ne doit pas fonctionner : l'argent n'est pas transfĂ©rĂ©, en cliquant sur le bouton, il n'y a pas de redirection vers la page suivante ou le produit ne se charge pas. Les dĂ©fauts de sĂ©curité — ce sont des dĂ©fauts similaires, mais non pas dans le cadre du fonctionnement de l'application, mais de la sĂ©curitĂ©.

Tous les problÚmes de qualité logicielle ne sont pas des problÚmes de sécurité. Mais tous les problÚmes de sécurité sont liés à la qualité du logiciel. Sherif Mansour, Expedia.

Étant donnĂ© que toutes les vulnĂ©rabilitĂ©s sont des dĂ©fauts similaires, elles doivent se trouver lĂ  oĂč se trouvent tous les dĂ©fauts de dĂ©veloppement. Donc oubliez les rapports et les PDF effrayants que personne ne lit.

La peur et la haine de DevSecOps

Quand je travaillais dans une entreprise de développement, j'ai reçu un rapport d'outils d'analyse statique. Je l'ai ouvert, j'ai été horrifié, j'ai préparé un café, j'ai feuilleté 350 pages, je l'ai fermé et je suis retourné travailler. Les grands rapports sont des rapports morts. Ils ne vont généralement nulle part, les emails sont supprimés, oubliés, perdus ou les affaires disent qu'elles acceptent les risques.

Que faire ? Les défauts confirmés que nous avons trouvés sont simplement transformés en un format adapté au développement, par exemple en les rassemblant dans le backlog de Jira. Nous priorisons et corrigeons les défauts selon leur priorité, en parallÚle avec les défauts fonctionnels et ceux des tests.

Analyse statique - SAST

Il s'agit d'une analyse du code Ă  la recherche de vulnĂ©rabilitĂ©s., mais ce n'est pas la mĂȘme chose que SonarQube. Nous vĂ©rifions non seulement selon des motifs ou un style. Lors de l'analyse, plusieurs approches sont appliquĂ©es : selon l'arbre des vulnĂ©rabilitĂ©s, par DataFlow, par l'analyse des fichiers de configuration. C'est tout ce qui concerne directement le code.

Avantages de l'approche: dĂ©tection des vulnĂ©rabilitĂ©s dans le code Ă  un stade prĂ©coce du dĂ©veloppement, lorsqu'il n'y a pas encore de stands et d'outils prĂȘts, et possibilitĂ© de scan incrĂ©mental: scanner la partie du code qui a changĂ© et uniquement la fonctionnalitĂ© sur laquelle nous travaillons actuellement, ce qui rĂ©duit le temps de scan.

InconvĂ©nients — c'est l'absence de support pour les langages nĂ©cessaires.

IntĂ©grations nĂ©cessaires, qui, Ă  mon avis subjectif, doivent ĂȘtre dans les outils :

  • Outils d'intĂ©gration : Jenkins, TeamCity et Gitlab CI.
  • Environnement de dĂ©veloppement : Intellij IDEA, Visual Studio. Il est plus pratique pour le dĂ©veloppeur de ne pas fouiller dans une interface incomprĂ©hensible qu'il doit encore mĂ©moriser, mais de voir directement sur son lieu de travail, dans son propre environnement de dĂ©veloppement, toutes les intĂ©grations nĂ©cessaires et les vulnĂ©rabilitĂ©s qu'il a trouvĂ©es.
  • Revue de code : SonarQube et revue manuelle.
  • Suivi des dĂ©fauts : Jira et Bugzilla.

Sur l'image, quelques-uns des meilleurs représentants de l'analyse statique.

La peur et la haine de DevSecOps

Ce ne sont pas les outils qui comptent, mais le processus, c'est pourquoi il existe des solutions Open Source qui sont également trÚs bonnes pour tester le processus.

La peur et la haine de DevSecOps

Les SAST Open Source ne trouveront pas un nombre Ă©norme de vulnĂ©rabilitĂ©s ou des DataFlow complexes, mais lors de la construction du processus, ils peuvent et doivent ĂȘtre utilisĂ©s. Ils aident Ă  comprendre comment le processus sera Ă©tabli, qui sera responsable des bugs, qui signalera, qui rendra compte. Si vous souhaitez rĂ©aliser la premiĂšre Ă©tape dans l'Ă©tablissement de la sĂ©curitĂ© de votre code, utilisez des solutions Open Source.

Comment l'intĂ©grer si vous ĂȘtes au dĂ©but du chemin, que vous n'avez rien : ni CI, ni Jenkins, ni TeamCity ? Examinons les intĂ©grations dans le processus.

Intégration au niveau du CVS

Si vous avez Bitbucket ou GitLab, vous pouvez faire une intégration au niveau Concurrent Versions System.

Sur Ă©vĂ©nement — pull request, commit. Vous scannez le code et dans le statut de construction, vous montrez si le contrĂŽle de sĂ©curitĂ© a rĂ©ussi ou Ă©chouĂ©.

Retour d'information. Il est essentiel d'avoir toujours un retour d'information. Si vous avez simplement exécuté quelque chose du cÎté de la sécurité, que vous l'avez rangé dans une boßte sans en parler à personne, et que vous déversez une multitude de bogues à la fin du mois, ce n'est ni correct ni bon.

Intégration avec le systÚme de révision de code

Un jour, nous avons dĂ©fini comme rĂ©viseur par dĂ©faut sur des projets importants un utilisateur technique d'AppSec. Selon que des erreurs sont dĂ©tectĂ©es dans le nouveau code ou non, le rĂ©viseur du pull request attribut un statut 'accept' ou 'need work' — soit tout va bien, soit des amĂ©liorations sont nĂ©cessaires avec des liens indiquant ce qu'il faut prĂ©cisĂ©ment amĂ©liorer. Pour l'intĂ©gration avec la version mise en production, nous avons activĂ© l'interdiction de fusion si le test de sĂ©curitĂ© n'a pas Ă©tĂ© rĂ©ussi. Nous avons inclus cela dans la rĂ©vision de code manuelle, et les autres participants au processus pouvaient voir les statuts de sĂ©curitĂ© pour ce processus particulier.

Intégration avec SonarQube

Beaucoup en ont quality gate pour la qualitĂ© du code. Ici, c'est pareil — on peut Ă©tablir les mĂȘmes gates uniquement pour les outils SAST. Il y aura la mĂȘme interface, le mĂȘme quality gate, mais cela s'appellera security gate. Et de plus, si vous avez un processus utilisant SonarQube, tout peut ĂȘtre intĂ©grĂ© sans problĂšmes.

Intégration au niveau CI

C'est assez simple ici:

  • Au mĂȘme niveau que les autotests, les tests unitaires.
  • SĂ©paration par Ă©tapes de dĂ©veloppement: dev, test, prod. DiffĂ©rents ensembles de rĂšgles peuvent ĂȘtre activĂ©s, ou diffĂ©rentes conditions d'Ă©chec: nous arrĂȘtons la construction, nous ne l'arrĂȘtons pas.
  • Lancement synchrone/asynchrone. Nous attendons que les tests de sĂ©curitĂ© soient terminĂ©s ou non. C'est-Ă -dire que nous les avons simplement lancĂ©s et continuons, puis nous recevons le statut que tout va bien ou mal.

Tout cela dans un monde idĂ©al. Dans la vie rĂ©elle, cela n'existe pas, mais nous aspirons Ă  cela. Le rĂ©sultat des contrĂŽles de sĂ©curitĂ© doit ĂȘtre similaire aux rĂ©sultats des tests unitaires.

Par exemple, nous avons pris un grand projet et dĂ©cidĂ© que dĂ©sormais nous allons le scanner avec SAST — OK. Nous avons chargĂ© ce projet dans SAST, il nous a fourni 20 000 vulnĂ©rabilitĂ©s et par une dĂ©cision volontaire, nous avons acceptĂ© que tout soit en ordre. 20 000 vulnĂ©rabilitĂ©s reprĂ©sentent notre dette technique. Nous allons ranger cette dette dans une boĂźte, et nous allons progressivement la rĂ©soudre et ouvrir des tickets dans les traqueurs de dĂ©fauts. Nous allons engager une entreprise, tout faire nous-mĂȘmes ou nous faire aider par des Security Champions — et notre dette technique va diminuer.

Quant Ă  toutes les vulnĂ©rabilitĂ©s nouvellement apparues dans le nouveau code, elles doivent ĂȘtre corrigĂ©es comme les erreurs dans les tests unitaires ou les tests automatisĂ©s. Pour le dire autrement, la compilation se lance, des tests passent et deux tests de sĂ©curitĂ© Ă©chouent. OK — nous avons regardĂ© ce qui s'est passĂ©, corrigĂ© le premier, corrigĂ© le second, la prochaine fois tout fonctionne — pas de nouvelles vulnĂ©rabilitĂ©s et les tests ne sont pas Ă©chouĂ©s. Si cette tĂąche est plus complexe et nĂ©cessite une bonne comprĂ©hension, ou si le correctif des vulnĂ©rabilitĂ©s concerne des couches importantes du systĂšme : un ticket est ouvert dans le traqueur de dĂ©fauts, il est priorisĂ© et corrigĂ©. Malheureusement, le monde n'est pas parfait et les tests Ă©chouent parfois.

Exemple de sĂ©curitĂ© gate — analogue de quality gate, en fonction de la prĂ©sence et du nombre de vulnĂ©rabilitĂ©s dans le code.

La peur et la haine de DevSecOpsIntĂ©gration avec SonarQube — le plugin est installĂ©, tout est trĂšs pratique et excellent.

Intégration avec l'environnement de développement

Fonctionnalités d'intégration :

  • Lancement du scan depuis l'environnement de dĂ©veloppement avant le commit.
  • Consultation des rĂ©sultats.
  • Analyse des rĂ©sultats.
  • Synchronisation avec le serveur.

Voici à quoi ressemble l'obtention des résultats depuis le serveur.

La peur et la haine de DevSecOps

Dans notre environnement de dĂ©veloppement Intellij IDEA apparaĂźt simplement un point supplĂ©mentaire, qui informe que des vulnĂ©rabilitĂ©s ont Ă©tĂ© dĂ©tectĂ©es lors du scan. On peut corriger le code immĂ©diatement, voir les recommandations et Flow Graph. Tout cela est situĂ© sur le poste de travail du dĂ©veloppeur, c'est trĂšs pratique — pas besoin d'aller sur d'autres liens et de chercher des Ă©lĂ©ments supplĂ©mentaires.

Open Source

C'est mon sujet prĂ©fĂ©rĂ©. Tout le monde utilise des bibliothĂšques open source — pourquoi Ă©crire une multitude de solutions de contournement et de vĂ©los, quand on peut utiliser une bibliothĂšque prĂȘte, dans laquelle tout est dĂ©jĂ  implĂ©mentĂ© ?

La peur et la haine de DevSecOps

Bien sûr, c'est vrai, mais les bibliothÚques sont également écrites par des personnes, elles comportent aussi des risques et présentent des vulnérabilités dont on parle réguliÚrement, ou constamment. C'est pourquoi il y a une étape suivante dans la sécurité des applications : l'analyse des composants Open Source.

Analyse Open Source – OSA

L'outil comprend trois grandes étapes.

Recherche de vulnérabilités dans les bibliothÚques. Par exemple, l'outil sait que nous utilisons une certaine bibliothÚque, et que dans CVE ou dans les bug trackers, il existe des vulnérabilités liées à cette version de la bibliothÚque. Lors de son utilisation, l'outil signalera que la bibliothÚque est vulnérable et conseillera d'utiliser une autre version sans vulnérabilités.

Analyse de la conformitĂ© des licences. Pour l'instant, ce n'est pas trĂšs populaire chez nous, mais si vous travaillez avec l'Ă©tranger, vous pouvez parfois rencontrer des problĂšmes pour avoir utilisĂ© un composant Open Source qui ne peut pas ĂȘtre utilisĂ© ou modifiĂ©. Selon la politique de la bibliothĂšque sous licence, nous ne pouvons pas faire cela. Ou, si nous l'avons modifiĂ© et l'utilisons, nous devons rendre notre code public. Bien sĂ»r, personne ne veut publier le code de ses produits, mais il existe des moyens de se protĂ©ger contre cela.

Analyse des composants utilisĂ©s dans l'environnement industriel. Imaginons une situation hypothĂ©tique oĂč nous avons enfin terminĂ© le dĂ©veloppement et sorti la derniĂšre version de notre microservice en production. Il fonctionne parfaitement – une semaine, un mois, un an. Nous ne le mettons pas Ă  jour, nous ne faisons pas de vĂ©rifications de sĂ©curitĂ©, tout semble bien. Mais soudain, deux semaines aprĂšs la sortie, une vulnĂ©rabilitĂ© critique est dĂ©couverte dans le composant Open Source que nous utilisons dans cette version, en production. Si nous ne notons pas ce que nous utilisons et oĂč, nous ne verrons tout simplement pas cette vulnĂ©rabilitĂ©. Certains outils offrent une possibilitĂ© de surveillance des vulnĂ©rabilitĂ©s dans les bibliothĂšques actuellement utilisĂ©es en production. C'est trĂšs utile.

Fonctionnalités :

  • DiffĂ©rentes politiques pour diffĂ©rentes Ă©tapes de dĂ©veloppement.
  • Surveillance des composants dans l'environnement industriel.
  • ContrĂŽle des bibliothĂšques au sein de l'organisation.
  • Prise en charge de divers systĂšmes de construction et langues.
  • Analyse des images Docker.

Quelques exemples de leaders dans le domaine qui s'occupent de l'analyse Open Source.

La peur et la haine de DevSecOps
Le seul gratuit parmi eux est VĂ©rification de dĂ©pendances d'OWASP. Il peut ĂȘtre intĂ©grĂ© dĂšs les premiĂšres Ă©tapes pour voir comment il fonctionne et ce qu'il prend en charge. Cela concerne principalement tous les produits cloud, ou sur site, mais pour leur base, ils doivent quand mĂȘme envoyer des informations sur Internet. Ils n'envoient pas vos bibliothĂšques, mais des hachages ou leurs propres valeurs calculĂ©es, ainsi que des empreintes vers leur serveur pour obtenir des nouvelles sur les vulnĂ©rabilitĂ©s.

Intégration dans le processus

ContrÎle des bibliothÚques dans le périmÚtre, qui sont téléchargées depuis des sources externes. Nous avons des dépÎts externes et internes. Par exemple, notre instance Event Central utilise Nexus, et nous souhaitons qu'il n'y ait pas de vulnérabilités de statut « critique » ou « élevé » dans notre dépÎt interne. Il est possible de configurer le proxy à l'aide de l'outil Nexus Firewall Lifecycle pour que ces vulnérabilités soient bloquées et ne pénÚtrent pas dans le dépÎt interne.

IntĂ©gration dans le CI. Sur un mĂȘme niveau que les tests automatisĂ©s, les tests unitaires et la sĂ©paration par Ă©tapes de dĂ©veloppement : dev, test, prod. À chaque Ă©tape, il est possible de tĂ©lĂ©charger n'importe quelle bibliothĂšque, d'utiliser ce que l'on veut, mais s'il y a quelque chose de sĂ©rieux avec un statut « critique », il pourrait ĂȘtre judicieux d'attirer l'attention des dĂ©veloppeurs Ă  l'Ă©tape de la mise en production.

Intégration avec les artefacts: Nexus et JFrog.

Intégration dans l'environnement de développement. Les outils que vous choisissez doivent s'intégrer aux environnements de développement. Les développeurs doivent pouvoir accéder aux résultats de l'analyse depuis leur poste de travail ou avoir la possibilité de scanner et vérifier le code pour détecter les vulnérabilités avant de le valider dans le CVS.

Intégration dans le CD. C'est une fonctionnalité géniale que j'apprécie beaucoup et dont j'ai déjà parlé : la surveillance de l'apparition de nouvelles vulnérabilités dans l'environnement de production. Cela fonctionne plus ou moins comme ça.

La peur et la haine de DevSecOps

Nous avons des DĂ©pĂŽts de composants publics — certains outils externes et notre dĂ©pĂŽt interne. Nous souhaitons qu'il ne contienne que des composants fiables. Lors du proxy des requĂȘtes, nous vĂ©rifions que la bibliothĂšque tĂ©lĂ©chargĂ©e ne prĂ©sente pas de vulnĂ©rabilitĂ©s. Si elle est soumise Ă  certaines politiques que nous Ă©tablissons et que nous validons avec le dĂ©veloppement, elle n’est pas tĂ©lĂ©chargĂ©e et un message indique d'utiliser une autre version. Par consĂ©quent, si la bibliothĂšque contient quelque chose de rĂ©ellement critique et de mauvais, le dĂ©veloppeur ne recevra pas la bibliothĂšque lors de l'installation — il devra utiliser une version antĂ©rieure ou ultĂ©rieure.

  • Lors de la construction, nous vĂ©rifions que personne n'a injectĂ© quoi que ce soit de mauvais, que tous les composants sont sĂ»rs et que personne n'a apportĂ© sur une clĂ© USB quoi que ce soit de dangereux.
  • Dans notre dĂ©pĂŽt, nous n'avons que des composants fiables.
  • Lors du dĂ©ploiement, nous vĂ©rifions encore une fois le paquet lui-mĂȘme : war, jar, DL ou image Docker, pour nous assurer qu'il respecte la politique.
  • Lors de la mise en production, nous surveillons ce qui se passe dans l'environnement industriel : des vulnĂ©rabilitĂ©s critiques apparaissent-elles ou non.

Analyse dynamique — DAST

Les outils d'analyse dynamique diffĂšrent radicalement de tout ce qui a Ă©tĂ© Ă©voquĂ© auparavant. C'est une sorte de simulation du travail d'un utilisateur avec l'application. S'il s'agit d'une application web, nous envoyons des requĂȘtes en imitant le travail du client, nous cliquons sur les boutons en front-end, nous envoyons des donnĂ©es artificielles Ă  partir de formulaires : guillemets, parenthĂšses, caractĂšres dans diffĂ©rents encodages, afin d'observer comment l'application fonctionne et traite les donnĂ©es externes.

Ce mĂȘme systĂšme permet de vĂ©rifier les vulnĂ©rabilitĂ©s modĂšles dans les logiciels open source. Étant donnĂ© que le DAST ne sait pas quel open source nous utilisons, il envoie simplement des modĂšles « malveillants » et analyse les rĂ©ponses du serveur :

— Aha, il y a un problĂšme de dĂ©sĂ©rialisation ici, et ici il n'y en a pas.

Il y a de grands risques, car si vous effectuez ce test de sĂ©curitĂ© sur le mĂȘme environnement que celui utilisĂ© par les testeurs, des problĂšmes dĂ©sagrĂ©ables peuvent survenir.

  • Charge Ă©levĂ©e sur le serveur d'application rĂ©seau.
  • Pas d'intĂ©grations.
  • PossibilitĂ© de modifier les paramĂštres de l'application analysĂ©e.
  • Pas de support pour les technologies nĂ©cessaires.
  • ComplexitĂ© de la configuration.

Nous avons eu une situation oĂč nous avons finalement lancĂ© AppScan : il a fallu longtemps pour obtenir l'accĂšs Ă  l'application, obtenir 3 comptes et nous Ă©tions contents - enfin nous pourrions tout vĂ©rifier ! Nous avons lancĂ© le scan, et la premiĂšre chose qu'AppScan a faite - il est allĂ© dans le panneau d'administration, a cliquĂ© sur tous les boutons, a changĂ© la moitiĂ© des donnĂ©es, et ensuite il a carrĂ©ment tuĂ© le serveur avec ses mailform-requĂȘtes. Le dĂ©veloppement avec les tests a dit :

— Les gars, vous rigolez ?! Nous vous avons donnĂ© des comptes, et vous avez mis le stand hors service !

Prenez en compte les risques potentiels. Idéalement, préparez un stand séparé pour tester la sécurité informatique, qui sera isolé de l'environnement pour au moins un certain temps, et il est préférable de vérifier l'admin manuellement. C'est un pentest - ces quelques pourcents d'efforts que nous ne prenons pas en compte maintenant.

Il vaut la peine de considĂ©rer que cela peut ĂȘtre utilisĂ© comme une analogie aux tests de charge. À la premiĂšre Ă©tape, vous pouvez activer un scanner dynamique avec 10-15 flux et voir ce que cela donne, mais gĂ©nĂ©ralement, comme le montre la pratique, rien de bon.

Quelques ressources que nous utilisons habituellement.

La peur et la haine de DevSecOps

Il convient de souligner Burp Suite — c'est le « couteau suisse » pour tout spĂ©cialiste de la sĂ©curitĂ©. Tout le monde l'utilise, et il est trĂšs pratique. Une nouvelle version dĂ©mo de l'Ă©dition entreprise est maintenant sortie. Auparavant, c'Ă©tait simplement un utilitaire stand alone avec des plugins, mais maintenant, enfin, les dĂ©veloppeurs crĂ©ent un grand serveur, Ă  partir duquel il sera possible de gĂ©rer plusieurs agents. C'est gĂ©nial, je recommande d'essayer.

Intégration dans le processus

L'intégration se fait assez bien et simplement : lancer le scan aprÚs une installation réussie de l'application sur le stand et scan aprÚs la réussite des tests d'intégration.

Si les intĂ©grations ne fonctionnent pas ou s'il y a des bouchons et des fonctions mock, c'est inutile et sans valeur - quel que soit le pattern que nous envoyons, le serveur rĂ©pondra toujours de la mĂȘme maniĂšre.

  • IdĂ©alement - un stand sĂ©parĂ© pour les tests.
  • Avant de commencer les tests, enregistrez la sĂ©quence de connexion.
  • Les tests du systĂšme d'administration - uniquement manuels.

Processus

Un peu en gĂ©nĂ©ral sur le processus et sur le fonctionnement de chaque outil, en particulier. Toutes les applications sont diffĂ©rentes - certaines fonctionnent mieux avec l'analyse dynamique, d'autres avec l'analyse statique, d'autres avec l'analyse OpenSource, les pentests ou mĂȘme quelque chose d'autre, par exemple, les Ă©vĂ©nements avec Waf.

Chaque processus a besoin d'un contrĂŽle.

Pour comprendre comment fonctionne un processus et oĂč il peut ĂȘtre amĂ©liorĂ©, il est nĂ©cessaire de collecter des mĂ©triques de tout ce qui est Ă  portĂ©e de main, y compris des mĂ©triques de production, des mĂ©triques d'outils et des donnĂ©es des traqueurs de dĂ©fauts.

Toute donnĂ©e est utile. Il faut analyser sous diffĂ©rents angles oĂč tel ou tel outil est mieux appliquĂ© et oĂč le processus connaĂźt des faiblesses. Peut-ĂȘtre faut-il examiner le temps de rĂ©ponse du dĂ©veloppement pour identifier les amĂ©liorations possibles en fonction du temps. Plus il y a de donnĂ©es, plus on peut Ă©tablir des analyses allant des niveaux supĂ©rieurs aux dĂ©tails de chaque processus.

La peur et la haine de DevSecOps

Étant donnĂ© que chaque analyseur statique et dynamique a ses propres API, ses propres mĂ©thodes de lancement et principes, certains ont des planificateurs, d'autres non - nous dĂ©veloppons un outil AppSec Orchestrateur, qui permet de crĂ©er un point d'entrĂ©e unique pour tout le processus Ă  partir du produit et de le gĂ©rer Ă  partir d'un seul endroit.

Les managers, dĂ©veloppeurs et ingĂ©nieurs en sĂ©curitĂ© ont un point d'entrĂ©e unique Ă  partir duquel ils peuvent voir ce qui est en cours, configurer et lancer des scans, obtenir les rĂ©sultats de ces scans et formuler des exigences. Nous essayons de nous Ă©loigner des documents et de tout traduire dans un langage comprĂ©hensible, comme celui utilisĂ© par le dĂ©veloppement — des pages sur Confluence avec des statuts et des mĂ©triques, des dĂ©fauts dans Jira ou dans divers traqueurs de dĂ©fauts, ou bien l'intĂ©gration dans un processus synchrone/asynchrone dans CI/CD.

Principaux enseignements

Les outils ne sont pas l'essentiel. D'abord penser au processus - ensuite dĂ©ployer des outils. Les outils sont bons, mais coĂ»teux, donc on peut commencer par le processus et Ă©tablir une interaction et une comprĂ©hension entre le dĂ©veloppement et la sĂ©curitĂ©. Du point de vue de la sĂ©curitĂ© - il ne faut pas 'ralentir' tout Ă  la fois. Du point de vue du dĂ©veloppement - s'il y a quelque chose de hautement critique, cela doit ĂȘtre rĂ©solu, et non ignorĂ©.

QualitĂ© du produit — un objectif commun pour la sĂ©curitĂ© et le dĂ©veloppement. Nous faisons tous le mĂȘme travail, nous nous efforçons de garantir que tout fonctionne correctement et qu'il n'y a pas de risques de rĂ©putation ou de pertes financiĂšres. C'est pourquoi nous promouvons l'approche DevSecOps, SecDevOps pour Ă©tablir la communication et amĂ©liorer la qualitĂ© du produit.

Commencez par ce qui existe dĂ©jĂ : exigences, architecture, vĂ©rifications partielles, formations, lignes directrices. Il n'est pas nĂ©cessaire d'appliquer toutes les pratiques Ă  tous les projets immĂ©diatement — avancez de maniĂšre itĂ©rative. Il n'y a pas de norme unique — expĂ©rimentez et essayez diffĂ©rentes approches et solutions.

Il y a une égalité entre les défauts de sécurité de l'information et les défauts fonctionnels.

Automatisez tout, ce qui bouge. Tout ce qui ne bouge pas — faites-le bouger et automatisez-le. Si quelque chose est fait manuellement, ce n'est pas un bon segment du processus. Il vaut peut-ĂȘtre la peine de le revoir et de l'automatiser aussi.

Si la taille de l'Ă©quipe de sĂ©curitĂ© de l'information est petite — utilisez des Security Champions.

Peut-ĂȘtre que ce dont je vous ai parlĂ© ne vous conviendra pas et vous inventerez quelque chose de propre — et c'est bien. Mais choisissez les outils en fonction des exigences de votre processus spĂ©cifique. Ne vous laissez pas influencer par ce que dit la communautĂ©, que cet outil est mauvais et que celui-ci est bon. Peut-ĂȘtre que sur votre produit, ce sera l'inverse.

Exigences pour les outils.

  • Faible niveau de faux positifs.
  • Temps d'analyse adĂ©quat.
  • FacilitĂ© d'utilisation.
  • DisponibilitĂ© des intĂ©grations.
  • ComprĂ©hension de la feuille de route de dĂ©veloppement du produit.
  • PossibilitĂ© de personnalisation des outils.

La prĂ©sentation de Yuri a Ă©tĂ© sĂ©lectionnĂ©e comme l'une des meilleures lors de DevOpsConf 2018. Pour dĂ©couvrir encore plus d'idĂ©es intĂ©ressantes et de cas pratiques, venez les 27 et 28 mai Ă  Skolkovo pour DevOpsConf dans le cadre de le festival RIT++. Mieux encore, si vous ĂȘtes prĂȘt Ă  partager votre expĂ©rience, alors soumettez une demande pour une prĂ©sentation avant le 21 avril.

Source : habr.com

Acheter un hĂ©bergement fiable pour les sites avec protection DDoS, serveurs VPS VDS đŸ”„ Acheter un hĂ©bergement fiable pour les sites avec protection DDoS, serveurs VPS VDS | ProHoster