Poważne bezpieczeństwo: atak na Microsoft Office 365 z powodu słabego szyfrowania PlatoBlockchain Data Intelligence. Wyszukiwanie pionowe. AI.

Poważne zabezpieczenia: Microsoft Office 365 zaatakowany z powodu słabego szyfrowania

Nie jesteśmy do końca pewni, jak to nazwać, więc odnieśliśmy się do tego w nagłówku pod nazwą hybrydową Microsoft Office 365.

(Nazwa „Office” jako rzeczownik zbiorowy oznaczający aplikacje Microsoft do przetwarzania tekstu, arkuszy kalkulacyjnych, prezentacji i współpracy jest obecnie zabity w ciągu najbliższego miesiąca lub dwóch, aby stać się po prostu „Microsoft 365”.)

Jesteśmy pewni, że ludzie będą nadal używać poszczególnych nazw aplikacji (słowo, przewyższać, PowerPoint i przyjaciółmi) oraz przydomek apartamentu Biurowe przez wiele lat, chociaż nowicjusze w oprogramowaniu prawdopodobnie poznają go jako 365, po usunięciu wszechobecnego prefiksu Microsoft.

Jak być może wiesz, samodzielne aplikacje pakietu Office (te, które faktycznie instalujesz lokalnie, dzięki czemu nie musisz przechodzić do trybu online, aby pracować nad swoimi materiałami) zawierają własną opcję szyfrowania zapisanych dokumentów.

Ma to na celu dodanie dodatkowej warstwy bezpieczeństwa na wypadek późniejszego udostępnienia któregokolwiek z tych plików, przez przypadek lub projekt, komuś, kto nie powinien ich otrzymać – co jest zaskakująco łatwe do zrobienia przez pomyłkę podczas udostępniania załączników za pośrednictwem poczty e-mail.

O ile i dopóki nie podasz odbiorcy hasła, którego potrzebuje, aby odblokować plik, to dla niego po prostu posiekana kapusta.

Oczywiście, jeśli umieścisz hasło w treści wiadomości e-mail, nic nie zyskasz, ale jeśli choć trochę ostrożnie podchodzisz do udostępniania hasła za pośrednictwem innego kanału, zapewniłeś sobie dodatkowe bezpieczeństwo i ochronę przed włamywaczami , szpiedzy i nikczemnicy uzyskują łatwy dostęp do poufnych treści.

OME w centrum uwagi

A może masz?

Zgodnie z Badacze w fińskiej firmie WithSecure zajmującej się cyberbezpieczeństwem Twoje dane mogą być objęte znacznie mniejszą ochroną, niż można by się tego spodziewać.

Funkcja, z której korzystali testerzy, jest nazywana przez nich Szyfrowanie wiadomości Office 365lub OME w skrócie.

Nie powielaliśmy tutaj ich eksperymentów z prostego powodu, że podstawowe produkty pakietu Office, niestety, 365 nie działają natywnie w systemie Linux, którego używamy do pracy. Internetowe wersje narzędzi pakietu Office nie mają takiego samego zestawu funkcji, jak pełne aplikacje, więc jakiekolwiek wyniki, które możemy uzyskać, prawdopodobnie nie będą zgodne z tym, jak większość użytkowników biznesowych pakietu Office, ah, 365, skonfigurowała programy Word, Excel, Outlook i znajomych na laptopach z systemem Windows.

Jak opisują to badacze:

Ta funkcja jest reklamowana, aby umożliwić organizacjom wysyłanie i odbieranie zaszyfrowanych wiadomości e-mail między osobami w organizacji i poza nią w bezpieczny sposób.

Ale zwracają również uwagę, że:

Niestety wiadomości OME są szyfrowane w niezabezpieczonym trybie działania Elektronicznej Książki Kodów (EBC).

Wyjaśnienie EBC

Wytłumaczyć.

Wiele algorytmów szyfrowania, w szczególności Advanced Encryption Standard lub AES, których używa OME, są znane jako szyfry blokowe, które mieszają duże porcje danych na raz, zamiast przetwarzać poszczególne bity lub bajty po kolei.

Ogólnie rzecz biorąc, ma to pomóc zarówno w wydajności, jak i bezpieczeństwie, ponieważ szyfr ma więcej danych wejściowych do wymieszania-zmielenia-strzępienia-upłynnienia przy każdym obrocie korby kryptograficznej, która steruje algorytmem, a każdy obrót prowadzi cię dalej poprzez dane, które chcesz zaszyfrować.

Na przykład podstawowy algorytm AES zużywa 16 bajtów wejściowego tekstu jawnego (128 bitów) jednocześnie i szyfruje te dane za pomocą klucza szyfrowania, aby utworzyć 16 zaszyfrowanych bajtów wyjściowych tekstu zaszyfrowanego.

