Tworzenie bezpiecznych aplikacji na platformie Azure

W tym artykule przedstawiono działania i mechanizmy kontroli zabezpieczeń, które należy wziąć pod uwagę podczas tworzenia aplikacji dla chmury. Omówione są pytania i pojęcia dotyczące zabezpieczeń, które należy wziąć pod uwagę podczas fazy implementacji i weryfikacji cyklu życia programowania zabezpieczeń firmy Microsoft (SDL). Celem jest ułatwienie definiowania działań i usług platformy Azure, których można użyć do opracowania bardziej bezpiecznej aplikacji.

W tym artykule opisano następujące fazy SDL:

  • Implementacja
  • Weryfikacja

Implementacja

Celem fazy implementacji jest ustanowienie najlepszych rozwiązań dotyczących wczesnego zapobiegania i wykrywania i usuwania problemów z zabezpieczeniami z kodu. Załóżmy, że aplikacja jest używana w sposób, który nie zamierzał jej używać. Pomaga to chronić przed przypadkowym lub zamierzonym nieprawidłowym użyciem aplikacji.

Wykonywanie przeglądów kodu

Przed zaewidencjonowanie kodu przeprowadzisz przeglądy kodu w celu zwiększenia ogólnej jakości kodu i zmniejszenia ryzyka tworzenia usterek. Za pomocą programu Visual Studio można zarządzać procesem przeglądu kodu.

Wykonywanie statycznej analizy kodu

Statyczna analiza kodu (znana również jako analiza kodu źródłowego) jest wykonywana w ramach przeglądu kodu. Analiza kodu statycznego często odnosi się do uruchamiania narzędzi do analizy kodu statycznego w celu znalezienia potencjalnych luk w zabezpieczeniach w kodzie nieuruchomiowym. Analiza kodu statycznego używa technik, takich jak sprawdzanie taint i analiza przepływu danych.

Azure Marketplace oferuje narzędzia deweloperskie, które wykonują analizę kodu statycznego i pomagają w przeglądach kodu.

Weryfikowanie i oczyszczanie wszystkich danych wejściowych aplikacji

Traktuj wszystkie dane wejściowe jako niezaufane, aby chronić aplikację przed najbardziej typowymi lukami w zabezpieczeniach aplikacji internetowych. Niezaufane dane są pojazdem do ataków polegających na wstrzyknięciu. Dane wejściowe dla aplikacji zawierają parametry w adresie URL, dane wejściowe od użytkownika, dane z bazy danych lub z interfejsu API oraz wszystkie przekazane dane, które użytkownik może potencjalnie manipulować. Aplikacja powinna sprawdzić , czy dane są syntatyczne i semantycznie prawidłowe, zanim aplikacja będzie używać danych w dowolny sposób (w tym wyświetlając je z powrotem do użytkownika).

Zweryfikuj dane wejściowe na wczesnym etapie przepływu danych, aby upewnić się, że tylko prawidłowo sformułowane dane wchodzą w przepływ pracy. Nie chcesz, aby źle sformułowane dane utrzymywały się w bazie danych ani nie wyzwalały awarii w składniku podrzędnym.

Lista bloków i lista dozwolonych to dwa ogólne podejścia do przeprowadzania walidacji składni wejściowej:

  • Blokowanie próby sprawdzenia, czy dane wejściowe danego użytkownika nie zawierają "znanej złośliwej" zawartości.

  • Zezwalanie na próby sprawdzenia, czy dane wejściowe danego użytkownika są zgodne z zestawem "znanych dobrych" danych wejściowych. Lista dozwolonych na podstawie znaków to forma listy dozwolonych, w której aplikacja sprawdza, czy dane wejściowe użytkownika zawierają tylko "znane dobre" znaki lub dane wejściowe pasują do znanego formatu.

    Może to na przykład obejmować sprawdzenie, czy nazwa użytkownika zawiera tylko znaki alfanumeryczne lub zawiera dokładnie dwie liczby.

Lista dozwolonych jest preferowanym podejściem do tworzenia bezpiecznego oprogramowania. Blokowanie listy jest podatne na błąd, ponieważ nie można myśleć o pełnej liście potencjalnie złych danych wejściowych.

Wykonaj tę pracę na serwerze, a nie po stronie klienta (lub po stronie serwera i po stronie klienta).

Weryfikowanie danych wyjściowych aplikacji

Wszystkie dane wyjściowe przedstawione wizualnie lub w dokumencie powinny być zawsze zakodowane i uniknięte. Ucieczka, znana również jako kodowanie danych wyjściowych, służy do zapewnienia, że niezaufane dane nie są pojazdem do ataku iniekcyjnego. Ucieczka, w połączeniu z weryfikacją danych, zapewnia warstwowe zabezpieczenia w celu zwiększenia bezpieczeństwa systemu jako całości.

Ucieczka zapewnia, że wszystko jest wyświetlane jako dane wyjściowe. Ucieczka informuje również interpretera, że dane nie mają być wykonywane, a to uniemożliwia działanie ataków. Jest to kolejna typowa technika ataku nazywana skryptami między witrynami (XSS).

