web-dev-qa-db-fra.com

Que doivent savoir tous les programmeurs sur la sécurité?

Je suis un étudiant en informatique et je suis maintenant en 3ème année à l'université. Jusqu'à présent, nous avons étudié de nombreux sujets liés à l'informatique en général (programmation, algorithmes, architecture informatique, mathématiques, etc.).

Je suis persuadé que personne ne peut tout apprendre sur la sécurité, mais que tous les programmeurs ou étudiants en informatique doivent en avoir une connaissance "minimale" et ma question est la suivante: quelle est cette connaissance minimale?

Pouvez-vous suggérer des livres électroniques ou des cours ou quelque chose peut aider à commencer avec cette route?

421

Principes à garder à l'esprit si vous souhaitez que vos applications soient sécurisées:

  • Ne faites jamais confiance aux entrées!
  • Validez l'entrée de toutes les sources non fiables - utilisez des listes blanches et non des listes noires
  • Planifiez la sécurité dès le début - ce n'est pas quelque chose que vous pouvez verrouiller à la fin
  • Restez simple - la complexité augmente le risque de failles de sécurité
  • Gardez votre surface d'attaque au minimum
  • Assurez-vous que échec sécurisé
  • Utiliser défense en profondeur
  • Adhérer au principe de moindre privilège
  • Utilisez modélisation de la menace
  • compartimentez - votre système n'est donc pas tout ou rien
  • Il est difficile de cacher des secrets - et les secrets cachés dans le code ne resteront pas secrets longtemps
  • N'écris pas ton propre crypto
  • L'utilisation de crypto ne signifie pas que vous êtes en sécurité (les attaquants rechercheront un lien plus faible)
  • Soyez conscient de buffer overflows et comment vous protéger

Il existe d'excellents livres et articles en ligne sur la sécurisation de vos applications:

Formez vos développeurs aux meilleures pratiques de sécurité des applications

Codebashing (payé)

Innovation en matière de sécurité (payé)

boussole de sécurité (payé)

OWASP WebGoat (gratuit)

545
bignum

Règle n ° 1 de sécurité pour les programmeurs: Ne lancez pas votre propre

utilisez toujours une plate-forme de sécurité, un framework ou une bibliothèque bien conçu, bien testé et mature. faire le travail pour vous. Ces choses ont passé des années à être réfléchies, corrigées, mises à jour et examinées par des experts et des pirates informatiques. Vous voulez obtenir ces avantages, pas les rejeter en essayant de réinventer la roue.

Cela ne veut pas dire que vous n’avez pas besoin d’apprendre quoi que ce soit sur la sécurité. Vous devez certainement en savoir assez pour comprendre ce que vous faites et vous assurer que vous utilisez les outils correctement. Cependant, si vous êtes sur le point de commencer à écrire votre propre algorithme de cryptographie, système d'authentification, désinfectant d'entrée, etc., arrêtez-vous, revenez en arrière et souvenez-vous de la règle n ° 1.

102
Tyler McHenry

Chaque programmeur devrait savoir comment écrire un code d'exploitation.

Sans savoir comment les systèmes sont exploités, vous arrêtez accidentellement les vulnérabilités. Savoir comment corriger le code n'a aucune signification si vous ne savez pas comment tester vos correctifs. La sécurité ne consiste pas seulement en une série d'expériences de pensée, vous devez être scientifique et tester vos expériences.

70
rook

La sécurité est un processus, pas un produit.

Beaucoup semblent oublier cette évidence.

41
ericteubert

Je suggère de consulter CWE/SANS TOP 25 erreurs de programmation les plus dangereuses (---) . Il a été mis à jour pour 2010 avec la promesse de mises à jour régulières dans le futur. La révision 2009 est également disponible.

De http://cwe.mitre.org/top25/index.html

Le Top 25 des erreurs de programmation les plus dangereuses 2010 de CWE/SANS est une liste des erreurs de programmation les plus répandues et les plus critiques pouvant conduire à de graves vulnérabilités logicielles. Ils sont souvent faciles à trouver et à exploiter. Ils sont dangereux car ils permettent souvent à des attaquants de prendre le contrôle intégral du logiciel, de voler des données ou d’empêcher le logiciel de fonctionner.

La liste des 25 meilleurs est un outil d’éducation et de sensibilisation destiné à aider les programmeurs à prévenir les vulnérabilités de l’industrie du logiciel, en identifiant et en évitant les erreurs les plus courantes qui se produisent avant même que le logiciel ne soit livré. Les clients logiciels peuvent utiliser la même liste pour les aider à demander un logiciel plus sécurisé. Les chercheurs en sécurité logicielle peuvent utiliser le Top 25 pour se concentrer sur un sous-ensemble étroit mais important de toutes les faiblesses de sécurité connues. Enfin, les gestionnaires de logiciels et les DSI peuvent utiliser la liste Top 25 pour mesurer les progrès accomplis dans la sécurisation de leurs logiciels.

23
jschmier

Le MIT de réseaux informatiques et sécurité est un bon débutant. Une chose que je suggérerais est de ne pas oublier la vie privée. La confidentialité, à certains égards, est vraiment fondamentale à la sécurité et n'est pas souvent abordée dans les cours techniques sur la sécurité. Vous trouverez peut-être des informations sur la vie privée dans ce cours sur Éthique et droit en ce qui concerne Internet.

