Projektowanie bezpiecznych aplikacji na platformie Azure

W tym artykule przedstawimy działania i mechanizmy kontroli zabezpieczeń, które należy wziąć pod uwagę podczas projektowania aplikacji dla chmury. Zasoby szkoleniowe wraz z pytaniami i pojęciami dotyczącymi zabezpieczeń, które należy wziąć pod uwagę podczas fazy wymagań i projektowania cyklu projektowania zabezpieczeń firmy Microsoft (SDL, Security Development Lifecycle) firmy Microsoft. Celem jest ułatwienie definiowania działań i usług platformy Azure, których można użyć do zaprojektowania bezpieczniejszej aplikacji.

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

  • Szkolenie
  • Wymagania
  • Zaprojektuj

Szkolenie

Zanim zaczniesz opracowywać aplikację w chmurze, pośmiń czas na zrozumienie zabezpieczeń i prywatności na platformie Azure. Wykonując ten krok, możesz zmniejszyć liczbę i ważność luk w zabezpieczeniach możliwych do wykorzystania w aplikacji. Będziesz bardziej przygotowany do odpowiedniego reagowania na stale zmieniający się krajobraz zagrożeń.

Skorzystaj z następujących zasobów na etapie szkolenia, aby zapoznać się z usługami platformy Azure, które są dostępne dla deweloperów i z najlepszymi rozwiązaniami w zakresie zabezpieczeń na platformie Azure:

  • Przewodnik dewelopera po platformie Azure pokazuje, jak rozpocząć pracę z platformą Azure. W przewodniku przedstawiono usługi, których można używać do uruchamiania aplikacji, przechowywania danych, dołączania analizy, tworzenia aplikacji IoT oraz wdrażania rozwiązań w bardziej wydajny i bezpieczny sposób.

  • Przewodnik Wprowadzenie dla deweloperów platformy Azure zawiera podstawowe informacje dla deweloperów , którzy chcą rozpocząć korzystanie z platformy Azure na potrzeby ich programowania.

  • Zestawy SDK i narzędzia opisują narzędzia dostępne na platformie Azure.

  • Usługa Azure DevOps Services udostępnia narzędzia do współpracy programistycznej. Narzędzia obejmują potoki o wysokiej wydajności, bezpłatne repozytoria Git, konfigurowalne tablice Kanban oraz rozbudowane zautomatyzowane i oparte na chmurze testowanie obciążenia. Centrum zasobów DevOps łączy nasze zasoby na potrzeby uczenia się praktyk DevOps, kontroli wersji usługi Git, metod agile, sposobu pracy z metodykami DevOps w firmie Microsoft oraz sposobu oceniania własnego postępu metodyki DevOps.

  • Pięć najważniejszych elementów zabezpieczeń do rozważenia przed wypchnięciem do środowiska produkcyjnego pokazuje, jak pomóc zabezpieczyć aplikacje internetowe na platformie Azure i chronić aplikacje przed najczęstszymi i niebezpiecznymi atakami aplikacji internetowych.

  • Zestaw Secure DevOps Kit dla platformy Azure to zbiór skryptów, narzędzi, rozszerzeń i automatyzacji, które zaspokajają kompleksowe potrzeby związane z subskrypcją platformy Azure i zabezpieczeniami zasobów zespołów DevOps korzystających z rozbudowanej automatyzacji. Zestaw Secure DevOps Kit dla platformy Azure umożliwia pokazanie, jak bezproblemowo zintegrować zabezpieczenia z natywnymi przepływami pracy metodyki DevOps. Zestaw adresuje narzędzia, takie jak testy weryfikacji zabezpieczeń (SVT), które mogą ułatwić deweloperom pisanie bezpiecznego kodu i testowanie bezpiecznej konfiguracji aplikacji w chmurze na etapach kodowania i wczesnego programowania.

  • Najlepsze rozwiązania i wzorce zabezpieczeń platformy Azure — kolekcja najlepszych rozwiązań w zakresie zabezpieczeń, które należy stosować podczas projektowania, wdrażania i zarządzania rozwiązaniami w chmurze przy użyciu platformy Azure. Wskazówki mają być zasobami dla specjalistów IT. Może to obejmować projektantów, architektów, deweloperów i testerów, którzy tworzą i wdrażają bezpieczne rozwiązania platformy Azure.

Wymagania

Faza definicji wymagań to kluczowy krok w definiowaniu aplikacji i jej funkcji po jej wydaniu. Faza wymagań to również czas, aby zastanowić się nad mechanizmami kontroli zabezpieczeń, które tworzysz w aplikacji. W tej fazie rozpoczniesz również kroki wykonywane w całym języku SDL, aby upewnić się, że zwalniasz i wdrażasz bezpieczną aplikację.

Rozważ problemy z zabezpieczeniami i prywatnością

