Najbardziej zaawansowana aplikacja do ochrony cybernetycznej dla Androida - Bitdefender Mobile Security & Antivirus

Pobierz

Bezpieczeństwo w Internecie

Technologia Bitdefender XDR: nowe metody rozszerzania lokalnych naruszeń w Google Workspace

Piotr R

24 listopada 2023

Nowoczesne rozwiązania EDR i XDR nie działają deterministycznie. Zamiast tego pracują w odcieniach szarości, a nie w czerni i bieli, w dużym stopniu opierając się na korelacji zdarzeń w celu obliczenia prawdopodobieństwa i zapewnienia znaczących spostrzeżeń. Eksperci do spraw cyberbezpieczeństwa, którzy pracują nad rozwojem tych technologii starają się zapewnić skuteczność tych rozwiązań oraz zminimalizować liczbę fałszywych alarmów. Cele te wymagają ciągłych inwestycji w badania i głębokiego zrozumienia sposobu działania podmiotów zagrażających.

Bitdefender XDR – ciągły rozwój i wyścig z hakerami

Zespół Bitdefender poświęca znaczny wysiłek badawczy podczas dodawania nowych czujników XDR do swojego ekosystemu. W rozwój tych czujników zaangażowany jest nie tylko zespół uznanych inżynierów, ale także Bitdefender Labs, czyli wewnętrzny instytut badawczy rumuńskiej firmy, który jest ściśle powiązany ze środowiskiem akademickim. Bitdefender Labs inicjuje proces poprzez połączenie badań teoretycznych i praktycznych, aby uzyskać głębszy wgląd w potencjalne wektory ataku i sposób działania aktorów zagrażających.

Zaskakująca decyzja Google

Zespół Bitdefender podczas opracowywania czujnika XDR dla Google Workspace i Google Cloud Platform odkrył nieznane wcześniej metody ataku umożliwiające eskalację naruszenia bezpieczeństwa z pojedynczego punktu końcowego do naruszenia w całej sieci, co może prowadzić do ataków oprogramowania ransomware lub eksfiltracji danych. Po zainfekowaniu pierwszej pojedynczej maszyny, przestępcy mogą postępować na kilka sposobów: mogą przenieść się na inne sklonowane maszyny z zainstalowanym GCPW, uzyskać dostęp do platformy chmurowej z niestandardowymi uprawnieniami lub odszyfrować hasła przechowywane lokalnie, aby kontynuować atak poza ekosystemem Google.

Warto wspomnieć także o tym, że te słabości można wykorzystać dopiero po włamaniu się na komputer lokalny w specyficzny sposób. Bitdefender ujawnił te ustalenia firmie Google, a amerykański gigant technologiczny potwierdził, że nie planuje zająć się tymi ustaleniami, ponieważ wykracza to poza ich konkretny model zagrożeń. Należy zauważyć, że nie jest to kwestia winy; jest to świadomy wybór oparty na ocenie ryzyka i priorytetach bezpieczeństwa. Ale to, że pewne słabości wykraczają poza zakres modelu zagrożenia, nie oznacza, że podmioty zagrażające nie będą ich wykorzystywać. W rzeczywistości jest zupełnie odwrotnie; ugrupowania zagrażające często poszukują i wykorzystują takie luki.

Bitdefender GravityZone XDR na ratunek zespołom do spraw cyberbezpieczeństwa

GravityZone XDR obejmuje wykrywanie zaawansowanych technik hakerskich. Zespół Bitdefender pragnie podzielić się swoimi badaniami na rzecz świadomości i edukacji społecznej. Firma ma nadzieję, że w ten sposób umożliwi szerszej społeczności zajmującej się bezpieczeństwem skuteczniejszą ochronę przed niebezpiecznymi podmiotami. Ponadto regularnie organizuje seminaria internetowe z badaczami, którzy odkrywają nowatorskie metody ataków. Polski dystrybutor oprogramowania Bitdefender również organizuje regularne webinaria na temat cyberbezpieczeństwa. Jeśli chciałbyś z któregoś skorzystać, to zajrzyj w nasz aktualny terminarz nadchodzących wydarzeń.

Czym jest dostawca danych uwierzytelniających Google do systemów Windows (GCPW)?