(Nie myl rozmiar bloku w klucz rozmiar – Klucze szyfrowania AES mogą mieć długość 128, 192 lub 256 bitów, w zależności od tego, jak mało prawdopodobne jest ich odgadnięcie, ale wszystkie trzy rozmiary kluczy działają na 128-bitowych blokach za każdym razem, gdy algorytm jest „podkręcany”.)

Oznacza to, że jeśli wybierzesz klucz AES (niezależnie od długości), a następnie użyjesz szyfru AES bezpośrednio na porcji danych…

…następnie za każdym razem, gdy otrzymasz tę samą porcję wejściową, dostaniesz tę samą porcję wyjściową.

Jak naprawdę ogromna książka kodów

Dlatego nazywa się ten bezpośredni tryb działania EBC, skrót od elektroniczna książka kodów, ponieważ przypomina to posiadanie ogromnej książki kodów, której można użyć jako tabeli wyszukiwania do szyfrowania i deszyfrowania.

(Pełny „książka kodów” nigdy nie mógłby zostać skonstruowany w prawdziwym życiu, ponieważ musiałbyś przechowywać bazę danych składającą się z 2128 Wpisy 16-bajtowe dla każdego możliwego klawisza.)

Niestety, zwłaszcza w przypadku danych sformatowanych komputerowo, powtarzanie niektórych fragmentów danych jest często nieuniknione, ze względu na używany format pliku.

Na przykład pliki, które rutynowo wypełniają sekcje danych, aby były ustawione w granicach 512 bajtów (wspólny rozmiar sektora podczas zapisywania na dysku) lub 4096 bajtów (wspólny rozmiar jednostki alokacji podczas rezerwowania pamięci) często tworzą pliki z długie ciągi zerowych bajtów.

Podobnie dokumenty tekstowe, które zawierają wiele schematów, takich jak nagłówki i stopki na każdej stronie lub powtarzające się wzmianki o pełnej nazwie firmy, będą zawierały wiele powtórzeń.

Za każdym razem, gdy powtarzający się fragment zwykłego tekstu akurat znajdzie się w linii 16-bajtowej granicy w procesie szyfrowania AES-ECB, pojawi się on w zaszyfrowanym wyjściu jako dokładnie ten sam szyfrogram.

Tak więc, nawet jeśli nie możesz formalnie odszyfrować pliku zaszyfrowanego tekstu, możesz być w stanie wyciągnąć z niego natychmiastowe, miażdżące bezpieczeństwo wnioskowania, dzięki temu, że wzorce w danych wejściowych (które możesz znać lub być w stanie wywnioskować, lub do odgadnięcia) są zachowywane w danych wyjściowych.

Oto przykład oparty na artykule, który opublikowaliśmy prawie dziewięć lat temu, w którym wyjaśniliśmy, dlaczego popularne obecnie stosowanie przez firmę Adobe szyfrowania w trybie EBC do „haszowania” haseł użytkowników było Niezbyt dobry pomysł:

Poważne bezpieczeństwo: atak na Microsoft Office 365 z powodu słabego szyfrowania PlatoBlockchain Data Intelligence. Wyszukiwanie pionowe. AI.
Lewo. Oryginalny obraz RGBA.
Dobrze. Dane obrazu zaszyfrowane za pomocą AES-128-ECB.

Zwróć uwagę, że białe piksele na wejściu niezawodnie tworzą powtarzalny wzór na wyjściu, a niebieskie części pozostają dość regularne, dzięki czemu struktura oryginalnych danych jest oczywista.

W tym przykładzie każdy piksel w oryginalnym pliku zajmuje dokładnie 4 bajty, więc każdy 4-piksel od lewej do prawej w danych wejściowych ma długość 16 bajtów, co jest dokładnie dopasowane do każdego 16-bajtowego bloku szyfrowania AES, podkreślając w ten sposób „efekt EBC”.


Dopasowanie wzorców szyfrogramu

Co gorsza, jeśli masz dwa dokumenty, o których wiesz, że są zaszyfrowane tym samym kluczem, a po prostu masz tekst jawny jednego z nich, możesz przejrzeć szyfrogram, który nie może odszyfruj i spróbuj dopasować fragmenty do wzorców w zaszyfrowanym tekście, które mogą odszyfrować.

Pamiętaj, że nie potrzebujesz klucza do „odszyfrowania” pierwszego dokumentu, jeśli masz go już w formie odszyfrowanej – jest to znane, co nie dziwi, jako atak ze znanym tekstem jawnym.

Nawet jeśli istnieje tylko kilka dopasowań pozornie niewinnego tekstu, który sam nie jest tajnymi danymi, wiedza, którą przeciwnik może wydobyć w ten sposób, może być kopalnią złota dla szpiegów zajmujących się własnością intelektualną, inżynierów społecznych, śledczych i nie tylko.

