bezpieczeństwo otwartych rozwiązań programowych bezzałogowych platform latających [secure 2014]
DESCRIPTION
W ostatnim czasie daje się zauważyć gwałtowny wzrost zainteresowania tematyką bezzałogowych platform latających (BPL), jest to spowodowane coraz powszechniejszym dostępem do tego typu gotowych obiektów oraz coraz większą liczbą otwartych rozwiązań, które często służą jako podstawa do budowania takiego systemu. Ze względu na fakt, iż coraz więcej osób (gdzie znaczną większość stanowią amatorzy) buduje a następnie obsługuje BPL, zasadne zaczyna być pytanie o bezpieczeństwo ich użytkowania. W prezentacji zostanie przedstawiona analiza kodu źródłowego najpopularniejszych otwartych rozwiązań. Analiza dotyczyć będzie zarówno zagadnienia komunikacji, poprawności implementacji, zastosowanych algorytmów regulacji oraz przetwarzania danych pomiarowych. Prezentacja jest zorganizowana w następujący sposób: na początku przedstawione zostaną podstawowe pojęcia związane z platformami bezzałogowymi, ich charakterystyka, podstawowe oprzyrządowanie oraz obecne trendy rozwojowe. Następnie zaproponowany będzie zestaw warunków bez spełnienia których system bezzałogowy nie będzie można uważać za bezpieczny. Pod kątem tych warunków zostanie przeprowadzona analiza kodu najpopularniejszych otwartych rozwiązań, wraz z przedstawieniem możliwych ataków mogących być przeprowadzonych przeciwko BPL opartej na danym rozwiązaniu. Prezentacja zostanie zakończona przykładowym zestawem testów jakie naszym zdaniem powinien przejść system nim zostanie uznany za bezpieczny.TRANSCRIPT
Bezpieczeństwo Otwartych RozwiązańProgramowych Bezzałogowych Platform Latających
Wojciech Janusz [email protected]
Mateusz Kocielski [email protected]
Borys Łącki [email protected]
LogicalTrust
Secure 2014Warszawa, 22 października 2014
LogicalTrust
Naszą misją jest ochrona naszych Klientów przed realnymi stratamifinansowymi. Wykorzystując ponad 10 lat doświadczenia, świadczymyusługi z zakresu bezpieczeństwa IT:
I testy penetracyjneI audyty bezpieczeństwaI szkoleniaI konsultacjeI informatyka śledczaI bezpieczeństwo aplikacji mobilnych
O nas
I Borys ŁąckiI SECURE, Atak i Obrona, Internet Security Banking, SecureCON,
SEConference, SekIT, ISSA, Open Source Security, PLNOG, ...I 7 lat blogowania o cyberprzestępcach: www.bothunters.pl
I Wojciech JanuszI Unmanned Unmanned Aircraft Systems (ICUAS) 2013, 14th
International conference of young specialists onmicro/nanotechnologies and electron devices EDM 2013
I Doktorant - Politechnika Śląska (platformy bezzałogowe)I Mateusz Kocielski
I Confidence, SecDay, SecurityBSides, OWASPI (co-)Autor raportów dot. Apache, OpenSSH, Stunnel, PHP,
Microsoft IIS, NetBSD (CVE-2014-5015, CVE-2014-0226,CVE-2014-0117, CVE-2013-1762, ...)
I członek projektów PHP, NetBSD
Platformy bezzałogowe
Platformy bezzałogowe możemy podzielić na:I naziemne (Unmanned Ground Vehicles)I latające (Unmanned Aerial Vehicles, Remotely Piloted Aircraft
Systems)I pływające: nawodne i podwodne (Unmanned Surface/Underwater
Vehicles)
Pojazd mogący posiadać różny stopień autonomii, na pokładzie któregonie są przewożone osoby np.:
I zdalne sterowanie ruchem platformyI autonomiczna realizacja zadanej trajektoriiI autonomiczne generowanie i realizacja trajektorii
Bezzałogowe platformy latające (BPL)
I platformy wielowirnikoweI płatowceI inne
Źródła: http://upload.wikimedia.org/wikipedia/commons/0/08/MQ-1_Predator_unmanned_aircraft.jpghttp://www.dnip.pl/2013/theme/wystawcy/aei/2.jpg
Stan prawny
W Polsce w przypadku lotów innych niż rekreacyjne i sportowe należyposiadać:
I świadectwo kwalifikacji (trzeba zdać egzamin!)I badania lotniczo-lekarskie odpowiedniej klasyI ubezpieczenie OC
Bezzałogowce cięższe niż 25 kg muszą uzyskać pozwolenie na wykony-wanie lotów w kategorii specjalnej, natomiast loty poza zasięg wzrokuoperatora możliwe są jedynie w wydzielonych strefach.1
(1) ”Raport o aktualnym stanie prawnym odnoszącym się do bezzałogowych statków powietrznych ”, Urząd LotnictwaCywilnego”, ”Rozporządzenie Ministra Transportu, Budownictwa i Gospodarki Morskiej z dnia 26 marca 2013 r. w sprawiewyłączenia zastosowania niektórych przepisów ustawy – Prawo lotnicze do niektórych rodzajów statków powietrznych orazokreślenia warunków i wymagań dotyczących używania tych statków”
Stan prawny c.d.Brak w regulacjach, ograniczeń dotyczących odbywania lotów w pobli-żu zabudowań lub skupisk ludzkich (jak ma to miejsce np. w WielkiejBrytanii).
Źródło: https://twitter.com/sikorskiradek
Stan prawny - egzamin
Źródło: http://www.ulc.gov.pl/_download/personel_lotniczy/szkolenie/biuletyn_11_04_2014.pdf
Stan prawny - egzamin
Źródło: http://www.ulc.gov.pl/_download/personel_lotniczy/szkolenie/biuletyn_11_04_2014.pdf
Gdzie są wykorzystywane bezzałogowce
I wykonywanie mapI akcje ratunkoweI filmowanie wydarzeń masowychI inspekcja infrastruktury przemysłowejI monitorowanie stanu środowiskaI monitorowanie granicI dostarczanie ładunku
Zastosowanie bezzałogowców c.d.
Źródła: https://www.facebook.com/video.php?v=10152433577871801&set=p.10152433577871801&type=2&theaterhttps://www.youtube.com/watch?v=pfLCb4ewDDc
Zastosowanie bezzałogowców c.d.
Źródła: http://www.deccanchronicle.com/141009/world-middle-east/article/drone-captures-isis-member-having-sex-donkey
http://www.hrw.org/reports/2013/10/22/between-drone-and-al-qaeda-0
Zastosowanie bezzałogowców c.d.
Dron-ptak rozbity w sierpniu 2011 r. w Pakistanie.
Źródło: http://www.wired.com/2011/08/weird-birdlike-mystery-drone-crashes-in-pakistan/
Spektakularne w(y)padkiStatki bezzałogowe są podatne na problemy związane z utratą łącznościz operatorem, utratą lub zakłóceniem sygnału GPS.
I Iran–U.S, RQ-170 - przypuszczenia o wykorzystaniu techniki GPSspoofing, celem przejęcia amerykańskiej maszyny
I zaginiony polski dron (FlyEye) - maj 2014 r.I Internetowa baza doniesień o wypadkach wojskowych BPL:http://dronewars.net/drone-crash-database/
Zagrożenia
I częste korzystanie z kanałów łączności, nieprzystosowanych dotego typu zastosowań
I przeprowadzanie lotów w pobliżu ludzi lub zabudowańI niedoskonałe rozwiązania sprzętowe lub programoweI brak świadomości zagrożeń spowodowany popularnością
”dronów”
Czy poważny wypadek to tylko kwestia czasu?Osobną kwestią jest ochrona prywatności!
Ładunek platformyI kamery (światła widzialnego, podczerwieni)I skanery laserowe terenuI czujniki pomiarowe gazu (w aplikacjach monitorowania stanu
środowiska)I brońI wiele, wiele innych
Źródło: http://i00.i.aliimg.com/wsphoto/v0/877589416_1/Brushless-motor-Control-Gimbal-PTZ-Camera-Mount-for-Card-Camera-Gopro-ILDC-FPV.jpg
Stacja kontroli naziemnej
Interfejs, za pomocą którego możliwe jest sterowanie oraz definiowaniezadań realizowanych przez platformę:
I wizualizacja stanu platformyI umożliwienie manualnego sterowania platformąI interfejs definiowania misji
Źródła: http://www.uavm.com/images/291_E-4-1_Ground_Co_CrSep15_0406PM.jpg
Jak działa BPL?
Układ sterowaniaW jaki sposób operator wysyła komendy do BPL?
SKN
BPLWysyłanie poleceń
Wysyłane polecenia mogą zawierać:I informację o zadanej orientacji platformyI zadaną wysokość, na której ma znajdować się platformaI zadane położenie geograficzneI zadaną trasę przelotuI bardziej skomplikowane polecenia związane z coraz większym
stopniem autonomii BPL
Układ sterowania
Skąd platforma wie w jaki sposób oddziaływać na silniki, by realizowaćotrzymywane polecenia?
Fizyczne oddziaływanie
Regulator
Jednostki
napędowe
Urządzenia
pomiarowe
DO SKNZ SKN
Dynamika
platformy
Sygnały sterujące
Przetworzona informacjapomiarowa
Wielkości fizyczne
Co może pójść źle? (Wybrane przypadki!)
Urządzenia
wykonawcze
Ładunek
Autopilot
Regulacja
Logika
Moduł
radiowyStacja kontroli
naziemnej
Dynamika
platformy
Przetwarzanie
danych pom.
Układ
pomiarowy
Software + Implementacja
Bezzałogowa Platforma Latająca
Otoczenie
Wpływ otoczenia
Zasilanie
Brak lub błędna informacja pomiarowa
I zakłócenie sygnału GPSI awarie systemów pomiarowychI GPS spoofing
Co może pójść źle? (Wybrane przypadki!) c.d.
Urządzenia
wykonawcze
Ładunek
Autopilot
Regulacja
Logika
Moduł
radiowyStacja kontroli
naziemnej
Dynamika
platformy
Przetwarzanie
danych pom.
Układ
pomiarowy
Software + Implementacja
Bezzałogowa Platforma Latająca
Otoczenie
Wpływ otoczenia
Zasilanie
Błędy w implementacji autopilota
I błędy w oprogramowaniu autopilotaI błędy w sprzęcie
Co może pójść źle? (Wybrane przypadki!) c.d.
Urządzenia
wykonawcze
Ładunek
Autopilot
Regulacja
Logika
Moduł
radiowyStacja kontroli
naziemnej
Dynamika
platformy
Przetwarzanie
danych pom.
Układ
pomiarowy
Software + Implementacja
Bezzałogowa Platforma LatającaOtoczenie
Wpływ otoczenia
Zasilanie
Zakłócenia lub brak komunikacji
I zakłócenie komunikacjiI podsłuchanie komunikacjiI spoofing przesyłanych pakietówI opóźnianie przesyłanych pakietów
Co może pójść źle? (Wybrane przypadki!)
Urządzenia
wykonawcze
Ładunek
Autopilot
Regulacja
Logika
Moduł
radiowyStacja kontroli
naziemnej
Dynamika
platformy
Przetwarzanie
danych pom.
Układ
pomiarowy
Software + Implementacja
Bezzałogowa Platforma LatającaOtoczenie
Wpływ otoczenia
Zasilanie
Błędy w oprogramowaniu stacji bazowej
I błędy w oprogramowaniu stacji bazowejI atak na stację bazową (np. poprzez złośliwe oprogramowanie)
Najbardziej prawdopodobne awarie BPL
Awaria
Inne przyczyny awarii:I mechaniczne uszkodzenia (np. czy złącza są zabezpieczone przed
drganiami?)I awarie silników, ich kontrolerów, uszkodzenia śmigiełI błędy spowodowane niewłaściwą obsługą BPL! (czynnik ludzki)I inne...
Najbardziej prawdopodobne awarie BPL
Niemożliwym zadaniem jest opracowanie systemu, który byłby odpornyna wszelkie ewentualności.
Spróbujmy sformułować zestawu zaleceń, które mogłyby służyć jakopodstawa do budowy bezpiecznego systemu.
”Bezpieczna” BPL
Rozpatrywana platforma:I operowanie platformą odbywa się na dystansie umożliwiającym,
utrzymywanie z nią kontaktu wzrokowego,I autonomia platformy ogranicza się do stabilizacji jej orientacji,
wysokości nad ziemią oraz trybu utrzymywania danej pozycji,I w skład systemu wchodzą BPL oraz SKN z manipulatorami.
”Bezpieczna” BPL
Zalecenia będą dotyczyć trzech składowych systemu:I oprogramowania autopilota,I stacji kontroli naziemnej,I komunikacji pomiędzy BPL, a SKN.
Zalecenia (Testy)Zalecenia (Testy)
Autopilot
Polecenia z SKN
Sygnały pom.
Dane do SKN
Sygnały sterujące
Umownie można wyróżnić trzy funkcje:I realizacja zaimplementowanego prawa sterowania
odpowiedzialnego za sterowanie platformą,I część zawierająca logikę (np. zarządzanie fazami misji, obsługa
dodatkowych funkcji itd.),I część odpowiedzialna za przetwarzanie danych pomiarowych.
Autopilot - testy poprzez symulację HIL (Hardware In theLoop)
Autopilot
Regulacja
Logika
Moduł
radiowyStacja kontroli
naziemnej
Przetwarzanie
danych pom.
Software + Implementacja
"Bezzałogowa Platforma Latająca"
Symulowany wpływ otoczenia
Symulator BPL
I testy pracy w normalnych warunkach,I testy układu regulacji,I testy logiki autopilota,I zachowanie się autopilota w sytuacjach awaryjnych.
Proponowane testy
I Testy układu regulacji,I Testy logiki AP,I Zachowanie się AP w sytuacjach awaryjnych,I Testy SKN,I Testy komunikacji BPL z SKN.
Testy pracy w normalnych warunkach
I Jak zachowuje się autopilot podczas długiej pracy,I Jak zachowuje się autopilot podczas różnych faz lotu (start,
lądowanie, utrzymywanie pozycji itd.),I Czy utrzymywany jest stały cykl pętli sterowania we wszystkich
warunkach pracy?I Czy nie występują problemy związane z wielowątkowością
aplikacji autopilota, priorytetami przerwań itd.I Jak wygląda kwestia pracy autopilota gdy różne częstotliwości
pracy posiadają: czujniki pomiarowe, pętla sterowania, pętlakomunikacji z SKN.
Testy układu regulacji
I Jak zachowuje się układ regulacji w obliczu zakłóceń (zakłóceniapomiarowe, wiatr itd.),
I Czy jakość regulacji jest zadowalająca?I Czy BPL zachowuje stabilność w pełnym zakresie warunków w
jakich ma pracować?I Czy przebiegi sygnałów sterujących są zadowalające?I Jak układ regulacji radzi sobie ze zmianami parametrów obiektu?I Czy wyniki przetwarzania danych pomiarowych, są właściwe dla
pełnego zakresu sygnałów pochodzących z czujników?
Testy logiki AP
I Czy oprogramowanie autopilota wymusza zachowanie przyjętegociągu działań? (np. niemożność wyłączenia silników podczas lotu,konieczność przejścia procedury inicjalizacyjnej przedrozpoczęciem misji itd. ),
I Czy dane pochodzące od SKN są w jakikolwiek sposóbwalidowane? (np. wartości nastaw regulatorów, wartości zadane),
Zachowanie się AP w sytuacjach awaryjnych
I Jak zachowa się AP gdy dane pomiarowe będą przekłamane?(GPS spoofing, awaria jednego z czujników itd.),
I Jak zachowa się AP gdy przestanie otrzymywać pakiety ze SKNlub gdy będą one błędne?
I Jak zachowa się AP gdy zostanie wykryty niski poziom baterii?
Testy stacji kontroli naziemnej
I w jaki sposób zachowa się SKN na rozłączenie jej elementówpodczas pracy,
I jak zachowa się SKN podczas zatrzymania/restartuoprogramowania PC,
I jak zachowa się SKN podczas otrzymania błędnych danych zBPL,
I czy zachowana jest niezależność działania komunikacji ioprogramowania na PC,
I czy istnieje możliwość sterowania ręcznego BPL,I czy ewentualne interfejsy sieciowe udostępniane przez SKN są
bezpieczne?
SKN
Pożądane cechy SKN z punktu widzenia bezpieczeństwaI Możliwość sterowania ręcznego BPL w przypadku awarii PC,I Logowanie obustronnej komunikacji z BPL oraz stanu SKN,I Wyraźne informowanie o stanach alarmowych BPL oraz SKN,I Oprogramowanie stacji bazowej, skonstruowane w sposób
wymuszający bezpieczne użytkowanie systemu (np. w formie”checklisty” jaka musi być wypełniona przed rozpoczęciem misji),
I Niezależność działania komunikacji i oprogramowania na PC(brak zależności czasowej pomiędzy tymi elementami).
Testy SKN
Testowanie SKN podobnie jak poprzednio może być realizowane wstrukturze HIL.
I W jaki sposób zachowa się SKN podczas rozłączania/łączenia jejelementów podczas jej pracy,
I Jak zachowa się SKN podczas zatrzymania/restartuoprogramowania PC.
Komunikacja
Komunikacja z BPL do SKN
Komunikacja z SKN do BPL
Kluczowe kwestie dotyczące komunikacji:I czy komunikacja jest szyfrowana,I jak zachowa się system podczas utraty lub zagłuszenia
komunikacji?I czy zaimplementowano techniki gwarantujące zachowanie
integralności komunikacji?
Otwarte rozwiązania - Ardupilot
I otwarte rozwiązanie na licencji GPLv3I autopilot dla wielu platform bezzałogowych:
I ArduCopter - wielowirnikowceI ArduPlane - płatowiecI ArduRover - platforma jezdna
I popularny wśród zastosowań amatorskich
Otwarte rozwiązania - Ardupilot - architektura
SKN
AP
Ardupilot Różne obiekty bezzałogowe
Ardupilot - Lista kontrolnaProducent Ardupilota, udostępnia przykładową listę kontrolną poprze-dzającą start statku bezzałogowego:
Otwarte rozwiązania - Ardupilot - kod
I ok. 300 tysięcy linii kodu w języku C++I zestawy testów dostarczone z kodem (z obsługą valgrinda!)I changelog zawiera szczątkowe opisy błędówI wsparcie dla wielu platform sprzętowych m.in.:
I PX4 FMU - ARM 32-bitI Flymaple - ARM 32-bitI BeagleBone Black - ARM 32-bitI AP2 - AVR2560 8 bit
I kod zawiera:I sterowniki do sprzętu (GPS, magnetometr, etc.)I wysokopoziomową logikę (obsługa misji, tryby autopilota)I biblioteki do obsługi protokołów komunikacyjnychI kod specyficzny dla bezzałogowcaI kod testowy
Otwarte rozwiązania - Ardupilot - kod
ostrzeżenia kompilatora:ArduCopter/crash_check.pde: In function ’void parachute_check()’:ArduCopter/crash_check.pde:113:108: warning: comparison between signed andunsigned integer expressions [-Wsign-compare]
if (control_loss_count == 0 && parachute.alt_min() != 0 && (baro_alt <(uint32_t)parachute.alt_min() * 100)) {
Otwarte rozwiązania - Ardupilot - kod
AP InertialSensor/AP InertialSensor L3GD20.cppuint8_t AP_InertialSensor_L3GD20::set_samplerate(uint8_t frequency){
uint8_t bits = REG1_POWER_NORMAL | REG1_Z_ENABLE | REG1_Y_ENABLE |REG1_X_ENABLE;
if (frequency == 0)frequency = 760;
/* use limits good for H or non-H models */if (frequency <= 100) {
// _current_rate = 95;bits |= RATE_95HZ_LP_25HZ;
} else if (frequency <= 200) {// _current_rate = 190;bits |= RATE_190HZ_LP_50HZ;
} else if (frequency <= 400) {// _current_rate = 380;bits |= RATE_380HZ_LP_50HZ;
} else if (frequency <= 800) {// _current_rate = 760;bits |= RATE_760HZ_LP_50HZ;
} else {return -1;
}_register_write(ADDR_CTRL_REG1, bits);return 0;
}
Otwarte rozwiązania - Ardupilot - komunikacjaMAVLink - otwarty protokół przeznaczony dla obiektów bezzałogowych,za pomocą którego odbywa się komunikacja pomiędzy platformą, a sta-cją naziemną.
AP
MAVLink
SKNSKN
Awaryjne sterowanie ręczne
(opcjonalne)
Protokół MAVLink, ze względu na swoją popularność był już przedmio-tem rozważań na temat bezpieczeństwa 1. Wykazano możliwość prze-prowadzenia ataku Man In The Middle na system korzystający z tegoprotokołu oraz przejęcie platformy bezzałogowej.(1)Vulnerability Analysis of the MAVLink Protocol for Command and Control of Unmanned Aircraft Joseph A. Marty,
Otwarte rozwiązania i ich analiza - MAVLink
Komunikacja poprzez MAVLink, może bazować na takich protokołachjak ZigBee, Wi-Fi lub wykorzystywać inne technologie.
MAVLink
ZigBee Wi-Fi Inne
Jednym z popularniejszych rozwiązań, jest wykorzystanie XBee działa-jącego w oparciu o ZigBee.
Otwarte rozwiązania i ich analiza - MAVLink
Źródło: https://en.wikipedia.org/wiki/MAVLink
Otwarte rozwiązania i ich analiza - ArduPilot - SITL
Źródło: http://plane.ardupilot.com/wiki/sitl-3/
Otwarte rozwiązania i ich analiza - MAVLink
Źródło: http://dev.ardupilot.com/wiki/setting-up-sitl-on-linux/
Otwarte rozwiązania i ich analiza - ArduPilot - SITLbattery
Flight battery 20 percentFlight battery warning1880018600Flight battery 10 percentFlight battery warning18400Flight battery -10 percentFlight battery warning1820018000Flight battery -20 percentFlight battery warning17800
Otwarte rozwiązania i ich analiza - ArduPilot - SITLbattery c.d.
Flight battery -110 percentFlight battery warning15400Flight battery -130 percentFlight battery warning1520015000Flight battery 120 percent14800Flight battery 110 percent
Otwarte rozwiązania i ich analiza - ArduPilot - SITLtesting (ASAN)
CRASH - buffer overflowŹródło: http://wikipedia.org/
Otwarte rozwiązania i ich analiza - ArduPilot - MAVLinkfuzzer
I napisaliśmy fuzzer protokołu mavlinkI ok. 1KLOC w Pythonie, shI opcja mutowania oraz wysyłania losowych pakietów
Źródło: http://plane.ardupilot.com/wiki/sitl-3/
Otwarte rozwiązania i ich analiza - ArduPilot - SITL testing
501 int32_t turn_rate = (wrap_180_cd(yaw_look_at_heading -curr_yaw_target) / 100) / turn_rate_dps;(gdb) print turn_rate_dpsNo symbol "turn_rate_dps" in current context.(gdb) x/i $rip=> 0x4225cb <_ZL28set_auto_yaw_look_at_headingffah+298>: cvttss2si%xmm0,%eax
Otwarte rozwiązania i ich analiza - ArduPilot - SITL testing
$4 = {v4_float = {100, 0, 0, 0}, v2_double = {5.5355285709140466e-315, 0},v16_int8 = {0, 0, -56, 66, 0 <repeats 12 times>}, v8_int16 = {0, 17096, 0, 0,0, 0, 0, 0},v4_int32 = {1120403456, 0, 0, 0}, v2_int64 = {1120403456, 0}, uint128 =1120403456}(gdb) print $xmm1
$5 = {v4_float = {1.329228e+38, 0, 0, 0}, v2_double ={1.0508956205988904e-314, 0}, v16_int8 = {0, 0, -56, 126, 0 <repeats 12times>}, v8_int16 = {0, 32456, 0, 0, 0, 0, 0,0}, v4_int32 = {2127036416, 0, 0, 0}, v2_int64 = {2127036416, 0}, uint128
= 2127036416}
=> 0x41495b <_ZN11GCS_MAVLINK13handleMessageEP17__mavlink_message+5437>:mulss %xmm1,%xmm0STABILIZE> setspeed 100
Otwarte rozwiązania i ich analiza - ArduPilot - dalszebadania...
I coverage - badanie pokrycia testami koduI formalna weryfikacja krytycznych części koduI weryfikacja sterowników
WnioskiDrony to wyzwanie:
I prawo,I technika,I prywatność...
UWAGA DRASTYCZNE: http://chrismeme11.over-blog.com/article-36258812.html
Źródło: http://a398.idata.over-blog.com/600x450/2/70/46/36/Articles--divers-BLOG/Prevention-Securite/ACCICENT-HELICO-VOITURE.jpg
Podziękowania
Podziękowania za konsultację merytoryczną:I dr inż. Roman CzybaI mgr inż. Grzegorz Szafrański
Czas na pytania (i odpowiedzi)
Q&A