Dostawca danych uwierzytelniających Google do systemu Windows pełni podwójną rolę. Po pierwsze, GCPW umożliwia zdalne zarządzanie urządzeniami z systemem Windows bez konieczności połączenia VPN w ramach rejestracji domeny. Ta funkcja zarządzania urządzeniami mobilnymi (MDM) jest podobna do usługi Microsoft Intune i umożliwia administratorom zdalne zarządzanie urządzeniami z systemem Windows i kontrolowanie ich w środowisku Google Workspace. Administratorzy mogą na przykład egzekwować zasady bezpieczeństwa, instalować aktualizacje, instalować oprogramowanie i zarządzać ustawieniami urządzenia.

Po drugie, umożliwia uwierzytelnianie za pomocą pojedynczego logowania (SSO) w systemie operacyjnym Windows przy użyciu danych uwierzytelniających Google Workspace (dawniej G Suite). Zapewnia to bezproblemowe logowanie, umożliwiając użytkownikom dostęp do urządzeń z systemem Windows przy użyciu tych samych danych uwierzytelniających, których używają w Gmailu, Dysku Google i Kalendarzu Google. Aby lepiej zrozumieć, jak dostawcy danych uwierzytelniających działają w kontekście GCPW, rozłóżmy ten proces na czynniki pierwsze:

Tworzenie konta usługi lokalnej: podczas instalacji GCPW tworzone jest nowe konto użytkownika o nazwie „gaia” i generowane jest losowe hasło. Ten użytkownik „gaia” nie jest przeznaczony do typowej interakcji, ale obsługuje konto usługi GCPW. „GAIA” oznacza „Konta Google i administracja identyfikatorami” i wiąże się z podwyższonymi uprawnieniami.

Integracja dostawcy danych uwierzytelniających: GCPW następnie dodaje nowego dostawcę danych uwierzytelniających do usługi podsystemu lokalnego urzędu bezpieczeństwa (lsass). Jest to podstawowy komponent systemu Windows odpowiedzialny za operacje związane z bezpieczeństwem, w tym za uwierzytelnianie. Dostawcy poświadczeń w systemie Windows umożliwiają stronom trzecim integrację w procesie uwierzytelniania i kontroli dostępu użytkowników.

Uwierzytelnianie dostawcy poświadczeń: dostawca poświadczeń, teraz zintegrowany z systemem uwierzytelniania Windows, służy do uwierzytelniania użytkowników z poziomu ekranu blokady. Gdy użytkownik próbuje zalogować się lub odblokować swoje urządzenie, dostawca danych uwierzytelniających jest odpowiedzialny za weryfikację danych uwierzytelniających użytkownika.

Tworzenie konta użytkownika lokalnego: gdy nowy użytkownik próbuje dokonać uwierzytelniania w GCPW, użytkownik „gaia” tworzy nowe konto użytkownika lokalnego i kojarzy je z kontem Google Workspace.

Logowanie: użytkownik Google Workspace zostaje następnie zalogowany przy użyciu świeżo utworzonego profilu lokalnego. Aby zapewnić bezproblemową obsługę i zapobiec wielokrotnym monitom o uwierzytelnienie, w tym profilu lokalnym przechowywany jest token odświeżania.

Odkryte metody ataku

Teraz, gdy wyjaśniliśmy, w jaki sposób GCPW korzysta z lokalnego konta uprzywilejowanego „gaia” i utrzymuje połączenie z interfejsami API Google poprzez token odświeżania przechowywany w profilu lokalnym, możemy przejść do opisywania metod ataku.

Ruch boczny złotego obrazu

Jest to wyzwanie często spotykane w środowiskach zwirtualizowanych z klonowaniem maszyn, w tym w rozwiązaniach Virtual Desktop Infrastructure (VDI) i Desktop as a Service (DaaS) takich firm jak Citrix i VMware.

Po zainstalowaniu GCPW na komputerze docelowym tworzone jest lokalne konto „gaia” z losowym hasłem. W rezultacie, chociaż „gaia” istnieje na wszystkich komputerach, każdy z nich ma unikalne hasło. Jeśli jednak maszyna zostanie utworzona poprzez klonowanie innej maszyny z preinstalowanym GCPW, hasło również zostanie sklonowane. Jeśli znasz hasło do konta lokalnego, a konta lokalne na wszystkich komputerach mają to samo hasło, to znasz hasła do wszystkich komputerów.