Ta faza jest najlepszym czasem, aby rozważyć podstawowe problemy z zabezpieczeniami i prywatnością. Definiowanie akceptowalnych poziomów zabezpieczeń i prywatności na początku projektu pomaga zespołowi:

  • Omówienie czynników ryzyka związanych z problemami z zabezpieczeniami.
  • Identyfikowanie i naprawianie usterek zabezpieczeń podczas opracowywania.
  • Zastosuj ustalone poziomy zabezpieczeń i prywatności w całym projekcie.

Podczas pisania wymagań aplikacji należy wziąć pod uwagę mechanizmy kontroli zabezpieczeń, które mogą pomóc w zachowaniu bezpieczeństwa aplikacji i danych.

Zadawanie pytań zabezpieczających

Zadaj pytania zabezpieczające, takie jak:

  • Czy moja aplikacja zawiera poufne dane?

  • Czy moja aplikacja zbiera lub przechowuje dane, które wymagają ode mnie przestrzegania standardów branżowych i programów zgodności, takich jak Federal Financial Institution Examination Council (FFIEC) lub Payment Card Industry Data Security Standards (PCI DSS)?

  • Czy moja aplikacja zbiera lub zawiera poufne dane osobowe lub dane klienta, które mogą być używane samodzielnie lub z innymi informacjami w celu identyfikacji, kontaktu lub lokalizowania jednej osoby?

  • Czy moja aplikacja zbiera lub zawiera dane, których można użyć do uzyskiwania dostępu do informacji medycznych, edukacyjnych, finansowych lub zatrudnienia osoby fizycznej? Identyfikowanie poufności danych w fazie wymagań pomaga sklasyfikować dane i zidentyfikować metodę ochrony danych używaną dla aplikacji.

  • Gdzie i jak są przechowywane moje dane? Zastanów się, jak monitorować usługi magazynu używane przez aplikację pod kątem wszelkich nieoczekiwanych zmian (takich jak wolniejsze czasy odpowiedzi). Czy możesz wpływać na rejestrowanie w celu zbierania bardziej szczegółowych danych i analizowania problemu w głębi systemu?

  • Czy moja aplikacja jest dostępna publicznie (w Internecie) czy tylko wewnętrznie? Jeśli aplikacja jest dostępna publicznie, jak chronić dane, które mogą być zbierane w niewłaściwy sposób? Jeśli aplikacja jest dostępna wewnętrznie, należy wziąć pod uwagę, kto w organizacji powinien mieć dostęp do aplikacji i jak długo powinien mieć dostęp.

  • Czy rozumiesz model tożsamości przed rozpoczęciem projektowania aplikacji? Czy możesz określić, że użytkownicy są tym, kim mówią, i co użytkownik ma uprawnienia do wykonania?

  • Czy moja aplikacja wykonuje wrażliwe lub ważne zadania (takie jak przekazywanie pieniędzy, odblokowywanie drzwi lub dostarczanie medycyny)? Zastanów się, jak sprawdzić, czy użytkownik wykonujący poufne zadanie ma uprawnienia do wykonywania zadania i sposobu uwierzytelniania osoby, która jest tym, kim mówią. Autoryzacja (AuthZ) to czynność udzielania uwierzytelnionego podmiotu zabezpieczeń uprawnienia do wykonywania czegoś. Uwierzytelnianie (AuthN) jest działaniem wymagającym od strony legalnych poświadczeń.

  • Czy moja aplikacja wykonuje ryzykowne działania związane z oprogramowaniem, takie jak umożliwienie użytkownikom przekazywania lub pobierania plików lub innych danych? Jeśli aplikacja wykonuje ryzykowne działania, rozważ, w jaki sposób aplikacja chroni użytkowników przed obsługą złośliwych plików lub danych.

Przejrzyj OWASP top 10

Rozważ przejrzenie najważniejszych zagrożeń bezpieczeństwa aplikacji OWASP 10. OWASP Top 10 odpowiada krytycznym zagrożeniom bezpieczeństwa dla aplikacji internetowych. Świadomość tych zagrożeń bezpieczeństwa może pomóc w podejmowaniu wymagań i decyzji projektowych, które minimalizują te zagrożenia w aplikacji.

Ważne jest myślenie o mechanizmach kontroli zabezpieczeń w celu zapobiegania naruszeniom. Jednak chcesz również założyć, że wystąpi naruszenie . Zakładając, że naruszenie pomaga odpowiedzieć na kilka ważnych pytań dotyczących zabezpieczeń z wyprzedzeniem, więc nie trzeba odpowiadać w nagłych wypadkach:

  • Jak mogę wykryć atak?
  • Co zrobię, jeśli wystąpi atak lub naruszenie?
  • Jak mogę odzyskać odzyskiwanie po ataku, na przykład wyciek danych lub manipulowanie?

