1 / 30

Bezpieczeństwo aplikacji .NET

Bezpieczeństwo aplikacji .NET. Michał Poliszkiewicz. Bezpieczeństwo. Bezpieczeństwo jest terminem złożonym Projektowanie, programowanie, wdrażanie Zabezpieczenia sieci, serwerów, bezpieczne aplikacje Konsekwencje złych zabezpieczeń Kradzieże informacji poufnych

jackie
Download Presentation

Bezpieczeństwo aplikacji .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. Bezpieczeństwo aplikacji .NET Michał Poliszkiewicz Microsoft Professional Developer Days 2004

  2. Bezpieczeństwo • Bezpieczeństwo jest terminem złożonym • Projektowanie, programowanie, wdrażanie • Zabezpieczenia sieci, serwerów, bezpieczne aplikacje • Konsekwencje złych zabezpieczeń • Kradzieże informacji poufnych • Kradzież własności intelektualnej • „downtime” systemów • Strata reputacji firmy / twórców systemów • Straty finansowe – reputacja, usuwanie szkód

  3. Bezpieczeństwo – punkty ataku Secure by Default • Błędna konfiguracja systemów • Wady systemów • Złe zarządzanie pamięcią • Błędy arytmetyczne • „cross-site scripting” XSS • „SQL injection” • Błędy w walidacji • Słabości kryptografii • … • Brak polityki unowocześniania systemów Secure by Design Secure in Deployment

  4. .NET Framework • Kod zarządzany – CLR nasz Wielki Brat • Zarządzanie pamięcią • Walidacja assembly • Weryfikacja „type safe” • Zarządzanie wykonaniem • Gotowa infrastruktura • Nowe modele zabezpieczeń • Gotowe klasy • PKI, szyfrowanie • Walidacja • System.Security • ASP.NET • Windows Authentication • Forms Authentication • Passport

  5. Bezpieczeństwo tematy • Kryptografia • Bezpieczna komunikacja • Autentykacja • Autoryzacja • Walidacja • Obsługa błędów • Zapory Firewall • Audyt kodu • Monitorowanie działania aplikacji • Poprawki Service Packs, fixes … • ….

  6. Bezpieczeństwo – tematy na dzisiaj • CAS – Code Access Security • Idea • Policy • Sprawdzanie uprawnień • ASP.NET 1.1 • Kryptografia • Powtórka z kryptografii • Niebezpieczeństwa • Przechowywanie informacji sekretnych • Ukrywanie kodu

  7. AGENDA • CAS – Code Access Security • Idea • Policy • Sprawdzanie uprawnień • ASP.NET 1.1 • Kryptografia • Powtórka z kryptografii • Niebezpieczeństwa • Przechowywanie informacji sekretnych • Ukrywanie kodu

  8. Bezpieczeństwo – CAS, RBS Dwa nowe mechanizmy zabezpieczeń -Code Access Security -Role Based Security Dwa sposoby konfiguracji -Deklaratywny (atrybuty) -Programowy • CAS Policy • Grupowanie uprawnień • „Permission Sets” • Grupowanie assemblies • „Code Groups” • Warunek członkowstwa • Referencja do PermissionSet 1 3 • System.Security.Permissions • Przydzielane do assembly podczas jego wgrywania • Określają m.in. uprawnienia do: • -Dostępu do systemu plików • -Dostępu do zmiennych systemowych • -Wywoływania kodu natywnego • -Dostępu do Isolated Storage • -Dostępu do zasobów sieciowych • -… Wypadkowy zbiór uprawnień jest sumą wszystkich uprawnień wynikających z członkostwa w poszczególnych grupach 2 4

  9. Policy – definiowanie zasad All Code PermissionSets Nothing Zone: My Computer Nothing Full Trust SN: e1334ad4bd3rc113 Intranet Full Trust Zone: Intranet Same Site Access Intranet Full Trust All Code Same Site Access URL: //search Evidence Full Trust Nothing http://sales/abc.dll SN: b2690aecbd60c3ac StrongName: b2690aecbd60c3ac FullTrust

  10. Konfiguracja CAS – definiowanie Policy

  11. Call CzytajPlik() Call ReadFile() Sprawdzanie przydzielonych uprawnień Call Stack • Demand • Mechanizm wymagania uprawnień do wykonania kodu • Stack Walk • Sprawdzanie łańcucha odwołań • Assert • Zapewnienie dostępu do zasobów dla funkcji wołającej Jakieś Assembly Grant: ReadFile Moje Assembly Grant: ReadFile ReadFile Demand UnmanagedAsset .NET Framework Assembly Win32 API Grant: Unmanaged

  12. Wymaganie uprawnień - programowo FileIOPermission filePerm = new FileIOPermission( FileIOPermissionAccess.Read, "C:\\temp.txt"); try { filePerm.Demand(); // Code to access file goes here } Catch (SecurityException e) { // if demand fails, this code is executed } Wymaganie uprawnia czytania z pliku C:\\temp.txt „Stack walk” – jeżeli uprawnienia zabraknie, zostanie wyrzucony wyjątek

  13. Wymaganie uprawnień - deklaratywnie • Użycie atrybutów • Informacja zawarta w metadata • Jak łapać wyjątek SecurityException • Tylko poziom metody i całego assembly [FileIOPermission(SecurityAction.Demand, Read= "C:\\temp.txt")] public string ReadTempFile() { // Code to read file goes here }

  14. ASP.NET 1.1 nie musi równać się FullTrust <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

  15. Sandboxing w aplikacjach ASP.NET • Uprzywilejowany kod opakowany w „Wrapper Assemble” • Assert na wybranych uprawnieniach • „Wrapper assembly”umieszczone w GACu • Atrybut AllowPartiallyTrustedCallersAttribute <trust level_”Medium” originUri_--/> Demand i Assert Dostęp do zasobu „Wrapper Assemble”(Strong Name, GAC) Aplikacja ASP.NET Chroniony zasób Sandboxed Code

  16. AGENDA • CAS – Code Access Security • Idea • Policy • Sprawdzanie uprawnień • ASP.NET 1.1 • Kryptografia • Powtórka z kryptografii • Niebezpieczeństwa • Przechowywanie informacji sekretnych • Ukrywanie kodu

  17. Powtórka z kryptografii • Kryptografia– dziedzina wiedzy • Cele: • Poufność: • Ochrona przed dostępem do danych przez osoby / procesy nieupoważnione. • Integralność danych: • Ochrona przed zmianą danych przez osoby /procesy nieupoważnione. • Uwierzytelnienie: • Weryfikacja pochodzenia danych

  18. Powtórka z kryptografii • .NET Framework - System.Security.Cryptography

  19. Dane Dane Klucz prywatny jest znany nadawcy i odbiorcy Szyfrowanie Deszyfrowanie Szyfrowanie symetryczne • Szybkie i wydajne średnio ~1000x w porównaniu do asymetrycznego • Problem z bezpieczną wymianą kluczy • DES, Triple DES, AES (Rijndael), IDEA, RC2, RC4

  20. Salt Initialization Vector Encrypted Data Algorytm symetryczny • Generacja klucza • Generacja losowego łańcucha szumu – „Salt” • Stworzenie klucza na podstawie wygenerowanego łańcucha i hasła dostarczonego przez użytkownika • Szyfrowanie algorytmem symetrycznym przy wykorzystaniu wygenerowanego klucza • Niezaszyfrowany łańcuch „salt” i IV w wyjściowym strumieniu danych • Odszyfrowywanie algorytmem symetrycznym przy wykorzystaniu tego samego klucza • Regeneracja klucza na podstawie łańcucha „salt” • Wykorzystanie wektora IV

  21. DEMO Szyfrowanie symetryczne - Rijndael

  22. Szyfrowanie asymetryczne • Szyf. – kl. publiczny • Szyf. – kl. prywatny • Bezpieczne, ale wolne • RSA, Diffie-Helman, DSA Deszyfr. – kl prywatny Deszyfr. – kl publiczny Szyfrowanie przez B – poufność informacji B Użytkownik B Użytkownik A Klucz prywatny Klucz publiczny Klucz publiczny Szyfrowanie przez A – potwierdzenie tożsamości A

  23. Algorytm asymetryczny • Klasy implementujące algorytmy: • RSACryptoServiceProvider • DSACryptoServiceProvider RSACryptoServiceProvider rsaAlgorithm = new RSACryptoServiceProvider(); • Dostarczenie parametrów RSAParameters rsaKeyInfo = new RSAParameters(); rsaKeyInfo.Modulus = PublicKey; rsaKeyInfo.Exponent = Exponent; rsaAlgorithm.ImportParameters(rsaKeyInfo); • Szyfrowanie / Deszyfrowanie

  24. Niebezpieczeństwa • Słabe punkty kryptografii • Implementacja własny algorytm - nie! • Implementacja znanego algorytmu – nie! • Klucze • Problem ograniczenia dostępności • Czas życia • Procedury awaryjne – klucz staje się dostępny • Długie klucze – TAK TAK TAK! • Nie wywarzajmy otwartych drzwi!!! • CryptoAPI, CAPICOM, i System.Security.Cryptography - tak • DPAPI do przechowywania wiadomości poufnych - tak • SSL/TLS - tak

  25. Zarządzanie informacjami poufnymi • 3 drogi • Ukrywanie • Prawa dostępu • Szyfrowanie • Łączmy rozwiązania • ACL na zaszyfrowanych danych • Ukryty klucz - OS • LSA – nie LSAStorePrivateData, LSARetrievePrivateData • DPAPI – tak CryptProtectDataCryptUnprotectData .NET - P/Invoke 1 3 • Unikajmy problemu • Hashing • WIS • Smart card 2

  26. AGENDA • CAS – Code Access Security • Idea • Policy • Sprawdzanie uprawnień • ASP.NET 1.1 • Kryptografia • Powtórka z kryptografii • Niebezpieczeństwa • Przechowywanie informacji sekretnych • Ukrywanie kodu

  27. Ukrywanie kodu • Dekompilacja /.NET i Java • Niebezpieczeństwa dekompilacji • Łatwe wyszukiwanie dziur w oprogramowaniu • Wykradanie pomysłów i algorytmów • Łamanie zabezpieczeń • Obfuskowanie • Zmiany nazw klas, metod i obiektów • „overload induction” • Usuwanie nieistotnych metadanych • Szyfrowanie łańcuchów • Zaciemnianie przebiegu programu • Zmniejszanie wielkości programów

  28. DEMO Ukrywanie kodu – VS NET 2003 i Dotfuscator

  29. Więcej informacji • Strony internetowe • http://msdn.microsoft.com/security • http://msdn.microsoft.com/columns/secure.asp • http://www.microsoft.com/poland/developer • Patterns and Practices Guides • Building Secure ASP.NET Applicationshttp://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnnetsec/html/secnetlpMSDN.asp • ImprovingWeb Application Security: Threats and Countermeasures http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnnetsec/html/threatcounter.asp • Książki • Bezpieczny kod • Michael Howard and David LeBlanc, published by Microsoft Press • Tworzenie Bezpiecznych Aplikacji Microsoft ASP.NET • J.D. Meier, Alex Mackman, Michael Dunner, and Srinath Vasireddy • Grupy dyskusujne • microsoft.public.dotnet.security • microsoft.public.sqlserver.security

More Related