Jeśli używasz platformy internetowej z innej firmy, możesz sprawdzić opcje kodowania danych wyjściowych na stronach internetowych przy użyciu ściągawki ochrony przed zapobieganiem programowi OWASP XSS.

Używanie zapytań sparametryzowanych podczas kontaktów z bazą danych

Nigdy nie utwórz wbudowanego zapytania bazy danych "na bieżąco" w kodzie i wyślij je bezpośrednio do bazy danych. Złośliwy kod wstawiony do aplikacji może potencjalnie spowodować kradzież, wyczyszczenie lub zmodyfikowanie bazy danych. Aplikacja może być również używana do uruchamiania złośliwych poleceń systemu operacyjnego w systemie operacyjnym hostujących bazę danych.

Zamiast tego należy użyć zapytań sparametryzowanych lub procedur składowanych. Jeśli używasz zapytań sparametryzowanych, możesz bezpiecznie wywołać procedurę z kodu i przekazać go do ciągu bez obaw, że będzie traktowany jako część instrukcji zapytania.

Usuwanie standardowych nagłówków serwera

Nagłówki, takie jak Server, X-Powered-By i X-AspNet-Version, ujawniają informacje o serwerze i podstawowych technologiach. Zalecamy pomijanie tych nagłówków w celu uniknięcia odcisku palca aplikacji. Zobacz usuwanie standardowych nagłówków serwera w witrynach internetowych platformy Azure.

Segregowanie danych produkcyjnych

Dane produkcyjne lub dane "rzeczywiste" nie powinny być używane do opracowywania, testowania ani innych celów niż to, co ma na celu firma. Do opracowywania i testowania należy użyć zamaskowanego (zanonimizowanego) zestawu danych.

Oznacza to, że mniej osób ma dostęp do rzeczywistych danych, co zmniejsza obszar ataków. Oznacza to również, że mniej pracowników widzi dane osobowe, co eliminuje potencjalne naruszenie poufności.

Implementowanie silnych zasad haseł

Aby bronić przed siłą siłową i zgadywaniem opartym na słowniku, należy zaimplementować silne zasady haseł, aby zapewnić, że użytkownicy tworzą złożone hasło (na przykład minimalną długość 12 znaków i wymagają znaków alfanumerycznych i specjalnych).

Usługa Azure Active Directory B2C ułatwia zarządzanie hasłami, zapewniając samoobsługowe resetowanie haseł, wymuszanie resetowania hasła i nie tylko.

Aby chronić się przed atakami na konta domyślne, sprawdź, czy wszystkie klucze i hasła są zastępowane i czy są generowane lub zastępowane po zainstalowaniu zasobów.

Jeśli aplikacja musi automatycznie wygenerować hasła, upewnij się, że wygenerowane hasła są losowe i że mają wysoką entropię.

Weryfikowanie przekazywania plików

Jeśli aplikacja zezwala na przekazywanie plików, rozważ środki ostrożności, które można podjąć w przypadku tego ryzykownych działań. Pierwszym krokiem w wielu atakach jest pobranie złośliwego kodu do systemu, który jest atakowany. Użycie przekazywania plików pomaga osobie atakującej to osiągnąć. Program OWASP oferuje rozwiązania do sprawdzania poprawności pliku, aby upewnić się, że przekazywany plik jest bezpieczny.

Ochrona przed złośliwym kodem pomaga identyfikować i usuwać wirusy, programy szpiegujące i inne złośliwe oprogramowanie. Możesz zainstalować rozwiązanie ochrony punktu końcowego Microsoft Antimalware lub partnera firmy Microsoft (Trend Micro, Broadcom, McAfee, Microsoft Defender Antywirusowe w systemie Windows i Endpoint Protection).

Microsoft Antimalware obejmuje funkcje, takie jak ochrona w czasie rzeczywistym, zaplanowane skanowanie, korygowanie złośliwego oprogramowania, aktualizacje podpisów, aktualizacje aparatu, raportowanie przykładów i zbieranie zdarzeń wykluczeń. Rozwiązania Microsoft Antimalware i partnerów można zintegrować z Microsoft Defender for Cloud w celu ułatwienia wdrażania i wbudowanych wykrywania (alertów i zdarzeń).

Nie buforuj poufnej zawartości

Nie buforuj poufnej zawartości w przeglądarce. Przeglądarki mogą przechowywać informacje dotyczące buforowania i historii. Buforowane pliki są przechowywane w folderze, na przykład w folderze Tymczasowe pliki internetowe, w przypadku programu Internet Explorer. Po ponownym odwołaniu się do tych stron przeglądarka wyświetla strony z pamięci podręcznej. Jeśli informacje poufne (adres, szczegóły karty kredytowej, numer ubezpieczenia społecznego, nazwa użytkownika) są wyświetlane użytkownikowi, informacje mogą być przechowywane w pamięci podręcznej przeglądarki i można je pobrać, sprawdzając pamięć podręczną przeglądarki lub naciskając przycisk Wstecz przeglądarki.