Zaprojektuj

Faza projektowania ma kluczowe znaczenie dla ustanowienia najlepszych rozwiązań dotyczących specyfikacji projektowych i funkcjonalnych. Ma to również kluczowe znaczenie dla przeprowadzania analizy ryzyka, która pomaga ograniczyć problemy z zabezpieczeniami i prywatnością w całym projekcie.

W przypadku stosowania wymagań dotyczących zabezpieczeń i używania bezpiecznych koncepcji projektowych można uniknąć lub zminimalizować możliwości wad zabezpieczeń. Wadą zabezpieczeń jest nadzór nad projektem aplikacji, która może umożliwić użytkownikowi wykonywanie złośliwych lub nieoczekiwanych akcji po wydaniu aplikacji.

W fazie projektowania zastanów się również, jak można zastosować zabezpieczenia w warstwach; jeden poziom obrony nie musi wystarczyć. Co się stanie, jeśli osoba atakująca przechodzi przez zaporę aplikacji internetowej? Chcesz, aby inna kontrola zabezpieczeń broniła się przed tym atakiem.

Mając to na uwadze, omówimy następujące pojęcia dotyczące bezpiecznego projektowania i mechanizmy kontroli zabezpieczeń, które należy rozwiązać podczas projektowania bezpiecznych aplikacji:

  • Użyj bezpiecznej biblioteki kodowania i struktury oprogramowania.
  • Skanuj pod kątem składników podatnych na zagrożenia.
  • Korzystanie z modelowania zagrożeń podczas projektowania aplikacji.
  • Zmniejsz obszar ataków.
  • Przyjęcie zasad tożsamości jako podstawowego obwodu zabezpieczeń.
  • Wymagaj ponownego uwierzytelniania dla ważnych transakcji.
  • Użyj rozwiązania do zarządzania kluczami, aby zabezpieczyć klucze, poświadczenia i inne wpisy tajne.
  • Ochrona poufnych danych.
  • Zaimplementuj środki bezpieczne dla awarii.
  • Skorzystaj z obsługi błędów i wyjątków.
  • Użyj rejestrowania i zgłaszania alertów.

Korzystanie z bezpiecznej biblioteki kodowania i struktury oprogramowania

Na potrzeby programowania należy użyć bezpiecznej biblioteki kodowania i struktury oprogramowania, która ma osadzone zabezpieczenia. Deweloperzy mogą używać istniejących, sprawdzonych funkcji (szyfrowania, szyfrowania danych wejściowych, kodowania danych wyjściowych, kluczy lub parametry połączenia i innych elementów, które byłyby uważane za kontrolę zabezpieczeń) zamiast opracowywania mechanizmów kontroli zabezpieczeń od podstaw. Pomaga to chronić przed wadami projektowania i implementacji związanych z zabezpieczeniami.

Upewnij się, że używasz najnowszej wersji struktury i wszystkich funkcji zabezpieczeń, które są dostępne w strukturze. Firma Microsoft oferuje kompleksowy zestaw narzędzi programistycznych dla wszystkich deweloperów, pracujących na dowolnej platformie lub języku w celu dostarczania aplikacji w chmurze. Możesz kodować przy użyciu wybranego języka, wybierając spośród różnych zestawów SDK. Możesz skorzystać z w pełni funkcjonalnych zintegrowanych środowisk deweloperskich (IDE) i edytorów, które mają zaawansowane możliwości debugowania i wbudowane pomoc techniczna platformy Azure.

Firma Microsoft oferuje różne języki, struktury i narzędzia , których można użyć do tworzenia aplikacji na platformie Azure. Przykładem jest platforma Azure dla deweloperów platformy .NET i platformy .NET Core. Dla każdego oferowanego języka i platformy można znaleźć przewodniki Szybki start, samouczki i dokumentacja interfejsu API, aby ułatwić szybkie rozpoczęcie pracy.

Platforma Azure oferuje różne usługi, których można używać do hostowania witryn internetowych i aplikacji internetowych. Te usługi umożliwiają programowanie w ulubionym języku, niezależnie od tego, czy jest to .NET, .NET Core, Java, Ruby, Node.js, PHP, czy Python. aplikacja systemu Azure Service Web Apps (Web Apps) to jedna z tych usług.

Usługa Web Apps dodaje do aplikacji możliwości platformy Microsoft Azure. Obejmuje ona zabezpieczenia, równoważenie obciążenia, skalowanie automatyczne i automatyczne zarządzanie. Możesz również korzystać z funkcji DevOps w usłudze Web Apps, takich jak zarządzanie pakietami, środowiska przejściowe, domeny niestandardowe, certyfikaty SSL/TLS oraz ciągłe wdrażanie z usług Azure DevOps, GitHub, Docker Hub i innych źródeł.

