Wolne oprogramowanie i kontrola są kluczem do oprogramowania, któremu możemy zaufać

Sprawdzanie oprogramowania jest niezbędne do zrozumienia, co dana część oprogramowania tak naprawdę robi. Wolne oprogramowanie oznacza, że wszyscy użytkownicy mają zagwarantowaną możliwość pełnego sprawdzenia kodu źródłowego, na którym polegają. Branża cyberbezpieczeństwa opiera się na badaniu oprogramowania w celu znalezienia złośliwego oprogramowania i zbudowania obrony. Skanery złośliwego oprogramowania używają dużych zbiorów charakterystycznych sygnatur oprogramowania do skanowania miliardów urządzeń, podczas gdy znalezienie nowych ataków wymaga audytu kodu, technicznej analizy i kryminalistyki. Jest to najbardziej znana dziedzina inspekcji oprogramowania. Istnieją również wolontariusze, naukowcy i organizacje społeczeństwa obywatelskiego poszukujące do śledzenia, ukierunkowanych ataków, uzależniających ciemnych wzorców, kapitalizmu inwigilacyjnego i innych nieetycznych praktyk. Społeczność F-Droid jest również zbudowana na kontroli, upewniając się, że wysyłamy wolne oprogramowanie i oznaczone Niepożądane funkcje.

Niektórzy programiści opisują funkcje, ale pomijają kluczowe szczegóły. Może to być zwykłe niedopatrzenie, albo mogą wiedzieć, że użytkownicy będą niezadowoleni, więc starają się trzymać te szczegóły z dala od opinii publicznej. Nawet programiści, którzy ciężko pracują, aby być przejrzystymi i uczciwie służyć swoim użytkownikom, mogą zostać złapani w pułapkę. Mamy ogromne branże, które każą programistom dołączać do swoich aplikacji wszelkiego rodzaju biblioteki i usługi, ponieważ poprawi to funkcjonalność lub proces tworzenia.

  • „Znalezienie możliwości generowania przychodów nie powinno być trudne!”
  • “Świetne oprogramowanie do gromadzenia danych pozwala zmaksymalizować produktywność!”
  • “Monetyzacja aplikacji to sposób, który pomaga zarabiać na aplikacji mobilnej bez pobierania za nią opłat.”

Te często zawierają rzeczy, których użytkownicy nie chcą. To, co te branże tak naprawdę mówią, to: zbieraj jak najwięcej danych osobowych, śledź użytkowników, zaczepiaj ich uzależniając, od ciemnych wzorców i domagaj się ich uwagi, aby pokazać im jak najwięcej reklam. To właśnie nad tym pracujemy, aby ujawnić, i budujemy narzędzia, abyśmy byli bardziej skuteczni i więcej osób mogło się zaangażować.

Skanowanie z podpisami

Jedną z najbardziej niezawodnych metod inspekcji oprogramowania przez człowieka jest automatyczne stosowanie sygnatur interesujących funkcji, które można przedstawić ludzkiemu recenzentowi. Sygnatury mogą być kawałkami binarnego kodu maszynowego, adresami URL, nazwami funkcji, nazwami domen lub kawałkami metadanych, takimi jak identyfikatory kluczy API. Sygnatury kodu binarnego są główną metodą wykorzystywaną przez wszelkiego rodzaju skanery złośliwego oprogramowania. Badacze malware’u pracują nad znalezieniem małych wzorców, które są unikalne dla tego konkretnego malware’u, ale nie występują w innych miejscach. Oto przykład takiej sygnatury, jest to profil YARA dla trojana Silentbanker:

    strings:
        $a = {6A 40 68 00 30 00 00 6A 14 8D 91}
        $b = {8D 4D B0 2B C1 83 C0 27 99 6A 4E 59 F7 F9}
        $c = "UVODFRYSIHLNWPEJXQZAKCBGMT"

    condition:
        $a or $b or $c