Weryfikacja

Faza weryfikacji obejmuje kompleksowy wysiłek w celu zapewnienia, że kod spełnia wymagania dotyczące zabezpieczeń i prywatności, które zostały ustanowione w poprzednich fazach.

Znajdowanie i naprawianie luk w zabezpieczeniach w zależnościach aplikacji

Przeskanujesz aplikację i jej biblioteki zależne, aby zidentyfikować wszystkie znane składniki podatne na zagrożenia. Produkty, które są dostępne do wykonania tego skanowania, to OWASP Dependency Check,Snyk i Black Duck.

Testowanie aplikacji w stanie operacyjnym

Dynamiczne testowanie zabezpieczeń aplikacji (DAST) to proces testowania aplikacji w stanie operacyjnym w celu znalezienia luk w zabezpieczeniach. Narzędzia DAST analizują programy podczas wykonywania w celu znalezienia luk w zabezpieczeniach, takich jak uszkodzenie pamięci, niezabezpieczona konfiguracja serwera, wykonywanie skryptów między lokacjami, problemy z uprawnieniami użytkownika, wstrzyknięcie kodu SQL i inne krytyczne problemy z zabezpieczeniami.

Język DAST różni się od statycznego testowania zabezpieczeń aplikacji (SAST). Narzędzia SAST analizują kod źródłowy lub skompilowane wersje kodu, gdy kod nie jest wykonywany w celu znalezienia wad zabezpieczeń.

Wykonaj daST, najlepiej z pomocą specjalisty ds. zabezpieczeń ( tester penetracyjnych lub ocena luk w zabezpieczeniach). Jeśli specjalista ds. zabezpieczeń nie jest dostępny, możesz wykonać narzędzie DAST samodzielnie za pomocą skanera internetowego serwera proxy i niektóre szkolenia. Podłącz skaner DAST wcześnie, aby upewnić się, że nie wprowadzasz oczywistych problemów z zabezpieczeniami w kodzie. Zobacz witrynę OWASP , aby uzyskać listę skanerów luk w zabezpieczeniach aplikacji internetowych.

Przeprowadzanie testowania rozmytego

W przypadku testowania rozmytego wywołasz błąd programu, celowo wprowadzając źle sformułowane lub losowe dane do aplikacji. Niepowodzenie programu inducing pomaga ujawnić potencjalne problemy z zabezpieczeniami przed wydaniem aplikacji.

Wykrywanie ryzyka zabezpieczeń to unikatowa usługa testowania rozmytego firmy Microsoft służąca do znajdowania usterek krytycznych dla zabezpieczeń w oprogramowaniu.

Przeprowadzanie przeglądu obszaru ataków

Przegląd powierzchni ataków po zakończeniu kodu pomaga upewnić się, że wszelkie zmiany projektu lub implementacji aplikacji lub systemu zostały uznane. Pomaga to zagwarantować, że wszystkie nowe wektory ataków, które zostały utworzone w wyniku zmian, w tym modeli zagrożeń, zostały poddane przeglądowi i zminimalizowane.

Obraz powierzchni ataku można utworzyć, skanując aplikację. Firma Microsoft oferuje narzędzie do analizy powierzchni ataków o nazwie Attack Surface Analyzer. Możesz wybrać spośród wielu komercyjnych narzędzi do testowania dynamicznego i skanowania luk w zabezpieczeniach, w tym narzędzia do wykrywania powierzchni ataków OWASP, arachni i w3af. Te narzędzia skanujące przeszukają aplikację i zamapują części aplikacji, które są dostępne w Internecie. Możesz również wyszukać Azure Marketplace pod kątem podobnych narzędzi deweloperskich.

Przeprowadzanie testów penetracyjnych zabezpieczeń

Zapewnienie bezpieczeństwa aplikacji jest tak ważne, jak testowanie innych funkcji. Przetestuj testy penetracyjne w standardowej części procesu kompilacji i wdrażania. Zaplanuj regularne testy zabezpieczeń i skanowanie luk w zabezpieczeniach w wdrożonych aplikacjach oraz monitoruj otwieranie portów, punktów końcowych i ataków.

Uruchamianie testów weryfikacji zabezpieczeń

Rozwiązanie Azure Tenant Security Solution (AzTS) z zestawu Secure DevOps Kit for Azure (AzSK) zawiera svTs dla wielu usług platformy Azure. Te maszyny wirtualne są okresowo uruchamiane, aby upewnić się, że subskrypcja platformy Azure i różne zasoby składające się na aplikację są w bezpiecznym stanie. Te testy można również zautomatyzować przy użyciu funkcji rozszerzeń ciągłej integracji/ciągłego wdrażania (CI/CD) narzędzia AzSK, która udostępnia pliki SVTs jako rozszerzenie programu Visual Studio.

Następne kroki

W poniższych artykułach zalecamy mechanizmy kontroli zabezpieczeń i działania, które mogą pomóc w projektowaniu i wdrażaniu bezpiecznych aplikacji.