Platforma Azure oferuje inne usługi, których można użyć do hostowania witryn internetowych i aplikacji internetowych. W przypadku większości scenariuszy najlepszym wyborem jest usługa Web Apps. W przypadku architektury mikrousług rozważ użycie usługi Azure Service Fabric. W razie konieczności sprawowania większej kontroli nad maszynami wirtualnymi, na których działa kod, należy wziąć pod uwagę usługę Azure Virtual Machines. Aby uzyskać więcej informacji na temat wybierania między tymi usługami platformy Azure, zobacz porównanie usług aplikacja systemu Azure Service, Virtual Machines, Service Fabric i Cloud Services.

Stosowanie aktualizacji do składników

Aby zapobiec lukom w zabezpieczeniach, należy stale spisać zarówno składniki po stronie klienta, jak i po stronie serwera (na przykład struktury i biblioteki) oraz ich zależności dotyczące aktualizacji. Nowe luki w zabezpieczeniach i zaktualizowane wersje oprogramowania są stale wydawane. Upewnij się, że masz bieżący plan monitorowania, klasyfikowania i stosowania aktualizacji lub zmian konfiguracji w używanych bibliotekach i składnikach.

Zobacz stronę Open Web Application Security Project (OWASP) na temat używania składników ze znanymi lukami w zabezpieczeniach, aby uzyskać sugestie dotyczące narzędzi. Możesz również subskrybować alerty e-mail dotyczące luk w zabezpieczeniach związanych z używanymi składnikami.

Korzystanie z modelowania zagrożeń podczas projektowania aplikacji

Modelowanie zagrożeń to proces identyfikowania potencjalnych zagrożeń bezpieczeństwa dla twojej firmy i aplikacji, a następnie zapewnienia, że obowiązują odpowiednie środki zaradcze. SDL określa, że zespoły powinny angażować się w modelowanie zagrożeń w fazie projektowania, podczas rozwiązywania potencjalnych problemów jest stosunkowo łatwe i ekonomiczne. Korzystanie z modelowania zagrożeń w fazie projektowania może znacznie zmniejszyć całkowity koszt programowania.

Aby ułatwić proces modelowania zagrożeń, zaprojektowaliśmy narzędzie SDL Threat Modeling Tool z myślą o ekspertach niezwiązanych z zabezpieczeniami. To narzędzie ułatwia modelowanie zagrożeń wszystkim deweloperom, zapewniając jasne wskazówki dotyczące tworzenia i analizowania modeli zagrożeń.

Modelowanie projektu aplikacji i wyliczanie zagrożeń STRIDE fałszowanie, manipulowanie, odrzucanie, ujawnianie informacji, odmowa usługi i podniesienie uprawnień we wszystkich granicach zaufania okazały się skutecznym sposobem wczesnego przechwytywania błędów projektowych. W poniższej tabeli wymieniono zagrożenia STRIDE i przedstawiono przykładowe środki zaradcze, które korzystają z funkcji udostępnianych przez platformę Azure. Te środki zaradcze nie działają w każdej sytuacji.

Zagrożenie Właściwość zabezpieczeń Potencjalne środki zaradcze dotyczące platformy Azure
Spoofing (fałszowanie) Uwierzytelnianie Wymagaj połączeń HTTPS.
Tampering (manipulowanie) Integralność Zweryfikuj certyfikaty SSL/TLS. Aplikacje korzystające z protokołu SSL/TLS muszą w pełni zweryfikować certyfikaty X.509 jednostek, z którymi się łączą. Użyj certyfikatów usługi Azure Key Vault do zarządzania certyfikatami x509.
Repudiation (wypieranie się) Niemożność wyparcia się Włącz monitorowanie i diagnostykę platformy Azure.
Information Disclosure (ujawnienie informacji) Poufność Szyfrowanie poufnych danych magazynowanych i przesyłanych.
Denial of Service (odmowa usługi) Dostępność Monitorowanie metryk wydajności pod kątem potencjalnych warunków odmowy usługi. Zaimplementuj filtry połączeń. Ochrona przed atakami DDoS platformy Azure w połączeniu z najlepszymi rozwiązaniami dotyczącymi projektowania aplikacji zapewnia ochronę przed atakami DDoS.
Elevation of Privilege (podniesienie uprawnień) Autoryzacja Użyj usługi Microsoft Entra ID Privileged Identity Management.

Zmniejszanie obszaru ataków

Powierzchnia ataku to łączna suma potencjalnych luk w zabezpieczeniach. W tym dokumencie skupimy się na powierzchni ataków aplikacji. Koncentruje się on na ochronie aplikacji przed atakiem. Prostym i szybkim sposobem zminimalizowania obszaru ataków jest usunięcie nieużywanych zasobów i kodu z aplikacji. Tym mniejsza jest aplikacja, tym mniejsza powierzchnia ataku. Na przykład usuń:

  • Kod funkcji, które nie zostały jeszcze wydane.
  • Debugowanie kodu obsługi.
  • Interfejsy sieciowe i protokoły, które nie są używane lub które zostały przestarzałe.
  • Maszyny wirtualne i inne zasoby, których nie używasz.

