Temat Pegasusa jest niezwykle obszerny. Dzisiaj zaprosiliśmy eksperta ekosystemu Apple, Wojciecha Regułę z firmy SecuRing, by odpowiedział na pytania dotyczące obecności i wykrywania Pegasusa na iPhone’ach. Oddajemy zatem głos fachowcowi.
Ostatnimi czasy dużo słyszy się o infekcjach oprogramowaniem szpiegującym Pegasus, co spowodowało pojawienie się wielu nieprawdziwych informacji. Stąd, na prośbę redaktora naczelnego Adama, zdecydowałem się napisać dla Was artykuł precyzujący rozmaite detale techniczne. Celem tego artykułu nie jest określenie, z jakim prawdopodobieństwem ktoś był lub nie był zainfekowany. Tekst nie ma charakteru politycznego, jest jedynie ekspercką opinią na tematy wyłącznie techniczne. W razie pytań – zapraszam do kontaktu, będziemy starali się aktualizować artykuł.
Jak dochodzi do infekcji telefonu?
Zgodnie z instrukcją Pegasusa z 2015 roku istnieje kilka dróg infekcji. Najwygodniejsze są oczywiście te w pełni zdalne. Nie ma tutaj wątpliwości, że Pegasus jest w stanie zaatakować iPhone’a za pomocą tzw. podatności zero-click, czyli takich, w których ofiara nie musi klikać w żaden link czy inną aplikację.
Słyszałem/-am, że Pegasus infekuje przez WhatsAppa. Czy jeśli korzystam tylko z iMessage to jestem bezpieczny/-a?
Nie. Ostatnia publikacja Google Project Zero donosi, że NSO (producent Pegasusa) był w posiadaniu exploita potrafiącego infekować iPhone’y poprzez fabrycznie wgraną aplikację iMessage. Aby przejąć telefon ofiary, wystarczyło więc znać jej numer telefonu albo jej AppleID (e-mail).
Więcej informacji: https://googleprojectzero.blogspot.com/2021/12/a-deep-dive-into-nso-zero-click.html
Jak to możliwe, że iMessage jest podatne? Przecież Apple ostatnio je wzmocniło.
W iOS 14 Apple dokonało istotnego utwardzenia aplikacji iMessage. Wprowadziło mechanizm o nazwie Blast Door. Mechanizm faktycznie utrudnia exploitację, ponieważ teraz za przetwarzanie niezaufanych danych odpowiada głęboko osandboxowany serwis napisany w języku Swift. O Swifcie wspominam dlatego, że w przeciwieństwie do Objective-C nie jest on uważany za podatny na ataki typu memory corruption. Nie jest to do końca prawda, ale przyjmijmy, że Swift znacząco utrudnia tego typu ataki. Odpowiadając więc na pytanie, dlaczego exploitacja była możliwa – ostatni atak wykorzystywał niepoprawne parsowanie obrazków GIF. A to parsowanie odbywa się w procesie o nazwie IMTranscoderAgent, a nie w sandboxowanym BlastDoor.
Więcej informacji: https://googleprojectzero.blogspot.com/2021/01/a-look-at-imessage-in-ios-14.html
O co chodzi z tym restartowaniem telefonu?
Dużo słyszy się o tym, że Pegasus nie jest w stanie przetrwać restartu. Wynika to z tego, że ze względu na budowę systemu operacyjnego iOS trudno jest uzyskać tzw. persistence, czyli właśnie zdolność do przetrwania wyłączenia i włączenia urządzenia. Dzieje się tak, ponieważ system operacyjny wraz z jego usługami przechowywany jest na partycji, która jest montowana w trybie tylko do odczytu. Bez dodatkowej podatności nie można jej tak łatwo przemontować do trybu umożliwiającego jej modyfikację.
Modyfikacja aplikacji zainstalowanych przez użytkownika też nie jest zadaniem łatwym, ponieważ naruszyłoby to ich podpis cyfrowy. To z kolei uniemożliwiłoby ich uruchomienie, więc exploit by się nie wykonał.
Podsumowując, restartowanie telefonu wymagać będzie od operatora Pegasusa ponownej infekcji telefonu.
Więcej informacji: https://i.blackhat.com/eu-18/Thu-Dec-6/eu-18-Bai-The-Last-Line-Of-Defense-Understanding-And-Attacking-Apple-File-System-On-IOS.pdf
Czy faktycznie nie ma możliwości, aby złośliwe oprogramowanie przetrwało restart?
Zacznijmy od cennika Zerodium, czyli firmy, która kupuje złośliwe oprogramowanie. Interesować nas będzie podatność typu iOS FCP, czyli iOS Full Chain with Persistence:
Jak widać, taka podatność jest warta do $2,000,000. Sporo, a pamiętajmy, że wymaga ona dalszej obróbki, czyli dostosowania do złośliwego oprogramowania. A jak to wygląda w praktyce? Ostatnio niemiecki badacz bezpieczeństwa Linus Henze opublikował swoje badania, które udowodniły, że uzyskanie tzw. persistence jest możliwe. Istnieje więc szansa, że Pegasus lub jego odpowiedniki rozwijane przez inne organizacje mogą mieć dostęp do tego typu podatności. Restart telefonu na pewno utrudnia przeżycie złośliwemu oprogramowaniu, ale nie zbija ryzyka do zera.
Więcej informacji: https://zerodium.com/program.html, https://github.com/LinusHenze/Fugu14/blob/master/Writeup.pdf
Czy dioda kamery/mikrofonu zawsze będzie włączona, gdy ktoś będzie mnie nagrywał/podsłuchiwał?
Zgodnie z opisem Apple włączenie kamery/mikrofonu powinno spowodować włączenie odpowiedniej diody:
Okazuje się jednak, że system iOS posiada usługi mające specjalne uprawnienia, które, no cóż, nie włączają wyżej wspomnianej diody. Nic nie stoi na przeszkodzie, aby złośliwe oprogramowanie, które i tak ma pełen dostęp do jądra systemowego, po prostu nadało sobie takie uprawnienia i podsłuchiwało nas bez włączania podejrzanej diody.
Więcej informacji: https://support.apple.com/pl-pl/HT211876
Jak mogę wykryć Pegasusa na swoim iPhonie?
Zacznijmy może od tego, że NSO (twórca Pegasusa) posiada dostęp do internetu. Próbki, które są publicznie dostępne w sieci, pewnie zostały już przez nich przejrzane. Możemy więc spodziewać się, że nowe infekcje będą niewykrywalne przez dostępne publicznie narzędzia. Czy nie ma więc sensu wykrywać Pegasusa? Tego nie powiedziałem. Atakujący mogą przecież używać starszych wersji Pegasusa lub nasz telefon mógł być zainfekowany w przeszłości. W sieci zostało opublikowane narzędzie przeznaczone do tego celu, ale nie jest ono proste w użyciu. Wymaga stworzenia szyfrowanej kopii zapasowej telefonu na komputerze lub przeprowadzenia modyfikacji systemowej typu jailbreak i zgrania dysku urządzenia. Nie jest więc to rozwiązanie wygodne dla osób, które chcą szybko sprawdzić swój telefon w miejscu, do którego nie mają pełnego zaufania. Osobiście miałbym opory w pozwoleniu komuś na wykonanie pełnej kopii zapasowej mojego urządzenia. Dla majsterkowiczów zostawiam jednak linki:
Czy da się wykrywać Pegasusa z poziomu zainstalowanej aplikacji?
Dostępne publicznie IoC (Indicators of Compromise), czyli wskaźniki infekcji, to głównie:
- pliki płaskie (zazwyczaj przechowujące cache z domenami, kontaktami),
- procesy.
Tutaj pojawia się problem. Otóż każda zainstalowana aplikacja jest w systemie iOS ograniczona sandboxem. Ma ona więc bardzo ograniczone możliwości weryfikacyjne. Teoretycznie, znając dokładną ścieżkę pliku płaskiego, jesteśmy w stanie sprawdzić, czy takowy istnieje czy nie. Nie jesteśmy w stanie jednak sprawdzić jego zawartości. Czyli odpada nam weryfikacja np. cache’u TCC pod kątem analizy uzyskiwania dostępu do kamery czy mikrofonu przez złośliwe oprogramowanie.
Podobnie sprawa ma się z procesami. Kiedyś system iOS umożliwiał uzyskanie pełnej listy procesów uruchomionych na urządzeniu. Taka funkcjonalność została jednak ograniczona przez Apple dla aplikacji. Wynika to oczywiście z dbałości o prywatność użytkowników. Aplikacje nadużywały ten mechanizm do analizy, jakie inne aplikacje są zainstalowane na telefonie. Co ciekawe, listę procesów uruchomionych na iPhonie można uzyskać po podłączeniu telefonu do komputera. Nie wymaga to wykonania kopii zapasowej ani jailbreaka.
Więcej informacji: https://frida.re/docs/frida-ps/
Czy wykrywacze Pegasusa dostępne w App Store mają sens?
Po przeczytaniu ostatniego pytania częściowo znasz już odpowiedź na to pytanie. Dostępne w App Store wykrywacze Pegasusa technicznie nie mają dużych szans na jego wykrycie z wielu powodów. Jednak oferują one także zazwyczaj wykrywanie modyfikacji systemowej typu jailbreak oraz innych wskaźników mogących świadczyć o infekcji telefonu, np. innym złośliwym oprogramowaniem. Na sam koniec chciałbym jednak bardzo wyraźnie zaznaczyć, że złośliwe oprogramowanie będzie miało zawsze przewagę nad tego typu rozwiązaniami. Nawet najlepiej napisana aplikacja-wykrywacz może zostać oszukana przez dobrze napisane złośliwe oprogramowanie. A wierzcie mi, w mojej pracy niejednokrotnie zdarzało mi się takie “złośliwe” oprogramowanie przygotowywać, aby dokonywać analiz bezpieczeństwa np. aplikacji bankowych.
O autorze
Wojciech Reguła, Head of Mobile Security @ SecuRing
Specjalizuje się w bezpieczeństwie aplikacji w środowisku Apple. Stworzył otwartoźródłową bibliotekę iOS Security Suite, pozwalającą na sprawdzenie bezpieczeństwa urządzenia iOS z perspektywy aplikacji. Jest MVP Bugcrowda, znajdował błędy w Apple, Facebooku, Malwarebytes, Slacku, Atlassian i innych. W wolnym czasie prowadzi infosec bloga wojciechregula.blog. Swoje badania prezentował na m.in. Oh My H@ck (Warszawa), Black Hat (Las Vegas, USA), Objective by The Sea (Hawaje, USA), AppSec Global (Tel Aviv, Izrael), AppSec EU (Londyn, Wielka Brytania), CONFidence (Kraków), BSides (Warszawa).
Komentarze
Kawał dobrej roboty!
Pegasus RC17 (takiego posiadam) jest instalowany jako aplikacja e-SIM wgrywana do telefonu z … karty SIM. Operator VIRGIN, a prawdopodobnie wielu innych zostawiają sobie furtkę w karcie SIM. Backdoor ten pozwala im wgrać do telefonu cokolwiek im się podoba.
Chyba tylko idiota nie zauważył że telefon „rozpoznaje” kartę tylko przy starcie. To bzdura, telefony po prostu bootują się z kart SIM. Nie ma absaolutnie żadnej możliwości aby uchronić się przed tego typu atakiem (wektor boot SIM –> e-SIM –> boot –> Start systemu). Gdy uruchamiacie telefon zastanówcie się chwilę, dlaczego nie startuje w 2 sekundy? Tak, tyle trwa przeładowanie pamięci. Nie ma absolutnie żadnego powodu aby telefon startował 10 razy dłużej.
Trzeba zauważyć że obecnie standardem działania jest atak przez e-SIM, każde wykonywane przez was połączenie telefoniczne jest przekierowywane przez e-SIM (zupełnie inny numer tel.) następnie do abonenta którego numer wybraliście. Gdy ktoś dzwoni do Was, odbywa się to odwrotnie.
Przecież się uruchomi bez karty sim też, czasem używam starego smarta jako radia
„Zacznijmy może od tego, że NSO (twórca Pegasusa) posiada dostęp do internetu” – nie ma żadnych dowodów, że NSO ma dostęp do internetu. To zwykłe spekulacje i próba dopasowania tez do teorii.
great