J'ai récemment lu la réponse canonique de notre suzerain de l'urine à la question sur Comment les autorités de certification stockent-elles leurs clés racine privées?
Je devais alors me demander:
Comment les grandes entreprises (par exemple Microsoft, Apple, ...) protègent-elles leur précieux code source?
En particulier, je me demandais comment protéger leur code source contre le vol, contre les modifications malveillantes externes et contre les modifications malveillantes basées sur des initiés.
La première sous-question a déjà été (quelque peu) répondue en réponse de CodeExpress le Comment empêcher la divulgation de données privées en dehors de l'Organisation .
Le raisonnement des questions est simple:
DUAL_EC_DRBG
le point a été remplacé dans sa source.Veuillez ne pas proposer de "loi" et de "contrats". Bien qu'il s'agisse de mesures efficaces contre le vol et la modification, elles ne fonctionnent certainement pas aussi bien que les défenses techniques et n'empêcheront pas les attaquants agressifs ( c'est-à-dire d'autres agences gouvernementales).
Tout d'abord, je veux dire que ce n'est pas parce qu'une entreprise est grande que sa sécurité sera meilleure.
Cela dit, je mentionnerai qu'ayant effectué des travaux de sécurité dans un grand nombre d'entreprises du Fortune 500, y compris de nombreuses marques connues de la plupart des gens, je dirai qu'actuellement 60 à 70% d'entre elles ne font pas autant que vous pensez qu'ils devraient faire. Certains donnent même à des centaines de sociétés tierces du monde entier un accès complet pour tirer de leur base de code, mais pas nécessairement pour y écrire.
Quelques-uns utilisent plusieurs référentiels Github privés pour des projets séparés avec une authentification à deux facteurs activée et un contrôle serré sur qui ils accordent également l'accès et ont un processus pour révoquer rapidement l'accès quand quelqu'un part.
Quelques autres sont très sérieux au sujet de la protection des choses, alors ils font tout à la maison et utilisent ce que de nombreuses autres entreprises pourraient considérer comme des niveaux excessifs de contrôle de sécurité et de surveillance des employés. Ces sociétés utilisent des solutions telles que les outils de prévention de la perte de données (DLP) pour surveiller l'exfiltration de code, l'accès VPN interne à des environnements fortement renforcés uniquement pour le développement avec une tonne de contrôles et de surveillance de sécurité traditionnels et, dans certains cas, la capture complète de tous trafic dans l'environnement où le code est stocké. Mais en 2015, cette situation est encore très rare.
Quelque chose qui peut être intéressant et qui m'a toujours semblé inhabituel, c'est que le secteur financier, en particulier les banques, a une sécurité bien pire qu'on ne le pense et que l'industrie pharmaceutique est bien meilleure que d'autres industries, y compris de nombreux entrepreneurs de la défense. Il y a certaines industries qui sont absolument horribles en matière de sécurité. Je mentionne cela parce qu'il y a d'autres dynamiques en jeu: ce n'est pas seulement les grandes entreprises contre les petites, une grande partie a à voir avec la culture organisationnelle.
Pour répondre à votre question, je vais souligner que c'est l'entreprise dans son ensemble qui prend ces décisions et non les équipes de sécurité. Si les équipes de sécurité étaient en charge de tout, ou même étaient au courant de tous les projets en cours, les choses ne ressembleraient probablement pas à ce qu'elles sont aujourd'hui.
Cela dit, vous devez garder à l'esprit que la plupart des grandes entreprises sont cotées en bourse et, pour un certain nombre de raisons, ont tendance à être beaucoup plus préoccupées par les bénéfices à court terme, les chiffres trimestriels et la concurrence pour la part de marché contre leurs autres grands concurrents que sur les risques de sécurité. , même si les risques pouvaient effectivement détruire leur entreprise. Gardez donc cela à l'esprit lorsque vous lisez les réponses suivantes.
Si le code source a été volé:
une. La plupart ne s'en soucieraient pas et cela n'aurait presque aucun impact sur leur marque ou leurs ventes. Gardez à l'esprit que le code lui-même n'est pas, dans de nombreux cas, ce qui stocke la valeur d'une offre d'entreprise. Si quelqu'un d'autre obtenait une copie de la source Windows 10, il ne pourrait pas créer soudainement une entreprise vendant un système d'exploitation clone Windows 10 et être en mesure de le prendre en charge. Le code lui-même n'est qu'une partie de la solution vendue.
b. Le produit serait-il plus à risque à cause de cela? Oui absolument.
Modification externe: Oui, mais c'est plus difficile à faire et plus facile à attraper. Cela dit, puisque la plupart des entreprises ne surveillent pas sérieusement cela, il est très possible que cela soit arrivé à de nombreuses grandes entreprises, surtout si l'accès détourné à leurs logiciels est d'une valeur significative pour d'autres États-nations. Cela se produit probablement beaucoup plus souvent que les gens ne le pensent.
Attaquant interne: selon le degré d'intelligence de l'attaquant, cela peut même ne jamais être remarqué ou pourrait ressembler à une erreur de programmation discrète. En dehors des vérifications des antécédents et de la surveillance du comportement, il n'y a pas grand-chose qui puisse empêcher cela, mais nous espérons que certains outils d'analyse de code source pourraient détecter cela et forcer l'équipe à le corriger. Il s'agit d'une attaque particulièrement difficile à défendre et c'est la raison pour laquelle quelques entreprises ne sous-traitent pas le travail à d'autres pays et font des vérifications approfondies des antécédents de leurs développeurs. Les outils d'analyse de code source statique s'améliorent, mais il y aura toujours un écart entre ce qu'ils peuvent détecter et ce qui peut être fait.
En un mot, les trous sortiront toujours avant les correctifs, donc traiter la plupart des problèmes de sécurité devient une sorte de course contre la montre. Les outils de sécurité vous aident à faire des compromis sur le temps, mais vous n'aurez jamais une sécurité "parfaite" et vous en approcher peut devenir très coûteux en temps (ralentir les développeurs ou nécessiter beaucoup plus d'heures de travail ailleurs).
Encore une fois, ce n'est pas parce qu'une entreprise est grande qu'elle a une bonne sécurité. J'ai vu quelques petites entreprises avec beaucoup une meilleure sécurité que leurs concurrents plus importants, et je pense que ce sera de plus en plus le cas, car les petites entreprises qui veulent prendre leur sécurité plus au sérieux n'ont pas à faire des efforts massifs les changements organisationnels, où les grandes entreprises seront obligées de s'en tenir à la façon dont elles ont fait les choses dans le passé en raison des coûts de transition.
Plus important encore, je pense qu'il est plus facile pour une nouvelle entreprise (de toute taille, mais surtout de plus petite taille) d'avoir une sécurité fortement intégrée dans sa culture de base plutôt que de devoir changer sa culture actuelle/héritée comme les entreprises plus âgées doivent le faire. Il peut même y avoir maintenant des opportunités de prendre des parts de marché au produit moins sécurisé en en créant une version très sécurisée. De même, je pense que votre question est importante pour une raison totalement différente: la sécurité est encore à ses balbutiements, nous avons donc besoin de meilleures solutions dans des domaines comme la gestion de code où il y a beaucoup de place pour l'amélioration.
Clause de non-responsabilité : Je travaille pour une très grande entreprise qui fait du bon travail dans ce domaine, mais ma réponse est mon opinion personnelle et n'indique pas mon la position ou les politiques de l'employeur.
Tout d'abord, comment protéger le code contre les fuites:
Deuxièmement, comment empêcher la modification de code malveillant; il n'y a vraiment qu'une seule réponse à cette question: changer le contrôle.
Pour chaque caractère de code dans votre référentiel, vous devez savoir exactement qui a ajouté (ou supprimé) ce code, et quand. C'est si facile à faire avec la technologie d'aujourd'hui qu'il est presque plus difficile pas d'avoir un suivi des changements en place. Si vous utilisez Git ou Mercurial ou tout autre système de contrôle de source modestement utilisable, vous bénéficiez d'un suivi des modifications et vous comptez beaucoup sur lui.
Mais pour augmenter un peu la fiabilité, j'ajouterais que chaque modification de votre référentiel doit être approuvée par au moins une autre personne en plus de l'auteur qui soumet le changement. Des outils comme Gerrit peuvent rendre cela simple. De nombreux régimes de certification nécessitent de toute façon des révisions de code, de sorte que l'application de ces révisions au moment de l'enregistrement signifie que les acteurs malveillants ne peuvent pas agir seuls pour introduire du mauvais code dans votre référentiel, empêche la validation de code mal écrit et garantit qu'au moins 2 les gens comprennent chaque changement soumis.
Il y aura des mesures en place pour empêcher l'insertion accidentelle de code problématique, alias bogues. Certains d'entre eux contribueront également à éviter l'insertion délibérée de code problématique.
Bien entendu, ces mesures reposent sur l'honnêteté et la bonne volonté de tous les participants. Quelqu'un avec un accès administrateur au serveur de construction ou au référentiel pourrait faire beaucoup de ravages. D'un autre côté, les programmeurs ordinaires n'ont pas besoin de ce type d'accès.
Dans ma (grande) entreprise, nos ordinateurs portables utilisent tous des disques durs cryptés. Nous utilisons un outil appelé Digital Guardian qui surveille tous les transferts/téléchargements de fichiers et qui bloque les ports USB pour l'écriture de fichiers. Quiconque a besoin d'une exception doit utiliser un lecteur USB chiffré par le matériel (encore une fois, pour empêcher l'accès aux fichiers en cas de perte ou de vol du lecteur). De telles exceptions sont temporaires et il faut justifier les fichiers en cours d'écriture (qui sont journalisés). Digital Guardian empêche l'envoi de la plupart des types de pièces jointes à des adresses e-mail externes. Tout échange de fichiers interne se fait à l'aide de dossiers Web avec contrôle d'accès et une piste d'audit de qui a accédé à quoi - cela signifie que le partage de fichiers "pour les besoins de l'entreprise" est assez transparent, et tout le reste est difficile.
Le système n'est pas à toute épreuve et il a un impact sur la bande passante - mais les outils d'audit à eux seuls ont révélé plusieurs instances d'employés (souvent des employés qui étaient sur le point de quitter l'entreprise) qui ont tenté de prendre le code source/les documents de conception, etc. Au moins, nous arrêtons certains de ces tentatives.
Et au cas où quelqu'un penserait que les téléchargements https seraient "invisibles": tout le trafic Web externe est géré par un proxy dans le cloud qui utilise un certificat MITM pour inspecter le trafic https. Il est sans doute possible de contourner ces mesures - il y a beaucoup d'employés intelligents - mais parfois cela suffit pour rendre votre cible plus difficile que les autres.
C'est une question délicate et parce que je n'ai jamais travaillé dans cette industrie, mon idée pourrait être théorique ou très impraticable.
Que se passe-t-il si les employés de faible hiérarchie n'obtiennent que de petites parties du code source? L'équipe Explorer.exe a uniquement besoin d'accéder au code source d'Explorer.exe. Cela rendrait plus difficile le vol du code source de l'intérieur, car vous auriez besoin d'être dans des positions plus élevées pour avoir un aperçu de plus de parties du code source.
Bien sûr, vous auriez besoin d'avoir une bonne documentation sur toutes les parties dont l'équipe pourrait avoir besoin mais ne peut pas voir. Le débogage deviendrait également plus délicat car vous auriez à fusionner le code source précompilé avec le code fraîchement compilé de l'équipe Explorer.exe. Il peut y avoir un serveur de compilation qui contient tout le code source et peut compiler des versions complètes du produit même pour ceux qui n'ont édité qu'un petit morceau. (Parce qu'ils doivent tester leurs modifications) Ce serveur sait également qui a accès à quelles parties du code.
Je ne sais pas si c'est une approche pratique ou si cela se passe vraiment dans l'industrie ou non. C'est juste un concept qui, je pense, aurait du sens pour empêcher le vol de code source.