Na przykład, nawet jeśli nie masz pojęcia, do czego odnoszą się szczegóły dokumentu, dopasowując znane fragmenty zwykłego tekstu w wielu plikach, możesz określić, że pozornie losowy zbiór dokumentów:

  • Wszystkie zostały wysłane do tego samego odbiorcy, jeśli na górze każdego z nich jest wspólne pozdrowienie.
  • Odwołaj się do tego samego projektu, jeśli istnieje unikalny identyfikujący ciąg tekstowy, który ciągle się pojawia.
  • mają taką samą klauzulę tajności, jeśli chcesz skupić się na rzeczach, które wyraźnie mają być „bardziej tajne” niż reszta.

Co robić?

Nie używaj trybu EBC!

Jeśli używasz szyfru blokowego, wybierz tryb pracy szyfr blokowy że:

  • Obejmuje to, co jest znane jako IV lub wektor inicjujący, wybierane losowo i niepowtarzalnie dla każdej wiadomości.
  • Celowo organizuje proces szyfrowania aby powtarzające się dane wejściowe za każdym razem wychodziły inaczej.

Jeśli używasz AES, prawdopodobnie chcesz teraz wybrać tryb: AES-GCM (tryb licznika Galois), który nie tylko używa IV do tworzenia za każdym razem innego strumienia danych szyfrowania, nawet jeśli klucz pozostaje ten sam, ale także oblicza to, co jest znane jako Kod uwierzytelniania wiadomości (MAC) lub kryptograficzna suma kontrolna, w tym samym czasie co szyfrowanie lub odszyfrowywanie danych.

AES-GCM oznacza nie tylko, że unikasz powtarzających się wzorców zaszyfrowanego tekstu, ale także zawsze otrzymujesz „sumę kontrolną”, która powie Ci, czy dane, które właśnie odszyfrowałeś, zostały po drodze naruszone.

Pamiętaj, że oszust, który nie wie, co właściwie oznacza zaszyfrowany tekst, może mimo wszystko nakłonić cię do zaufania do niedokładnego odszyfrowania, nie wiedząc (ani nie dbając o to), jaki rodzaj niepoprawnego wyniku otrzymasz.

MAC, który jest obliczany podczas procesu deszyfrowania, na podstawie tego samego klucza i IV, pomoże upewnić się, że wiesz, że otrzymany zaszyfrowany tekst jest prawidłowy, a zatem prawie na pewno odszyfrowałeś to, co zostało pierwotnie umieszczone na drugim końcu.

Alternatywnie użyj dedykowanego szyfr strumieniowy który tworzy pseudolosowy strumień kluczy bajt po bajcie, który umożliwia szyfrowanie danych bez konieczności przetwarzania 16 bajtów (lub innego rozmiaru bloku) naraz.

AES-GCM zasadniczo konwertuje AES na szyfr strumieniowy i dodaje uwierzytelnianie w postaci MAC, ale jeśli szukasz dedykowanego szyfru strumieniowego zaprojektowanego specjalnie do pracy w ten sposób, sugerujemy ChaCha20-Poly1305 (część Poly1305 to MAC), jak opisano w RFC 8439.

Poniżej pokazaliśmy, co otrzymaliśmy za pomocą AES-128-GCM i ChaCha20-Poly1305 (tutaj odrzuciliśmy kody MAC), wraz z „obrazem” składającym się z 95,040 330 bajtów RGBA (72 × 4 przy XNUMX bajtach na piksel) z Generator pseudolosowy jądra Linuksa.

Pamiętaj, że tylko dlatego, że dane wyglądają na nieustrukturyzowane, nie oznacza to, że są naprawdę losowe, ale jeśli nie wyglądają losowo, a mimo to twierdzą, że są zaszyfrowane, równie dobrze możesz założyć, że pozostała jakaś struktura i że szyfrowanie jest podejrzany:

Co dzieje się dalej?

Według WithSecureMicrosoft nie planuje naprawiać tej „luki”, najwyraźniej ze względu na wsteczną kompatybilność z Office 2010…

Starsze wersje pakietu Office (2010) wymagają AES 128 EBC, a dokumenty pakietu Office są nadal chronione w ten sposób przez aplikacje pakietu Office.

…oraz…

Raport [badaczy WithSecure] nie został uznany za spełniający wymagania dotyczące obsługi bezpieczeństwa, ani nie jest uważany za naruszenie. Nie dokonano żadnej zmiany kodu, więc nie wydano CVE dla tego raportu.

Krótko mówiąc, jeśli obecnie polegasz na OME, możesz rozważyć zastąpienie go narzędziem do szyfrowania poufnych wiadomości innej firmy, które szyfruje dane niezależnie od aplikacji, które utworzyły te wiadomości, a zatem działa niezależnie od szyfrowania wewnętrznego kod z zakresu Office.