Sytuacja związana ze wspólnym hasłem jest podobna do posiadania tego samego hasła administratora lokalnego na wszystkich komputerach.

Aby znaleźć dane uwierzytelniające powiązane z użytkownikiem „gaia”, haker może wyświetlić listę sekretów przechowywanych w lsass (na przykład używając Mimikatz) i poszukać kluczy tajnych o nazwach „L$GAIA_USERNAME” i „ L$GAIA_PASSWORD ”.

Żądanie nieautoryzowanego tokenu dostępu

Aby zapewnić bezproblemową współpracę między lokalną sesją systemu Windows a szerszym ekosystemem Google, GCPW przechowuje w ramach sesji token odświeżania OAuth 2.0. Mechanizm ten utrzymuje dostęp użytkownika bez powtarzających się monitów o uwierzytelnienie. Jeśli ten token wygaśnie, użytkownicy zostaną poproszeni o ponowne uwierzytelnienie, co spowoduje wygenerowanie nowego tokena.

Gdy cybernetyczny napastnik uzyska dostęp do tokena odświeżania OAuth, daje mu to możliwość zażądania tokenów dostępu. Te tokeny niosą ze sobą określone uprawnienia, często określane jako „zakresy”. Zakresy określają, jakie akcje może wykonać token. Zasadniczo wyznaczają granice możliwości tokena w aplikacji lub systemie.

Na przykład zakres może przyznawać dostęp do poczty e-mail, kalendarza lub kontaktów użytkownika. Dzięki zhakowanemu tokenowi odświeżania, podmiot zagrażający może zażądać nowych tokenów dostępu z jednym z zakresów dostępnych dla zaatakowanego użytkownika (lista dostępnych zakresów znajduje się w dalszej części). Oznacza to, że mogą potencjalnie uzyskać dostęp do szerokiego zakresu danych użytkownika lub wykonywać działania w imieniu użytkownika, w zależności od zakresów powiązanych z Tokenem Dostępu. Token odświeżania uzyskiwany jest na koniec procesu uwierzytelniania. Oznacza to, że wykorzystując token odświeżania do zdobycia tokena dostępu, całkowicie omija uwierzytelnianie wieloskładnikowe (MFA).

Po początkowym skupieniu się na komponencie GCPW zespół Bitdefender sprawdził, czy token odświeżania jest również przechowywany w profilu Google Chrome. W rezultacie ta metoda ataku nie wymaga komponentu GCPW; do jego wykonania wystarczy lokalnie zainstalowana przeglądarka Google Chrome.

Krok 1: Wyodrębnianie tokena odświeżania

Podsumowanie TL;DR – token odświeżania podlega dwuetapowemu procesowi przechowywania. Najpierw jest tymczasowo przechowywany w rejestrze, a później znajduje bardziej trwałe miejsce w profilu użytkownika Chrome. Odszyfrowanie jest możliwe z obu lokalizacji. Podejście do rejestru jest bardziej ukryte i oferuje dyskretny sposób dostępu do tokena. Ma jednak wadę – jest dostępny tylko przez ograniczony czas. Z drugiej strony metoda przechowywania oparta na profilach zapewnia dłuższy czas dostępu, ale jest trudniejsza do ukrycia.

Pełne wyjaśnienie — token odświeżania odbywa podwójną podróż, zaczynając od tymczasowego umieszczenia w rejestrze systemu Windows i ostatecznie trafiając do profilu Chrome użytkownika, gdzie jest przechowywany przez dłuższy czas.

Początkowe zatrzymanie tokena odświeżania znajduje się w wartości rejestru systemu Windows HKCU\SOFTWARE\Google\Accounts\< id_konta >\< token_odświeżania >. Tutaj są one tymczasowo przechowywane i szyfrowane przy użyciu CryptProtectData. Ciągi zaszyfrowane za pomocą CryptProtectData można odszyfrować za pomocą narzędzi takich jak Mimikatz lub wywołując CryptUnprotectData. CryptUnprotectData to funkcja API systemu Windows używana do odszyfrowywania danych, które zostały wcześniej zaszyfrowane za pomocą CryptProtectData. Kiedy dane są szyfrowane przy użyciu CryptProtectData, są one powiązane z kontem użytkownika i komputerem. Dlatego tylko procesy działające w kontekście użytkownika mogą wywołać CryptUnprotectData w celu pobrania oryginalnych, niezaszyfrowanych danych.