F-Droid używa również sygnatur, aby pomóc opiekunom aplikacji znaleźć funkcje blokujące i blokować niewolne bity. Najstarszą wersją tego narzędzia jest narzędzie wiersza poleceń fdroid scanner. Założyciel F-Droid, Ciaran Gultnieks, dodał skaner, aby znaleźć „zwykłych podejrzanych” ponad dziesięć lat temu:

    # Skanuj w poszukiwaniu powszechnie znanych niewolnych obiektów blob:
    zwykli_podejrzani = ['flurryagent',
                      'paypal_mpl',
                      'libgoogleanalytics',
                      'admob-sdk-android',
                      'googleadview',
                      'googleadmobadssdk']

Exodus Privacy stworzył dużą kolekcję profili firm śledzących. ETIP to ich platforma do tworzenia i zarządzania profilami trackerów. Dane są tam wprowadzane i utrzymywane, a następnie, gdy dane profile są wystarczająco dokładne, są one dodawane do oficjalnego zbioru danych Exodus. Profile te zawierają podpisy do automatycznego wykrywania modułów śledzących w plikach APK, które są instalowane na urządzeniu podczas instalowania aplikacji. F-Droid od dawna pośrednio korzysta z profili Exodus.

id: d25d820d-4c97-420e-a7d7-72434c58a575
name: ABTasty
description: |
  You can use this library to access AB Tasty endpoints, which can
  generate a unique visitor ID, allocate a visitor to a test, and push
  visits and conversions events in order to help you analyze the
  outcomes of your campaigns.
documentation:
  - https://developers.abtasty.com/android-sdk.html
is_in_exodus: true
code_signature: com\.abtasty
network_signature: abtasty\.com
api_key_ids:
website: https://www.abtasty.com
maven_repository:
  - https://sdk.abtasty.com/android/
  - https://dl.bintray.com/abtasty/flagship-android
  - https://dl.bintray.com/abtasty/Android-sdk
group_id: com.abtasty
artifact_id: librarybyapi
gradle: com.abtasty:librarybyapi:1.1.0

@IzzySoft utrzymuje repozytorium F-Droid dla „prawie darmowych” aplikacji. Zawiera własne sygnatury do wykrywania anty-funkcji, które mogą być niedozwolone w f-droid.org, a także inną linię obrony do wykrywania bardziej ogólnych niepożądanych funkcji, takich jak śledzenie.

anti_features:
- NonFreeDep
- Tracking
code_signatures:
- com\.heapanalytics
description: |-
  automatically captures every web, mobile, and cloud interaction:
  clicks, submits, transactions, emails, and more. Retroactively
  analyze your data without writing code.
license: Proprietary

Plexus to projekt społeczności Techlore mający na celu określenie, które aplikacje działają na urządzeniach „od-Googlowanych” i które aplikacje współpracują z zamiennikiem bezpłatnego oprogramowania microG dla Google Usługi Play. Gromadzą wyniki testów przeprowadzonych przez ludzi w formacie do odczytu maszynowego. Chociaż opiera się na ludzkich testerach, a nie na automatycznym dopasowywaniu wzorców, jak większość innych wymienionych tutaj projektów, dane wynikowe mają podobną strukturę i mogą być wykorzystywane w ten sam sposób podczas generowania raportów, jak w przypadku issuebot .

Application: The New York Times
Package: com.nytimes.android
Version: 0.0.0
DG_Rating: X
MG_Rating: 4
DG_Notes: X
MG_Notes: Can't login with Google

Mobil Sicher również recenzuje aplikacje, ze szczególnym uwzględnieniem Niemiec. Mają imponujący system do dynamicznej analizy aplikacji, aby znaleźć dokładnie usługi, z których korzystają w Internecie. Dzięki tym danym mogą oznaczać nie tylko trackery, ale także to, czy aplikacja wysyła dane osobowe do usług stron trzecich, takich jak firmy reklamowe, usługi w chmurze itp.

Nasi partnerzy również używają podpisów, połączmy siły!

