Ceci est un suivi Y a-t-il une raison légitime pour laquelle je devrais être obligé d'utiliser l'ordinateur de mon entreprise . Surtout parce que je vois un énorme problème dans quelques situations spécifiques.
Si j'avais été en position d'ingénieur de sécurité pour une organisation, je mettrais définitivement une politique selon laquelle seuls les ordinateurs de l'entreprise devraient être utilisés. Cela a du sens et protège non seulement les données de l'entreprise, mais également la responsabilité des employés.
Pourtant, il y a un cas où une telle politique me dérange: un développeur compétent (je ne parle pas d'un développeur junior, je parle d'un développeur de niveau moyen à senior) aura potentiellement sur sa machine de travail:
qemu
).C'est un scénario très courant dans les startups et les post-startups (une startup qui a réussi à survivre plusieurs années). De plus, ce développeur changera chaque semaine ses conteneurs Docker et ses machines virtuelles, car il testera probablement de nouvelles technologies.
Exiger que ce développeur se réfère à l'ingénieur de sécurité pour installer de nouveaux logiciels à chaque fois est complètement impossible. De plus, étant donné qu'une entreprise aurait plus d'un développeur de ce type, choisir les ordinateurs gérés par l'entreprise pour tout le monde présente des inconvénients:
D'un autre côté, permettre aux développeurs d'utiliser librement les machines est dangereux: un conteneur de docker escroc ou une machine virtuelle et vous avez un initié. Je dirais même que les ordinateurs de ces développeurs sont plus dangereux que ceux d'un utilisateur ordinaire (par exemple, un gestionnaire avec un tableur).
Comment faites-vous des politiques sensées pour les développeurs compétents?
Voici quelques autres solutions auxquelles j'ai pu penser (ou que j'ai vues dans le passé), dont la plupart étaient plutôt mauvaises:
Interdisez l'accès à Internet depuis les machines de développement:
Donnez aux développeurs deux ordinateurs, un pour Internet et un pour les machines de développement:
Alt+2
pour obtenir le navigateur est plus rapide que de passer à un autre ordinateur;Déplacer le développement vers les serveurs (c'est-à-dire pas le développement sur les machines de bureau):
Il doit y avoir un meilleur moyen.
Développement et production séparés
Il est courant de donner aux développeurs des droits d'administrateur/root locaux sur leur poste de travail. Cependant, les développeurs ne doivent avoir accès qu'aux environnements de développement et ne doivent jamais avoir accès aux données en direct. Les administrateurs système - qui ont accès à la production - devraient disposer de postes de travail beaucoup plus contrôlés. Idéalement, les postes de travail sys-admin ne devraient pas avoir accès à Internet, bien que cela soit rare dans la pratique.
Une variante que j'ai vue est que les développeurs ont une version d'entreprise verrouillée, mais peuvent faire ce qu'ils veulent au sein des machines virtuelles. Cependant, cela peut être gênant pour les développeurs, car les machines virtuelles ont des performances réduites et les avantages de sécurité ne sont pas si grands. Il est donc plus courant de voir les développeurs avoir simplement un accès complet à leur propre poste de travail.
Cette réponse vient donc du point de vue d'un développeur. Garde cela à l'esprit.
Tout d'abord, le fait de ne pas avoir de droits "d'administrateur local" sur ma propre machine est un signe que je dois chercher un travail ailleurs. Il est presque impossible d'écrire du code, de jouer avec des trucs et de maintenir une chaîne d'outils si vous devez demander la permission à chaque fois que vous devez mettre à jour (ou tester) une nouvelle dépendance ou un nouvel outil. Voici donc les niveaux d'autorisation I requis. Gardez à l'esprit que je suis généralement assez haut sur l'échelle pour ainsi dire.
Moins que cela, et vous pouvez aller trouver un nouveau développeur.
Cela dit, ce niveau d'accès comporte beaucoup de risques. Donc, ce que je recommande normalement, c'est un réseau séparé. Mettez tous les "trucs" de développement dans son propre réseau. Son propre AD, son propre hébergement de fichiers, son propre tout, et ne le laissez jamais parler au réseau de production. (Mais laissez-le sortir sur Internet)
Oui, cela signifie du matériel en double (ou VPS), mais vous en avez besoin de toute façon pour les tests. Oui, cela signifie un peu plus de frais généraux lors de la mise à niveau ou de l'administration, mais encore une fois, cela est nécessaire pour les tests. Vous avez également besoin d'un emplacement pour voir "Qu'advient-il du logiciel X si je mets à niveau le serveur AD?" Regardez que vous disposez d'un réseau complet de machines de test prêtes pour ce type de test.
Ce que j'ai réussi à mettre en œuvre (avec l'aide d'une bonne équipe informatique) est un VLAN distinct pour tous les "trucs" de développement et un seul hôte VPS auquel le développeur a un accès complet, pour faire ce qu'il veut . Sur cet hôte se trouve un serveur AD configuré par l'informatique pour ressembler à une version plus petite du serveur AD de l'entreprise. Ensuite, un ensemble de documents et de directives pour ce qu'un serveur Web, par exemple, doit exécuter. Ce qu'un serveur DNS doit exécuter, ce qu'un serveur xyz doit exécuter. Ensuite, une partie du "développement" consiste à installer et configurer ces VPS pour notre utilisation. Tout ce qui se trouve sur ce VLAN est totalement isolé de la production et considéré comme externe à l'entreprise. Enfin, un ensemble de "punch throughs" est créé pour les actifs auxquels nous avons eu besoin d'accéder (comme le courrier électronique). Normalement, cela était traité comme si nous étions externes, et la liste de ces outils était très petite.
Du point de vue d'un développeur:
Votre travail consiste à empêcher le changement (les bogues et vulnérabilités connus sont meilleurs qu'inconnus, non?), Mais le mien est de changer les choses. Cela nous place dans une impasse. Mon travail consiste à créer/changer des choses. Si votre politique empêche cela, alors, comme tout autre obstacle, une partie de mon travail consiste à trouver un moyen de contourner cela.
Selon vous, quel est le plus dangereux, un développeur auquel vous avez accordé l'accès aux choses dont il a besoin pour faire son travail, ou celui qui a obtenu cet accès en apprenant à contourner toutes vos mesures défensives? Et pourquoi votre entreprise vous paie-t-elle, vous et vos développeurs, pour mener cette guerre les uns contre les autres alors que vous devriez travailler ensemble?
La réponse est simple: donner aux développeurs l'accès à ce dont ils ont besoin pour faire leur travail. Et parlez avec eux. Il peut y avoir des conditions rares (rétro-ingénierie de salle blanche avec des conséquences juridiques majeures, ou traitement de données gouvernementales classifiées top secrètes) où vous avez besoin d'une politique plus compliquée. Mais pour la plupart, ce n'est pas si grave. Si vous déclenchez une guerre et rendez vos développeurs ennemis, ils partiront ou deviendront beaucoup plus dangereux que si vous travaillez avec eux.
Les mesures judicieuses incluent l'interdiction des vidages de base de données de production sur les ordinateurs portables de développement (test uniquement des bases de données avec des données fausses). De cette façon, si l'ordinateur portable est volé, aucune donnée confidentielle n'est perdue. Mais si le développeur doit déboguer des choses, il a toujours besoin d'accéder à des copies de la base de données de production quelque part dans un environnement contrôlé.
Restreindre l'accès à Internet est ridicule. Vous pourriez aussi bien demander à tous vos développeurs d'écrire leur code sur papier avec une plume et de l'encre.
Discutez avec vos développeurs, trouvez un moyen de leur donner ce dont ils ont besoin pour faire leur travail tout en maintenant la sécurité dont vous avez besoin pour sécuriser les données importantes. Les détails dépendront de votre entreprise et des données avec lesquelles vous traitez. Mais il est peu probable qu'il ait besoin de mesures draconiennes.
Un ingénieur en sécurité n'entretient pas d'ordinateurs, c'est ce que fait le service desk. Dans votre cas, vous lui demanderez d'installer trois outils:
De là, il peut ajouter et supprimer des machines pour le développement autant qu'il le souhaite (ne devrait pas nécessiter l'intervention d'un ingénieur sec). En ce qui concerne votre "conteneur voyou". En général, vous ne déployez pas de conteneurs sur un autre serveur, vous déployez des fichiers docker qui extraient du code d'un référentiel de code ou téléchargent un binaire signé de code compilé (ce qui est encore plus sûr).
En termes de voyous, je ne peux qu'imaginer qu'un attaquant accède et ajoute plus de code. C'est pourquoi vous devez avoir une sécurité intégrée à chaque étape du SDLC pour vous assurer que tout le code est au moins examiné ou passé par un autre développeur avant de le pousser dans l'arborescence. De plus, vous pouvez également intégrer des scanners de code pour rechercher automatiquement les talons de code suspects ou vulnérables.
Sur votre troisième point, cela dépend en fait. Des entreprises comme Riot Games font exactement cela. Ils ont découvert que limiter les individus intelligents les conduirait à contourner les contrôles. Ils ont donc décidé d'utiliser des règles simples et une formation de sensibilisation efficace pour s'assurer de garder la sécurité à l'esprit et de leur accorder tous les privilèges administratifs. Ils ont distribué de petites cartes indiquant ce dont ils devaient s'occuper et faire attention.
Nous donnons à nos développeurs un accès administrateur sur leurs ordinateurs et leur faisons savoir quelles sont les règles. La plupart exécutent Linux mais nous avons également quelques développeurs sur Windows. Ils savent tous stocker leurs documents, designs, etc. sur nos fichiers partagés (qui ont des autorisations plus spécifiques) et pousser leur code source sur notre serveur Git.
Ils savent également que je ne passerai pas beaucoup de temps à résoudre un problème avec leur système d'exploitation. En cas de dysfonctionnement de leur ordinateur, nous le nettoyons souvent et réinstallons le système d'exploitation. Les applications et les paramètres communs sont automatiquement installés via Puppet et ils devront faire le reste eux-mêmes. La plupart d'entre eux ont un dépôt Git avec des fichiers dot (les paramètres et les préférences pour leur environnement).
Le temps qu'ils perdent dans un tel cas est une motivation suffisante pour la plupart d'entre eux. Ils aiment faire le travail, au lieu de jouer avec la réparation de leur système d'exploitation. S'ils perdent un travail important parce qu'il n'a été stocké que localement, leurs collègues et leur patron les désapprouveront.
Nous ne bloquons aucun site Web ou application (à l'exception d'un filtre anti-malware basé sur DNS), mais nous avons des règles de politique d'entreprise concernant des choses comme les logiciels illégaux. Nous comptons sur la pression des pairs pour la plupart des choses. Les gens qui passent leur temps sur Facebook ne sont pas productifs et ne durent pas longtemps. Une grande partie de nos politiques sont basées sur un système d'honneur et cela semble bien fonctionner.
Cela dépend fondamentalement du contexte. Considérez les deux configurations suivantes, que j'ai rencontrées dans la nature:
Ces deux configurations étaient appropriées dans leur contexte - en tenant compte des menaces auxquelles l'organisation était confrontée et des besoins du projet.
Il y a un compromis fondamental ici. Tout éloignement de la première possibilité, vers la seconde, réduit la productivité. Quiconque a un contrôle sur l'application est dans une position de confiance. Tout ce que vous ne pouvez pas leur faire confiance est quelque chose dont vous devrez vous passer, ou créer un processus de transfert pour que quelqu'un d'autre le fasse. Vous ne pouvez pas révoquer la confiance sans réduire la productivité.
Cela dépend du type de logiciel que vous développez et de la taille de votre organisation.
Pour une station de travail de développeur Rockstar unique dans une petite entreprise, j'utiliserais une exception de sécurité de niveau exécutif. Les risques (y compris l'ennui de l'informatique, des cadres et des collègues développeurs) devraient être discutés, mais en fin de compte, si la rockstar ne réussit pas, il va probablement déménager dans une autre société. Ces gars ne tolèrent pas les frictions, s'ils les rencontrent, ils peuvent facilement trouver des endroits plus intéressants pour travailler.
Un scénario plus typique qu'un uber-workstation est d'avoir un cluster de développement où les opérations gèrent la vie et la mort des machines virtuelles, l'environnement est surveillé avec IDS/IPS et l'accès Internet (sur le cluster de développement) est limité mais ouvert selon les besoins . Par exemple, pour la documentation ... rien de mal à mettre en liste blanche toutes les sources de technologie liées à votre effort de développement. Les développeurs ne peuvent pas tirer le code de toute façon. Ils doivent documenter leurs sources et vérifier les licences étranges.
Si vous pouvez obtenir l'oreille de la rockstar, il peut aider à repousser les exigences des opérations et des cadres et à architecturer le cluster et les processus, et éduquer les équipes de développement sur le besoin.
S'il y a un budget et que le développeur est réticent ... alors à mon humble avis, vous n'avez pas affaire à une rockstar, mais une diva et ses gémissements devraient être portés jusqu'à l'approbation du risque exécutif.
La partie la plus difficile devient la gestion de la durée de vie des machines et la garantie que les réflexions des développeurs ne deviennent pas des systèmes de production de développeurs "comme des opérations". Mais c'est beaucoup plus facile que les VM sur les postes de travail des développeurs.
Cette question soulève un certain nombre de questions et de défis intéressants. En tant que personne qui a travaillé en tant que développeur pendant de nombreuses années et est ensuite passée à la sécurité, je peux apprécier bon nombre des arguments et points de vue exprimés dans les réponses et les commentaires. Malheureusement, il n'y a pas de réponse définitive car la bonne solution dépend du contexte, de l'exposition au risque et de l'appétit pour le risque de l'organisation.
La sécurité n'est pas quelque chose que vous pouvez mesurer en termes absolus. Chaque fois que vous rencontrez un responsable de la sécurité qui parle constamment dans des absolus et insiste pour appliquer des politiques spécifiques, indépendamment de toute autre chose, est inexpérimenté ou incompétent. Le rôle de l'ingénieur de sécurité est de faciliter les processus métier, et non de les entraver, et de garantir la prise de décisions commerciales éclairées par les risques de sécurité pertinents. Un bon ingénieur en sécurité sait que toute politique qui empêche le personnel de faire son travail échouera inévitablement, car le personnel trouvera des moyens de contourner la politique. Le plus souvent, ces solutions de contournement seront encore moins sécurisées. Il est de la responsabilité du responsable de la sécurité de comprendre les différents rôles au sein de l'organisation et de veiller à ce que les politiques soient structurées de manière à non seulement soutenir ce que le rôle requiert, mais encourager les bonnes pratiques et décourager les mauvaises. Cela peut être difficile à varier, en particulier dans les grandes organisations. Dans le même temps, les développeurs et les autres membres de l'organisation doivent également reconnaître qu'ils peuvent ne pas disposer de toutes les informations pertinentes pour comprendre pourquoi certaines stratégies sont requises. Trop souvent, les développeurs et d'autres considèrent l'ingénieur de sécurité comme un obstacle ou un bureaucrate interférant qui ne comprend pas ce dont ils ont besoin pour faire leur travail.
Plus souvent qu'autrement, la façon d'aborder ces problèmes passe par la communication. J'ai souvent eu des développeurs frustrés parce qu'une politique qu'ils jugent inutile se met en travers de leur chemin. Une fois que nous nous sommes assis et avons discuté de la question, un certain nombre de choses se produisent généralement;
Un certain nombre de réponses ont critiqué les politiques qui ont un impact négatif sur leur niveau de productivité. Alors que tout développeur devrait soulever de telles préoccupations, en fin de compte, il doit soit accepter la décision prise par l'exécutif, soit rechercher un autre employeur. Supposer que vous savez mieux ou que vous avez un droit spécial d'ignorer la politique est arrogant et dangereux pour vous et votre employeur. Si vous êtes convaincu que vous avez raison, alors vous devriez être en mesure de convaincre la direction. Si vous ne pouvez pas, soit vous n'êtes pas aussi bon que vous le pensez, vous n'avez pas les compétences de communication adéquates pour présenter un argument convaincant, vous ne possédez pas toutes les informations ou vous travaillez pour un employeur incompétent. Après 35 ans dans l'industrie et malgré ce que Dilbert peut vous faire penser, ce dernier n'est pas aussi courant que vous ne le pensez. La source de conflit la plus courante dans ce domaine est due à de mauvaises communications et au manque d'informations.
Un échec courant parmi les développeurs (et dont je suis coupable) est de se concentrer tellement sur votre tâche ou objectif spécifique que vous manquez la vue d'ensemble que les chefs d'équipe, les gestionnaires et les cadres doivent également gérer. Environnements où les développeurs ont eu beaucoup de liberté et de confiance, ce qui a entraîné des niveaux de productivité élevés, mais cela a entraîné d'autres problèmes - la situation où un développeur clé est parti ou est tombé malade pendant une longue période et personne d'autre peut reprendre son travail car tout se trouve sur son bureau configuré et géré de manière unique ou essayer de déboguer un problème difficile qui ne peut pas être facilement reproduit en raison d'un manque de configurations/configurations standard, ou faire face à une éventuelle brèche de sécurité due à un développeur quittant accidentellement certains services en cours d'exécution étaient en cours de développement et manquaient de contrôles de sécurité standard. Être un développeur concentré sur un domaine ou une technologie spécifique ne garantit pas non plus une expertise dans tout le reste. Certains des meilleurs développeurs avec lesquels j'ai travaillé ont été parmi les pires en matière de sécurité et/ou de gestion de leur environnement. Cela est probablement dû en partie à l'accent mis sur un problème spécifique et plus probablement simplement à la capacité. Aucun de nous n'a la capacité de traverser tout et nous devons reconnaître qu'il est parfois important de s'en remettre à ceux qui se spécialisent dans des domaines que nous n'avons pas.
L'une des principales raisons des politiques qui restreignent ce qui peut être fait sur le bureau est due à l'hypothèse sous-jacente que les bureaux au sein du réseau local ont un niveau de confiance plus élevé que les bureaux à l'extérieur du réseau. Traditionnellement, ils se trouvent à l'intérieur du pare-feu et d'autres défenses du périmètre et ont un accès mobile aux ressources d'information. Cela signifie qu'ils présentent un risque plus élevé et ont donc besoin de plus de contrôles de sécurité. Les autres raisons des politiques/pratiques restrictives incluent la standardisation des environnements, ce qui peut réduire les coûts de support et augmenter la cohérence (ce qui était particulièrement vrai quand il y avait plus d'applications où dépendaient de la plate-forme/du système d'exploitation - rappelez-vous toutes ces horribles applications qui nécessitaient AtiveX ou une version spécifique de C'EST À DIRE).
La croissance des machines et conteneurs virtuels, des services cloud et des services informatiques de base et l'augmentation de la capacité du réseau entraînent un certain nombre de changements qui rendront probablement bon nombre des problèmes soulevés dans ce fil de discussion. En particulier, la transition vers des réseaux de confiance zéro verra probablement des changements importants. Dans un réseau à confiance nulle, les périphériques à l'intérieur du réseau ne sont pas considérés comme ayant un niveau de confiance supplémentaire spécial par rapport aux périphériques à l'extérieur du réseau. Vous n'avez pas la possibilité d'accéder aux ressources simplement parce que vous avez la bonne adresse IP. Au lieu de cela, la confiance repose davantage sur une combinaison d'informations sur l'utilisateur et l'appareil. La politique qui détermine ce à quoi vous pouvez accéder est déterminée par vos informations d'identification et l'appareil à partir duquel vous vous connectez. L'endroit où se trouve cet appareil n'a pas d'importance. Il s'agit également d'un modèle qui correspond beaucoup mieux à la croissance du BYOD et à la mobilité accrue de la main-d'œuvre et aux demandes croissantes d'employer du personnel en fonction des seuils/capacités et non de la situation géographique.
Une fois que vous avez supprimé le niveau de "confiance" associé à l'appareil, vous n'avez plus besoin de contrôler ce que vous pouvez appliquer à l'appareil. Vous pouvez toujours exiger que les appareils prennent en charge des profils spécifiques - par exemple, vous pouvez refuser d'autoriser quiconque à accéder à vos ressources si son appareil exécute Windows XP etc., cependant, vous êtes moins préoccupé par l'appareil. De même, vous ne ferez pas autant de travail directement sur l'appareil. Dans une certaine mesure, l'appareil ressemblera plus à un client léger. Vous utiliserez des machines virtuelles et des conteneurs hébergés à distance. Cela ne résoudra pas en soi tous les problèmes et peut être vu comme simplement déplacer certains d'entre eux du bureau local vers le distant VM ou conteneur. Cependant, une fois que vous combinez cela avec diverses orchestrations de style DevOps, de nombreuses raisons pour lesquelles les développeurs peuvent avoir besoin de privilèges améliorés sont supprimés. Par exemple, il se peut que vous n'ayez pas besoin d'accéder aux systèmes de production. La promotion du nouveau code sera gérée via un système d'intégration continue orchestré et lorsque vous devrez déboguer un problème, vous recevrez un VM ou conteneur qui est un clone exact de la production système.
Aucun de ces changements ne résoudra par magie quoi que ce soit, mais ils fourniront une gamme plus large d'outils et de solutions plus flexibles avec potentiellement moins de complexité. La réduction de la complexité facilitera la gestion de la sécurité. Une gestion plus aisée de la sécurité entraînera des restrictions ou des obstacles moins involontaires ou inutiles à l'exécution des tâches. Cependant, au bout du compte, les principales exigences sont
Je suis également développeur et voici mon avis:
Le développement n'est pas une question de logiciel. Le développement consiste à fabriquer ou à améliorer des produits, des services et des processus. Le logiciel est un équipement important mais n'est pas le seul. Les bons développeurs définiront les processus au sens large pour savoir quels composants logiciels créer ainsi que les processus humains, logistiques et de gestion des risques à proposer. Cela n'a aucun sens de développer un système logiciel qui dépend de processus humains, logistiques et papier qui ne sont pas mis en œuvre.
Il n'y a pas de règles pour le développement car le développement définit les règles. C'est ce qui fait du développement le pire environnement à sécuriser.
Mais cela ne signifie pas que certains contrôles ne devraient pas être établis. Au contraire, de nombreux contrôles doivent être mis en place par l'équipe de développement elle-même.
Il existe des entreprises qui préconisent la séparation entre les entreprises et la technologie dans un processus descendant. Ceci est en fait très populaire car suggère que les gens d'affaires sans connaissances techniques devraient être au top. Les paresseux aiment ça . Mais en ingénierie, une conception descendante ne fonctionne tout simplement pas. Feyman (1985) a fait un bel article à ce sujet dans la commission présidentielle qui a analysé l'explosion du Challenger. Fondamentalement, l'ingénierie des processus descendants finit par briser l'entreprise. Et mon expérience du marché renforce cette compréhension.
L'explosion du Challenger en est un excellent exemple. Les dirigeants de la Nasa témoignent à la caméra lors d'une commission d'enquête qu'ils ont développé un caoutchouc qui peut rester flexible à moins de 60 degrés sous le point de congélation. Une chose qui a été contredite par une simple expérience physique au lycée faite par l'un des commissaires (mettre le composant en caoutchouc dans de l'eau glacée pressée par une pince). C'était un excellent exemple parce que ce composant en caoutchouc devait être flexible pour que le booster n'explose pas; comme il avait besoin de températures estivales pour cela, le booster ne fonctionnait qu'en été. Une caractéristique d'un seul composant définit une caractéristique visible de l'ensemble du produit qui est très limitative.
L'ingénierie doit se faire de bas en haut, car vous devez connaître les limites et les faiblesses de chaque composant pour élaborer des processus pour les atténuer. Plus souvent qu'autrement, les processus d'atténuation ne sont pas des logiciels et affecteront le coût du produit. Cela signifie que les caractéristiques et les limites des composants individuels définiront les caractéristiques des produits, services et processus.
Les processus descendants sont fondamentalement rompus. De nombreuses entreprises qui adoptent cette philosophie sur le papier connaissent toujours un certain succès sur le marché. Mais lorsque vous descendez pour enquêter sur leurs projets les plus importants et les plus réussis, vous apprenez qu'ils ont été menés en dehors des règles normales de l'entreprise. Les plus grands succès sont obtenus lorsqu'une personne ayant une connaissance approfondie de l'ingénierie et une vision du marché est informellement habilitée. Comme cela se produit de manière informelle, la direction pense que le processus descendant fonctionne. Ils considèrent que toutes les autres équipes sont incompétentes. Fermer les yeux sur le fait que l'esquisse initiale du projet lorsqu'elle a quitté la "phase supérieure" a été complètement ignorée et ne décrit pas les produits, les services et les processus mis en place.
Votre responsable peut définir que vous allez concevoir un appareil de téléportation d'ici la fin du mois, car il a conclu que cela permettrait de réaliser des bénéfices élevés dans le secteur du voyage ... mais cela ne le fera pas. Les projets descendants sont comme ça, fixent des attentes qui ne sont pas technologiquement solides.
Ne vous méprenez pas, il est bon de voir le problème sous plusieurs angles. De bas en haut, de haut en bas, de SWOT et plus sont sains pour l'analyse, mais l'effort d'ingénierie véritable est de bas en haut. Il n'y a pas de véritable objectif sans viabilité technique.
Nous devons nous rappeler que les développeurs de logiciels changeront régulièrement le logiciel de l'entreprise et, de cette façon, ils peuvent: modifier ce qui apparaît sur l'écran de n'importe qui, envoyer des e-mails automatisés à quiconque, y compris eux-mêmes, ou ouvrir des portes dérobées à faites ce qu'ils veulent. Cela signifie qu'un criminel engagé en tant que développeur peut causer des dommages importants à l'entreprise.
Pire que cela, il existe de nombreuses entreprises qui n'appliquent pas la provenance d'un référentiel de code source, puis le développeur embauché peut fournir un binaire différent de la source indiquée. Cela permet aux développeurs criminels de détourner les systèmes de l'entreprise, s'ils ne sont pas embauchés, les choses cesseront de fonctionner bientôt.
Pour moi, la sécurité du développement doit se concentrer sur:
Les règles qui exigent que les développeurs n'accèdent pas aux systèmes de production car les utilisateurs sont là pour éviter aux développeurs de soumettre du code pour montrer à leur propre utilisateur des informations privilégiées. Je pense que c'est une mesure de sécurité très, très faible et facile à détecter dans l'audit du code source. Il existe plusieurs moyens simples de contourner cela:
L'audit du code source à la recherche de portes dérobées, d'escalade d'accès et de logiciels malveillants semble plus productif. Il permet d'identifier les mauvais développeurs lorsqu'ils testent leurs exploits et de les licencier. Bien sûr, un développeur qualifié peut cacher un exploit à la vue, il est donc important d'utiliser des langages et des noms de variables clairs et clairs. Ne recourir à des solutions étranges que dans des points documentés des applications qui nécessitent des performances spéciales ou une obfuscation. Par exemple, 1 << 4 est identique à 1 * 16. Cela n'aurait de sens que si le langage ne fait pas cette optimisation par lui-même et que le point où cela se produit est un goulot d'étranglement des performances. Trop de langages symboliques sont mauvais pour cette même raison. Le code source doit être lisible par n'importe quel geek.
Les dommages les plus simples et les plus graves qu'un développeur peut causer ne sont pas liés à l'installation de l'outil. Même si l'environnement de développement est géré, cela fera peu de différence si l'entreprise ne dispose pas de pare-feu solides, de référentiels de code source, de builds basés exclusivement sur les référentiels de code source et de révision de code.
En tant que consultant, j'ai travaillé pour de nombreuses entreprises différentes, et seulement 2 d'entre elles n'ont pas accordé aux développeurs un accès administrateur à leurs machines; l'un était une petite entreprise, l'autre était une très grande entreprise.
Dans la petite entreprise, j'ai demandé un accès administrateur, expliqué pourquoi pendant environ 60 secondes, et je l'ai obtenu immédiatement.
Dans la grande entreprise, j'ai demandé un accès administrateur et on m'a dit que même s'ils acceptaient que je l'ait, la politique de l'entreprise l'interdit et ils ne pouvaient pas le changer. Donc, l'un des informaticiens est venu et a créé un compte d'administrateur local sur ma machine et m'a demandé de définir le mot de passe. À partir de là, à tout moment, je devais être administrateur, je pouvais me connecter à la machine en tant qu'administrateur local, ou simplement utiliser des runas pour démarrer Visual Studio ou le service/l'application que je devais exécuter avec un utilisateur administrateur (IIS, par exemple). Ce n'est pas bien pire que de choisir le "Run as Administrator" intégré; c'est juste un peu plus lent, mais heureusement, il ne revient pas trop souvent.
N'oubliez pas que le plus gros problème de sécurité ici est l'exfiltration de l'IP, pas des logiciels malveillants. J'espère que vous avez en place IDS/IPS pour traiter ce dernier, ce qui devrait en faire un non-problème.
Vous pouvez vous en sortir en donnant à l'administrateur un accès aux équipements de développement, à condition que vous disposiez des éléments suivants:
Mon employeur fait tout cela et plus encore. Un certain nombre de collègues finissent par développer leur propre équipement personnel après les heures de travail à la maison et le rejettent par-dessus la clôture par des canaux latéraux juste pour contourner l'infrastructure paralysée. Personnellement, je préfère passer mes soirées à boire et à rêver d'une surdose de tranquillisants pour chiens plutôt que de perdre 20 heures supplémentaires sans papiers à faire quelque chose qui me ferait virer de toute façon.
Nous considérons l'informatique (et par extension, le génie logiciel) comme une science. Des expériences scientifiques sont menées dans des conditions stériles pour garder les variables sous contrôle. Il n'est pas scientifique de se développer dans un environnement paralysé où les choses ne fonctionnent pas comme prévu en raison de facteurs environnementaux. Par expérience, je peux vous dire que vous n'en tirez pas de logiciels bien conçus ... tout ce qui est développé en interne est défectueux, ce qui entraîne des dépenses supplémentaires pour des solutions tierces.
Les développeurs doivent absolument avoir un environnement stérile pour se développer. Je ne peux pas vous dire combien de fois différents contrôles de sécurité ont introduit des gremlins dans l'architecture de développement et de production - donc un environnement de développement géré, stérile et basé sur le cloud est vraiment le seul moyen de aller. "Cela a fonctionné en laboratoire, le problème doit être quelque chose d'extérieur."
Vous devez simplement vous assurer que les machines virtuelles que vous leur laissez provisionner ne sont pas anémiques et vous devez automatiser le processus de provisionnement à la OpenStack ou AWS afin que les développeurs n'attendent pas des jours pour satisfaire les besoins de scaling. Les avoir tous gérés de manière centralisée vous donne beaucoup de contrôle d'audit et, franchement, donne aux développeurs de meilleures performances qu'ils n'en auraient de toute façon sur leur propre équipement.
Je suis fan de l'option # 2: avoir des ordinateurs séparés.
Permettre aux machines de l'entreprise disposant d'informations propriétaires d'être connectées à Internet ouvre la porte aux pirates. Cela permet également aux employés d'exfiltrer beaucoup plus facilement les données de l'entreprise à des fins illégitimes.
Si l'employé doit utiliser une machine spéciale pour accéder aux ressources Internet, cela crée un chemin contrôlé d'infiltration et d'exfiltration des données qui est beaucoup plus sécurisé. En outre, cela décourage les employés de naviguer sur le Web ou de perdre du temps sur les forums Internet, comme je le fais maintenant.
En tant qu'administrateur, ce problème est résolu complètement et complètement grâce à une approche SaaS. Virtualisez tous vos différents environnements, placez-les sur un rack de serveur approprié au nombre de clients et configurez un accès à distance ( RDP, Terminal Services ou autres ...). Maintenant tout est sur le serveur, et vous n'avez qu'un seul environnement à maintenir pour tout le monde.