Jeśli ktoś niepowołany uzyska dostęp do zaszyfrowanych archiwów, prawdopodobnie będzie mógł dowiedzieć się, co znajduje się w środku. Nie jest to aż tak poważna podatność, która umożliwiałaby odszyfrowanie archiwum albo odzyskanie hasła bądź klucza, ale w pewnych okolicznościach atakujący będzie mógł podejrzeć tekst znajdujący się w archiwum w postaci niezaszyfrowanej i to bez względu na długość czy też entropię użytego hasła — w pewnych okolicznościach 7-ZIP stosuje konfigurację szyfru, która może ułatwić odzyskanie pierwszych 16 bajtów danych zaszyfrowanego archiwum.
Teoretycznie im dłuższe i trudniejsze hasło zawierające znaki z tablicy ASCII i znaki specjalne, tym trudnej je złamać metodą słownikową. Oczywiście może się zdarzyć i tak, że hasła w ogóle nie da się zcrackować. W programie 7-ZIP w pewnych okolicznościach wcale nie trzeba uciekać się do metody siłowej, która może być nieskuteczna przy wysokiej entropii hasła, aby dowiedzieć się, co znajduje się w zaszyfrowanym archiwum. Michał Stanek udowodnił to, analizując szyfrowanie programu 7-ZIP, a także jego odpowiednika niewymagającego instalacji (portable) oraz wersji p7zip dla Linux/Unix, który jest forkiem 7-Zip. Istnieją również inne forki i zdaniem Michała — wszystkie cierpią na ten sam problem. Znaleziona przez eksperta podatność ma około 13 lat.
Tak komentuje Michał Stanek, developer kernela FreeBSD:
Jest to podatność w generatorze liczb losowych użytym w 7-Zip, a dokładniej w tworzeniu seeda do RNG (generatora liczb losowych, dod. red). Wynik RNG jest używany przy „generacji IV” (wektora inicjalizacyjnego, dod. red) do AES-CBC. Wektor inicjalizacyjny (IV) powinien być kryptograficznie losowy żeby gwarantował bezpieczeństwo AES-CBC. Dokładniej chodzi o to, że jeśli IV zostanie użyty dwa razy z tym samym kluczem i tym samym tekstem czystym to wynik szyfrowania będzie identyczny, czyli efekt będzie taki, jakby dla pierwszego bloku używać trybu AES-ECB, który jest niebezpieczny — na podstawie obserwacji tekstu zaszyfrowanego można dowiedzieć się czegoś (czasem dużo) o tekście niezaszyfrowanym.
Ta podatność nie pozwoli na odszyfrowanie archiwum albo odzyskanie hasła/klucza, ale w przypadku zduplikowania się seeda (co jest bardziej prawdopodobne niż sądził autor [7-ZIPa, dod. redakcja], z racji użycia wartości o niskiej entropii do jego stworzenia) spowoduje zduplikowanie IV, co z kolei będzie miało wpływ na to, że dwa teksty zaszyfrowane będą miały ten sam pierwszy blok. A więc będzie można potencjalnie wywnioskować jaki jest tekst czysty w pierwszych 16 bajtach zaszyfrowanego archiwum. Bez względu na użyte hasło.
O wadach ECB więcej tutaj:
W jakich okolicznościach możliwe jest sprawdzenie pierwszych 16 bajtów w bloku danych?
Autor wspomina, że sprawdzał wyłącznie archiwum z rozszerzeniem .7z. Nie są zatem znane podatności na pozostałe formaty obsługiwane przez program, w tym popularne rozszerzenie .ZIP. Najbardziej podatne są systemy inne niż Windows, na których tworzenie seeda (ziarno, początkowa wartość inicjowana przez generator liczb pseudolosowych) jest o rzędy wielkości słabsze. Również starsze systemy Windows są mniej użyteczne przy tworzeniu zaszyfrowanego archiwum, ponieważ mogą mieć mniej dokładny zegar czasu rzeczywistego użyty do tworzenia seeda. Powtórzenie seeda jest mało prawdopodobne, ale ekspert wskazuje na pewną sytuację: np. przy równoległej operacji kompresji/szyfrowania 7-ZIPem kilku archiwów. Z tym że nawet przy powtórzeniu seeda, informacje, które może pozyskać atakujący, nie są wielkie, więc nie ma możliwości odszyfrowania całego archiwum.
W innych wariantach użycia AES-CBC losowość IV jest jeszcze bardziej istotna, ponieważ przewidywalność IV może oznaczać podatność na ataki typu BEAST — jeśli atakujący ma możliwość podrzucać ofierze czysty tekst do zaszyfrowania i obserwować powstały tekst zaszyfrowany. Wtedy można odszyfrować wszystko. Natomiast w przypadku 7-ZIP ciężko sobie wyobrazić taki wariant (encryption oracle).
— dodaje ekspert, Michał Stanek.
Czy 7-ZIP jest bezpieczny?
Michał Stanek wyjaśnił, że użyty RNG jest rażącą niedbałością autorów 7-ZIP i pochodzi z archaicznego kodu, przez co nie zmienił się przez kilkanaście lat. Jakość tego kryptograficznego kodu pozostawia wiele do życzenia, sugerując na obecność wielu innych podatności w programie 7-ZIP:
Inny użytkownik Twitter po moim poście zanalizował funkcję tworzenia klucza z hasła i okazało się, że użyta jest przestarzała funkcja z bardzo archaicznymi ustawieniami. To oznacza, że odporność 7-ZIPa na ataki jest niska w przypadku słabych haseł. Dzisiaj do 'key derivation’ powinno się używać algorytmów bcrypt/scrypt/Argon, które znacznie spowalniają i utrudniają ataki brute-force + rainbow tables.
— komentuje Michał Stanek.
Program 7-ZIP ma publicznie otwarty kod. Zwolennicy open-source mogliby powiedzieć, że skoro kod jest dostępny, to każdy może go przeanalizować i poinformować społeczność o lukach. Co Michał Stanek sądzi o open-source?
Zajmuję się otwartym kodem na co dzień. Jestem developerem kernela FreeBSD i jestem jego zwolennikiem. Natomiast jak widać w powyższym przypadku, a także ostatnich bugów typu Heartbleed, sama otwartość kodu nie gwarantuje bezpieczeństwa w żadnym stopniu. Czasem może być wręcz odwrotnie. Zamknięty kod może być dużo lepiej zabezpieczony, jeśli duża korporacja zapłaciła dziesiątki-setki-miliony dolarów by zatrudnić zespół wykwalifikowanych specjalistów do jego stworzenia.
Oprogramowanie 7-Zip już wcześniej miało kiepską renomę w kwestii bezpieczeństwa. Badacz powiedział nam, że „autor 7-ZIPa wydaje się oporny i na początku nie akceptował argumentów odnośnie do słabości RNG”. Okazuje się, że p7zip, który jest portem 7-Zipa na wspomniane systemy, został porzucony przez opiekuna kodu kilka lat temu, więc nie jest aktualizowany. W związku z tym może zawierać luki pozwalające na zdalne wykonanie kodu.
Badania przeprowadzone przez eksperta z Polski nie wskazują jednoznacznie, aby zaprzestać używania 7-ZIP. Analiza sugeruje, że w pewnych okolicznościach zespół profesjonalistów może sprawdzić, co znajduje się w zaszyfrowanym archiwum. Nie jest wykluczone, że 7-ZIP posiada więcej nieudokumentowanych podatności i to znacznie poważniejszych odkrycie Michała.
Problem z szyfrowaniem w 7-ZIP został zgłoszony na forum społeczności. Dyskusje na Sourceforge oraz na Twitterze toczą się dalej. Nie wiadomo czy i kiedy (i czy poprawnie) błąd w oprogramowaniu zostanie naprawiony.
Czy ten artykuł był pomocny?
Oceniono: 2 razy