Regularne czyszczenie zasobów i upewnienie się, że usuwasz nieużywany kod, są doskonałymi sposobami zapewnienia mniejszej liczby możliwości ataku złośliwych podmiotów.

Bardziej szczegółowym i szczegółowym sposobem zmniejszenia obszaru ataków jest ukończenie analizy powierzchni podatnej na ataki. Analiza powierzchni ataków pomaga mapować części systemu, które należy przejrzeć i przetestować pod kątem luk w zabezpieczeniach.

Celem analizy powierzchni ataków jest zrozumienie obszarów ryzyka w aplikacji, dzięki czemu deweloperzy i specjaliści ds. zabezpieczeń wiedzą, jakie części aplikacji są otwarte na ataki. Następnie możesz znaleźć sposoby zminimalizowania tego potencjału, śledzić, kiedy i jak zmienia się powierzchnia ataku, oraz co to oznacza z perspektywy ryzyka.

Analiza powierzchni ataków ułatwia zidentyfikowanie:

  • Funkcje i części systemu, które należy przejrzeć i przetestować pod kątem luk w zabezpieczeniach.
  • Obszary kodu wysokiego ryzyka, które wymagają ochrony w głębi systemu (części systemu, które należy bronić).
  • Po zmianie obszaru ataków i konieczności odświeżenia oceny zagrożeń.

Zmniejszenie możliwości wykorzystania potencjalnego słabego miejsca lub luki w zabezpieczeniach przez osoby atakujące wymaga dokładnego przeanalizowania ogólnej powierzchni ataków aplikacji. Obejmuje to również wyłączanie lub ograniczanie dostępu do usług systemowych, stosowanie zasady najniższych uprawnień i stosowanie warstwowych ochrony wszędzie tam, gdzie to możliwe.

Omawiamy przeprowadzenie przeglądu powierzchni ataków w fazie weryfikacji SDL.

Uwaga

Jaka jest różnica między modelowaniem zagrożeń a analizą powierzchni ataków? Modelowanie zagrożeń to proces identyfikowania potencjalnych zagrożeń bezpieczeństwa aplikacji i zapewniania odpowiednich środków zaradczych przed zagrożeniami. Analiza powierzchni ataków identyfikuje obszary kodu wysokiego ryzyka, które są otwarte do ataku. Obejmuje to znalezienie sposobów obrony obszarów wysokiego ryzyka aplikacji oraz przejrzenia i testowania tych obszarów kodu przed wdrożeniem aplikacji.

Wdrażanie zasad tożsamości jako podstawowego obwodu zabezpieczeń

Podczas projektowania aplikacji w chmurze ważne jest, aby rozszerzyć fokus na obwodzie zabezpieczeń od podejścia skoncentrowanego na sieci do podejścia skoncentrowanego na tożsamościach. Historycznie podstawowym obwodem zabezpieczeń lokalnych była sieć organizacji. Większość lokalnych projektów zabezpieczeń używa sieci jako podstawowego elementu przestawnego zabezpieczeń. W przypadku aplikacji w chmurze lepiej jest rozważyć tożsamość jako podstawowy obwód zabezpieczeń.

Czynności, które można wykonać w celu opracowania podejścia skoncentrowanego na tożsamościach do tworzenia aplikacji internetowych:

  • Wymuszanie uwierzytelniania wieloskładnikowego dla użytkowników.
  • Używaj silnych platform uwierzytelniania i autoryzacji.
  • Zastosuj zasadę najniższych uprawnień.
  • Zaimplementuj dostęp just in time.

Wymuszanie uwierzytelniania wieloskładnikowego dla użytkowników

Użyj uwierzytelniania dwuskładnikowego. Uwierzytelnianie dwuskładnikowe to bieżący standard uwierzytelniania i autoryzacji, ponieważ pozwala uniknąć słabych stron zabezpieczeń, które są związane z typami nazw użytkowników i haseł uwierzytelniania. Dostęp do interfejsów zarządzania platformy Azure (witryna Azure Portal/zdalny program PowerShell) oraz usług przeznaczonych dla klientów należy zaprojektować i skonfigurować do korzystania z uwierzytelniania wieloskładnikowego firmy Microsoft.

Korzystanie z silnych platform uwierzytelniania i autoryzacji

