Wyślij wiadomość

Aktualności

March 11, 2021

Permanentne zagrożenie dla bezpieczeństwa DRAM

Dobrze znana luka DRAM zwana „rowhammer”, która umożliwia napastnikowi zakłócenie lub przejęcie kontroli nad systemem, nadal prześladuje przemysł chipów.Wypróbowano rozwiązania i proponowane są nowe, ale potencjał poważnego ataku nadal istnieje.

Po raz pierwszy odkryto około pięć lat temu, większość wysiłków podejmowanych w celu wyeliminowania zagrożenia „młotem młotkowym” przyniosła niewiele więcej niż złagodzenie problemu.

„Rowhammer to duży problem” - powiedziała Barbara Aichinger, wiceprezes FuturePlus.„Sprzedawcy twierdzą, że zostało to„ naprawione ”, ale tak nie było.Jeśli spojrzysz tylko na wiele artykułów opublikowanych w 2020 roku, zobaczysz wiele dowodów na to ”.

Istnieje wiele sposobów blokowania młota wioślarskiego, chociaż jak dotąd żaden nie został powszechnie przyjęty jako ostateczny i decydujący.Ograniczenia można znaleźć na poziomie oprogramowania, przeglądarki oraz sprzętu w DRAM-ach i kontrolerach pamięci.Ale to tylko próba udaremnienia ataków.Nie rozwiązują problemu u pierwotnej przyczyny.Jedna firma twierdzi teraz, że ma rozwiązanie.

Podstawy Rowhammera
Rowhammer pojawia się jako niezamierzona konsekwencja sposobu, w jaki powstaje DRAM.Ten proces jest starannie opracowanym sposobem na przeniesienie jak największej liczby bitów do krzemu za jak najmniejsze pieniądze.Sama zmiana procesu to nie lada wyczyn.Fakt, że nie możemy zniweczyć sposobu, w jaki budujemy ogromne ilości pamięci - wraz z ciągłą obietnicą, że środki zaradcze są wystarczające - uniemożliwił rozwiązanie pierwotnych przyczyn.

Problem występuje na poziomie matrycy, wzdłuż ścian, które zostały wytrawione w ramach procesu produkcyjnego.Ten proces wytrawiania pozostawia niedoskonałości lub pułapki, które mogą wychwytywać elektrony i je trzymać.Gdyby te elektrony pozostały w pułapkach, może to nie być tak duży problem.Ale później w cyklu dostępu do pamięci te elektrony mogą zostać uwolnione.Stamtąd mogą dryfować, potencjalnie kończąc w sąsiedniej komórce.

„Za każdym razem, gdy przełączasz rząd z wyłączonego na włączony i wyłączony, następuje wdmuch elektronów do podłoża” - powiedział Andy Walker, wiceprezes ds. Produktu w Spin Memory.„Niektóre z tych elektronów będą migrować i być wychwytywane przez pobliskie węzły”.

najnowsze wiadomości o firmie Permanentne zagrożenie dla bezpieczeństwa DRAM  0

Rys. 1: Pułapki wzdłuż ściany bocznej (po lewej) wychwytują elektrony, które pozostają tam tymczasowo (w środku).Później można je uwolnić i migrować do innych komórek (po prawej).Źródło: IEDM / Micron

Komórka bitowa DRAM to nic innego jak kondensator, który przechowuje ładunek, wraz ze środkami do ładowania i wyładowywania podczas pisania oraz określania, ile jest tam naładowanych podczas odczytu.Kondensatory mogą przeciekać, a sam proces odczytu jest destrukcyjny.Tak więc kondensator musi mieć odświeżoną wartość zaraz po jego odczycie lub, jeśli nie ma do niego dostępu przez długi czas, to z określoną z góry częstotliwością.

Podstawową kwestią jest tutaj to, że stan ogniwa jest określany przez ładunek kondensatora, a ładunek ten jest wrażliwy między cyklami odświeżania.Dryfujące elektrony mogą migrować do komórki, zmieniając ładunek w komórce.Jeśli zostanie to zrobione zbyt wiele razy, może się zgromadzić wystarczający ładunek, aby zmienić postrzegany stan komórki.

