Z końcem lipca 2025r. informowaliśmy o publikacji aktualizacji zabezpieczeń w programie FARA w związku z wykryciem w niej tzw. podatności bezpieczeństwa, którą opisaliśmy w dziale „Aktualizacje” (informacje o tej podatności znajdziecie na stronie   https://cert.pl/posts/2025/07/CVE-2025-4049/) . Program został naprawiony i zaktualizowany dzięki aktywności rządowej agencji CERT, która nadzorowała proces usuwania błędu. 

Nie doszło do wycieku danych z programu FARA – ponadto są one przechowywane nie na serwerach internetowych naszej firmy, tylko na lokalnych komputerach w parafiach, do których nie mamy w ogóle dostępu – włamywacz musiał by najpierw włamać się do lokalnego komputera w parafii, a dopiero potem atakować system FARA. Zagrożenie było jednak rzeczywiste i potwierdzone przez CERT, dlatego wdrożyliśmy procedurę usuwania błędu z programu i wykrywania oprogramowania szpiegującego.

Cały proces odbywał się, jak mnie poinformowano, na zasadzie wzajemnego zaufania, co w moim prostym umyśle oznaczało, że wszystko ma charakter poufny. Jak zrozumiałem, znalazca podatności, Pan Mateusz Sirko z rzeszowskiej Politechniki sprawdza, czy dziura w kodzie została załatana czy nie i cały proces powtarza się, aż kod zostaje wyczyszczony z podatności, po czym za pośrednictwem nadzorującego cały proces organu przekazuje mi rachunek za wykonaną przez siebie pracę (być może źle to rozumiałem – nie wiem, nigdy nie miałem z czymś takim do czynienia). Ponieważ w przekazywanych mi komunikatach padało słowo „zaufanie” rozumiałem, iż cała wymiana korespondencji oraz kodu aplikacji jest poufna i strony sobie ufają. Ewidentnie źle to zrozumiałem, bo zamiast rachunku dostałem informację, iż Pan Sirko opublikował część przekazywanych mu w zaufaniu materiałów w Internecie w postaci pełnego kłamstw artykułu, który zamieścił w jednym z branżowych portali, który z kolei opublikował go bez żadnej weryfikacji treści (byle się klikało). Autor powycinał z mojej korespondencji kilka zdań całkowicie wyrywając je z kontekstu, zaś całość została obudowana sensacyjnymi i bezsensownymi śródtytułami i puszczona w świat jako sensacja o gburowatym programiście i jego szokującej reakcji na zgłoszenie podatności. Na swoje nieszczęście, kierując się emocjami pozwoliłem sobie na kilka komentarzy pod artykułem robiąc to w sposób wyjątkowo nieumiejętny i z „gorącą głową”.

Nie powinno się publikować materiałów przekazanych komuś w zaufaniu, skoro jednak autor pozwolił sobie na zabawę nożyczkami, więc by dopełnić dzieła zniszczenia zmuszony jestem do opublikowania tego, o czym młody adept informatyki i dziennikarstwa zapomniał.

„Pan popełnił przestępstwo” i „wykłócanie się z CERT”
Korespondencja z CERT, 30.04.2025, 14:31, wysłana:

Bardzo dziękuję za wyjaśnienia, jednakże program […] użyty przez Państwa dokonuje deszyfracji i dekompilacji kodu wynikowego aplikacji do poziomu kodu źródłowego, podczas gdy umowa licencyjna, którą Państwo zaakceptowaliście pobierając program instalacyjny […] wyraźnie tego zabrania, co oznacza, iż dostarczony mi raport powstał na drodze popełnienia przestępstwa.[…]

Jeśli zamierzacie Państwo kontynuować analizy tego programu to proszę nas o tym poinformować – wygenerujemy Państwu odrębny klucz licencyjny z inną treścią umowy, która zezwoli na dekompilację kodu celem przeprowadzenia analizy podatności.

Chętnie udostępnimy Państwu to oprogramowanie w celu analizy podatności – ale by uniknąć nieporozumień w przyszłości musimy to załatwić lega artis.

Dziura w Farze została wykryta po dokonaniu tzw. odtworzenia kodu źródłowego, czego zabrania umowa licencyjna. Na mój prymitywny, chłopski rozum złamanie umowy jest przestępstwem – zaproponowałem więc wygenerowanie odrębnej licencji, która tego nie zabrania, tak aby Znalazca podatności miał pewien komfort i by nikt mu nigdy nie postawił zarzuty z kategorii „Pan popełnił przestępstwo”. Zadeklarowałem też chęć przekazania wszystkiego celem rozwiązania problemu.

Korespondencja z CERT, 30.04.2025, 15:02, otrzymana:

[…] dziękuję za zwrócenie uwagi na ten aspekt. W naszej ocenie nie ma potrzeby udostępniania nam nowych warunków umowy licencyjnej, ponieważ jako CSIRT NASK jesteśmy uprawnieni do przeprowadzania takich badań na podstawie art. 33 pkt 1 ustawy o krajowym systemie cyberbezpieczeństwa […]

Tym samym wyjaśnione zostały „pryncypia” i rozpoczął się niełatwy proces naprawy oprogramowania. Zostało to przez autora artykułu przedstawione jako wykłócanie się i atakowanie Znalazcy słowami „Pan popełnił przestępstwo”.

Jak widzicie w istocie siekiery latają tu w powietrzu tnąc pędzące stadami wyzwiska, krew leje się strumieniami i brakuje tylko okrzyku „Ojciec prać?”.

Arogancki programista, który nawet nie podziękował.
Korespondencja z CERT, 05.05.2025, 08:31, wysłana:

[…] Jeśli to możliwe, to proszę poczekać. Podatności zostały już usunięte i obecne instalatory są od nich wolne […] – ale chcemy jeszcze to wszystko dokładnie przeanalizować […] – w lipcu damy znać i zamieścimy opis usuniętych podatności na stronie WWW. Poinformujemy też użytkowników bezpośrednio jedną wiadomością email, […]. Niestety nie wiedzieliśmy o tym, […], a szyfrowanie Microsoft miało ten kod zabezpieczyć przed taką deszyfracją. 

Nie wiemy kto jest znalazcą tych podatności, ale wdzięczni jesteśmy za ich wykrycie i przekazanie Państwu oraz zespołowi, który to analizował. […]

W istocie bijące ze mnie chamstwo i arogancja są tu takie, że od samego czytania bolą oczy.

Jesteś w d…, czyli szokujące stanowisko producenta programu.

W procesie usuwania podatności kilkukrotnie przekazywano Znalazcy oprogramowanie za zasadach (w moim rozumieniu) zaufania i poufności. Programiści w takich sytuacjach często zostawiają sobie w kodzie tzw. „eastereggi”, choć bardziej adekwatna była by tu nazwa „jajko niespodzianka”. Są to krótkie komunikaty – przekazy dla drugiej strony – zakodowane (nie mylić z zaszyfrowaniem) w jednym z kilku różnych, popularnych i prostych kodów, co daje gwarancję, że zostaną one zdekodowane i przekaz trafi do odbiorcy.
W przekazanym do analizy kodzie zamieszczonych było kilka takich niespodzianek:

  • 1. Czego tutaj szukasz?
  • 2. Niczego tu nie znajdziesz
  • 3. Ślepy zaułek!
  • 4. Jesteś w dupie

Przypominam, iż wszystko odbywa się trakcie zaufanego i poufnego procesu przekazywania informacji. Znalazcy (autorowi artykułu) do gustu najbardziej przypadł punkt 4, który opublikował w swoim artykule i przedstawił jako „szokujące stanowisko producenta programu

Kto zyskał, kto stracił?

Najwięcej zyskałem na tym wszystkim ja otrzymując sporą dawkę wiedzy o narzędziach i metodach używanych do łamania zabezpieczeń aplikacji, co pozwoliło znacznie ulepszyć mechanizmy bezpieczeństwa w Farze. Zyskali klienci otrzymując bezpieczniejszy program. Zyskał portal informacyjny, który publikując niezweryfikowany artykuł i podbijając bębenek w szlamowatych komentarzach zyskał zasięgi, co przekłada się na zysk.

Oberwało się Kościołowi, który z całą sprawą nie ma kompletnie nic wspólnego, no ale wiecie … parafie » kościół » biskupi » kościelna okupacja » państwo wyznaniowe, itd., itp.

Wmieszano w to wszystko CERT, który (z powodzeniem) zrobił to, do czego został powołany postępując ściśle wg. swoich procedur.  

O co chodziło Panu Sirko z rzeszowskiej Politechniki i czym się kierował publikując materiały przekazywane mu w zaufaniu ? Nie mam pojęcia i mogę jedynie zgadywać, że poczuł się niedoceniony i zapragnął kliku dni chwały i radości z tego, że udało mu się szybko zniszczyć coś, co ktoś inny budował latami (śmiechu pewnie było co nie miara). Cieszę się, że mogłem pomóc Panu Mateuszowi w chwilach sławy – ale jaki z tego morał dla jego obecnych i przyszłych pracodawców ?

Czy można zaufać i przekazać do analizy poufne materiały osobie, która i tak opublikuje je w Internecie?

Czego mnie to nauczyło?
pokory

Nawet gdy coś na pierwszy rzut oka wydaje się absurdalne, warto czasem wszystko dokładnie przemyśleć, zwrócić uwagę i podjąć odpowiednie kroki.

opanowania

Co nagle to po diable – nie warto na wszystko odpowiadać od razu, gwałtownie, bez przemyślenia, pod wpływem emocji. Poruszanie się po obszarze komentarzy na Twój temat w portalach informacyjnych wymaga grubej skóry i dużego opanowania, względnie nie przejmowania się niczym. Jeśli nie masz tych cech – nie pakuj się w ten szlam, bo tylko pogorszysz sytuację, zaś przed odpowiedzią warto dać sobie kilka dni na oczyszczenie umysłu i uspokojenie nerwów, zwłaszcza gdy, tak jak Ja, jesteś z natury cholerykiem.

minimalizacji

czyli ograniczenia do niezbędnego minimum konwersacji z przedstawicielami świata bez klamek. Każde słowo i każda litera może zostać użyte przeciw Tobie.

nie komentowania

Obszar komentarzy w takich mediach określany jest czasami słowem „sheetnet” – jest to miejsce, w którym setki anonimowych zazwyczaj, ukrywających się pod mniej lub bardziej zmyślnymi pseudonimami ekspertów przedstawiają swoje wizje świata jako jedynie słuszne prawdy ubrane w barwne (i często absurdalnie głupie) epitety i porównania. Niby są one moderowane, ale w rzeczywistości nikt tego chyba nie robi. Nawet jeśli w tym chaosie znajdą się jakieś rzeczowe informacje – po krótkim czasie zostają zasypane tonami gruzu i śmieci. Pchanie się tam, będąc (anty)bohaterem komentowanej opowieści, przy emocjonalnym zaangażowaniu w sprawę to jak wkładanie sobie palca między zderzaki wagonów. Lepiej trzymać się z daleka.

Dziękuję za przeczytanie mojej wersji zdarzeń, a jeśli z jakiś powodów chcecie wiedzieć jak wygląda taki proces, oczywiście agresywnej i aroganckiej, wymiany informacji w trackie procedury usuwania błędu, to fragmenty znajdziecie poniżej. Miłej lektury.

Bezczelna, agresywna, arogancka konwersacja

CERT:

Uzyskaliśmy także informację o wcześniejszej publicznej dostępności pliku pod adresem [..], który zawierał konfigurację bazy z danymi klientów, w tym notatkami zawierającymi w niektórych przypadkach dane logowania do stron lub serwerów Państwa klientów. Jeśli te poświadczenia są wciąż aktualne, rekomendujemy skontaktowanie się z tymi podmiotami, aby zmieniły zawarte w bazie dane dostępowe

SIGNUM-NET:

Wszyscy klienci zostali poinformowani i zmienili dane dostępowe lub usunęli stare konta. Skrypty w katalogu payments operowały na koncie sandbox (testowym – nie rzeczywistym) w przelewy24 – tego konta już nie ma. Tej bazy również.

ZNALAZCA:

Zaktualizowany pakiet instalacyjny producent umieścił pod linkiem [..] , jednakże istnienie w katalogu pliku […].txt o treści „Dla cert.pl” sugeruje, że instalator mógł być przygotowany specjalnie w celu weryfikacji przez CERT Polska. 

SIGNUM-NET:

No oczywiście, że tak. On jeszcze nie został opublikowany. […].

ZNALAZCA:

Poprzednio wykorzystywany adres do sprawdzania dostępności aktualizacji […] posiada nadal nie zmienioną treść […]

SIGNUM-NET:

Plik […] zawiera numer i datę wydania aktualnej wersji programu. webPatch=33 oznacza, że aktualna wersja to 33 i instalacje programu jeszcze nie pobierają aktualizacji do nowej wersji.

ZNALAZCA:

Plików tych też w świeżej instalacji jest dużo mniej – zostały popakowane w archiwa obecne w katalogu […].

SIGNUM-NET:

Tak. Dla porządku. Program podczas pierwszego uruchomienia je sobie wypakowywuje.

ZNALAZCA:

Na podstawie wywołania tej funkcji program rozpakowuje archiwum […] używając do tego hasła […].

SIGNUM-NET:

To hasło jest nieistotne, podobnie jak […] – program rozpakuje sobie ten pakiet i zostawi go na dysku. […] W plikach w katalogu […] są nakładki programu – to nie są dane.

ZNALAZCA:

Algorytm sprawdza, czy funkcja została wywołana przez proces[…] wywołany z […]

SIGNUM-NET:

Tak. Nie niesie to żadnego zagrożenia

ZNALAZCA:

Wartość pierwszego parametru funkcji zwracany przez funkcję ciąg

0x80c5 […]

0x2f2c […]

0x2b39 […]

…….

SIGNUM-NET:

Kod zmieniony – hasła również

ZNALAZCA:

Następnie znów użyto funkcji […] w celu […] z użyciem hasła […]

SIGNUM-NET:

Zmienione

ZNALAZCA:

[…] z poprzednich wersji, są to niezmienione wartości: […]

SIGNUM-NET:

W tych plikach, w których było coś „tajnego” hasła zostały zmienione na inne. Te obiekty i hasła w nich zapisane zostają – pliki ZIP zaszyfrowane tymi hasłami nie mają w sobie nic cennego – chciałbym je pousuwać, ale musiałbym grzebać po całym kodzie – nie ma takiej potrzeby.

ZNALAZCA:

Analizując kod funkcji […] również obecnej w bibliotece natrafiono na niezmienione hardkodowane hasła do baz SQLite. Funkcja ta w zależności od parametrów wejściowych zwraca poniższe ciągi […]

SIGNUM-NET:

Nie ma już tych haseł.

ZNALAZCA:

„PRAGMA cipher_license = […]

SIGNUM-NET:

To nie jest hasło, tylko numer licencji na zewnętrzne oprogramowanie. Przy pomocy tego ciągu nie da się niczego otworzyć. Pozostaje to nie zmienione.

ZNALAZCA:

„this.sourceFileProtection = […]”

SIGNUM-NET:

Hasło w tym ciągu jest nieaktywne od 15 lat

ZNALAZCA:

„lmZip.License ([…])”

SIGNUM-NET:

To nie jest hasło, tylko numer licencji na zewnętrzne oprogramowanie. Przy pomocy tego ciągu nie da się niczego otworzyć. Pozostaje to nie zmienione.

ZNALAZCA:

Funkcja getDecryptedPassword zwraca również uwagę, a w niej fragment sugerujący, że program wykorzystuje szyfrowanie AES, a klucz enkrypcji i IV są hardkodowane:

FUN_10008d20(“aes”);

FUN_10008c60(“cbc”);

FUN_10008ea0(0x100);

FUN_10008de0(“hex”);

FUN_10008a00(„000102030405060708090A0B0C0D0E0F”,”hex”);

FUN_10008b30(„00010003144C06000

SIGNUM-NET:

To są śmieci (zwykła obfuskacja) – ale jeśli potraficie Państwo przy ich pomocy otworzyć jakąś bazę danych to bardzo proszę o jakiś zrzut ekranowy lub inny dokument, który by to potwierdzał.

I tak to sobie leci, aż wszystko zacznie „grać”. Poezja! A ile w tym agresji!