Po krótkim pobycie w rejestrze token odświeżania jest przechowywany w katalogu profilu Chrome użytkownika. W przypadku profilu domyślnego ta lokalizacja to zazwyczaj %HOME%\AppData\Local\Google\Chrome\User Data\Default. W przypadku profili dodatkowych jest on przechowywany w %HOME%\AppData\Local\Google\Chrome\User Data\Profile < numer >. W folderze profilu znajduje się baza danych SQLite o nazwie Web Data . Ta baza danych zawiera tabelę o nazwie token_service, w której bezpiecznie przechowywane są zaszyfrowane tokeny odświeżania powiązane z każdym profile.

Każdy wpis w tej tabeli składa się z dwóch kolumn: service i zaszyfrowany_token. Aby odszyfrować ten zaszyfrowany token, będziesz potrzebować klucza szyfrowania przechowywanego w pliku %HOME%\AppData\Local\Google\Chrome\User Data\Local State. Dostęp do tego klucza wymaga załadowania powiązanego pliku JSON i przejścia do os_crypt->encrypted_key . Podobnie jak token odświeżania, ten klucz szyfrowania jest również zabezpieczony za pomocą CryptProtectData.

Po pomyślnym odszyfrowaniu tego klucza szyfrowania możesz przystąpić do odszyfrowania tokena odświeżania. Proces deszyfrowania obejmuje zastosowanie zaawansowanego standardu szyfrowania (AES) w trybie Galois/Counter (GCM), gdzie pierwsze 12 bajtów reprezentuje wartość jednorazową, ostatnie 16 bajtów to skrót, a bajty pomiędzy nimi stanowią faktycznie zaszyfrowany token.

Jeśli z jakiegoś powodu nie będziemy mogli wyodrębnić tokena odświeżania, możemy wymusić na użytkowniku ponowne uwierzytelnienie. Po uwierzytelnieniu w Google GCPW aktualizuje klucz HKLM\SOFTWARE\Google\GCPW\Users\< identyfikator_użytkownika > o wartość th (uchwyt tokena). Uchwyt tokena służy do weryfikacji statusu sesji bieżącego użytkownika i jest sprawdzany przy każdej próbie zalogowania się użytkownika na swoim komputerze. Zmieniając tę wartość na nieprawidłową lub ją usuwając, możemy wymusić na GCPW ponowne uwierzytelnienie użytkownika przy następnym uruchomieniu lub odblokowaniu komputera.

Krok 2: Żądanie tokenu dostępu

Gdy już mamy token odświeżania, następny krok polega na użyciu danych uwierzytelniających aplikacji do skonstruowania żądania POST w celu wystawienia tokena dostępu. Te dane logowania aplikacji są takie same w przypadku przeglądarki Google Chrome i GCPW i są zgodne ze standardem OAuth, wymagającym dwóch kluczowych atrybutów — identyfikator klienta i sekret klienta . Należy zauważyć, że chociaż nie będziemy publikować ich wartości, nie są one uważane za dobrze strzeżoną tajemnicę, ponieważ można je łatwo wyodrębnić bezpośrednio z plików wykonywalnych lub kodu źródłowego Chromium i nie są one unikalne dla konkretnej maszyny.

Mając pod ręką te atrybuty, możemy utworzyć żądanie POST, zawierające następujące kluczowe elementy:

  • id_klienta: jest to unikalny identyfikator aplikacji.
  • Client_secret: to kolejny identyfikator, zwykle znany tylko samej aplikacji.
  • grant_type: „refresh_token”
  • Refresh_token: otrzymany wcześniej token odświeżania.
  • zakres: ten atrybut definiuje uprawnienia lub „zakresy” przyznane tokenowi dostępu.

To żądanie POST można następnie wysłać do punktu końcowego API https://www.googleapis.com/oauth2/v4/token. Ten punkt końcowy wystawi następnie token dostępu, zapewniając użytkownikowi lub podmiotowi zagrażającemu niezbędny dostęp do interfejsu API Google.

Krok 3: Potencjalne nadużycia tokenów dostępu