W tym miejscu pojawia się „młotkowa” część młota młotkowego. Pomysł jest taki, że jeśli dany wiersz zostanie odczytany wystarczająco dużo razy, zanim nastąpi odświeżenie, powtarzające się mini-wybuchy tych błędnych elektronów mogą zmienić sąsiednią komórkę.W rzeczywistości na niedawnej konferencji IEDM Naga Chandrasekaran, starszy wiceprezes ds. Rozwoju technologii w firmie Micron, zauważyła, że ​​przy kurczących się wymiarach podatne na ataki mogą być nie tylko sąsiednie rzędy.Gdy rzędy zbliżają się do siebie, może to mieć również wpływ nawet na prawie sąsiednie rzędy - dwa lub nawet więcej rzędów dalej - również.

Od zjawiska do ataku
Potrzeba sprytnego myślenia, aby przeanalizować to zjawisko i dowiedzieć się, jak można je wykorzystać do ataku na system.Chociaż wydaje się, że nie było jeszcze żadnych poważnych ataków czarnego kapelusza, pojawiło się wiele artykułów naukowych ilustrujących młot wioślarski jako sposób na przejęcie kontroli nad systemem.

„Niektóre godne uwagi demonstracje ataku obejmują podniesienie uprawnień na wyższy poziom systemu (np. Administratora), zrootowanie telefonu z systemem Android lub przejęcie kontroli nad tym, co powinno być chronioną maszyną wirtualną” - powiedział John Hallman, menedżer produktu ds. Zaufania i bezpieczeństwa w OneSpin Rozwiązania.

Patrząc od góry systemu w dół i od dołu chipa w górę, mamy do czynienia z dwoma dużymi wyzwaniami.Pierwsza polega na tym, aby wiedzieć, gdzie w pamięci znajdują się krytyczne dane systemowe.Drugi wymaga wiedzy o tym, które rzędy fizycznie sąsiadują.Specyficzny układ chipa jest ważny, a producenci chipów zwykle utrzymują go w tajemnicy.Nie można zakładać, że fizyczny układ pamięci wykonany przez jednego dostawcę będzie taki sam, jak u innego dostawcy.

Wszystko to sprawia, że ​​młot wioślarski jest trudny, ale w żadnym wypadku nie niemożliwy, do przekształcenia się w skuteczny atak.Podczas gdy szczegóły różnych ataków są przedstawione w wielu raportach badawczych szczegółowo opisujących wyniki, kilka przykładów pokazuje, że uzyskanie pełnej kontroli nad jakąś losową częścią pamięci nie jest tak dużym wyzwaniem, jak uzyskanie kontroli nad strategicznymi lokalizacjami - a tym samym przejęcie kontroli nad całym systemem.

Jednym z atrakcyjnych miejsc docelowych są tabele używane do zarządzania pamięcią.Określają zamierzone granice dla różnych uruchomionych procesów, w tym uprawnienia wymagane do uzyskania dostępu do różnych alokacji.Zamiast atakować pamięć główną, atakowanie tych tablic stron oznacza, że ​​podczas jednej edycji ograniczony proces może zmienić się w taki sposób, że większa część (lub całość) pamięci - w tym bezpieczne bloki - będzie dostępna dla atakującego.Dzięki tej jednej zmianie system został teraz otwarty na dalszą eksploatację.

Jeśli chodzi o określenie, który rząd wbić - a następnie wbić go młotkiem - powszechne użycie pamięci podręcznej sprawia, że ​​jest to trudniejsze.Jeśli napiszesz program, który po prostu wielokrotnie uzyskuje dostęp do jakiejś lokalizacji w pamięci, nie będziesz wykorzystywać zjawiska młota wierconego.Dzieje się tak, ponieważ pierwszy dostęp do pamięci spowoduje załadowanie zawartości do pamięci podręcznej, a wszystkie kolejne będą pobierane z pamięci podręcznej, a nie ponownie odczytywane.

To sprawia, że ​​obchodzenie się z pamięcią podręczną jest ważną częścią każdego exploita.Może to być łatwiejsze lub trudniejsze, w zależności od używanego procesora, ponieważ różne architektury mają różne zasady eksmisji pamięci podręcznej (a te z czysto deterministycznymi zasadami są bardziej zagrożone).To powiedziawszy jednak, określenie przylegania może obejmować wykonanie subtelnych obliczeń czasowych w celu określenia, czy dane są, czy nie są już w pamięci podręcznej lub w buforze wierszowym w pamięci DRAM.

