Comment corriger les vulnérabilités courantes de la chaîne d'approvisionnement
Du point de vue du cycle de vie du développement logiciel (SDLC), la sécurité est l'aspect le plus crucial des entreprises, car les vulnérabilités de sécurité présentent des risques pour les grandes organisations et les utilisateurs. En conséquence, les entreprises investissent massivement pour faire de la sécurité des logiciels une priorité.
Être une entreprise ou une équipe centrée sur la confidentialité peut apporter des avantages exceptionnels dans son ensemble. Les clients apprécient autant les fonctionnalités de sécurité logicielle que l'entreprise développe et améliore que la convivialité. Mais atteindre le jalon nécessite une attention particulière avec des implications strictes sur les meilleures pratiques et directives de sécurité SDLC.
Le SDLC contient des points de contrôle de sécurité pour protéger la confidentialité, la disponibilité et l'intégrité de l'ensemble du système et des données qu'il contient. Le SDLC fusionné avec le modèle de maturité logicielle OWASP (OWASP SAMM) peut aider à formuler et à mettre en œuvre une feuille de route stratégique à l'échelle de l'entreprise pour la sécurité des applications.
Qu'est-ce que la chaîne d'approvisionnement logicielle ?
La chaîne d'approvisionnement logicielle est une discipline qui englobe des équipes (internes et externes), des méthodologies, des outils et des meilleures pratiques pour faire vivre un artefact logiciel de la conception au déploiement.
Ces derniers temps, les services et les expériences numériques les plus innovants et perturbateurs ont été développés à l'aide de logiciels open source par des équipes distantes.
Les bibliothèques open source attirent les développeurs avec leurs fonctionnalités brillantes permettant aux ingénieurs d'accélérer le développement en réduisant le temps de mise sur le marché et les implications financières.
Mais des failles et des complications apparaissent dans l'utilisation de logiciels open source en raison d'un manque de contrôle sur le code source et les versions de fonctionnalités au fil du temps avec des correctifs, et elles s'accompagnent d'un risque d' attaques de la chaîne d'approvisionnement open source .
Un code insuffisamment développé avec des secrets codés en dur et une infrastructure à architecture lâche est sujet à des attaques fréquentes.
Vulnérabilités les plus populaires
Les vulnérabilités logicielles sont répandues dans les organisations de tous niveaux. Les entreprises en herbe sont plus susceptibles d'être victimes de telles attaques car elles se concentrent sur la mise sur le marché de nouvelles fonctionnalités dans des délais serrés. Malheureusement, ces expositions ne font pas la une des journaux pour sensibiliser la communauté technologique. Discutons de quelques-uns des incidents historiques les plus répandus et les plus percutants.
À un moment donné, la nouvelle de l'attaque contre SolarWinds a secoué le monde de la technologie. L'événement est devenu un excellent exemple des dangers des pratiques de sécurité inadéquates.
La catastrophe est survenue lorsqu'un stagiaire n'a pas réussi à créer un mot de passe complexe. Les attaquants se sont glissés dans le système SolarWinds grâce à une combinaison de mots de passe faibles en utilisant une méthode appelée pulvérisation de mots de passe et ont réussi à pousser les logiciels malveillants via une porte dérobée sur toutes les entreprises dépendantes. L'attaque de la chaîne d'approvisionnement était basée sur l'identité, ce qui a mis à jour le serveur de mise à jour de SolarWinds.
L'application de politiques de mot de passe fortes sur le système avec des couches de sécurité supplémentaires telles que MFA aurait pu éviter le désastre.
Un incident similaire s'est produit à l'autorité de certification du gouvernement vietnamien. Les attaquants ont contourné le pare-feu du site Web et inséré des fichiers d'installation supplémentaires dans les applications d'installation de VGCA, qui sont des applications destinées aux clients proposées par VGCA pour l'offre de signature numérique.
L'activité globale a été couronnée de succès car les attaquants ont trouvé une lacune dans la conception du site Web car la conception globale était un peu défectueuse. L'attaque par porte dérobée était évitable grâce à des restrictions de pare-feu strictes, des contrôles d'accès et des autorisations privilégiées.
Pour un autre exemple de la façon dont les vulnérabilités peuvent paralyser un système, regardons Bitcoins. Les bitcoins peuvent être facilement exposés et volés si le fournisseur de services ne respecte pas les consignes de sécurité.
Copay, un portefeuille Bitcoin, a subi une attaque de la chaîne d'approvisionnement lorsqu'une application mobile qui héberge le portefeuille Bitcoin a eu un bogue. Le bogue dans l'architecture est venu de la vulnérabilité du package d'un gestionnaire de package de nœud d'outil Javascript open source (NPM). Cette version boguée a été rendue publique et a permis au pirate de modifier les applications pour charger du code refactorisé et accéder à la bibliothèque JS.
Le bogue aurait pu être détecté et corrigé avec des outils d'analyse de vulnérabilité dans le pipeline de contrôle de version et de déploiement.
Éléments mobiles pour la gestion de la chaîne d'approvisionnement logicielle
Un plan bien articulé qui suit une documentation solide, la cybersécurité, la résolution des risques et les meilleures pratiques de gestion élimine les vulnérabilités potentielles et renforce la sécurité de la chaîne d'approvisionnement logicielle. Les organisations doivent adapter les principes d'ingénierie « sécurisés dès la conception » et une stratégie de décalage vers la gauche pour établir une chaîne d'outils DevSecOps complète.
Étape 1 : Connaissances en matière de codage sécurisé
En premier lieu, les entreprises devraient adopter des programmes exclusifs d'apprentissage et de développement sur la sécurité et la gestion des risques. Alors que les équipes de développement se précipitent vers l'amélioration de leurs compétences techniques, un objectif commun que les entreprises devraient partager consiste à aider les développeurs à devenir des champions de la sécurité.
Des évaluations de la vulnérabilité des applications et des cours de sécurité sont nécessaires pour que les ingénieurs restent alignés sur les objectifs de l'entreprise.
Étape 2 : Modélisation des menaces
Identifier les risques de sécurité bien avant le rattrapage du développement et des opérations est essentiel. Cette étape garantit que la stratégie globale de conception et de développement est conforme aux normes de sécurité organisationnelles.
La modélisation des menaces présente aux organisations une approche structurée pour identifier, analyser, évaluer et atténuer les risques aux premiers stades de développement. Les modèles de menace sont prometteurs en matière de sécurité en permettant aux développeurs et aux architectes de penser du point de vue de l'attaquant, leur permettant de planifier et de concevoir un système sécurisé.
<?xml version="1.0" encoding="utf-8"?>
<KnowledgeBase xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Manifest name="Basic threat modelling design" id="5d3b996b-bac2-8cf6-3b39-617bb67bf042" version="4.1.0.11" author="TwC MSEC" />
<ThreatMetaData>
<IsPriorityUsed>true</IsPriorityUsed>
<IsStatusUsed>false</IsStatusUsed>
<PropertiesMetaData>
<ThreatMetaDatum>
<Name>Title</Name>
<Label>Title</Label>
<HideFromUI>false</HideFromUI>
<Values>
<Value />
</Values>
<Id>5d3b996b-bac2-8cf6-3b39-617bb67bf042</Id>
<AttributeType>0</AttributeType>
</ThreatMetaDatum>
<ThreatMetaDatum>
<Name>UserThreatShortDescription</Name>
<Label>Short Description</Label>
<HideFromUI>true</HideFromUI>
<Values>
<Value>Threat modeling is critical and mandate phase in secure software development</Value>
</Values>
<Id>ac0f9ea8-aed5-4d95-4ce9-6787124d7b48</Id>
<AttributeType>1</AttributeType>
</ThreatMetaDatum>
<ThreatMetaDatum>
<Name>UserThreatDescription</Name>
<Label>Description</Label>
<HideFromUI>false</HideFromUI>
<Values>
<Value />
</Values>
<Id>5d3b996b-bac2-8cf6-3b39-617bb67bf042</Id>
<AttributeType>0</AttributeType>
</ThreatMetaDatum>
<ThreatMetaDatum>
<Name>Priority</Name>
<Label>Priority</Label>
<HideFromUI>true</HideFromUI>
<Values>
<Value>High</Value>
<Value>Medium</Value>
<Value>Low</Value>
</Values>
<Description>Priority</Description>
<Id>ac0f9ea8-aed5-4d95-4ce9-617bb67bf042</Id>
<AttributeType>1</AttributeType>
</ThreatMetaDatum>
</PropertiesMetaData>
</ThreatMetaData>
<GenericElements>
<ElementType>
<Name>Threat modeling Process</Name>
<ID>GE.P</ID>
<Description>General approach to define a threat model</Description>
<ParentElement>ROOT</ParentElement>
<Image>Image_ref</Image>
<Hidden>false</Hidden>
<Representation>Ellipse</Representation>
<StrokeThickness>0</StrokeThickness>
<ImageLocation>Centered</ImageLocation>
<Attributes>
<Attribute>
<Id>002864b3-9a4e-4d21-8a4d-8aea1d2e3056</Id>
<IsInherited>false</IsInherited>
<IsOverrided>false</IsOverrided>
<Name>codeType</Name>
<DisplayName>Code Type</DisplayName>
<Mode>Dynamic</Mode>
<Type>List</Type>
<Inheritance>Virtual</Inheritance>
<AttributeValues>
<Value>Not Selected</Value>
<Value>Managed</Value>
<Value>Unmanaged</Value>
</AttributeValues>
</Attribute>
</Attributes>
</ElementType>
</StandardElements>
</KnowledgeBase>
Le code devrait être mandaté pour être révisé par des pairs. L'activation des révisions par-dessus l'épaule et par e-mail permet aux équipes de développement de détecter les bogues et les défauts au cours des premières étapes du développement.
Des retards et des failles de vulnérabilité peuvent arriver dans le code même avec des considérations minutieuses et des efforts manuels. Les échecs les plus courants incluent s'il y a des constructions de programmation manquantes, si le code global est conforme aux normes de sécurité et si le code réussit les contrôles de charpie et d'indication de type.
Les révisions de code assistées par des outils sont moins sujettes aux erreurs et évitent les risques de vulnérabilité. GitHub peut s'avérer être un outil fiable et efficace pour les audits de code et les révisions de code en déplacement, avec le contrôle de version comme avantage supplémentaire.
Étape 4 : Numérisation à l'aide d'outils automatisés
L'automatisation de la révision du code avant la fusion avec le maître est de la plus haute importance. Le fait de ne pas réussir les vérifications prédéfinies met en évidence les problèmes dans le code et permet une boucle de rétroaction permettant aux développeurs de refactoriser et de sécuriser la base de code globale.
WhiteSource pour les développeurs, Codacy et Codecov sont des outils de révision automatisés disponibles sur le marché GitHub pour s'intégrer rapidement dans votre base de code et répondre aux exigences de la pile technologique. Ces outils utilisent l'approche décalée vers la gauche pour l'analyse et l'indexation open source de tous les référentiels GitHub existants.
Étape 5 : analyse statique du code et tests de sécurité
L'automatisation du débogage et des révisions de code tout en sautant l'exécution via des pipelines peut être fructueuse pendant les étapes de construction et de déploiement. Les outils avancés d'automatisation de pipeline, comme Jenkins, sont chargés avec un large éventail de plugins de révision de code.
Les plugins de révision de code statique comme FindBugs effectuent la révision et l'analyse du code en exécutant des vérifications et une logique prédéfinies, renvoyant un fichier de sortie. Jenkins peut analyser le fichier de sortie du travail, mettre en évidence les erreurs et répertorier les avertissements rencontrés en suivant une approche descendante au niveau du répertoire de code et en présentant graphiquement un résumé détaillé de l'analyse globale.
Exemple de code :
trigger:
branches:
include:
- feature
- main
paths:
include:
- src/*
- tests/*
pool:
Image: 'centos/latest'
jobs:
- job: codereview
displayName: review and report
steps:
- checkout: self
lfs: true
- task: UsePythonVersion@0
displayName: 'Set Python version to 3.9'
inputs:
versionSpec: '3.9'
- script: pip3 install --user -r requirements.txt
displayName: 'Installing required dependencies'
- script: |
python -m behave --junitxml=./validation_test-checks.xml
displayName: 'Running behave tests'
- task: PublishBehaveResults@1
displayName: 'bumping out behave test results'
condition: passOrFail()
inputs:
testResultsFiles: '**/validation_test-*.xml'
testRunTitle: 'Publish behave test results for Python $(python.version)'
Les vulnérabilités de la chaîne d'approvisionnement logicielle sont des bêtes incontournables. Lorsqu'ils sont ignorés, ils peuvent faire tomber tout un système, ce qui a un impact à la fois sur les affaires et sur la réputation. Le SDLC englobe de nombreuses techniques et ensembles d'outils pour faire de la sécurité une étape principale du parcours logiciel.
La phase de développement globale doit suivre les étapes décrites ci-dessus, à commencer par la connaissance de la sécurité, la modélisation des menaces, l'examen du code par les pairs, les vérifications automatisées du code, l'analyse statique du code et les tests de sécurité.