Google Science Fair – konkurs młodych naukowców i wynalazców

Google Science Fair to konkurs dla ludzi w wieku 13-18 lat, w którym należy coś zbadać albo wynaleźć. Oficjalny czas trwania konkursu wyniósł 3 miesiące – od 12 lutego do 12 maja, niemniej jednak można było zgłosić projekty, nad którymi prace rozpoczęto wcześniej. Po nieosiągnięciu wyznaczonego przeze mnie celu – zwyciężeniu Google Code-In 2013 – postanowiłem spróbować swoich sił w tym konkursie (tak, jak to zadeklarowałem w poście o GCI).

Pomysł

To była poniekąd ciekawa historia. Od dłuższego czasu myślałem nad zabezpieczeniem smartfonów przed kradzieżą. Po pewnej rozmowie ze znajomym, kiedy to wracałem z nim autobusem i opowiedział mi, jak to skradziono mu jego smartfon, bardziej utwierdziłem się w swoim przekonaniu o potrzebie stworzenia takiego zabezpieczenia. Już od dłuższego czasu wtedy szukałem pomysłu na GSF-a (Google Science Fair), jednakże nic nie mogłem wymyślić. Dopiero po dłuższym czasie skojarzyłem fakty 🙂 . Taki więc miałem cel: stworzyć zabezpieczenie zapobiegające kradzieży smartfonów. Miałem już wstępne pomysły, jak to zrealizować, ale pewien kolega, Arek, który koniecznie chciał ze mną wykonywać projekt, zmienił „nieco” moją koncepcję… i to o duże „nieco”. Nowy projekt ma za zadanie wykrywać obecność człowieka wykorzystując pole magnetyczne. W rezultacie stworzyliśmy „Nowoczesny System Zabezpieczeń”.

Realizacja

Ten punkt opiszę z mojej perspektywy, czyli od strony technicznej. Niemniej jednak będzie potrzebny krótki teoretyczny wstęp odnośnie działania systemu zabezpieczeń.

Zasada działania ideału

Zasada działania ideału


Najprościej jak się da: jeśli człowiek przemieszcza się w polu magnetycznym, indukuje się w nim mały prąd elektryczny, który z kolei wytwarza wtórne słabe pole magnetyczne. To słabe pole magnetyczne skutkuje zakłóceniem tego pierwotnego, co można odczytać przy pomocy teslomierza. Tak to wygląda w teorii. Innymi słowy – musiałem odczytywać wyniki z miernika (teslomierza) i je analizować, a w przypadku wykrycia włamania – powiadamiać odpowiednie służby.

PS powyższy obrazek i poniższe nie są najlepszej jakości, bowiem zaczerpnąłem je z prezentacji podsumowującej, którą przygotowałem z Arkiem, a tam nie wolno było wykorzystać czyjejś grafiki (made in Paint by myself 😛 )

Część techniczna

Chcąc wykonać projekt musieliśmy zdecydować się na odpowiednią platformę sprzętową. Zastanawialiśmy się nad wieloma możliwościami, jednakże ostatecznie padło na Raspberry Pi – jako jego użytkownik muszę przyznać, że to całkiem przyjemny sprzęt 🙂 . Ponadto potrzebny był oczywiście magnetometr (=teslomierz) i dla wygody – karta WiFi.

Prezentacja platformy

Prezentacja platformy

Na powyższym zdjęciu można porównać wielkość Malinki (R-Pi) oraz magnetometru (czerwony kwadracik podpięty przewodami) do kartki A4. Ta „zaślepka USB” z zapaloną zieloną diodą to karta WiFi. Logo Raspberry Pi zostało zasłonięte, bowiem regulamin konkursu zabraniał wykorzystania jakichkolwiek logo w podsumowaniu projektu (stamtąd wziąłem to zdjęcie).

Schemat działania platformy

Najlepiej przedstawia to obrazek poniżej.

Schemat działania platformy

Schemat działania platformy

Konfiguracja środowiska pracy

Pierwszą czynnością, którą należało uczynić była instalacja systemu na Raspberry Pi. Wybór był dość oczywisty – padło na Raspbiana, czyli zmodyfikowanego Debiana. Problemem od mojej strony był brak monitora z wyjściem HDMI, jednakże brat poratował swoim telewizorem. Kolejną przeszkodą była instalacja sterowników i konfiguracja karty sieciowej, bowiem R-Pi ma tylko 2 wyjścia USB, a tyle potrzebowały same mysz i klawiatura, więc był problem z podpięciem karty WiFi, jednakże ostatecznie uporałem się z tym problemem – od czego w końcu jest tryb tekstowy w Linuksie? 😉 Na serwerze uruchomiłem usługę SSH. Już nie potrzebując ekranu dla Malinki, mając zdalny dostęp do sprzętu, zainstalowałem oraz skonfigurowałem także XDM oraz FTP.