13
tvanfosson

L’équipe Web Security de Mozilla a mis au point un excellent guide , que nous respectons dans le développement de nos sites et services.

10
Potch

L'importance des valeurs par défaut sécurisées dans les frameworks et les API:

  • Beaucoup de premiers frameworks Web n'échappaient pas au HTML par défaut dans les modèles et avaient des problèmes XSS à cause de cela
  • De nombreux premiers frameworks Web ont facilité la concaténation de SQL plutôt que la création de requêtes paramétrées conduisant à de nombreux bogues d'injection SQL.
  • Certaines versions d’Erlang (R13B, peut-être d’autres) ne vérifient pas les certificats homologues ssl par défaut et il existe probablement beaucoup de code erlang susceptible d’être attaqué par des attaques SSL MITM.
  • Le transformateur XSLT de Java permet par défaut l'exécution de code Java arbitraire. Cela a provoqué de nombreux bugs de sécurité graves.
  • Les API d'analyse XML de Java permettent par défaut au document analysé de lire des fichiers arbitraires sur le système de fichiers. Plus amusant :)
8
benmmurphy

Vous devriez savoir sur les trois A. Authentification, autorisation, audit. L'erreur classique consiste à authentifier un utilisateur, sans vérifier si cet utilisateur est autorisé à effectuer une action. Un utilisateur peut donc consulter les photos privées d'autres utilisateurs, ce que Diaspora a commis. Beaucoup, beaucoup plus de gens oublient Audit, vous avez besoin, dans un système sécurisé, de pouvoir dire qui a fait quoi et quand.

5
rapadura
  • Rappelez-vous que vous (le programmeur) devez sécuriser toutes les pièces, mais que l'attaquant doit seulement réussir à trouver un pli dans votre armure.
  • La sécurité est un exemple "d'inconnu inconnu". Parfois, vous ne saurez pas quelles sont les failles de sécurité possibles (jusqu'à ce que plus tard).
  • La différence entre un bug et une faille de sécurité dépend de l'intelligence de l'attaquant.
4
Rory

J'ajouterais ce qui suit:

  • Comment fonctionnent les signatures numériques et les certificats numériques
  • Qu'est-ce que le sandboxing

Comprendre le fonctionnement de différents vecteurs d'attaque:

  • La mémoire tampon déborde/déborde/etc sur le code natif
  • Ingénierie sociale
  • Usurpation DNS
  • L'homme au milieu
  • CSRF/XSS et al
  • Injection SQL
  • Attaques cryptographiques (ex: exploitant des algorithmes cryptographiques faibles tels que DES)
  • Erreurs de programme/cadre (ex: github's dernière faille de sécurité)

Vous pouvez facilement google pour tout cela. Cela vous donnera une bonne base. Si vous voulez voir les vulnérabilités des applications Web, il existe un projet appelé google gruyere qui vous explique comment exploiter une application Web opérationnelle.

4
Miguel Ping

lorsque vous construisez une entreprise ou un de vos propres logiciels, vous devez simplement penser comme un pirate informatique. Comme nous le savons, les pirates informatiques ne sont pas non plus des experts dans tous les domaines, mais lorsqu'ils découvrent une vulnérabilité, ils commencent à y creuser en rassemblant des informations sur tous les éléments. les choses et enfin attaquer notre logiciel. de manière à prévenir de telles attaques nous devrions suivre des règles bien connues comme:

  • essayez toujours de casser vos codes (utilisez cheatsheets & google les choses pour plus d’informations).
  • être mis à jour pour les failles de sécurité dans votre domaine de programmation.
  • et comme mentionné ci-dessus, ne faites jamais confiance à aucun type d'utilisateur ni à aucune saisie automatisée.
  • utiliser des applications opensource (la plupart de leurs failles de sécurité sont connues et résolues).

vous pouvez trouver plus de ressources de sécurité sur les liens suivants:

pour plus d'informations sur Google sur les flux de sécurité de votre fournisseur d'applications.

4
rahul_pratap
  1. Pourquoi est-ce important?.
  2. Tout est une question de compromis.
  3. La cryptographie est en grande partie une distraction de la sécurité.
3
Richard

Assurez-vous également de consulter la liste liste OWASP Top 1 pour une catégorisation de tous les principaux vecteurs/vulnérabilités d'attaque.

Ces choses sont fascinantes à lire. Apprendre à penser comme un attaquant va vous apprendre à quoi penser lorsque vous écrivez votre propre code.

3

Pour des informations générales sur la sécurité, je recommande fortement de lire Bruce Schneier . Il a un site Web, son bulletin d'information crypto-gramme , plusieurs livres , et a fait beaucoup de entretiens .

Je me familiariserais également avec l'ingénierie sociale (et Kevin Mitnick ).

Pour un bon (et plutôt amusant) livre sur la sécurité dans le monde réel, je recommanderais l'excellent (bien qu'un peu daté) 'The Cuckoo's Egg' de Cliff Stoll.

3
Dan Esparza

Salez et hachez les mots de passe de vos utilisateurs. Ne les enregistrez jamais en texte brut dans votre base de données.

2
Abdull

Je voulais juste partager ceci pour les développeurs Web:

guide de sécurité pour les développeurs
https://github.com/FallibleInc/security-guide-for-developers

0
Destrif