Jeszcze trudniejszym atakiem jest fakt, że niektóre bity pamięci są bardziej podatne na atak niż inne.Może istnieć deterministyczna przyczyna, taka jak uczynienie określonego obszaru prawdopodobnym celem w wielu chipach lub może istnieć w nim jakiś element losowy.Dlatego nie każda komórka pamięci zareaguje na młot wioślarski w ten sam sposób.

Wpływ tych projektów jest uznaniem, że jest to realne zagrożenie, a nie teoretyczne, i to tylko kwestia czasu, zanim ktoś stworzy spustoszenie - zwłaszcza przy tak dużej liczbie komputerów przenoszonych do chmury, gdzie można uzyskać dostęp do niezliczonych serwerów i ich pamięci z dowolnego miejsca na świecie.

Środki łagodzące i obejścia
Jak dotąd, najbardziej widoczne wysiłki mające na celu przeciwdziałanie młotom udarowym nie rozwiązują podstawowej fizyki problemu;zapewniają sposoby obejścia problemu.Zostały wdrożone na wielu poziomach.

Na przykład użycie przeglądarki w celu uzyskania dostępu do zdalnego serwera sprawiło, że branża przeglądarek stała się interesariuszem.Ponieważ atak może obejmować subtelne pomiary czasu, przeglądarki ograniczyły szczegółowość dostępnego taktowania.Nie można już uzyskać dokładności na poziomie nanosekund.Zamiast tego mogą to być mikrosekundy - wciąż dokładne, ale tysiąc razy mniej dokładne i wystarczające, aby ograniczyć jeden sposób ataku.

„Główne przeglądarki złagodziły ten problem lub przynajmniej próbowały” - powiedział Alric Althoff, starszy inżynier ds. Bezpieczeństwa sprzętu w Tortuga Logic.„Wiele rzeczywistych poprawek jest opartych na oprogramowaniu i jest bardzo ukierunkowanych (np. Google Chrome złagodził problem z GLitch poprzez usunięcie rozszerzeń z implementacji webGL w 2018 r.).Ale głównym wnioskiem jest to, że luki w sprzęcie, których „nie można wykorzystać zdalnie”, czekają tylko na eksperyment, który pokazuje, że mogą, a „nie można ich wykorzystać” tak naprawdę oznacza, że ​​po prostu nie możemy wymyślić sposobu, aby zrób zdalny exploit już teraz ”.

W artykule retrospektywnym zaproponowano sześć wyidealizowanych rozwiązań.„Pierwsze sześć rozwiązań to: 1) wytwarzanie lepszych układów DRAM, które nie są podatne na ataki, 2) stosowanie (silnych) kodów korekcji błędów (ECC) do korygowania błędów wywołanych młotkiem, 3) zwiększenie częstotliwości odświeżania całej pamięci, 4) statyczne ponowne mapowanie / wycofywanie komórek podatnych na młotek rzędowy poprzez jednorazową analizę poprodukcyjną, 5) dynamiczne ponowne mapowanie / wycofywanie komórek podatnych na młotek rzędowy podczas działania systemu oraz 6) dokładne identyfikowanie młotkowanych wierszy w czasie wykonywania i odświeżanie ich sąsiadów. ”

Większość środków zaradczych skupia się na numerze 6. Numer 1 byłby pożądanym rozwiązaniem pierwotnej przyczyny.Numer 2 - ECC - może być używany, ale ma ograniczenia, które omówimy wkrótce.Numer 3 może być atrakcyjny, ale to ciągła pogoń bez końca.A cyfry 4 i 5 powodują znaczną złożoność na poziomie systemu.

Znaczna część działań mających na celu łagodzenie skutków została skupiona na niższym poziomie pamięci - podzielonej między sam układ DRAM a kontrolery, które znajdują się między DRAM a systemem.„W ramach cyklu odświeżania istnieje okno, w którym takie ataki przekraczają określoną wartość” - powiedział Vadhiraj Sankaranarayanan, starszy kierownik ds. Marketingu technicznego w firmie Synopsys.„Wtedy rozwiązania można budować w dowolnym miejscu - w kontrolerze lub w pamięci DRAM.Wymaga drogiego sprzętu i jest energochłonny.Chcemy jednak, aby pamięć była bezpieczna, ponieważ dane są tu królem ”.

