1 / 56

Säkerhet och .NET

Säkerhet och .NET. Johan Lindfors Developer Evangelist Microsoft AB. Vad kommer vi gå igenom?. Funktioner i .NET Framework för säkerhet Kod och bevisbaserad säkerhet Rollbaserad säkerhet Kryptering Säkra ASP.NET webbapplikationer Säkra ASP.NET webbservices

danton
Download Presentation

Säkerhet och .NET

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. Säkerhet och .NET Johan Lindfors Developer Evangelist Microsoft AB

  2. Vad kommer vi gå igenom? • Funktioner i .NET Framework för säkerhet • Kod och bevisbaserad säkerhet • Rollbaserad säkerhet • Kryptering • Säkra ASP.NET webbapplikationer • Säkra ASP.NET webbservices • Tips för att skriva säker kod med .NET Framework

  3. Agenda • Funktioner i .NET Framework för säkerhet • Kod och bevisbaserad säkerhet • Rollbaserad säkerhet • Kryptering • Säkra ASP.NET webbapplikationer • Säkra ASP.NET webbservices • Tips för att skriva säker kod med .NET Framework

  4. Trådhantering “COM Marshaler” Kontroll av datatyper Felhanterare Säkerhetsmotor “Debugger” MSILkompilatorer Kodhanterare Minneshanterare - GC Hanterad exekvering i .NET ..NET Framework basklasser Klassladdare

  5. Ett typsäkert system • “Runtime” övervakar din kod • Säkerheten i .NET Framework erbjuder • Skydd mot buffertöverskrivningar • Ett kodbaserat säkerhetsregelverk • Typsäkra begränsningar i kod • Enbart åtkomst till auktoriserade minnesplatser • Enbart åtkomst till objekt genom exponerat gränssnitt • “AppDomain” erbjuder • Ökad prestanda och kodbaserad säkerhet

  6. Buffertöverskrivningar • Verifiering av datatyper gör det svårt att av misstag skriva över skyddat minne • .NET Framework har stöd för… • Den “enklare” klassen “String” • Den kontrollerade “StringBuilder”-klassen • Försiktighet krävs fortfarande • Kod som markerats som “unsafe” • COM och Win32 interoperabilitet

  7. Aritmetiska fel • Aritmetisk felkontroll genomförs med: • Nyckelordet “checked” • Inställningar för projektet byte b=0; while (true) { Console.WriteLine (b); checked { b++; } }

  8. Assemblies och ”Strong Name” • Ett “strong name” är ett unikt ID som innehåller en publik nyckel • En assembly signeras digitalt med en nyckelfil • Signaturen från ett “strong name” verifieras när applikationen laddas • Fördelar med “Strong name” • Förhindrar påverkan utifrån • Konfirmerar identiteten på den som publicerat applikationen • Möjliggör helt skilda komponenter sida-vid-sida C:\> sn.exe –k MinPrivataOchPublikaNyckel.snk

  9. Isolerad lagring • Erbjuder ett virtuell filssystem inom ett filsystem • Hanterar • Kvoteringar • Separering av filsystem baserat på identitet på applikationen eller användare • Därför kan applikationer och användare separeras IsolatedStorageFile isoStore = IsolatedStorageFile.GetUserStoreForAssembly();

  10. Agenda • Funktioner i .NET Framework för säkerhet • Kod och bevisbaserad säkerhet • Rollbaserad säkerhet • Kryptering • Säkra ASP.NET webbapplikationer • Säkra ASP.NET webbservices • Tips för att skriva säker kod med .NET Framework

  11. Bevisbaserad säkerhet • Bevis kontrolleras när en assembly laddas • Bevis kan innehålla: • Information om “strong name” • URL, site och AppDir • Zon • Publicerare (“Authenticode”) • Hash • Bevis kan byggas ut • Bevis används av säkerhetssystemet för att bestämma rättigheterna för en assembly

  12. Regelverk för säkerhet

  13. Anropar ReadFile Anropar ReadFile Säkerhetskontroller 1. En assembly begär åtkomsten till en metod i din assembly 2. Din assembly skickar begäran vidare till en assembly i .NET Framework 3. Säkerhetssystemet gör en “demand” genom hela anropsstacken 4. Säkerhetssystemet ger åtkomst eller “kastar ett fel” Anropsstack EnAssembly Tilldela: Execute MinAssembly Tilldela: ReadFile “Permission Demand” Säkerhetssystemet .NET Framework Assembly Ge åtkomst? “Security exception”Ingen åtkomst Tilldela: ReadFile

  14. Imperativa kontroller • Mer granulärt än deklarativt FileIOPermission filePerm = new FileIOPermission( FileIOPermissionAccess.Read, "C:\\temp.txt"); try { filePerm.Demand(); // Kod för att jobba mot filen här } Catch (SecurityException e) { // detta exekverar om åtkomsten vägras }

  15. Deklarativa kontroller • Använd attribut för att genomföra säkerhetskontroller • Fel genererar “SecurityException” • Deklarativ säkerhet lagras som metadata, vilket ger: • Enklare genomgångar av kod • Konfiguration vid exekvering (CASPOL) [FileIOPermission(SecurityAction.Demand, Read="C:\\temp.txt")] public string ReadTempFile() { // Kod för att läsa filen här }

  16. Assert • En “Assert” förhindrar “stack walk” • Användbart när: • Kod behöver åtkomst till en skyddad resurs, men åtkomsten är helt gömd från användarna • Kod behöver anropa ohanterad kod för att utföra en väldefinerad funktion, använd en kombination av “Demand” och “Assert” • Använd bara när det är absolut nödvändigt! • Se till att din kod inte kan användas av otillåtna applikationer och användare

  17. Anropar ReadFile Anropar ReadFile Assert påverkar “StackWalk” • Var försiktig dock! • Kräver rättigheten - Assert • Kräver rättigheten som görs Assert på Anropsstack EnAssembly MinAssembly Assert: ReadFile “Permission Demand” Säkerhetssystemet .NET Framework Assembly Ge åtkomst? Tilldela: ReadFile

  18. “Permission Requests” • Utvecklaren lägger till önskade rättigheter till en assembly med hjälp av attribut • 3 typer av begäran: • Ger en mekanism som: • Får en assembly att själv tala om rättighetskrav • Förenklar utrullning av assemblies • Förhindrar att en assembly laddas om inte dess krav är uppfyllda Minimum “Optional” “Refused”

  19. ”Permission Requests” // Jag kommer bara att köra om jag får anropa ohanterad kod [assembly:SecurityPermission( SecurityAction.RequestMinimum, UnmanagedCode=true)] // Jag måste ha rättigheter som i “FullTrust PermissionSet” [assembly:PermissionSet( SecurityAction.RequestMinimum, Name="FullTrust")] // Bara kod som signerats med 12789ADE...kan anropa mig [StrongNameIdentityPermission(SecurityAction.LinkDemand PublicKey = "12789ADE…", Version = "1.0.0.0")] public class MyClass { // MyClass can only be called by the assembly // with the strong name specified in the attribute }

  20. Applikationer med ”Partial Trust” • Webbapplikationer har “full trust” innan .NET Framework 1.1 • .NET Framework 1.1 ger ASP.NET nivåer • Begränsa åtkomsten till resurser för ASP.NET <location allowOverride="true"> <system.web> <securityPolicy> <trustLevel name="Full" policyFile="internal"/> <trustLevel name="High" policyFile="web_hightrust.config"/> <trustLevel name="Medium" policyFile="web_mediumtrust.config"/> <trustLevel name="Low" policyFile="web_lowtrust.config"/> <trustLevel name="Minimal" policyFile="web_minimaltrust.config"/> </securityPolicy> <!-- level="[Full|High|Medium|Low|Minimal]" --> <trust level=“Full" originUrl=""/> </system.web> </location> Machine.config

  21. Priviligerad kod i “sandlådor” • Inkapsla priviligerad kod i en wrapper • Gör “assert” på relevanta rättigheter • Installera wrappern i GAC • Använd “AllowPartiallyTrustedCallersAttribute” <trust level_”Medium” originUri_--/> Demand och Assert Åtkomst till resurs Wrapper Assembly (“Strong Name” och i GAC) Webbapp med“Partial Trust” Säker resurs “Sandboxad” kod

  22. Agenda • Funktioner i .NET Framework för säkerhet • Kod och bevisbaserad säkerhet • Rollbaserad säkerhet • Kryptering • Säkra ASP.NET webbapplikationer • Säkra ASP.NET webbservices • Tips för att skriva säker kod med .NET Framework

  23. Autentisering och auktorisering • Autentisering • Vem är du? • Är jag säker på att du är den du säger? • Auktorisering • Har du tillstånd att…? • Rollbaserad säkerhet i .NET Framework berör mest auktorisering

  24. Generisk Windows Skräddarsydd Identiteter och “principals” • En identitet innehåller information om en användare, till exempel inloggningsnamn • En “principal” innehåller rollinformation om en användare eller dator

  25. Identiteter och Windows • Använd objekten WindowsIdentity och WindowsPrincipal för: • En enstaka validering • Repeterad validering WindowsIdentity myIdent = WindowsIdentity.GetCurrent(); WindowsPrincipal myPrin = new WindowsPrincipal(myIdent); AppDomain.CurrentDomain.SetPrincipalPolicy( PrincipalPolicy.WindowsPrincipal); WindowsPrincipal myPrin = System.Threading.Thread.CurrentPrincipal;

  26. Generiska identiteter • Skapa “GenericIdentity” och “GenericPrincipal” • Lägg “GenericPrincipal” till den aktuella tråden • “GenericPrincipal” kommer att användas vid framtida säkerhetskontroller på tråden GenericIdentity myIdent = new GenericIdentity("User1"); string[] roles = {"Manager", "Teller"}; GenericPrincipal myPrin = new GenericPrincipal(myIdent, roles); System.Threading.Thread.CurrentPrincipal = myPrin;

  27. Rollbaserade kontroller (1/2) • Du kan använda egenskapen “Name” på “ID” objektet för att kontrollera inloggningsnamn • Använd metoden “IsInRole” på “Principal” för att kontrollera medlemskap i roller if (String.Compare(myPrin.Identity.Name, "DOMÄN\\Johan", true)==0) { // Få åtkomst till koden } if (myPrin.IsInRole("BUILTIN\\Administrators")) { // Få åtkomst till koden }

  28. Rollbaserade kontroller (2/2) • Använd rättigheter för att kontrollera rollbaserade säkerhetskontroller • Imperativt • Deklarativt PrincipalPermission prinPerm = new PrincipalPermission("Teller", “Manager”, true); try { prinPerm.Demand(); // Matchar ovanstående aktiv “principal” } [PrincipalPermission(SecurityAction.Demand, Role="Teller", Authenticated=true)]

  29. Agenda • Funktioner i .NET Framework för säkerhet • Kod och bevisbaserad säkerhet • Rollbaserad säkerhet • Kryptering • Säkra ASP.NET webbapplikationer • Säkra ASP.NET webbservices • Tips för att skriva säker kod med .NET Framework

  30. Krypteringsgenomgång • .NET Framework har klasser som implementerar dessa operationer

  31. Använd symmetrisk kryptering • Välj algoritm • TripleDESCryptoServiceProvider • RijndaelManaged • Generera en hemlig nyckel • Använd samma nyckel för kryptering och dekryptering • “FileStream” • “MemoryStream” • “NetworkStream”

  32. Asymmetrisk kryptering • Välj krypteringsalgoritm • RSACryptoServiceProvider • DSACryptoServiceProvider • Generera ett nyckelpar • Kryptera eller dekryptera

  33. Signering av data • Att signera data förhindrar påverkan och säkerställer identiteten på den som signerat • För att signera data • “Hasha” informationen • Kryptera resultatet med privat nyckel • För att verifiera den digitala signaturen: • Dekryptera signaturen med den publika nyckeln • Hasha informationen och jämför resultat

  34. Agenda • Funktioner i .NET Framework för säkerhet • Kod och bevisbaserad säkerhet • Rollbaserad säkerhet • Kryptering • Säkra ASP.NET webbapplikationer • Säkra ASP.NET webbservices • Tips för att skriva säker kod med .NET Framework

  35. Autentisering med ASP.NET

  36. Klienten begär sida Formulärbaserad autentisering Autentisering i ASP.NET Inte autentiserad Autentiserad Ingen åtkomst Inloggningssida(Användaren matar in uppgifter) Auktoriserad Inte autentiserad Autentiserad “Cookie” Begärd sida Auktoriserad

  37. Konfigurera • Konfigurera IIS för anonym autentisering • Slå på autentisering i web.config • Sätt auktorisering • Bygg en inloggningssida <system.web> <authentication mode="Forms"> <forms loginUrl="login.aspx"/> </authentication> <authorization> <deny users="?"/> </authorization> </system.web>

  38. Ytterligare förstärkningar • Säkra “cookies” • Nycklar specifika per applikation • <machineKey validationKey="AutoGenerate,IsolateApps"> • Används för att generera unika nycklar för varje applikation <authentication mode="Forms"> <forms loginUrl="login.aspx" protection="All" requireSSL="true" timeout="10" name="AppNameCookie" path="/FormsAuth" slidingExpiration="true" </forms> </authentication>

  39. Användarenmatar in data Fel! Nej Valid inmatning? Valid inmatning? Ja Klient Server Nej Ja Webbapplikationenprocesserar… Validering av inmatning • Validering på klienten • Beror på version av webbläsare • Ger återkoppling omedelbart • Minskar antalet “postbacks” • Validering på servern • Repeterar all validering frånklienten • Kan validera mot lagradinformation

  40. Valideringskontroller • Validering på klienten (“EnableClientScript”) • Validering på servern • “ControlToValidate” • “ErrorMessage”

  41. Agenda • Funktioner i .NET Framework för säkerhet • Kod och bevisbaserad säkerhet • Rollbaserad säkerhet • Kryptering • Säkra ASP.NET webbapplikationer • Säkra ASP.NET webbservices • Tips för att skriva säker kod med .NET Framework

  42. Säkra webbservices • Tre huvudsakliga modeller för att konfigurera säkerheten för XML Web Services: • På plattformsnivå (IPSEC, SSL) • På applikationsnivå (ACL, IP begränsningar) • På meddelandenivån (WSE) • Standarder för att stödja integritet och konfidentialitet på meddelandenivån: • XML Signatures • XML Encryption

  43. Klient Service XML XML Säker transport Transport Transport Säkerhet på plattformsnivån Plattform och transport erbjuder säkerhet Autentisering av anroparen Integritet på meddelande Skyddat innehåll Säkerhet på transportnivå erbjuds av plattformen. T.ex. Windows använder Kerberos

  44. XML meddelandet innehåller säkerhetsinformation Uppgifter för säkerhet Digitala signaturer Meddelanden kan krypteras Klient Service XML XML XML XML Vilken transport som helst Transport Transport Säkerheten äroberoende av transportprotokoll Säkerhet på meddelandenivån

  45. “XML Signature” • En standardiserad XML syntax för att representera en digital signatur • Verifierar om ett meddelande ändrats under överföring • Signerar specifika delar av XML dokumentet eller meddelandet • Implementerat i .NET Framework • System.Security.Cryptography.Xml

  46. “XML Encryption” • En standardiserad XML syntax för att definera information för kryptering • Kryptera utvalda delar av ett XML dokument eller meddelande • Stödjer både symmetriska och asymmetriska algoritmer • Inte inbyggt i senaste versionen av .NET Framework, men du kan skapa själv med: • System.Security.Cryptography • System.XML • System.IO.MemoryStream

  47. WSE • Microsofts implementation av WS-Security: • Autentisering med SOAP huvuden • Kryptering av meddelanden • Signering av meddelanden • Implementerat i Microsoft.Web.Services.dll • Har också stöd för vidarehänvisning och tillägg

  48. Agenda • Funktioner i .NET Framework för säkerhet • Kod och bevisbaserad säkerhet • Rollbaserad säkerhet • Kryptering • Säkra ASP.NET webbapplikationer • Säkra ASP.NET webbservices • Tips för att skriva säker kod med .NET Framework

  49. Tips för säker kod (1 av 4 ) • Validera all användarinmatning • Håll uppsikt på data med mer än ett grundformat • Glöm inte “SQL injection” • Hantera känsligt data ansvarsfullt • Ta hänsyn till “reflection” • Använd attributet “NonSerializable” • Kryptera alla lagrade lösenord • Använd Dotfuscator

  50. Tips för säker kod (2 av 4 ) • Kodbaserad säkerhet • Använd “permission requests” på assemblies för att minska din exponering • Undersök noggrant explicita rättigheter • Använd “Assert” när det är absolut nödvändigt • Anropa alltid “RevertAssert” • PInvoke och COM interoperabilitet • Använd “safe-native-unsafe” namngivning • Begär rättigheten att få exekvera ohanterad kod • Använd “sandboxing” mot ohanterade API-anrop

More Related