Kiedy rozmawialiśmy z różnymi organizacjami o ich kolekcjach podpisów i zastosowaliśmy niektóre z nich do kolekcji aplikacji f-droid.org, stało się jasne, że istnieje wiele wspólnych struktur. Ale każdy system został skonfigurowany w taki sposób, że każdy wygląda obco dla innych: kod Pythona, panele administracyjne Django, przesyłanie wiadomości e-mail itp. Jeśli inni współpracownicy chcą wejść i wnieść swój wkład, muszą zrozumieć format każdego projektu. Może to być czasochłonne i nie ma standardowego formatu do naśladowania. Następnie @pnu z Exodus Privacy proponuje, aby przepisać swój system edycji jako pliki w repozytorium git. To było to, co wyjaśniło, że repozytorium git plików danych edytowalnych przez człowieka będzie miało zastosowanie do wszystkich tych zestawów danych.

Opierając się na tym pomyśle, uruchomiliśmy F-Droid SUSS (podejrzane lub niechciane sygnatury oprogramowania). To kolekcje sygnatur F-Droid do wykrywania niepożądanych funkcji w aplikacjach na Androida. SUSS to pierwszy projekt w czasie rzeczywistym, a narzędzie fdroid scanner będzie z niego korzystać. SUSS bazuje na plikach YAML, jeden plik na profil. YAML to zasadniczo ustrukturyzowane dane, które mają być edytowane przez człowieka (cały prawidłowy JSON jest dokładnie plikiem YAML). YAML jest również szeroko rozumiany, ponieważ jest używany we własnym formacie metadanych .yml F-Droid, GitLab CI, GitHub Actions i FUNDING.yml i wielu innych. Dodatkowo jest dobrze obsługiwany we wszelkiego rodzaju edytorach, w tym w podświetlaniu składni.

To krok w kierunku lepszej integracji z innymi organizacjami, które dzielą cele z F-Droidem. Standaryzacja może zmniejszyć problemy związane z udostępnianiem i współpracą, ponieważ istnieją wspólne narzędzia, wspólne formaty danych i automatyczna interoperacyjność. Ta podstawowa architektura powinna być wystarczająco elastyczna, aby pozostawić opiekunom tych zbiorów danych tworzenie i utrzymywanie profili według własnego uznania. Standaryzowane narzędzia nie powinny zmuszać ludzi do nieproduktywnych wzorców. W ramach tego projektu dokonano przeglądu zestawów danych z Exodus/ETIP, IzzySoft, MobilSicher, F-Droid i TechLore Plexus. Każdy miał odrębne i specyficzne narzędzia i przepływy pracy. Ale przybliżony kształt danych pasuje do wspólnego wzorca w projektach.

Istnieje dobry precedens dla tego rodzaju standaryzacji: YARA. Jest to narzędzie do sygnowania złośliwego oprogramowania, uruchomione przez jedną firmę, a obecnie używane przez dziesiątki. Ten aspekt YARA odnosi się bezpośrednio do omawianych tutaj zbiorów podpisów w interesie publicznym. Gdy norma się przyjmie, nie tylko zwiększa uniwersalność danych, co ułatwia korzystanie z nich. To może przyciągnąć więcej użytkowników i współtwórców. YARA została zaprojektowana z myślą o złośliwym oprogramowaniu dla komputerów stacjonarnych i niestety słabo działa na Androidzie. Częściowo jest to spowodowane tym, że uczyniono YARA niestandardowym formatem zaimplementowanym w narzędziu YARA. Taka konfiguracja sprawia, że zasady YARA są proste i czytelne, ale mają duże wady. YARA jest zaimplementowana w Pythonie, więc używanie jej w innych językach oznacza ponowne zaimplementowanie jej od podstaw. Pliki APK na Androida są zawsze plikami ZIP, w przeciwieństwie do plików binarnych oprogramowania komputerowego, które są zazwyczaj nieskompresowanymi plikami. Twórcy narzędzia YARA zdecydowali, że nie chcą dołączać kod do uruchamiania skanowania plików ZIP, XML itp. Zmusza to YARA do problematycznego działania jako skaner Androida.

