Presentation laddar. Vänta.

Presentation laddar. Vänta.

Säkerhet för utvecklare Johan Lindfors Senior Developer Evangelist Microsoft AB.

Liknande presentationer


En presentation över ämnet: "Säkerhet för utvecklare Johan Lindfors Senior Developer Evangelist Microsoft AB."— Presentationens avskrift:

1 Säkerhet för utvecklare Johan Lindfors Senior Developer Evangelist Microsoft AB

2 12 råd som bör följas  Anamma ”Least Privilege”  Skriv applikationer för icke-adminstratörer  Kräv inte ”sa”-rättigheter  Lita aldrig på inmatning från användare  Förhindra XSS  Skydda dig mot ”Buffer Overruns”

3 12 råd som bör följas  Se över din krypteringskod  Minska exponeringsytan  Hantera fel på korrekt sätt  Var försiktig med ”Impersonation”  Försök använda ”hanterad kod” och sist men absolut inte minst…  Kontinuerlig utbildning är nyckeln!!!

4 ”Least privilege” (1, 2) Applikationer bör exekvera med minsta rättigheter Då bör du också utveckla med de rättigheterna Visual Studio 2005 använder inte ”Debugger Users” längre Fångar fel tidigare i processen Högre kvalitet på produkten Passar som handsken i SDL

5 Utveckla utan administrativa rättigheter

6 Konsekvenser av inmatning (4) Hantering av inmatning ska alltid ske Kan nämligen leda till… SQL Injection Cross-Site Scripting (XSS) “One-Click Attacks” “Canonicalization” utmaningar Felaktiga minnesadresseringar

7 Skydd mot ”SQL Injection” (9) Använd inte dynamisk SQL Använd lagrade procedurer eller parameteriserade SQL frågor Sanera all inmatning Betrakta all inmatning som skadlig Testa för korrekt data och förkasta allt annat Exekvera med minsta rättigheter, inte “sa” Begränsa åtkomst till inbyggda procedurer Visa inte ODBC felmeddelanden

8 Skydd mot ”XSS” (5) Dåligt: Lita på inmatning från användare ”Eka” klientens data utan att ”koda” Lagra hemlig information i “cookies” Bra: Utnyttja ASP.NET: RequestValidation Utnyttja ASP.NET: ViewStateUserKey Använd IOSec för kodning av data

9 Skydd mot felaktig inmatning

10 Förbättringar för C++ (6) ”Buffer Overruns” är fortfarande vanligt! ”C Runtime” designades långt innan vi tänkte på säkerhet Ett flertal av utmaningarna i dag relaterar till användningen av ”C Runtime” Vi har gjort en del förändingar i och med Visual Studio 2005 “Safe CRT” initiativet Har lämnats in för standardisering Kräver dock kodförändringar!

11 C++ och utmaningar

12 Säkerhet och.NET Fx (8, 11) Kod och bevisbaserad säkerhet Minskar kodens åtkomst till skyddade resurser Rättigheter representerar åtkomst till resurser Adminstratörer kan konfigurera inställningar Kod kan begära rättigheter Och specificera rättigheter som absolut inte behövs Ger kod möjligheten att kräva att anropande kod har vissa rättigheter eller signaturer

13 “Permission Requests” G3 Hur fungerar det? Utvärdering mot regler Assembly A3 Regelverk för säkerhet G3 Värd Assembly A2 G2 G1 Assembly A1 Assembly A3 Bevis

14 Exempel 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 exekveras om åtkomsten vägras } Exekveringsmotorn kommer att “gå i stacken” och kontrollera att all kod har korrekta rättigheter, om inte så kastas ett “SecurityException” Imperativ säkerhetskontroll

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

16 Minimum“Optional”“Refused” ”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: Tillåter en assembly att kräva rättigheter Förhindrar att en assembly laddas om inte dess krav är uppfyllda

17 // 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 = " ")] public class MyClass { // MyClass can only be called by the assembly // with the strong name specified in the attribute } Exempel på begäran

18 Kod och bevisbaserad säkerhet

19 “Stack Walk” Assembly A Assembly B Assembly C Assembly D PermissionSet PermissionSet PermissionSet PermissionSet P.Demand() “Stack walk” för rättigheten p Exempel på “Stack walk”

20 ”Stack Walk”

21 GeneriskWindowsSkräddarsydd En identitet innehåller information om en användare, till exempel inloggningsnamn En “principal” innehåller rollinformation om en användare eller dator Identiteter och ”principals”

22 WindowsIdentity myIdent = WindowsIdentity.GetCurrent(); WindowsPrincipal myPrin = new WindowsPrincipal(myIdent); AppDomain.CurrentDomain.SetPrincipalPolicy(PrincipalPolicy.WindowsPrincipal); WindowsPrincipal myPrin = System.Threading.Thread.CurrentPrincipal; Identiteter i Windows Använd objekten WindowsIdentity och WindowsPrincipal för: Enstaka validering Repeterade valideringar

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