Jednym ze sposobów zapobiegania atakom jest policzenie liczby wejść w danym wierszu między odświeżeniami.Jeśli próg zostanie przekroczony, uniemożliwiasz dalszy dostęp.Chociaż koncepcja może wydawać się prosta, trudno ją zastosować w praktyce.Nie ma dobrych modeli wspomnień odmawiających dostępu, które w innym przypadku wydają się uzasadnione.Tak więc konieczne byłyby decyzje z powrotem do systemu, co zrobić, jeśli żądanie odczytu zostanie odrzucone.Czy to oznacza, że ​​kontroler zatrzymuje się, czeka i próbuje ponownie?Czy w grę wchodzi system operacyjny?Czy aplikacja ostatecznie kończy się niepowodzeniem?

Dwie nowe możliwości dodane do standardów pamięci JEDEC dostarczyły innej odpowiedzi.Jedna nowa funkcja nazywa się odświeżaniem wiersza docelowego lub TRR.Pomysł polega na tym, że podczas gdy pamięci DRAM są ustawione na odświeżanie po odczytach i zgodnie z harmonogramem, potrzebny jest mechanizm o większej szczegółowości do wykonywania jednorzędowych odświeżeń na żądanie.Jeśli ktoś lub coś - w pamięci lub w kontrolerze - wykryje, że atak może być w toku, może wydać odświeżenie odpowiedniego wiersza i cofnąć wszelkie uderzenia, które mogły wystąpić do tego momentu.

„Kontroler kontynuuje monitorowanie, a jeśli podejrzewa, że ​​dany wiersz lub wiersze są atakowane, natychmiast dowiaduje się, jakie są możliwe ofiary” - powiedział Sankaranarayanan.„Następnie przełącza pamięci DRAM w tryb TRR i może wysyłać proaktywne odświeżenia do tych wierszy ofiar, aby zapobiec utracie ich pierwotnego stanu”.

Monitorowanie można alternatywnie wdrożyć w samych DRAM, kosztem rozmiaru matrycy i mocy.„Pamięci DRAM mogą również mieć liczniki” - dodał Sankaranarayanan.„Jest energochłonny, ale niektóre mają liczniki, które mogą monitorować trwałe dostępy”.

Zentel oferuje rozwiązanie, które określa jako DRAM „bez młota”.„W przypadku pamięci DRAM 2 Gb i 4 Gb DDR3 (węzeł 25 nm), Zentel stosuje zastrzeżony schemat ochrony młota typu rowhammer ze zintegrowaną kombinacją sprzętową wielu liczników i pamięci SRAM w celu monitorowania liczby aktywacji wierszy i odświeżania wiersza ofiary tak szybko, jak to określone maksimum liczba została osiągnięta ”- powiedział Hans Diesing, dyrektor sprzedaży w Zentel.Zapewnia to odpowiedź, która nie powinna mierzalnie wpływać na wydajność ani być widoczna poza pamięcią DRAM.

To rozwiązanie ma oczywiście swoją cenę.„Dodatkowa struktura sprzętowa zwiększa liczbę chipów, a ze względu na mniejszą wydajność płytek nie jest tak konkurencyjna pod względem kosztów i ceny w porównaniu z resztą branży” - dodał.„Ale ta wersja bez młota wioślarskiego została zaprojektowana na żądanie klientów z branży dysków twardych”.

TRR nie zadowoliło jednak wszystkich graczy.„Ogólnie rzecz biorąc, dostawcy pamięci DRAM i dostawcy kontrolerów potajemnie zajmują się TRR” - powiedział Sankaranarayanan.W rzeczywistości, zamiast być tylko jednym środkiem łagodzącym, TRR wydaje się być parasolem dla wielu środków łagodzących, z których wiele można ominąć.„Niestety TRR opisuje zbiór metod, z których wiele nie działa” - powiedział Althoff.„Dlatego nie jest to środek łagodzący jako taki, a jedynie rodzina środków zaradczych”.

Chociaż TRR może być w stanie chronić przed jednostronnymi (jeden sąsiedni rząd ataku) lub dwustronnymi (oba sąsiednie rzędy jako atakujące), nie może pomóc w przypadku ataków „wielostronnych” - wiele rzędów pracuje w tym samym czasie .Opracowano nawet narzędzie, które pomaga dowiedzieć się, jak zmodyfikować ataki w obecności TRR, aby nadal były skuteczne.

