• STATISTIQUES
  • Il y a eu un total de 0 membres et 24158 visiteurs sur le site dans les dernières 24h pour un total de 24 158 personnes!
    Membres: 2 605
    Discussions: 3 579
    Messages: 32 816
    Tutoriels: 78
    Téléchargements: 38
    Sites dans l'annuaire: 58


  • ANNUAIRE
  • [FR] dcode
    dcode.fr est le site indispensable pour décoder des messages, tricher aux jeux de lettres, résoudre des énigmes...
    Outils / Add-on
    [EN] Bright Shadows
    JavaScript: 13, Exploit: 27, Crypto: 69, CrackIt: 52, Stegano: 67, Flash: 3, Programming: 16, Java-Applet: 10, Logic: 20...
    Challenges
    [FR] Microcontest
    Cryptographie: 7, Mathématiques: 8, Image Son Vidéo: 5, Intelligence artificielle: 3, Réseau: 2, Divers: 7, Phy...
    Challenges
    [EN] Security Traps
    Site de challenge qui prétend être construit non pas dans le but de parfaire vos connaissances, mais plutôt dan...
    Challenges
    [EN] phrack
    Lot's of stuff !
    Hacking
    [EN] CS Tutoring Center
    Site de challenge spécialisé dans les challenges de programmation C++ et java cependant, d'autres langages pe...
    Challenges
    [EN] Packet Storm
    Packet Storm est un site qui combine nouvelles de la sécurité informatique, téléchargemen...
    Vulnérabilités

  • DONATION
  • Si vous avez trouvé ce site internet utile, nous vous invitons à nous faire un don du montant de votre choix via Paypal. Ce don servira à financer notre hébergement.

    MERCI!




Note de ce sujet :
  • Moyenne : 0 (0 vote(s))
  • 1
  • 2
  • 3
  • 4
  • 5
[Sécurité] Secure Coding - Eviter les TOCTTOU
13-08-2014, 14h22
Message : #1
b0fh Hors ligne
Membre actif
*



Messages : 210
Sujets : 17
Points: 309
Inscription : Jul 2012
[Sécurité] Secure Coding - Eviter les TOCTTOU
Hello,

Aujourd'hui, un petit rappel sur les vulnérabilités de type TOCTTOU (Time-of-Check-to-Time-of-Use), et comment les éviter.

Une vulnérabilité TOCCTOU se présente lorsqu'on vérifie une condition (time-of-check) avant d'exécuter une action (time-of-use), de manière non-atomique, c'est-à-dire que l'état du système (donc le résultat de la condition) risque de changer entre ces deux opérations.

Le risque existe donc quand on manipule des structures de données partagées entre plusieurs threads, ou qu'on utilise de l'IPC (fichiers, pipes) en présence de process hostiles.

Dans ce cas, la mantra a appliquer est: "mieux vaut demander pardon que permission", i.e. exécuter l'action et traiter l'erreur si elle se produit, plutôt que d'essayer de l'empêcher à l'avance..

Dans un post récent, j'ai vu passer quelque chose du genre:

Code PYTHON :

if blah in some_collection:
    do_something_with(some_collection[blah])
else:
    some_other_thing()
 


Prenez l'habitude de faire plutôt:

Code PYTHON :

try:
  do_something_with(some_collection[blah])
except KeyError:
  some_other_thing()
 


ou, si vous ne désirez pas intercepter une KeyError lancée ailleurs dans do_something_with():

Code PYTHON :

try:
  b = some_collection[blah]
except KeyError:
  some_ither_thing()
  return

do_something_with(b)
 


En utilisant systématiquement les exceptions et les retours d'erreurs plutôt que les vérifications d'avance, vous éviterez ces vulnérabilités. Si l'API ne le permet pas, c'est que l'API n'est pas adaptée a la programmation concurrente et qu'il faut la changer !

Quand ce n'est pas possible, il faut essayer de rentre l'ensemble des opérations atomique, en utilisant par exemple un verrou.
+1 (8) -1 (0) Répondre


Atteindre :


Utilisateur(s) parcourant ce sujet : 2 visiteur(s)
N-PN
Accueil | Challenges | Tutoriels | Téléchargements | Forum | Retourner en haut