Jak wyglądają współdzielone podpisy i profile?

Aby pokazać, jak to wygląda w praktyce, możemy wziąć przykład z fdroid scanner powyżej. Sygnatura flurryagent w bieżącym skanerze służy do skanowania deklaracji zależności w plikach Gradle, które są standardową konfiguracją do kompilowania aplikacji na Androida, oraz plików w standardowej bibliotece JAR. Gradle współrzędna com.fasterxml.jackson.core:jackson-core:2.11.1 nie zostanie oflagowana, ale to wzorzec również nie będzie zawierał linii Gradle com.flurry.android:analytics:10.0.0@aar. Ale jeśli plik JAR jest zawarty w aplikacji, zostanie przeskanowany, a com/flurry/android/FlurryAgent w tym pliku JAR wygeneruje dopasowanie. Ale po prostu wyświetla pliki z trafieniami bez kontekstu, co i dlaczego. W ramach SUSS każdy wpis otrzymuje teraz w pełni funkcjonalny profil we własnym pliku YAML, w którym każdy podpis skanowania jest wyraźnie zadeklarowany. Te metadane mogą następnie zapewnić więcej kontekstu, gdy istnieją dopasowania.

name: Flurry
website: http://www.flurry.com
code_signatures:
  - com.flurry.
network_signatures:
  - flurry\.com
api_key_ids:
  - flurry\.com
  - com\.flurry\.admob\.MY_AD_UNIT_ID
gradle_signatures:
  - com\.flurry\.android
license: NonFree
anti_features:
  - Ads
  - NonFree
  - Tracking

W SUSS możemy teraz reprezentować sygnatury fdroid scanner z elastycznością sygnatur Exodus Privacy. Dodaje to dodatkowe skany, w tym nazwy domen i nazwy używane do deklarowania API klucze. skaner fdroid miał dodatkową listę dozwolonych na wypadek, gdyby niektóre sygnatury dawały fałszywe alarmy. Lista dozwolonych została usunięta na rzecz czystych wyrażeń regularnych. Lista dozwolonych sprawia, że implementacja F-Droid jest nieco bardziej skomplikowana i wiąże nasze profile podpisów z narzędziami fdroidserver. Wszystkie inne zestawy danych, które przejrzeliśmy, wykorzystywały tylko proste wpisy, głównie z użyciem wyrażeń regularnych, więc ważne jest, aby zbadać, czy może to obejmować wszystkie potrzebne przypadki skanowania. Jeśli to się uda, droga do standaryzacji jest jasna. Tak, wyrażenia regularne są skomplikowane i mogą być bolesne, ale są też szeroko stosowane, implementowane, dokumentowane i rozumiane.

Jedną wielką zaletą tylko wyrażeń regularnych jest to, że SUSS ma super szybki i prosty zestaw testów. Oto jeden sposób na pracę z nim:

  • Znajdź odpowiednie współrzędne Gradle i dodaj je do list dopasowań i wyjątków w tests/test_suss.py
  • Spraw, aby testy były uruchamiane raz na sekundę (z kolorem!):
    watch --color -n1 pytest-3 --color=yes
  • Edytuj wyrażenie regularne, na przykład w suss/com.mapbox.yml

Ponieważ używa tylko wyrażeń regularnych, ten zestaw testów nie wymaga żadnego kodu fdroidserver. To wszystko byłoby również trywialne do użycia w JavaScript, Ruby, Rust, Javie, Kotlin itp., ponieważ profile to YAML, a sygnatury to regex.

Składanie podpisów

issuebot działający na fdroid/rfp i fdroiddata używa teraz sygnatur z Exodus Privacy ETIP, fdroid scanner i Plexus. Teraz można łatwo używać podpisów ETIP w modułach issuebot, aby umożliwić eksperymentowanie w zakresie skanowania rzeczy. Oto kilka fragmentów issuebot oznaczających rzeczy na podstawie tych sygnatur.

