Programmation en C ++: 10 conseils anti-pirates

Comme le programmeur C, vous avez besoin d'apprendre les choses que vous devez faire dans votre code C ++ pour éviter l'écriture de programmes qui sont vulnérables aux pirates. Il y décrit également des fonctionnalités que vous pouvez activer si votre système d'exploitation les supporte, comme Address Space Layout Randomization (ASLR) et Data Execution Prevention (DEP).

Sommaire

Don # 8242-t faire des hypothèses sur l'entrée d'utilisateur

Programmeur # 8242-s vision en tunnel est correct lors de la phase de développement précoce. À un certain point, cependant, le programmeur (ou, mieux encore, un autre programmeur qui n'a rien à voir avec le développement du code) a besoin de prendre du recul et d'oublier le problème immédiat. Elle a besoin de se poser, “ Comment ce programme à l'entrée illégale réagir ”?;

Voici quelques-unes des règles de contrôle de l'entrée:

  • Faire aucune hypothèse sur la longueur de l'entrée.

  • Don # 8242-t accepter plus entrée que vous avez la place pour vos tampons de longueur fixe (ou des tampons de taille variable utilisés).

  • Vérifiez la plage de chaque valeur numérique pour vous assurer qu'il est logique.

  • Vérifier et filtrer les caractères spéciaux qui peuvent être utilisés par un pirate d'injecter du code.

  • Don # 8242-t passe d'entrée brutes sur un autre service, comme un serveur de base de données.

Et exercer toutes les mêmes contrôles sur les valeurs renvoyées des services distants. Le pirate peut ne pas être sur le côté d'entrée, il peut être du côté de la réponse.

Gérer les échecs Gracieusement

Votre programme doit répondre raisonnablement à des échecs qui se produisent au sein du programme. Par exemple, si votre appel à une fonction de bibliothèque renvoie une nullptr, le programme devrait le détecter et faire quelque chose de raisonnable.

Raisonnable ici est d'être compris de façon assez libérale. Le programme n'a pas besoin de renifler de comprendre exactement pourquoi la fonction didn # 8242-t retourner une adresse raisonnable. Il se pourrait que la demande était pour beaucoup trop de mémoire due à l'entrée déraisonnable. Ou il se pourrait que le constructeur détecté un certain type d'entrée illégale.

Il doesn # 8242-t affaire. Le point est que le programme devrait restaurer son état du mieux qu'il peut et mis en place pour le prochain bit de l'entrée sans se briser ou de corrompre les structures de données existantes, telles que le tas.

Maintenir un journal du programme

Créer et maintenir des registres d'exécution qui permettent à quelqu'un de reconstruire ce qui est arrivé dans le cas d'une défaillance de la sécurité. (En fait, cela est tout aussi vrai dans le cas de tout type de défaillance.) Par exemple, vous voulez probablement de se connecter à chaque fois que quelqu'un signe dans ou hors de votre système.




Vous # 8242-LL voulez absolument savoir qui était connecté à votre système lorsque un événement de sécurité a eu lieu - ce qui est le groupe qui # 8242-s les plus à risque d'une perte de sécurité et qui sont plus soupçonneux quand vous cherchez coupables. En outre, vous # 8242-LL voulez connecter toutes les erreurs de système qui comprendrait la plupart des exceptions.

Un programme de production du monde réel contient un grand nombre d'appels qui ont l'air quelque chose comme ce qui suit:

log (DEBUG, "% s utilisateur entré mot de passe juridique», sUser) -

Ceci est juste un exemple. Chaque programme aura besoin un certain type de fonction log. Qu'il soit ou non # 8242-S réellement appelé log () est immatérielle.

Suivez un bon processus de développement

Chaque programme devrait suivre, un processus de développement formel bien pensé. Ce processus devrait inclure au moins les étapes suivantes:

  • Recueillir et exigences en matière de documents, y compris les exigences de sécurité.

  • La conception d'examen.

  • Adhérer à une norme de codage.

  • Subir test unitaire.

  • Effectuer des tests d'acceptation formelles qui sont basés sur les exigences initiales.

En outre, des examens par les pairs devraient être menées à des points clés à vérifier que les exigences, la conception, le code, les procédures et les tests sont de haute qualité et répondent aux normes de l'entreprise.

Mettre en place un bon contrôle de version

Le contrôle de version est une chose étrange. Il # 8242-s naturel de ne pas vous soucier de la version 1.1 lorsque vous # 8242-re under the gun pour obtenir la version 1.0 sur la porte et dans les utilisateurs attendent # 8242- mains tendues. Toutefois, le contrôle de version est un sujet important qui doit être abordé tôt, car il doit être intégré dans la conception initiale du programme # 8242-s et non boulonné plus tard.

Un aspect presque trivial de contrôle de version est de savoir quelle version du programme utilisateur se sert. Quand un utilisateur appelle et dit, “ Il le fait quand je clique sur ce point, n ° 148; le help desk a vraiment besoin de savoir quelle version du programme que l'utilisateur utilise. Il pourrait être décrit un problème dans sa version qui # 8242-s déjà été fixé dans la version actuelle.

Authentifier les utilisateurs en toute sécurité

L'authentification de l'utilisateur devrait être simple: L'utilisateur fournit un nom de compte et un mot de passe, et votre programme ressemble le nom de compte dans une table et compare les mots de passe. Si les mots de passe concordent, l'utilisateur est authentifié. Mais quand il vient à antihacking, rien est aussi simple que cela.

Tout d'abord, ne jamais stocker les mots de passe eux-mêmes dans la base de données. Ceci est appelé les stocker en clair et est considéré comme très mauvaise forme. Il # 8242-s beaucoup trop facile pour un pirate de mettre la main sur le fichier de mot de passe. Au lieu de cela, enregistrez hors transformer une sécurité du mot de passe.

Gérer les sessions à distance

Vous pouvez faire certaines hypothèses lorsque tous de votre application fonctionne sur un seul ordinateur. Pour une chose, une fois que l'utilisateur a lui-même authentifié, vous ne # 8242-t besoin de vous inquiéter de lui se transforme en une personne différente. Applications qui communiquent avec un serveur distant peuvent # 8242-t faire cette supposition - un hacker qui est à l'écoute sur la ligne peut attendre jusqu'à ce que l'utilisateur est authentifié, puis détourner la session.

Qu'est-ce que le programmeur de la sécurité d'esprit peut faire pour éviter cette situation? Vous ne # 8242-t veulent demander à plusieurs reprises à l'utilisateur son mot de passe juste pour vous assurer que la connexion hasn # 8242-t été détourné. La solution alternative est d'établir et de gérer un session. Vous faites cela en ayant le serveur envoyer l'application à distance un cookie de session, une fois l'utilisateur lui-même a authentifié avec succès.

Obscurcir votre code

Obfuscation de code est l'acte de faire l'exécutable aussi difficile pour un pirate à comprendre que possible.

La logique est simple. Plus il est facile pour un pirate de comprendre comment votre code fonctionne, le plus il sera facile pour le pirate de comprendre les vulnérabilités.

L'étape la plus facile seul vous pouvez faire est de vous assurer que vous ne jamais distribuer une version de sortie de votre programme qui ne comprend pas les informations de symboles de débogage. Lorsque vous créez le fichier de projet, veillez à sélectionner que les deux un débogage et une version de sortie devraient être créés.

Jamais, jamais, distribuer des versions de votre application avec les informations de symbole inclus.

Inscrivez votre code avec un certificat numérique

Code Signing travaux en générant une table de hachage sécurisé du code exécutable et en le combinant avec un certificat délivré par une autorité de certification valide. Le processus fonctionne comme ceci: La société créant le programme doit d'abord se faire enregistrer à l'une des autorités de certification.

Une fois que l'autorité de certification est convaincu que mon entreprise est une entité logicielle valide, il délivre un certificat. Ceci est un long numéro que quiconque peut utiliser pour vérifier que le titulaire de ce certificat est le fameux Ma société de San Antonio.

Utilisez le chiffrement sécurisé si nécessaire

Comme tout bon avertissement, cet avertissement a plusieurs parties. Premier, “ cryptage utilisation chaque fois que nécessaire ”. Cela tend à apporter à l'esprit des pensées de communiquer des informations de compte bancaire sur Internet, mais vous devriez penser plus général que cela.

Les données qui # 8242-s étant communiqué, que ce soit sur Internet ou sur une certaine plage plus petite, est connu généralement comme Les données en mouvement. Les données in Motion doit être chiffré à moins qu'il ne serait d'aucune utilité pour un pirate.

Les données stockées sur le disque est connu comme Les données au repos. Ces données devraient également être cryptées si il ya une chance de le disque étant perdu, volé ou copié. Entreprises chiffrer systématiquement les disques durs sur leurs ordinateurs portables d'entreprise dans le cas d'un ordinateur portable est volé au scanner de sécurité à l'aéroport ou à gauche dans un taxi quelque part.

Petits appareils de stockage portables comme les clés USB sont particulièrement susceptibles d'être perdu - des données sur ces dispositifs doivent être cryptées.


» » » » Programmation en C ++: 10 conseils anti-pirates