Podmioty zagrażające mogą uzyskać dostęp do szerokiej gamy interfejsów API Google. Częściowa lista jest dostępna poniżej:

  • https://www.google.com/calendar/feeds — Przeglądaj, edytuj, udostępniaj i trwale usuwaj wszystkie kalendarze, do których masz dostęp za pomocą Kalendarza Google
  • https://www.googleapis.com/auth/admin.directory.user — Przeglądaj i zarządzaj obsługą użytkowników w swojej domenie
  • https://www.googleapis.com/auth/calendar — Przeglądaj, edytuj, udostępniaj i trwale usuwaj wszystkie kalendarze, do których masz dostęp za pomocą Kalendarza Google
  • https://www.googleapis.com/auth/cloud-translation — Przetłumacz tekst z jednego języka na inny za pomocą Tłumacza Google
  • https://www.googleapis.com/auth/cloud_search.query — Przeszukaj dane swojej organizacji w indeksie Cloud Search
  • https://www.googleapis.com/auth/devstorage.read_write — Zarządzaj swoimi danymi w Google Cloud Storage
  • https://www.googleapis.com/auth/drive — Przeglądaj, edytuj, twórz i usuwaj wszystkie pliki na Dysku Google
  • https://www.googleapis.com/auth/ediscovery — Zarządzaj danymi eDiscovery
  • https://www.googleapis.com/auth/firebase.messaging — Wysyłaj wiadomości i zarządzaj subskrypcjami wiadomości dla aplikacji Firebase
  • https://www.googleapis.com/auth/spreadsheets — Przeglądaj, edytuj, twórz i usuwaj wszystkie swoje arkusze kalkulacyjne Arkuszy Google
  • https://www.googleapis.com/auth/tasks — Twórz, edytuj, organizuj i usuwaj wszystkie swoje zadania

Lista punktów końcowych dostępnych dla aktora zagrażającego obejmuje szeroki zakres uprawnień i dostępu. Oto kilka potencjalnych sposobów nadużycia tego dostępu:

Udostępnianie użytkowników: uprawnienie do zarządzania udostępnianiem użytkowników w Katalogu Google umożliwia podmiotowi zagrażającemu tworzenie, modyfikowanie i usuwanie kont użytkowników, co może prowadzić do nieautoryzowanego dostępu lub niewłaściwego użycia. Można utworzyć nowych użytkowników w celu ustalenia trwałości, z pominięciem wymagań usługi MFA.

Eksfiltracja danych — intrygującym celem wartym zbadania jest Vault API. Ten interfejs API zapewnia możliwość pełnego eksportu wiadomości e-mail lub plików dla wszystkich użytkowników w firmie, co czyni go idealnym narzędziem do potencjalnej eksfiltracji danych.

Manipulacja i usuwanie danych: mając uprawnienia do Kalendarza Google, Dysku Google, Arkuszy Google i Zadań Google, osoba zagrażająca może manipulować danymi lub je usuwać, co może spowodować chaos i utratę danych. Dostęp ten można również wykorzystać do eksfiltracji danych.

Usługi w chmurze: dzięki uprawnieniom do Google Cloud Storage, Tłumacza Google i Google Cloud Search podmiot zagrażający może uzyskać dostęp do danych przechowywanych na tych platformach chmurowych i zarządzać nimi, które mogą zawierać poufne informacje lub własność intelektualną.

Dostęp do poczty e-mail: uprawnienia do przeglądania głównego adresu e-mail i danych osobowych mogą prowadzić do naruszenia bezpieczeństwa konta e-mail i kradzieży tożsamości.

Dane Classroom: dostęp do danych Google Classroom, w tym zajęć, zadań i przesłanych przez uczniów treści, może zostać wykorzystany do manipulowania danymi edukacyjnymi, podszywania się pod uczniów lub nauczycieli albo uzyskania nieautoryzowanego dostępu do zasobów edukacyjnych.

Odzyskiwanie hasła

Tokeny dostępu w przypadku kradzieży stanowią zagrożenie dla bezpieczeństwa, umożliwiając atakującym uzyskanie ograniczonego dostępu w granicach określonych przez uprawnienia tokena. Tokeny te są często ograniczone czasowo i mają określone ograniczenia zakresu. Natomiast dostęp do danych uwierzytelniających w postaci zwykłego tekstu, takich jak nazwy użytkowników i hasła, stanowi poważniejsze zagrożenie. Dzieje się tak, ponieważ umożliwia atakującym bezpośrednie podszywanie się pod legalnych użytkowników i uzyskanie nieograniczonego dostępu do ich kont, co może prowadzić do całkowitego przejęcia konta. Dostęp do danych uwierzytelniających w postaci zwykłego tekstu jest ogólnie uważany za poważniejszy problem związany z bezpieczeństwem.

