430 likes | 658 Views
S é curisez vos a pplications à l'aide de Microsoft .NET Framework. Eric Mittelette & Eric Vernié & Pascal Belaud Relation Technique Développeurs Microsoft France. Ce que nous allons é tudier. Fonctionnalit é s de s é curit é du .NET Framework
E N D
Sécurisez vos applicationsàl'aidedeMicrosoft.NETFramework Eric Mittelette & Eric Vernié & Pascal Belaud Relation Technique Développeurs Microsoft France
Cequenousallonsétudier • Fonctionnalitésdesécuritédu.NETFramework • En quoi une code .NET est plus sécurisé par défaut qu’un code natif • Sécurité basée sur les rôles (Role Based) • Gestion de rôles applicatifs basés ou non sur le log-on Windows • Sécurité d'accès au code (CAS) • Vérification de « qui fait quoi » dans le code • Cryptographie • En quoi le .NET Framework simplifie t il les codes nécessitant de la cryptographie. • SQL Server 2005 : quoi de neuf ?
Programme • Fonctionnalitésdesécuritéde.NETFramework • Sécurité basée sur les rôles • Sécurité d'accès au code • Cryptographie
Sécuritédel'exécutionmanagée.NET • Lesfonctionnalitésdesécuritéde.NET • Vous aident à développer des applications sûres • Comprennent de nombreux composants, dont: • Vérification de type • Gestionnaire d'exceptions • Moteur de sécurité • Complètent sans la remplacer la sécurité de Windows
Systèmedetypesécurisé • Uncodedetypesécurisé: • Empêche le débordement de mémoire tampon • Limite l'accès à des emplacements de mémoire autorisés • Permet à plusieurs assemblage de s'exécuter dans le même processus • Les domaines d'application permettent: • AppDomain : Notion de sous processus… • De meilleures performances • Une plus grande sécurité du code par isolation
Protectioncontreledébordementdemémoiretampon • Lavérificationdutypeempêchelesremplacementsarbitrairesdanslamémoire • Les objets de classe System.String .NET sont immuables • La classe System.Text.StringBuilder .NET vérifie les limites du tampon voidCopyString(stringsrc) { stringDest = src; }
Interceptiondeserreursarithmétiques • L'interceptiondeserreursarithmétiquesestactivéeenutilisant: • Le mot cléchecked • Les paramètres du projet byteb=0; while (true) { Console.WriteLine (b); checked { b++; } }
Vérification du code • Possibilité de vérifier son code : • Option du compilateur : Csc / checked[+;-] • Instruction checked/unchecked • Opérateur checked(….)
Architecture simplifiée de la démo Saisie infos Fabrique de Classe BD Validation mot de passe Chargement des rôles Affecter les politiques de sécurité en fonction des rôles Comment éviter la saisie du mot de passe en clair ? Comment éviter que n’importe qui appel ma fabrique de classe ? Comment faire confiance aux dlls chargées dynamiquement ? Sous quelle forme dois-je stocker le mot de passe ? Sous quelle forme dois-je stocker la chaîne de connexion ? Qu’est-ce qui peut me garantir la sécurité d’accès de mes objets de base de données ?
Démonstration1SécuritédestypesBuffer overrun vs .NETGestion des secrets vs string
Assemblagesavecnomfort • Lesnomsfortssont • Des identificateurs uniques (contenantuneclé publique) • Utilisés pour signer numériquement desassemblys • Les assemblages avec nom fort • Empêchent la falsification • Confirment l'identité de l'éditeur de l'assembly • Autorisent les composants côte à côte sn–kMa_Clé_Complète.snk
Assemblies et Signature IL En-Tête CLR Signature numérique RSA [assembly: AssemblyKeyFile(@"Cle.snk")] Valeur de hachage Signature Numérique RSA Metadonnées Fichier PE Haché Signé avec La clé privée Manifeste Clé publique Intégré dans le fichier PE
Lestockageisolé • Fournitunsystèmedefichiersvirtuel • Autorise les quotas • Met en œuvre l'isolation du système de fichiers en fonction: • De l'identité de l'application • De l'identité de l'utilisateur IsolatedStorageFileisoStore=IsolatedStorageFile.GetUserStoreForAssembly();
Programme • Fonctionnalitésdesécuritéde.NETFramework • Sécurité basée sur les rôles • Sécurité d'accès au code • Cryptographie
AuthentificationetAutorisation • L'authentificationdemande: • «Quiêtes-vous?» • «Êtes-vousvraimentlapersonnequevousprétendezêtre?» • L'autorisation demande: • « Êtes-vous autoriséà… ? »
Identitésetentitésdesécurité • Uneidentitécontientdesinformationssurunutilisateur,commesonnomdeconnexion • Une entité de sécurité contient des informations de rôle sur un utilisateur ou un ordinateur • .NET Framework propose: • Les objetsWindowsIdentity et WindowsPrincipal • Les objetsGenericIdentity et GenericPrincipal
Créationd'identitésetd'entitésdesécuritéWindows • UtiliserlesobjetsWindowsIdentityetWindowsPrincipalpour: • Une validation • Plusieurs validations WindowsIdentitymon_Ident=WindowsIdentity.GetCurrent(); WindowsPrincipal mon_Ent = new WindowsPrincipal(mon_Ident); AppDomain.CurrentDomain.SetPrincipalPolicy(PrincipalPolicy.WindowsPrincipal); WindowsPrincipal mon_Ent = System.Threading.Thread.CurrentPrincipal;
Créationd'identitésetd'entitésdesécuritégénériques • CréerunobjetGenericIdentityetunobjetGenericPrincipal • Attacher l'objet GenericPrincipal au thread actuel GenericIdentitymon_Ident=newGenericIdentity("Utilisateur1"); string[] roles = {"Directeur", "Caissier"}; GenericPrincipal mon_Ent = new GenericPrincipal(mon_Ident, roles); System.Threading.Thread.CurrentPrincipal=mon_Ent;
Réalisationdevérificationsdesécurité • Utiliserlesmembresidentitéetentitédansducode • Par exemple, en utilisant la propriétéName de l'objet Identity pour vérifier le nom de connexion de l'utilisateur • Par exemple, en utilisant la méthode IsInRole de l'objet Principal pour vérifier l'appartenance à un rôle if(String.Compare(mon_Ent.Identity.Name,"DOMAINE\\Fred", true)==0) { // Effectuer une action } if(mon_Ent.IsInRole("BUILTIN\\Administrateurs")) { // Effectuer une action }
Vérificationsdesécuritéimpérativesetdéclaratives • Utiliserdesautorisationspoureffectuerdesvérificationsdesécuritébaséessurlesrôles • Vérifications impératives PrincipalPermissionaut_Ent=newPrincipalPermission("Caissier",“Directeur”,true); try { aut_Ent.Demand(); //Les éléments ci-dessus correspondent-ils à ceux de l'entité de sécurité active ? } • Vérificationsdéclaratives [PrincipalPermission(SecurityAction.Demand,Role="Caissier",Authenticated=true)]
Programme • Fonctionnalitésdesécuritéde.NETFramework • Sécurité basée sur les rôles • Sécurité d'accès au code • Cryptographie
Sécuritébaséesurlespreuves • Lespreuves • Sont évaluées au chargement d'un assembly • Servent à déterminer les autorisations del'assembly • Peuvent comprendre les éléments suivants de l'assembly: • Informations de nom fort • URL • Zone • Signature Authenticode
Parcours de pile et vérification de la sécurité Appel à ReadFile Appel à ReadFile 1. Un assemblyA demande l'accès à une méthode de votre assembly 2. Votre assemblyB transmet la demande à un assembly .NET Framework 3. Le système de sécurité vérifie que les appelants de la pile disposent des autorisations requises 4. Le système de sécurité accorde l'accès ou lève une exception Pile des appels AssemblyA Accorder : Execute Votre_AssemblyB Accorder : ReadFile Demande d'autorisation Système de sécurité Assembly .NET Framework Exception de sécuritéAccès refusé Accorder l'accès ? Accorder : ReadFile
Typesdevérificationsdesécurité • Lesvérificationsdesécuritéimpératives • Créent des objets Permission • Appellent des méthodes Permission • Les vérifications de sécurité déclaratives • Utilisent des attributs Permission • S'appliquent à des méthodes ou à des classes • Les vérifications de sécurité de substitution • Utilisent la méthode Assert • Empêchent le parcours de la pile
Demandesd'autorisations • Utiliséesparlesdéveloppeurspourindiquerlesautorisationsrequises • Implémentées sous forme d'attributs • Empêchent le chargement d'un assembly en cas d'absence des autorisations minimales //Jenem'exécuteraiquesijepeuxappelerducodenonmanagé [assembly:SecurityPermission (SecurityAction.RequestMinimum, UnmanagedCode=true)]
Démonstration3Sécuritéd'accèsaucodeRéalisationdevérificationsdesécuritéDemandesd'autorisationsDémonstration3Sécuritéd'accèsaucodeRéalisationdevérificationsdesécuritéDemandesd'autorisations
Programme • Fonctionnalitésdesécuritéde.NETFramework • Sécurité basée sur les rôles • Sécurité d'accès au code • Cryptographie
Rappelsconcernantlacryptographie .NETFrameworkfournitdesclassesquiimplémententcesopérations
Cryptographie et Framework.NET • Plusieurs namespaces .NET consacrés à la cryptographie • System.Security.Cryptography • Fournis les services cryptographiques : • Encodage/Décodage sécurisé des données • hashing, random number, message authentication. … • System.Security.Cryptography.X509Certificates • Authenticode X.509 v.3 certificate. • Le certificat est signé avec une « private key » qui identifie explicitement et de manière unique le propriétaire du certificat. • System.Security.Cryptography.Xml • Réservé a données XML • Permet de signer les « objets » XML avec une signature digitale
Cryptographie et Framework.NET • Model objet du namespace Cryptography • Algorithme Type : (abstract class) • Algorithmes Symétrique et Hash • Algorithme Class : (abstract class) • RC2, SHA1… • Implémentation des « Algorithmes Class » • RC2CryptoServiceProvider, SHA1Managed… • Grâce a ce « design pattern » il est possible de faire ses propres ajouts/implémentations aux algorithmes aux différents niveaux. • Les algorithmes symétriques et de hash sont implémentés « stream-oriented » • La Configuration Cryptographique • Permet de résoudre les implémentations spécifiques de certains algorithmes
DPAPI • Data Protection API • API Windows de cryptage décryptage • Wrapper .NET 1.0 et 1.1 nécessaire • Accessible dans la CLR 2.0 :
Crytography Application Block • http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnpag2/html/crypto1.asp • Cryptography Application Block : • Réduit le temps de développement sur le code standard de cryptographie • Aide à maintenir les bonnes pratiques en terme de cryptographie • Apprentissage aisé car le modèle d’architecture est constant quelque soit les fonctionnalités. • Fournis une implémentation standard de l’utilisation des techniques de cryptographie. • Code extensible; supportant d’addinitionnelles implémentation et providers de cryptographie.
Démonstration4Cryptage.NETFrameworkCryptage des donnéesPAG Security
Programme • Fonctionnalitésdesécuritéde.NETFramework • Sécurité basée sur les rôles • Sécurité d'accès au code • Cryptographie • SQL Server 2005 : quoi de neuf ?
SQL Server 2005 • Conférence SQL DAYS 2005 • Paris, le 9 juin 2005 • Marseille, le 14 juin 2005 • Toulouse, le 16 juin 2005 • Une journée gratuite • www.microsoft.com/france/sql/sqldays.aspx
Résumédelasession • Fonctionnalitésdesécuritéde.NETFramework • Sécurité d'accès au code • Sécurité basée sur les rôles • Cryptographie • SQL Server 2005
Étapessuivantes • Êtreinformésurlasécurité • S'inscrire aux bulletins de sécurité : http://www.microsoft.com/security/security_bulletins/alerts2.asp(en anglais) • Obtenir l'aide la plus récente de Microsoft sur la sécurité : http://www.microsoft.com/france/securite/default.asp • Obtenir des activités de formation supplémentaires sur la sécurité • Trouver des séminaires de formation: http://www.microsoft.com/france/events/default.asp • Trouver un centre de formation local agréé Microsoft (CTEC) pour des cours pratiques: http://www.microsoft.com/france/formation/centres/recherche.asp
Pourplusd'informations • SiteMicrosoftsurlasécurité(toutpublic) • http://www.microsoft.com/france/securite/default.asp • Site MSDN sur la sécurité (développeurs) • http://msdn.microsoft.com/security (en anglais) • Site TechNet sur la sécurité (informaticiens) • http://www.microsoft.com/france/technet/themes/secur/default.asp
BD Comment éviter la saisie du mot de passe en claire ? Saisie infos Comment faire confiance qui appel ma fabrique de classe ? Comment faire confiance dans les dlls chargées dynamiquement ? Fabrique de Classe Sous quelle forme dois-je stocker le mot de passe ? Validation mot de passe Sous quelle forme dois-je stocker la chaînes de connexion ? Chargement des rôles Affecter les politiques de sécurité