gradle-dependencies-1
Jest to wyraźnie nie-wolna zależność, jest wymagana dla wszystkich kompilacji tej aplikacji.

gradle-dependencies
To jest podwójne whammy: nie-wolna biblioteka, która jest używana do śledzenia!

source-scan-0
Jest to dopasowanie, ale czy klimat “testowy” jest istotny?

source-scan-1
Istnieje dobre dopasowanie, ale biblioteka jest zawarta w klimacie „graj”, a to oczywiście nie jest przeznaczone dla f-droid.org.

Raport issuebot zawiera wiele sekcji opartych na wykonanym skanowaniu. Jeśli sekcja zawiera pewne wpisy, które są oflagowane, domyślnie ta sekcja będzie otwarta. Tak więc te sekcje będą widoczne przy pierwszym przeczytaniu, ale zawsze można je ukryć po przejrzeniu.

Istnieją teraz aktywne metody znajdowania nazw domen i adresów URL w binarnych pakietach APK. Sygnatury sieciowe są używane do sprawdzania, czy są one dopasowane. Istnieją również alternatywne metody usuwania danych, aby następnie uruchomić dopasowanie sygnatur. Dostępny jest nowy moduł Gradle Dependencies, który pobiera pełną listę zależności z gradle/verification-metadata.xml, jeśli są obecne lub możliwe do wygenerowania, lub ./gradlew androidDependencies, jeśli wszystko inne zawiedzie . Następnie stosuje sygnatury kodu do oznaczenia współrzędnych Gradle. Obecnie istnieje wiele nakładających się metod usuwania używanych bibliotek, zarówno z kodu źródłowego, jak i binarnych pakietów APK. Można je połączyć, jeśli uda nam się ustalić, że istnieje jedna metoda, która niezawodnie wyszukuje wszystkie zależności.

Przyszłe prace

Ten projekt zaowocował wyraźnymi ulepszeniami w istniejącej konfiguracji issuebot i stworzył strukturę dla integracji międzyprojektowej. Mamy nadzieję, że ten układ danych i przepływ pracy może służyć jako szablon dla innych powiązanych prac. Teraz, kiedy wszystko zostało już uruchomione i działa, czekamy na opinie o tym, co działa, a co nie. I wkład w poprawę każdej jego części są zawsze mile widziane. F-Droid SUSS jest teraz naprawdę łatwy dla początkujących, każdy, kto może edytować podstawowe YAML i złożyć wniosek o scalenie, może teraz pomóc F-Droid poprawić nasz proces kontroli. Oto kilka nisko wiszących owoców, które pozostały w tym projekcie:

  • Jednym minusem używania wielu kolekcji podpisów jest to, że trudniej jest znaleźć miejsce do edycji i zarządzania profilami. Niektóre dobre projekty UX mogą tam bardzo pomóc. Na przykład, gdy istnieje dopasowanie, UI może pokazywać bezpośredni link do edycji profilu, aby ułatwić opiekunom fdroiddata dostrojenie profili, nawet jeśli są one utrzymywane w Exodus Privacy lub gdziekolwiek indziej.

  • Przeprowadziliśmy prototypową konwersję danych MobilSicher i IzzySoft do formatu SUSS. Kiedy SUSS ustali się jako format, będziemy mogli łatwo przekonwertować te zestawy danych na ten format.

  • Niektóre z raportów issuebot mogą być nadal dość długie. Raporty modułu @IzzySoft są dobrym przykładem tego, jak sobie z tym poradzić: pokaż oflagowane rzeczy bezpośrednio, a reszta trafia do połączonego raportu, który jest przechowywany w artefaktach, który jest ładowany tylko na żądanie.

(Ta praca została sfinansowana przez NLnet w ramach trwającego projektu znanego jako Tracking the Trackers oraz The Search for Ethical Apps pod parasolem Guardian Project)