300 likes | 488 Views
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
E N D
Bezpieczeństwo aplikacji .NET Michał Poliszkiewicz Microsoft Professional Developer Days 2004
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
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
.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
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 … • ….
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
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
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
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
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
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
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 }
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
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
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
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
Powtórka z kryptografii • .NET Framework - System.Security.Cryptography
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
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
DEMO Szyfrowanie symetryczne - Rijndael
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
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
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
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
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
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
DEMO Ukrywanie kodu – VS NET 2003 i Dotfuscator
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