24 if (String.Compare(myPrin.Identity.Name, "DOMAIN\\Fred“,true)==0) { // Permit access to some code } if (myPrin.IsInRole("BUILTIN\\Administrators")) { // Permit access to some code } Rollbaserade kontroller (1/2) Använd egenskapen “Name” på “ID” objektet för att kontrollera inloggningsnamn Använd metoden “IsInRole” på “P” objektet för att kontrollera medlemskap i roller

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

26 Identiter och roller

27 Nyheter i.NET 2.0 (7) Transparens Enkelt API för “Sandboxing” ClickOnce och PermCalc Starkare nycklar för SN “Full trust” i GAC CAS kan inte stängas av permanent Kryptering av XML Och en hel del till…

28 Verktyg för utvecklare Authorization Manager Varför bygga egna auktoriseringssätt Administrationsverktyg och modell Application Blocks Enterprise Library 2.0 Visual Studio Team System Statisk och dynamisk kodanalys Enhetstestning Last och stresstester Analys och rapportering

29 Verktyg för utvecklare

30 Säkerhet i WCF Enhetlig programmeringsmodell Mellan processer, datorer, domäner….NET Framework baserad Interoperabilitet Baserat på WS-* specifikationerna Kompatibilitet med existerande säkerhetstekniker (Windows, Kerberos, X.509, HTTPS) Säker som grundinställning Alla ”standard” bindningar är säkra BasicHttpBinding är ett undantag!!!

31 Windows Communication Foundation

32 Windows CardSpace “Identity Provider” Användare “Relying Party”

33 Windows CardSpace

34 Kort paus för omstart!

35 ”User Account Control” (1) Alla interaktiva processer exekverar som en vanlig användare Tillåtelse från användaren krävs för att begära ytterligare rättigheter En speciell ikon identifierar operationer som kräver ytterligare rättigheter

36 Påverkan på applikationer Virtualisering av registret och filsystemet %userprofile%\AppData\Local\VirtualStore HKEY_CURRENT_USER\Software\Classes\Vi rtualStore Virtualisering är en kompatibilitets-funktion för existerande applikationer Nya och uppdaterade applikationer ska inte förlita sig på virtualisering! Windows Vista applikationer bör i ett “manifest” begära rättigheter

37 Stänga av UAC istället? Absolut inte, det är steg vi behöver ta! Utbilda dig själv och ditt företag Vi kommer att fortsätta göra detta ”sexigare” Skydda dina användare och kunder

38 5 steg till kompatibilitet  Bedöm om din applikation redan exekverar som “standard user”  Identifiera operationer som kräver ytterligare rättigheter  Adressera identifierade operationer, om möjligt  Markera dina applikationer som UAC-benägna  Adressera operationer som kräver ytterligare rättigheter

39 Hitta priviligerade operationer Använd verktyget “Standard User Analyzer” Identifierar operationer som kommer att kräva ytterligare rättigheter Kan användas på Windows XP Konfigurera maskinspecifika inställningar vid installation, hellre än vid första starten Ändra maskinspecifika inställningar till användarspecifika om möjligt

40 Markera din applikation för UAC Erbjud ett manifest (en XML-fil) Ett manifest är en XML-fil med namnet:.exe.manifest Sätt elementet Sätt elementet Vanligtvis till “asInvoker” Detta stänger också av virtualiseringen Manifest kan vara externa eller “embedded” Externa manifest hittas i samma katalog som den exekverbara filen “Embedded” manifest inkluderas som en ren Win32 resurs

41 App Description requestedExecutionLevel requireAdministrator highestAvailable asInvoker Skapa ett manifest Lägg till en XML-fil till projektet Byt namnet till.exe.manifest

42 #define RT_MANIFEST 24 #define APP_MANIFEST 1 APP_MANIFEST RT_MANIFEST.exe.manifest appName.res ”Embedded” manifest Lägg till en resursfil till projektet (text-fil) och byt namn till.rc Lägg till en kompileringshändelse “pre-build” “ \rc.exe ” $(ProjectDir)$(ProjectName).rc Lägg till Win32-resursen till “assembly”

43 Adressera viktiga operationer Överväg andra nivåer på Överväg andra nivåer på requireAdministrator eller highestAvailable Vissa applikationer kräver rättigheter för en liten del av sin funktionalitet Priviligerade rättigheter måste ges till en egen process Kräver “refactoring” till separata paritioner Gränssnittet bör dekoreras med skölden Priviligerade partitioner måste startas antingen med ”ShellExecute” eller “COM elevation moniker”

44 Process proc = new Process(); proc.StartInfo = new ProcessStartInfo(); proc.StartInfo.CreateNoWindow = true; proc.StartInfo.UseShellExecute = true; proc.StartInfo.FileName = "PrivilegedExe.exe"; proc.EnableRaisingEvents = true; proc.Exited += new EventHandler(OnExeExited); proc.Start(); Starta med ”ShellExecute” OBS: CreateProcess kan inte begära ytterligare rättigheter Visual Studio 2005 kan alltså inte automatiskt hantera detta!

45 Gör en applikation klar för UAC

46 Bakåtkompatibilitet Vad händer om du kör en UAC- kompatibel applikation på Windows XP? ignoreras ignoreras Alla processer exekverar med de högsta tillgängliga rättigheterna Strategi för att försäkra sig om att partitionerade applikationer fortsätter att fungera på Windows XP Testa alltid tillgången till rättigheter vid uppstart (IsUserAdmin) och avsluta graciöst i de fall som denna nivå inte finns

47 Checklista för utvecklare (12) Utveckla inte som adminstratörer RunAs är ett bra komplement Validera all inmatning Se över era datalager Byt till hanterad kod Använd automatiska verktyg Förbered er för UAC Utbilda er kontinuerligt ”Writing Secure Code”

48 n


Ladda ner ppt "Säkerhet för utvecklare Johan Lindfors Senior Developer Evangelist Microsoft AB."

Liknande presentationer


Google-annonser