Używaj mechanizmów uwierzytelniania i autoryzacji dostarczonych przez platformę zamiast kodu niestandardowego. Dzieje się tak, ponieważ tworzenie niestandardowego kodu uwierzytelniania może być podatne na błąd. Kod komercyjny (na przykład od firmy Microsoft) często jest szeroko sprawdzany pod kątem zabezpieczeń. Microsoft Entra ID (Microsoft Entra ID ) to rozwiązanie platformy Azure do zarządzania tożsamościami i dostępem. Te narzędzia i usługi firmy Microsoft Entra pomagają w bezpiecznym tworzeniu:

  • Platforma tożsamości Microsoft to zestaw składników używanych przez deweloperów do tworzenia aplikacji, które bezpiecznie logują użytkowników. Platforma pomaga deweloperom, którzy tworzą aplikacje jednodostępne, biznesowe i deweloperzy, którzy chcą tworzyć aplikacje wielodostępne. Oprócz podstawowego logowania aplikacje utworzone przy użyciu Platforma tożsamości Microsoft mogą wywoływać interfejsy API firmy Microsoft i niestandardowe interfejsy API. Platforma tożsamości Microsoft obsługuje standardowe protokoły branżowe, takie jak OAuth 2.0 i OpenID Połączenie.

  • Azure Active Directory B2C (Azure AD B2C ) to usługa zarządzania tożsamościami używana do dostosowywania i kontrolowania sposobu rejestrowania się, logowania i zarządzania profilami klientów podczas korzystania z aplikacji. Obejmuje to między innymi aplikacje opracowane dla systemów iOS, Android i .NET. Usługa Azure AD B2C umożliwia wykonywanie tych akcji przy jednoczesnym ochronie tożsamości klientów.

Stosowanie zasady najniższych uprawnień

Koncepcja najniższych uprawnień oznacza zapewnienie użytkownikom dokładnego poziomu dostępu i kontroli, których potrzebują do wykonywania swoich zadań i nic więcej.

Czy deweloper oprogramowania potrzebuje praw administratora domeny? Czy asystent administracyjny potrzebuje dostępu do kontroli administracyjnych na swoim komputerze osobistym? Ocena dostępu do oprogramowania nie różni się. Jeśli używasz kontroli dostępu opartej na rolach (RBAC) platformy Azure w celu nadania użytkownikom różnych możliwości i uprawnień w aplikacji, nie zapewnisz wszystkim dostępu do wszystkiego. Ograniczając dostęp do tego, co jest wymagane dla każdej roli, ograniczasz ryzyko wystąpienia problemu z zabezpieczeniami.

Upewnij się, że aplikacja wymusza najmniejsze uprawnienia we wszystkich wzorcach dostępu.

Uwaga

Reguły najniższych uprawnień muszą mieć zastosowanie do oprogramowania i do osób tworzących oprogramowanie. Deweloperzy oprogramowania mogą stanowić ogromne zagrożenie dla bezpieczeństwa IT, jeśli otrzymują zbyt duży dostęp. Konsekwencje mogą być poważne, jeśli deweloper ma złośliwy zamiar lub otrzymuje zbyt duży dostęp. Zalecamy stosowanie reguł najniższych uprawnień do deweloperów w całym cyklu projektowania.

Implementowanie dostępu just in time

Zaimplementuj dostęp just in time (JIT), aby jeszcze bardziej zmniejszyć czas ujawnienia uprawnień. Użyj usługi Microsoft Entra Privileged Identity Management , aby:

  • Nadaj użytkownikom uprawnienia, których potrzebują tylko JIT.
  • Przypisz role dla skróconego czasu trwania z ufnością, że uprawnienia są automatycznie odwoływane.

Wymagaj ponownego uwierzytelniania dla ważnych transakcji

Fałszerzacja żądań między witrynami (znana również jako XSRF lub CSRF) to atak na aplikacje hostowane w Internecie, w którym złośliwa aplikacja internetowa wpływa na interakcję między przeglądarką klienta a aplikacją internetową, która ufa tej przeglądarce. Możliwe są ataki fałszerskie żądania obejmujące wiele witryn, ponieważ przeglądarki internetowe wysyłają niektóre typy tokenów uwierzytelniania automatycznie z każdym żądaniem do witryny internetowej. Ta forma wykorzystania jest również nazywana atakiem jednokrotnym lub sesją, ponieważ atak korzysta z wcześniej uwierzytelnionej sesji użytkownika.

Najlepszym sposobem obrony przed tego rodzaju atakiem jest zwrócenie się do użytkownika o coś, co tylko użytkownik może podać przed każdą ważną transakcją, taką jak zakup, dezaktywacja konta lub zmiana hasła. Możesz poprosić użytkownika o ponowne podanie hasła, ukończenie captcha lub przesłanie tokenu tajnego, który miałby tylko użytkownik. Najbardziej typowym podejściem jest token tajny.

Zabezpieczanie kluczy, poświadczeń i innych wpisów tajnych za pomocą rozwiązania do zarządzania kluczami