Domyślnie GCPW zapisuje hasło użytkownika jako zaszyfrowany klucz tajny LSA. Służy do resetowania hasła.

Wartość tajnego klucza Chrome-GCPW-< User_SID > to JSON zawierający zaszyfrowane hasło i identyfikator zasobu klucza użytego do szyfrowania. Te klucze szyfrujące są zarządzane przez Google i tylko właściciel konta może je odzyskać.

Teraz, łącząc poprzedni exploit z tym, haker może najpierw wygenerować prawidłowy token dostępu o zakresie https://www.google.com/accounts/OAuthLogin . Mając ten token dostępu, osoba atakująca może wysłać żądanie GET do https://devicepasswordescrowforwindows-pa.googleapis.com/v1/getprivatekey/< Resource_id > (nieudokumentowany punkt końcowy API).

Odpowiedź na to żądanie będzie zawierać prywatny klucz RSA wymagany do odszyfrowania pola hasła. Format pola hasła jest następujący:

Początkowe bajty (0-255) reprezentują rozmiar klucza RSA w bajtach, po których następują AES_GCM_KEY i AES_GCM_NONCE (każdy o długości 16 bajtów).

Kolejne bajty od 256 do łącznej długości minus 16 zawierają zaszyfrowaną strukturę JSON przechowującą hasło, przy użyciu szyfrowania AES GCM z użyciem wspomnianych wcześniej kluczy.

Ostatnie 16 bajtów reprezentuje MAC (kod uwierzytelnienia wiadomości) z poprzedniego pola.

Ta metoda umożliwia atakującemu uzyskanie dostępu do hasła użytkownika i jego odszyfrowanie.

Wnioski i rekomendacje

Zidentyfikowane metody ataków na Google Workspace stanowią ryzyko dla cyberbezpieczeństwa, należy jednak pamiętać, że wymagają one najpierw złamania zabezpieczeń urządzenia lokalnego.

Wykrywaj i reaguj: priorytetem każdej firmy powinno być wzmocnienie zdolności Twojej organizacji do wykrywania i reagowania. Zainwestuj w zaawansowane rozwiązania do wykrywania zagrożeń, takie jak GravityZone XDR lub Bitdefender MDR, aby szybko identyfikować i reagować na nietypowe lub nieautoryzowane próby dostępu.

Plan reagowania na incydenty: opracuj i utrzymuj plan reagowania na incydenty, aby skutecznie reagować na zagrożenia związane z urządzeniami lokalnymi. Plan ten powinien określać procedury badania, łagodzenia skutków i odzyskiwania danych po incydentach związanych z bezpieczeństwem.

Zrzut ekranu przedstawiający automatycznie wygenerowany opis komputera

Próba odzyskania hasła wyświetlana w pliku Doradca ds. incydentów.

GravityZone XDR zawiera już detekcje tych zaawansowanych technik. Te wykrycia są oznaczone etykietą GoogleWorkspacePasswordRecoveryAttempted, GoogleWorkspaceRefreshTokenAccesse, GoogleWorkspaceLogoutForced.


Autor


Piotr R

Account Manager, od ponad roku pracuję w branży IT i od ponad 5 lat jestem copywriterem. Do moich zadań należy nawiązywanie współpracy partnerskich, pisanie i redagowanie tekstów, kontakt z dziennikarzami, tworzenie notatek prasowych oraz zamieszczanie ich na stronach internetowych i w naszych mediach społecznościowych. Wcześniej byłem przez kilka lat związany z branżą OZE oraz z technologiami telemetrycznymi i elektronicznymi. Interesuję się językoznawstwem, literaturą, grą na gitarze oraz branżą gier.

Zobacz posty autora


Artykuły które mogą Ci się spodobać

    Formularz kontaktowy

    Wybierz odpowiednią opcję aby przejść do formularza kontaktowego. Odpowiemy najszybciej jak to możliwe!

    klient-indywidualnyklient-biznesowyreseller

    Dane kontaktowe




    stalynowy