W ten sposób możesz wybrać nowoczesny szyfr i nowoczesny tryb działania szyfrowania, bez konieczności wracania do starego kodu odszyfrowywania wbudowanego w Office 2010.


JAK ZROBILIŚMY OBRAZY W ARTYKULE Zacznij od sop330.png, który możesz utworzyć dla siebie, przycinając oczyszczone logo SOPHOS z najwyższego obrazu, usuwając 2-pikselową niebieską granicę i zapisując w formacie PNG.  Obraz powinien mieć rozmiar 330x72 pikseli.
 Konwersja do RGBA za pomocą ImageMagick: $ convert sop330.png sop.rgba Wyjście to 330x72 piksele x 4 bajty/piksel = 95,040 XNUMX bajtów.
 === Szyfrowanie przy użyciu Lua i biblioteki LuaOSSL (Python ma bardzo podobne wiązanie OpenSSL): -- ładuj dane > fdat = misc.filetostr('sop.rgba') > fdat:len() 95040 -- twórz obiekty szyfrujące > aes = openssl.cipher.new('AES-128-ECB') > gcm = openssl.cipher.new('AES-128-GCM') > cha = openssl.cipher.new('ChaCha20-Poly1305') -- zainicjuj hasła i kody IV -- AES-128-ECB wymaga hasła 128-bitowego, ale nie IV -- AES-128-GCM wymaga hasła 128-bitowego i 12-bajtowego IV -- ChaCha20 wymaga hasła 256-bitowego i a 12-bajtowy IV > aes:encrypt('THEPASSWORDIS123') > gcm:encrypt('THEPASSWORDIS123','andkrokeutiv') > cha:encrypt('THEPASSWORDIS123THEPASSWORDIS123','qlxmtosh476g') -- zaszyfruj dane pliku za pomocą trzech szyfrów > aesout = aes:final(fdat) > gcmout = gcm:final(fdat) > chaout = cha:final(fdat) -- szyfr strumieniowy generuje dane wyjściowe bajt po bajcie, -- więc tekst zaszyfrowany powinien mieć taką samą długość jak tekst jawny > gcmout:len() 95040 > chaout:len() 95040 -- nie będziemy tutaj używać kodów MAC z GCM i Poly1305, -- ale każdy szyfr generuje 128-bitową (16-bajtową) „suma kontrolną” — używaną do uwierzytelnienia odszyfrowywania po jego zakończeniu, — do wykrycia, czy wejściowy tekst zaszyfrowany został uszkodzony lub zhakowany — (MAC zależy od klucza, więc atakujący nie może tego sfałszować) > base.hex(gcm:getTag(16)) a70f204605cd5bd18c9e4da36cbc9e74 > base.hex(cha:getTag(16)) a55b97d5e9f3cb9a3be2fa4f040b56ef -- utwórz /95040 "image" > misc.filetostr('/dev/random',#fdat) -- zapisz je wszystkie - zauważ, że jawnie obcinamy kod AES-ECB -- dane wyjściowe szyfru blokowego do dokładnej wymaganej długości obrazu, ponieważ -- EBC potrzebuje dopełnienia, aby dopasować rozmiar wejściowy z rozmiarem bloku > misc.strtofile(aesout:sub(1,#fdat),'aes.rgba') > misc.strtofile(gcmout,'gcm.rgba') > misc.strtofile(chaout,'cha. rgba') > misc.strtofile(rndout,'rnd.rgba') === Aby załadować pliki do zwykłej przeglądarki obrazów, może być konieczne bezstratne przekonwertowanie ich z powrotem do formatu PNG: $ convert -depth 8 -size 330x72 aes .rgba aes.png $ przelicz -głębokość 8 -rozmiar 330x72 gcm.rgba gcm.png $ convert -depth 8 -size 330x72 cha.rgba cha.png $ convert -depth 8 -size 330x72 rnd.rgba rnd.png === Biorąc pod uwagę, że proces szyfrowania miesza wszystkie cztery bajty w każdym pikselu RGBA , wynikowy obraz ma zmienną przezroczystość (A = alfa, skrót od transparency).
 Twoja przeglądarka obrazów może zdecydować się na wyświetlenie tego rodzaju obrazu z tłem w szachownicę, które łudząco wygląda jak część obrazu, ale nim nie jest.  Dlatego użyliśmy niebieskiego Sophos z oryginalnego obrazu jako tła dla zaszyfrowanych plików, aby ułatwić ich przeglądanie.  Ogólny niebieski odcień nie jest zatem częścią danych obrazu. 

Znak czasu:

Więcej z Nagie bezpieczeństwo