Integralność kodu platformy

Ważnym wyzwaniem w obsłudze złożonego systemu, takiego jak Microsoft Azure, jest zapewnienie, że w systemie działa tylko autoryzowane oprogramowanie. Nieautoryzowane oprogramowanie stwarza kilka zagrożeń dla każdej firmy:

  • Zagrożenia bezpieczeństwa, takie jak dedykowane narzędzia do ataków, niestandardowe złośliwe oprogramowanie i oprogramowanie innych firm ze znanymi lukami w zabezpieczeniach
  • Zagrożenia związane ze zgodnością, gdy zatwierdzony proces zarządzania zmianami nie jest używany do wprowadzenia nowego oprogramowania
  • Ryzyko jakości oprogramowania opracowanego zewnętrznie, które może nie spełniać wymagań operacyjnych firmy

Na platformie Azure stoimy przed tym samym wyzwaniem i ze znaczną złożonością. Mamy tysiące serwerów z oprogramowaniem opracowanym i obsługiwanym przez tysiące inżynierów. Przedstawia to dużą powierzchnię ataków, której nie można zarządzać tylko za pośrednictwem procesów biznesowych.

Dodawanie bramy autoryzacji

Platforma Azure korzysta z zaawansowanego procesu inżynieryjnego, który implementuje bramy w zakresie zabezpieczeń, zgodności i jakości wdrażanego oprogramowania. Ten proces obejmuje kontrolę dostępu do kodu źródłowego, przeprowadzanie przeglądów kodu równorzędnego, przeprowadzanie analizy statycznej luk w zabezpieczeniach, po cyklu projektowania zabezpieczeń (SDL) firmy Microsoft oraz przeprowadzanie testów funkcjonalnych i jakościowych. Musimy zagwarantować, że wdrożone oprogramowanie przeleciało przez ten proces. Integralność kodu pomaga nam w osiągnięciu tej gwarancji.

Integralność kodu jako brama autoryzacji

Integralność kodu to usługa poziomu jądra, która stała się dostępna w Windows Server 2016. Integralność kodu może stosować ścisłe zasady kontroli wykonywania za każdym razem, gdy sterownik lub dynamicznie połączona biblioteka (DLL) jest ładowana, plik binarny wykonywalny jest wykonywany lub jest uruchamiany skrypt. Podobne systemy, takie jak DM-Verity, istnieją dla systemu Linux. Zasady integralności kodu składają się z zestawu wskaźników autoryzacji, certyfikatów podpisywania kodu lub skrótów plików SHA256 , które jądra pasuje przed załadowaniem lub wykonaniem pliku binarnego lub skryptu.

Integralność kodu umożliwia administratorowi systemu zdefiniowanie zasad, które autoryzują tylko pliki binarne i skrypty podpisane przez określone certyfikaty lub pasują do określonych skrótów SHA256. Jądro wymusza te zasady, blokując wykonywanie wszystkich elementów, które nie spełniają zasad zestawu.

Problemem z zasadami integralności kodu jest to, że chyba że zasady są całkowicie poprawne, może zablokować krytyczne oprogramowanie w środowisku produkcyjnym i spowodować awarię. Biorąc pod uwagę ten problem, można zapytać, dlaczego nie wystarczy, aby użyć monitorowania zabezpieczeń do wykrywania, gdy nieautoryzowane oprogramowanie zostało wykonane. Integralność kodu ma tryb inspekcji, który zamiast uniemożliwiać wykonywanie, może otrzymywać alerty po uruchomieniu nieautoryzowanego oprogramowania. Alerty z pewnością mogą dodać wiele wartości w rozwiązywaniu zagrożeń związanych z zgodnością, ale w przypadku zagrożeń bezpieczeństwa, takich jak oprogramowanie wymuszające okup lub niestandardowe złośliwe oprogramowanie, opóźnienie odpowiedzi przez nawet kilka sekund może być różnicą między ochroną a przeciwnikiem, który zyskuje trwały przyczółek w twojej flocie. Na platformie Azure zainwestowaliśmy znacząco, aby zarządzać ryzykiem integralności kodu przyczyniającym się do awarii klienta.

Proces kompilacji

Jak wspomniano powyżej, system kompilacji platformy Azure ma bogaty zestaw testów, aby zapewnić bezpieczeństwo i zgodność zmian oprogramowania. Po zakończeniu weryfikacji kompilacji system kompilacji podpisuje go przy użyciu certyfikatu kompilacji platformy Azure. Certyfikat wskazuje, że kompilacja przeszła przez cały proces zarządzania zmianami. Ostateczny test, który przechodzi kompilacja, nosi nazwę Code Signature Validation (CSV). Plik CSV potwierdza, że nowo utworzone pliki binarne spełniają zasady integralności kodu przed wdrożeniem w środowisku produkcyjnym. Daje to pewność, że nie będziemy powodować awarii klienta z powodu niepoprawnie podpisanych plików binarnych. Jeśli plik CSV wykryje problem, przerwy kompilacji i odpowiednie inżynierowie zostaną stronicowane w celu zbadania i rozwiązania problemu.

Bezpieczeństwo podczas wdrażania

Mimo że wykonujemy wolumin CSV dla każdej kompilacji, nadal istnieje prawdopodobieństwo, że w środowisku produkcyjnym wystąpiła pewna zmiana lub niespójność, która może spowodować awarię związaną z integralnością kodu. Na przykład maszyna może uruchamiać starą wersję zasad integralności kodu lub być w złej kondycji, która generuje fałszywie dodatnie wyniki w integralności kodu. (Na dużą skalę platformy Azure widzieliśmy to wszystko). W związku z tym musimy nadal chronić przed ryzykiem awarii podczas wdrażania.

Wszystkie zmiany na platformie Azure są wymagane do wdrożenia w ramach serii etapów. Pierwsze z nich to wewnętrzne wystąpienia testowania platformy Azure. Następny etap jest używany tylko do obsługi innych zespołów produktów firmy Microsoft. Ostatni etap obsługuje klientów innych firm. Po wdrożeniu zmiany następuje przejście do każdego z tych etapów i wstrzymanie w celu zmierzenia kondycji etapu. Jeśli zmiana nie ma negatywnego wpływu, zostanie przeniesiona do następnego etapu. Jeśli wprowadzimy nieprawidłową zmianę zasad integralności kodu, zmiana zostanie wykryta podczas tego etapowego wdrożenia i wycofana.

Reagowanie na zdarzenia

Nawet w przypadku tej warstwowej ochrony nadal jest możliwe, że niektóre serwery w floty mogą blokować prawidłowo autoryzowane oprogramowanie i powodować problem klienta, jeden z naszych najgorszych scenariuszy. Nasza ostatnia warstwa obrony jest badaniem ludzkim. Za każdym razem, gdy integralność kodu blokuje plik, zgłasza alert dla inżynierów wzywanych do zbadania. Alert pozwala nam rozpocząć badania zabezpieczeń i interweniować, niezależnie od tego, czy problem jest wskaźnikiem rzeczywistego ataku, fałszywie dodatniego czy innej sytuacji wpływającej na klienta. Minimalizuje to czas potrzebny na ograniczenie problemów związanych z integralnością kodu.

Następne kroki

Dowiedz się, jak Windows 10 używa konfigurowalnej integralności kodu.

Aby dowiedzieć się więcej o tym, co robimy, aby zwiększyć integralność i bezpieczeństwo platformy, zobacz: