1 / 47

Ecrire du code sécurisé pour SharePoint

Ecrire du code sécurisé pour SharePoint. Eli Robillard – Partner, Knowledge Artisans @erobillard #spsummit4.3. Qui suis -je?. Eli Robillard Partner Knowledge Artisans Inc .

mignon
Télécharger la présentation

Ecrire du code sécurisé pour SharePoint

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Ecrire du code sécurisépour SharePoint Eli Robillard – Partner, Knowledge Artisans @erobillard #spsummit4.3

  2. Qui suis-je? Eli Robillard PartnerKnowledge Artisans Inc. Eli Robillard est un sextuple MVP Microsoft SharePoint. Il se spécialise dans l'architecture SharePoint et la construction de bonnes équipes pour gérer SharePoint comme plate-forme de services d'entreprise. En tant que spécialiste et érudit sur le sujet, Eli a co-fondé les ASPInsiders, a lancé le groupe d'utilisateurs SharePoint Toronto en 2005, a lancé le premier SharePoint Saturday gratuit en 2007, a été co-auteur de perfectionnement professionnel SharePoint 2007 et un rédacteur technique de professionnel Professional développement SharePoint 2010 (WroxPress). Eli travaille actuellement avec PricewaterhouseCoopers sur un service global SharePoint. Il est basé à Toronto et aime faire du vélo, nager, pêcher et jouer de la musique avec son épouse Aurore, fille Irina et leur chien Nukka E-mail eli@erobillard.com Twitter@erobillard Blogweblogs.asp.net/erobillard Groups Microsoft MVP, ASPInsiders, TSPUG, Toronto SharePoint Camp

  3. Agenda • Bases de la sécurité • RACI, modélisation des menaces, principes, menaces et contre-mesures • Quelles menaces pour SharePoint? • Menaces “Out-of-box”, sécuritéopérationnelle, comptes de services, leurcontexte, contexteapplicatif • Développer des applications SharePoint Sécurisées • Meilleurespratiques, mauvaisesidées et techniques recommandées

  4. Bases de la sécurité Ecrire du code SharePoint sécurisé

  5. Contexte et étendue • “Sécuriser le réseau, l’hote et l’application" • Nous avons le contrôle total de l’application • Nous avons un peu de contrôle sur l’hôte • Nous avons très peu à aucun contrôle sur le réseau

  6. Matrice RACI

  7. Threat modeling process

  8. Menaces applicatives et contre-mesures

  9. Principles of Security

  10. Quellessont les menaces pour SharePoint? Ecrire du code sécurisé pour SharePoint

  11. Menaces connues pour SharePoint

  12. Easy configuration solutions • Empecher la capture de l’utilisateur en ajoutantcetentête HTTP : • X-frame-options : sameorigin • Empecher les rejeux de cookies et de sessions en ajoutantcette entrée dans le web.configdans le noeudsystem.web : • <httpCookieshttpOnlyCookies="false" requireSSL="true" /> • Vérifiez les mises à jour! • http://technet.microsoft.com/en-us/security/bulletin

  13. La dernière: MS 13-024 http://technet.microsoft.com/en-us/security/bulletin/ms13-024

  14. Comptes de services • Utilisez les comptes de service: • Isoler les attaques • Fournirunesécurité au plus bas niveau • Les comptes à avoir au minimum: • SQL Service, Setup User, SP Farm • Les comptessuggérés:

  15. Contexte des comptes de service • Sachezquelleidentitéestutilisée à quell niveau

  16. Quechoisir pour les donnéesexternes • Impersonification (PassThrough) • Identité du pool applicative (RevertToSelf) • Identifiantsstockés • Codé en dur: ne le faitessimplement pas. • Web.config: Compliqué à chiffrer & mettre à jour. • Secure Store Service: Le meilleurchoix. • Comptesgérés: Trèsbien (quand applicable).

  17. Contextesd’execution SharePoint

  18. Bonnesidées pour faire du code sécurisédans SharePoint • Quandvousdéveloppez pour SharePoint essayez de le considérercomme le tier de présentation • Gardeztous les accès aux données non SharePoint en dehors • Plannifiez des revues de code régulièrement • Effectuezune revue de code dédiée à la sécuritéavantchaque version majeure • Utilisez des outilsd’analyse du code • SPDisposeCheck, CAT.NET, FxCop, HP Fortify • ImplementezInitialize-SPResourceSecurity

  19. Pratiques de sécurité Ecrire du code sécurisé

  20. Pratiques : le dispose • Pas bien • SPWebweb = site.OpenWeb();// do stuff with web • Mieux • SPWebweb = site.OpenWeb();// do stuff with webmyWeb.Dispose(); • Bien • using (SPWebweb = site.OpenWeb()){ // do stuff with web}

  21. Pratiques : verifier le contexte • Est-ceque les methods vérifient le contexteavantd’effectuer des modifications • if (HttpContext.Current == null) • { • // This isn’t being called in a web application • }

  22. Pratiques : verifier les permissions utilisateurs • Est-ceque les permissions sonttestéesavantd’effectuer des modifications? • if(web.DoesUserHavePermissions(SPBasePermissions.EditListItems)) • { • // Edit the list item(s) • } • Reference: http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.spbasepermissions.aspx

  23. Pratiques : verifier les entrées de données • Documentation des méthodes avec /// ? • Utilisation de AntiXssLibrary.dll? • Toutes les méthodesd’entréeutilisateursutilisent-elles: AntiXss.HtmlEncode(myString) or AntiXss.URLEncode(myString) ?

  24. Pratiques : verification du Type • Valider avec la verification de type • // Is the ItemId parameter an Int32? • if(!Int32.TryParse(Request.QueryString["ItemId"],outItemId)) • { • // Exit with an invalid parameter error • } • Valider avec des regex • // Is the ListId parameter a GUID? • RegexStringValidatorval = newRegexStringValidator(@"^\{?[\dA-Fa-f]{8}-[\dA-Fa-f]{4}-[\dA-Fa-f]{4}-[\dA-Fa-f]{4}-[\dA-Fa-f]{12}\}?$"); • // If invalid, this will throw a System.ArgumentException • val.Validate(Request.QueryString["ListId"]); • GuidListId = newGuid(Request.QueryString["ListId"]);

  25. Pratiques de sécurité : pages applicatives • Héritage de LayoutsPageBase? • Mise à jour d’objets SharePoint ? • Si ouiuniquementdans le postback, sinon on s’expose à du cross-site scripting. • Si oui, utilisation du contrôle du formulaire avec formdigest ? • La page appelle-t-elleSPUtility.ValidateFormDigest()avantchaquemise à jour? • Est-ceque la page utilise AllowUnsafeUpdates? • Si ouiassurezvousqu’elle ne le fasse pas sur les SPSite et SPWeb de contexte. • Refusez le code qui désactive le formdigest, ça rend le cross scripting possible.

  26. Pratiques de sécurité : pages applicatives • Contextepropice à l’utilisation de ValidateFormDigest() vs. AllowUnsafeUpdates • if(HttpContext.Current== null) {// parmAbsUrl is an absolute URL in the format "http://server/sites/mySite/"using (SPSite site = newSPSite(parmAbsoluteUrl)) {using (SPWeb web = site.OpenWeb(parmAbsoluteUrl)) • {web.AllowUnsafeUpdates = true; • // Update SharePoint objects here • web.AllowUnsafeUpdates = false; } } }else// HttpContext.Currenthas a value {SPUtility.ValidateFormDigest();// Update SharePoint objects here}

  27. Pratiques : web parts • Le web part affiche-t-ill’exception et l’ID de correlation? • C’estunemauvaise chose qu’une page plante à cause d’un webpart. • Comment afficherl’ID de correlation: • [DllImport("advapi32.dll")] public static extern uintEventActivityIdControl(uintcontrolCode, ref GuidactivityId); public constuint EVENT_ACTIVITY_CTRL_GET_ID = 1; • // … • // And then use it in code like this: • try { // code block goes here } • catch { • Guidg = Guid.Empty; EventActivityIdControl(EVENT_ACTIVITY_CTRL_GET_ID, ref g); this.Controls.Add(new Label { Text = string.Format("An error occurred with Correlation ID {0}", g) }); • }

  28. Pratiques : propriétés des web parts • Les webpartsvalident-ilsleurspropriétés? • Plus efficace de le faire durant la définition de ces propriétes et non pendant l’exécution • public string NumberArray{ // Require format: 1,2,3,4 get{return _numberArray;} set{ string [] arr = value.split(','); foreach(string item in arr) { inti; if(!int.TryParse(item,outi)) throw new WebPartPageUserException("The item \""+item+"\" is not a valid number"); } _numberArray=value; } }

  29. Pratiques : mode de privileges élevés • Trois scénarios pour le faire: • Lire de la donnée SharePoint. • Mettre à jour de la donnée SharePoint. • Effectuer un appelexterne.

  30. Pratiques : lire de la donnée SharePoint • SPWebweb = SPContext.Current.Web;try{// Verify this is a postback from a valid Application Page SPUtility.ValidateFormDigest(); • // Verify that the user has a valid permission before elevating • if (web.DoesUserHavePermissions(SPBasePermissions.ManageWeb)) {// Read a SharePoint property • SPSecurity.RunWithElevatedPrivileges(delegate() {// Read data using the SharePoint Object Model here }); • }}

  31. Pratiques : Mettreà jour de la données SharePoint • // Update a SharePoint property • using(SPSiteelevatedSite= • LitwareSecurity.SharePoint.Security.GetElevatedSite(web.Site) • { • // Update data using SharePoint object model here. • } • Le secret du chef: GetElevatedSiteessaied’abordsite.SystemAccount.UserToken et sicela ne fonctionne pas execute ensuite un RWEP() pour GetSystemToken(). Enfinilretourne le SPSite avec cecontexte • La source: http://www.danlarson.com/elevated-privilege-with-spsite/

  32. Pratiques : utiliser le thread pour s’identifier en dehors de SharePoint • // Call a non-SharePoint resource • using(HostingEnvironment.Impersonate()) • { • // Call an external resource using the credentials of • // the Application Pool ID here • }

  33. Pratiques : contexts de privilègesélevés • Troisscénarios • Lecture de données SharePoint • RWEP() => ok. • Mettreà jour de la donné SharePoint • GetElevatedSite() Crée un SPSitesécurisé avec lequeltravailler • Effectuer un appelexterne • La manière ASP.NET d’effectuer les choses dans SharePoint

  34. SharePoint 2013 Les apps Ecrire du code sécurisé dans SharePoint

  35. Modèlesd’hébergement • Hébergéesdans SharePoint • Fichiers de l’application ajoutées dans SharePoint • Hébergésdans un site enfant appeléApp Web • L’Appexécute du code client(HTML4/5, Javascript, • jQuery, Silverlight, Flash, etc.) • Pas de code serveur • Hérgementfournit et Auto-hébergé • Fichiers de l’applicationsur un serveur distant • Site distant appeléRemote Web • Code client • Code serveur, sur un autreserveur (C#, node.js, PHP, • Ruby, Java, etc.)

  36. Donner des permissions à une app Permissions demandées à l’isntallation All or nothing

  37. App manifest d’exemple • <?xml version="1.0" encoding="utf-8" ?><App xmlns=http://schemas.microsoft.com/sharepoint/2012/app/manifestProductID="{4a07f3bd-803d-45f2-a710-b9e944c3396e} "Version="1.0.0.0"SharePointMinVersion="15.0.0.0"Name="MySampleApp“"> • <Properties><Title>My Sample App</Title> <StartPage>http://ContosoApps/default.aspx/?SPHostUrl={HostUrl}</StartPage><SupportedLocales><SupportedLocaleCultureName="en-US" /></SupportedLocales></Properties> • <AppPermissionRequests> <AppPermissionRequest Scope="http://sharepoint/content/sitecollection/web" Right="Read"/> <AppPermissionRequest Scope="http://sharepoint/content/sitecollection/web/list" Right="Write"> <Property Name="BaseTemplateId" Value="101"/> </AppPermissionRequest> </AppPermissionRequests> • <AppPrincipal><RemoteWebApplicationClientId="1ee82b34-7c1b-471b-b27e-ff272accd564" /></AppPrincipal> • </App>

  38. Etendues des permissions fournisseur des app

  39. Permissions des apps

  40. App Authorization Policies

  41. Pratiques : les apps • La stratégie Same-origin empèche les appelsJavascript entre les apps et l’hote • Les meilleursfaçons de communiquersont via le CSOM ou REST • IT pros: gardezune trace des permissions applicativesapprouvées. • Unefoisapprouvéesiln’y a plus besoin de les réapprouver, mêmesi ells évoluent.

  42. Pratiques: les apps • Hébergementsur un FQDN unique • Choisir un sous domaine et non un domaine unique rend les attaques de cookies possibles.

  43. Recap • Souvenez vous des bases • Utilisez RACI, la modélisation des menaces, les principes, les menaces et leurscontre-mesures • Soyez vigilants • Surveillez les bulletins • Connaissez votre environement • Ecrivez du code SharePoint super sécurisé • Familiarisezvous avec les apps SharePoint 2013

  44. Reference • WatchGuard SharePoint Security Center: Patches • http://watchguardsecuritycenter.com/tag/sharepoint/ • SharePointSecurity.com: Articles • http://www.sharepointsecurity.com/ • SharePoint Security Scanner: Utility App • http://spsecurityscanner.codeplex.com/ • SP 2013 Resources for Developers: Guidance • http://social.technet.microsoft.com/wiki/contents/articles/12392.sharepoint-2013-resources-for-developers.aspx • Security Guidance for Applications: Guidance • http://msdn.microsoft.com/en-us/library/ff650760.aspx

  45. Thank You! Ecrire du code sécurisé pour SharePoint Eli Robillard – Partner, Knowledge Artisans @erobillard #spsummit4.3

  46. Thank you for your attention! This presentation will be available on the Quebec SharePoint Summit web site after the event. Merci de votre attention ! Cette présentation sera disponible sur le site internet de SharePoint Summit Québec, après l’événement.

  47. SVP évaluezma session! Complétez le sondage et courez la chance de gagner une tablette Surface Please rate this session! Fill out the survey and get a chance to win a Surface Session 4.3 Eli Robillard, Writing Secure SharePoint Code

More Related