Utrata kluczy i poświadczeń jest typowym problemem. Tylko gorzej niż utrata kluczy i poświadczeń jest posiadanie nieautoryzowanej strony uzyskania dostępu do nich. Osoby atakujące mogą korzystać z zautomatyzowanych i ręcznych technik znajdowania kluczy i wpisów tajnych przechowywanych w repozytoriach kodu, takich jak GitHub. Nie umieszczaj kluczy i wpisów tajnych w tych publicznych repozytoriach kodu ani na żadnym innym serwerze.

Zawsze umieszczaj klucze, certyfikaty, wpisy tajne i parametry połączenia w rozwiązaniu do zarządzania kluczami. Możesz użyć scentralizowanego rozwiązania, w którym klucze i wpisy tajne są przechowywane w sprzętowych modułach zabezpieczeń (HSM). Platforma Azure udostępnia moduł HSM w chmurze za pomocą usługi Azure Key Vault.

Usługa Key Vault to magazyn wpisów tajnych: jest to scentralizowana usługa w chmurze do przechowywania wpisów tajnych aplikacji. Usługa Key Vault zapewnia bezpieczeństwo poufnych danych, zachowując wpisy tajne aplikacji w jednej centralnej lokalizacji i zapewniając bezpieczny dostęp, kontrolę uprawnień i rejestrowanie dostępu.

Wpisy tajne są przechowywane w poszczególnych magazynach. Każdy magazyn ma własną konfigurację i zasady zabezpieczeń w celu kontrolowania dostępu. Dane można uzyskać za pośrednictwem interfejsu API REST lub zestawu SDK klienta, który jest dostępny dla większości języków programowania.

Ważne

Usługa Azure Key Vault jest przeznaczona do przechowywania wpisów tajnych konfiguracji dla aplikacji serwerowych. Nie jest przeznaczona do przechowywania danych należących do użytkowników aplikacji. Znajduje to odzwierciedlenie w charakterystyce jej wydajności, interfejsie API i modelu kosztów.

Dane użytkownika powinny być przechowywane w innym miejscu, na przykład w wystąpieniu usługi Azure SQL Database, które ma funkcję Transparent Data Encryption (TDE) lub na koncie magazynu korzystającym z szyfrowania usługi Azure Storage. Wpisy tajne używane przez aplikację do uzyskiwania dostępu do tych magazynów danych mogą być przechowywane w usłudze Azure Key Vault.

Ochrona poufnych danych

Ochrona danych jest istotną częścią strategii zabezpieczeń. Klasyfikowanie danych i identyfikowanie potrzeb w zakresie ochrony danych pomaga zaprojektować aplikację z uwzględnieniem zabezpieczeń danych. Klasyfikowanie (kategoryzowanie) przechowywanych danych według poufności i wpływu biznesowego pomaga deweloperom określić ryzyko skojarzone z danymi.

Oznacz wszystkie odpowiednie dane jako poufne podczas projektowania formatów danych. Upewnij się, że aplikacja traktuje odpowiednie dane jako poufne. Te rozwiązania mogą pomóc w ochronie poufnych danych:

  • Użyj szyfrowania.
  • Unikaj kodowania wpisów tajnych, takich jak klucze i hasła.
  • Upewnij się, że są spełnione kontrole dostępu i inspekcja.

Korzystanie z szyfrowania

Ochrona danych powinna być istotną częścią strategii zabezpieczeń. Jeśli dane są przechowywane w bazie danych lub jeśli przemieszczają się tam i z powrotem między lokalizacjami, użyj szyfrowania danych magazynowanych (w bazie danych) i szyfrowania danych przesyłanych (w drodze do i z użytkownika, bazy danych, interfejsu API lub punktu końcowego usługi). Zalecamy, aby zawsze używać protokołów SSL/TLS do wymiany danych. Upewnij się, że używasz najnowszej wersji protokołu TLS do szyfrowania (obecnie jest to wersja 1.2).

Unikaj kodowania twardego

Niektóre rzeczy nigdy nie powinny być zakodowane w oprogramowaniu. Niektóre przykłady to nazwy hostów lub adresy IP, adresy URL, adresy e-mail, nazwy użytkowników, hasła, klucze konta magazynu i inne klucze kryptograficzne. Rozważ zaimplementowanie wymagań dotyczących tego, co może lub nie może być zakodowane w kodzie, w tym w sekcjach komentarzy w kodzie.

Podczas umieszczania komentarzy w kodzie upewnij się, że nie zapisujesz żadnych poufnych informacji. Obejmuje to adres e-mail, hasła, parametry połączenia, informacje o aplikacji, które byłyby znane tylko przez osobę w organizacji, oraz wszelkie inne elementy, które mogą dać atakującemu przewagę w ataku na aplikację lub organizację.