Jak wyglądała już sama właściwa praca? Cały czas korzystałem z SSH (oczywista oczywistość 😉 ), a za edytor tekstu posłużył mi Notepad++ (polecam!). Początkowo męczyłem się z uploadowaniem plików z wykorzystaniem FileZilli, jednakże później spostrzegłem się, iż N++ ma preinstalowany plugin do pracy ze zdalnym serwerem FTP (wreszcie, po tylu latach pracy z tym edytorem…). Cały serwer właściwej usługi analizującej dane odczytane z magnetometru został napisany w oparciu o język Python, a panel webowy – jak można łatwo się domyślić – z wykorzystaniem HTML-a, CSS-a oraz JS-u. Pozwolę sobie wspomnieć o dwóch prostych, a zarazem interesujących serwerach HTTP dla Pythona, które w trakcie pracy nad projektem udało mi się znaleźć – webpy oraz bottlepy – jeśli zna się język Python, to warto im poświęcić krótką chwilkę. Do rysowania wykresów wykorzystałem usługę Google Charts. Jej wadą w naszym projekcie jest wymaganie bycia podłączonym do Internetu, jednakże Arek usilnie nalegał, aby korzystać z usług Google’a wszędzie, gdzie się tylko da. Jednakże poza tą wadą, to jest to całkiem miłe narzędzie. Wygląda to mniej więcej tak:

Panel webowy - Android

Panel webowy – Android


Końcem tego tekstu został jeszcze zamieszczony film prezentujący ten panel.

Problem z pomiarami. To był spory kłopot od samego początku, aż do końca. Po dłuższym czasie, dzięki pomocy znajomego (pozdrawiam Grzesiek! 😉 ), spostrzegliśmy, iż producent po prostu zostawił miejsce na samodzielne wlutowanie oporników i dopóki tego nie uczyniliśmy, nie było sygnału (nie można było odczytać pomiarów z czujnika). Mimo, iż to zabrało nam sporo czasu, nie było najgorszym, co nas spotkało. Ja od początku myślałem, że Arek wykonał teoretyczne opracowanie i oszacował oczekiwane wartości zmiany pola magnetycznego… i jak się później okazało – myliłem się, a co gorsza – zakupił on niewystarczająco czuły magnetometr. Ciężko było odczytać z wykresu czy cokolwiek się przemieściło w otoczeniu czujnika. Aby coś dało się praktycznie wykryć, to albo potrzebny był spory kawałek metalu, ale był wykrywany tylko z odległości kilku centymetrów albo bardzo silny magnes neodymowy – on był już wykrywany z dużo większej odległości, ale niestety nie mogliśmy go wykorzystać, bo zaprzeczyło by to głównej idei projektu – spowodowałoby założenie: włamywacz nosi ze sobą silny magnes, czyli nie byłby to już uniwersalny system zabezpieczeń. Mimo wszystko ciężko było analizować wykres, a dopiero co napisać algorytm analizujące te dane – odczyty często mieszały się z szumem tła, a czasem ni stąd, ni zowąd pojawiały się odczyty poza skalą. Miałem kilka pomysłów jak ulepszyć algorytm, m.in. filtrowanie tych odczytów, jednakże stwierdziłem, że to niewiele by pomogło, a na posiadaną przez mój zespół platformę sprzętową to byłoby po prostu bez sensu. Ostatecznie powstało coś takiego – jak widać, bardzo prosta i powierzchowna analiza.

Kod źródłowy całej platformy można znaleźć tutaj. Serwer można uruchomić od razu po ściągnięciu kodu źródłowego. Dostarczyłem również skrypt instalujący usługę pod systemami korzystającymi z init.d (m.in. Debian).

Prezentacja

Przygotowaną przeze mnie i Arka stronę projektu można znaleźć tutaj. Jedyne, co muszą obejrzeć jurorzy, tj. prezentację podsumowującą, znajdziesz tutaj. Prezentacje panelu webowego przedstawia poniższy film. Wiem, że wyszedł, jak wyszedł, jednakże wiele razy starałem się go nagrywać. Najcięższe było pamiętanie wszystkiego, co mam zamiar zaprezentować i opowiadanie o tym. Kartka z tekstem na biurku lub edytor tekstu na drugim monitorze nic nie dawały, bowiem musiałem się patrzeć na główny ekran, by móc prezentować panel.

PS jeśli zaglądnąłeś na stronę projektu do sekcji „O mnie” i doczytałeś do końca, to pewnie zauważyłeś tam ciekawą informację. Nigdy nie myślałem, że znajdę taką „lukę” na jednej ze stron Google’a. Czy ta „luka” faktycznie była prawdziwą luką w zabezpieczeniach, dzięki której można byłoby przeprowadzić jakiś atak – tego nie wiem, niestety nie miałem czasu na pentesty, bo musiałem kończyć pracę nad projektem.

Dziękuję za uwagę i czas poświęcony na przeczytanie tego tekstu i oglądnięciu dolinkowanych materiałów. Jeśli spodobał ci się ten post, to serdecznie zapraszam do subskrypcji bloga via mail i/albo RSS oraz polubienie tego tekstu. Pozdrawiam! 🙂

Dodaj komentarz