Kody korekcji błędów (ECC) są również postrzegane jako możliwe rozwiązanie.Pomysł, że istnieje wiersz, może być uszkodzony, ale uszkodzenie to zostanie poprawione podczas procesu odczytu.Może tak być w przypadku wierszy, w których jeden lub więcej bitów został uszkodzony, ale - biorąc pod uwagę, że wbija się cały wiersz, a nie tylko jego fragmenty - może być więcej błędów niż może poprawić ECC.„Jedną z podstawowych zabezpieczeń przed tym atakiem była korekcja kodu błędu (ECC), chociaż nawet teraz napastnicy zaczynają identyfikować sposoby obejścia tych zabezpieczeń” - zauważył Hallman.

Ponadto niektóre implementacje ECC poprawiają tylko odczytywane dane, a nie oryginalne dane w wierszu.Pozostawienie nieprawidłowego bitu na miejscu oznacza, że ​​przyszłe odświeżenia wzmocnią błąd, ponieważ odświeżanie przywraca to, co już tam jest, zamiast przywracać go do jakiegoś znanego złotego stanu odniesienia.Uniknięcie tego oznaczałoby użycie ECC do określenia nieprawidłowych bitów i skorygowania ich w pamięci.

Jest też nowe polecenie kontrolera zwane zarządzaniem odświeżaniem (RFM).„RFM jest zgodny ze standardem JEDEC dla DDR5, ale nie zostało to jeszcze ocenione przez szerszą publiczność w dziedzinie bezpieczeństwa” - powiedział Althoff.„Tak więc, chociaż wydaje się koncepcyjnie dobry, nie został przetestowany, a więc nie jest znanym złagodzeniem, tylko przypuszczalnym”.

Wzorzec jest taki, a inne środki zaradcze są publikowane, a świat akademicki stara się udowodnić, że nadal mogą obejść te środki.I w większości mieli rację.

Obecnie pojawia się dodatkowa obawa, biorąc pod uwagę fakt, że większość środków zaradczych koncentruje się na systemach opartych na procesorach.Procesory graficzne mogą stanowić alternatywny sposób ataku na system, więc również i tam należy zwrócić uwagę.

„Branża pracuje nad złagodzeniem tego zagrożenia od 2012 roku, stosując techniki takie jak Target Row Refresh (TRR) będący częścią standardów DDR3 / 4 i LPDDR4 oraz Zarządzanie odświeżaniem (RFM) w specyfikacjach DDR5 i LPDDR5” - powiedziała Wendy Elsasser, wybitny inżynier w Arm.„Jednak nawet przy tych i innych technikach ograniczania ryzyka, ponieważ wewnętrzne układy DRAM są zastrzeżone, ataki typu młot wiercący są szczególnie trudne do złagodzenia”.

Czy można rozwiązać fundamentalną kwestię?
Święty Graal z tym problemem był sposobem na powstrzymanie migrujących elektronów przed zakłócaniem komórek.Robienie tego w sposób, który nie zakłóca całego procesu DRAM ani nie sprawia, że ​​DRAM staje się nieosiągalny, było dużym wyzwaniem.Dlatego tak duży nacisk kładziono na rozwiązanie problemu pośrednio, poprzez środki łagodzące, zamiast rozwiązywania go bezpośrednio.Jednak w przypadku ciągłych ataków na środki zaradcze pożądane byłoby rozwiązanie pierwotnej przyczyny.

„To jest argument za sprzętowym rozwiązaniem problemu sprzętowego” - powiedział Althoff.„Jeśli sprzęt jest podatny na ataki, przeniesienie odpowiedzialności za łagodzenie skutków na oprogramowanie - lub jakikolwiek wyższy poziom abstrakcji - jest równoważne z [popularnym memem pokazującym wyciek wody zatkany taśmą klejącą]”.

Jedna firma twierdzi, że znalazła takie rozwiązanie - prawdopodobnie przez przypadek.Spin Memories (niegdyś STT, producent MRAM) stworzył nowatorski selektor, który pomógłby zmniejszyć obszar wymagany dla komórki pamięci bitowej.Wiele komórek bitowych składa się z pojedynczego elementu (takiego jak rezystor, kondensator lub tranzystor), ale wymagają one sposobu na wyłączenie, aby nie zostały przypadkowo zakłócone, gdy uzyskuje się dostęp do innej powiązanej komórki.Z tego powodu do każdej komórki bitowej dodawany jest dodatkowy tranzystor „selektorowy”, co powoduje, że komórka bitowa jest większa.