W zasadzie załóżmy, że wszystko w projekcie projektowym jest publiczną wiedzą po jej wdrożeniu. Unikaj dołączania poufnych danych dowolnego rodzaju w projekcie.

Wcześniej omówiliśmy usługę Azure Key Vault. Za pomocą usługi Key Vault można przechowywać wpisy tajne, takie jak klucze i hasła, zamiast kodować je na stałe. Jeśli używasz usługi Key Vault w połączeniu z tożsamościami zarządzanymi dla zasobów platformy Azure, aplikacja internetowa platformy Azure może łatwo i bezpiecznie uzyskiwać dostęp do wartości konfiguracji wpisów tajnych bez przechowywania wpisów tajnych w kontroli źródła lub konfiguracji. Aby dowiedzieć się więcej, zobacz Zarządzanie wpisami tajnymi w aplikacjach serwera za pomocą usługi Azure Key Vault.

Implementowanie środków bezpiecznych w trybie fail-safe

Aplikacja musi mieć możliwość obsługi błędów występujących podczas wykonywania w spójny sposób. Aplikacja powinna przechwytywać wszystkie błędy i bezpiecznie lub zamknąć.

Należy również upewnić się, że błędy są rejestrowane przy użyciu wystarczającego kontekstu użytkownika w celu zidentyfikowania podejrzanych lub złośliwych działań. Dzienniki powinny być przechowywane przez wystarczający czas, aby umożliwić opóźnione analizy kryminalistyczne. Dzienniki powinny być w formacie łatwo używanym przez rozwiązanie do zarządzania dziennikami. Upewnij się, że wyzwalane są alerty dotyczące błędów związanych z zabezpieczeniami. Niewystarczające rejestrowanie i monitorowanie umożliwia atakującym dalsze systemy ataków i utrzymanie trwałości.

Korzystanie z obsługi błędów i wyjątków

Implementowanie poprawnego błędu i obsługi wyjątków jest ważną częścią kodowania defensywnego. Obsługa błędów i wyjątków ma kluczowe znaczenie dla zapewnienia niezawodności i bezpieczeństwa systemu. Błędy w obsłudze błędów mogą prowadzić do różnych rodzajów luk w zabezpieczeniach, takich jak wyciek informacji do osób atakujących i pomoc osobom atakującym zrozumieć więcej na temat platformy i projektu.

Upewnij się, że:

  • Wyjątki są obsługiwane w sposób scentralizowany, aby uniknąć zduplikowanych bloków try/catch w kodzie.

  • Wszystkie nieoczekiwane zachowania są obsługiwane w aplikacji.

  • Komunikaty wyświetlane użytkownikom nie wyciekają krytycznych danych, ale udostępniają wystarczająco dużo informacji, aby wyjaśnić problem.

  • Wyjątki są rejestrowane i zapewniają wystarczającą ilość informacji do zbadania przez zespoły śledcze lub zespoły reagowania na zdarzenia.

Usługa Azure Logic Apps zapewnia najwyższej klasy środowisko obsługi błędów i wyjątków spowodowanych przez systemy zależne. Usługa Logic Apps umożliwia tworzenie przepływów pracy w celu automatyzowania zadań i procesów integrujących aplikacje, dane, systemy i usługi w przedsiębiorstwach i organizacjach.

Korzystanie z rejestrowania i zgłaszania alertów

Rejestruj problemy z zabezpieczeniami dotyczące badań zabezpieczeń i wyzwalaj alerty dotyczące problemów, aby upewnić się, że użytkownicy wiedzą o problemach w odpowiednim czasie. Włącz inspekcję i rejestrowanie wszystkich składników. Dzienniki inspekcji powinny przechwytywać kontekst użytkownika i identyfikować wszystkie ważne zdarzenia.

Sprawdź, czy nie rejestrujesz żadnych poufnych danych przesyłanych przez użytkownika do witryny. Przykłady poufnych danych to:

  • Poświadczenia użytkownika
  • Numery ubezpieczenia społecznego lub inne informacje identyfikujące
  • Numery kart kredytowych lub inne informacje finansowe
  • Informacje o kondycji
  • Klucze prywatne lub inne dane, których można użyć do odszyfrowania zaszyfrowanych informacji
  • Informacje o systemie lub aplikacji, których można użyć do bardziej efektywnego ataku na aplikację

Upewnij się, że aplikacja monitoruje zdarzenia zarządzania użytkownikami, takie jak pomyślne i nieudane logowania użytkowników, resetowanie haseł, zmiany haseł, blokada konta i rejestracja użytkownika. Rejestrowanie tych zdarzeń pomaga wykrywać i reagować na potencjalnie podejrzane zachowanie. Umożliwia również zbieranie danych operacji, takich jak osoba, która uzyskuje dostęp do aplikacji.

Następne kroki

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