Firma Spin Memories odkryła, że ​​może wziąć stronę z książki 3D NAND - sprawiając, że tranzystor będzie działał pionowo z otaczającą bramką - i umieści ją pod komórką pamięci, a nie obok niej.Taki układ stosowy zmniejszyłby zatem rozmiar tablicy pamięci.

„Może być następnie użyty do dowolnego przełącznika rezystancyjnego, takiego jak ReRAM, CBRAM, CERAM i PCRAM - dowolnego rezystora z dwoma zaciskami, który wymaga prądu lub napięcia do przełączenia” - powiedział Walker.„To pionowa bramka dookoła tranzystora oparta na selektywnej epitaksji.To wysokonapięciowe urządzenie w 3D NAND, które dostosowujemy do naszych bardzo niskonapięciowych aplikacji.Wymaga dużego napędu i niewielkich wycieków, co w materiałoznawstwie przekłada się na to, że kanał urządzenia musi być monokrystaliczny. ”Stąd epitaksja zamiast osadzania.

Daje to tranzystorowi dwie krytyczne cechy, które czynią go pretendentem do pełnego rozwiązania typu młot udarowy.Jednym z nich jest to, że użyty silikon jest osadzany epitaksjalnie nad płytką, a nie jest wytrawiany w płytce.Ponieważ trawienie jest głównym źródłem pułapek, które wychwytują elektrony w pierwszej kolejności, wyeliminowanie tych miejsc znacznie zmniejsza, a nawet eliminuje źródło problemu.

Drugą cechą charakterystyczną jest ukryta warstwa typu n, która skutecznie blokuje zabłąkane elektrony, z dowolnego źródła, zakłócające komórkę bitową.Jeśli zostanie to potwierdzone, skutecznie wyłączyłoby to mechanizm młota udarowego.

najnowsze wiadomości o firmie Permanentne zagrożenie dla bezpieczeństwa DRAM  1

Rys. 2: Po lewej stronie, elektrony uwięzione w ogniwie agresora mogą dryfować do sąsiedniego ogniwa i zmieniać ładunek na kondensatorze.Po prawej, nowo zaproponowana struktura wykorzystuje epitaksję, tworząc mniej pułapek, a region z domieszkami n blokuje dostęp do komórek bitowych jakimkolwiek błędnym elektronom.Źródło: pamięć wirowania.

Spin, we współpracy z NASA i Imec, publikuje artykuł (obecnie za paywallem), w którym szczegółowo opisano rozwiązanie.Jak każda taka propozycja, musi krążyć wśród społeczności zajmującej się bezpieczeństwem, stawiając czoła wyzwaniom i testom, zanim zostanie zaakceptowana jako ostateczna.

Udowodnienie skuteczności mitygacji nie jest łatwe i wymaga starannego modelowania ataków - przynajmniej tych znanych.„Korzystając z naszych narzędzi do wstrzykiwania i wykrywania błędów, możemy współpracować z klientami przy modelowaniu ataków i zademonstrowaniu ich wpływu na pamięć” - powiedział Hallman.„Może to zidentyfikować obszary, w których nadal mogą wyciekać informacje”.

Wyzwaniem jest również udowodnienie skuteczności naprawy na poziomie krzemu na podstawie pierwszych zasad.„DRAM to twarde IP, a atak wykorzystuje fizykę, więc potrzebowałbyś czegoś z precyzją rzędu SPICE lub ukierunkowanej alternatywy, aby zweryfikować z pewnością przed krzemem” - powiedział Althoff.

Ale dowody na zarówno ograniczenia, jak i poprawki są konieczne w ostrożnej branży.„Spin nie jest pierwszą firmą, która próbuje wyprodukować pamięć DRAM odporną na młot udarowy” - zauważył Aichinger z FuturePlus.„Dyskutuje się o kilku nowych strategiach łagodzenia zmiany klimatu, o których w 2021 r. Powinieneś usłyszeć więcej”. (Od Marka)

Szczegóły kontaktu