Elektroda.pl
Elektroda.pl
X

Search our partners

Find the latest content on electronic components. Datasheets.com
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

Bezpieczeństwo w sieci IoT - jak zabezpieczyć ją przed hakerami?

ghost666 03 Apr 2016 21:09 5151 2
e-mierniki
  • Tworzenie ciekawych aplikacji to świetna zabawa, ale staje się znacznie lepsza, gdy aplikacje te mają jednocześnie zapewnić wysoki poziom bezpieczeństwa. W poniższym artykule zajmiemy się kwestią bezpieczeństwa dla Raspberry Pi z wykorzystaniem narzędzi takich jak firewall, IDS czy SSL/TLS.

    Autor stworzył jakiś czas temu system oparty na Raspberry Pi, którego zadaniem było otwieranie i zamykanie drzwi. Nie przyszło mu do głowy, aby zadbać o zabezpieczenia systemu na tej maszynie, co jest dosyć typowe - konstruktorzy tworząc szczególnie hobbystyczne projekty oparte o Raspberry Pi itp. komputery rzadko kiedy myślą o zabezpieczeniach systemu. Zazwyczaj jest to zbyt skomplikowane, trudne lub wymaga poświęcenia sporego czasu, a w zasadzie nie dodaje żadnego dodatkowego efektu naszemu projektowi. Jednakże, jeśli budujemy system, z jakiego chcemy korzystać na co dzień, to musimy zadbać o to, aby był on zabezpieczony przed atakami hp. hakerów.

    Przykłady zagrożeń bezpieczeństwa w sieci IoT

    Póki co nikt nie korzysta na co dzień ze stworzonego przez autora artykułu systemu otwierania drzwi, ale załóżmy, że sytuacja ta może się zmienić. Jeśli będziemy wiedzieć, że np. sąsiad posiada taki system, to możemy włamać się do jego sieci WiFi, korzystając z narzędzi takich jak Reaver, skanować sieć w poszukiwaniu IP jego Raspberry Pi i otworzyć drzwi bez problemu. Dzięki temu włamanie do sieci WiFi przerodzić może się w prawdziwe włamanie do mieszkania. Możliwe to jest dzięki temu, że w systemie do kontroli drzwi nie zastosowaliśmy żadnych mechanizmów uwierzytelniania czy innych zabezpieczeń. Aby uniknąć takiej sytuacji, powinniśmy wykorzystać opisane poniżej rady.

    Wyobraźmy sobie inną sytuację - korzystamy z Raspberry Pi w naszej sieci lokalnej np. do przechowywania danych. Jeśli hakerowi uda się włamać na naszą 'malinę', to może on dołączyć ją do swojego Botnetu, zainstalować backdoora i wykorzystać komputer i przeprowadzić atak 'man in the middle', aby odkryć nasze hasło do Facebooka albo dane karty kredytowej.

    W trzecim przypadku wyobraźmy sobie, że w naszej sieci Raspberry Pi obsługuje na przykład drona wyposażonego w kamerę. Ten sam haker co powyżej, może wykorzystać kamerę do podglądania nas w domu. Może nawet umieścić nasze zdjęcia na Facebooku, szczególnie, że ma już do niego hasło.

    Te proste przykłady pozwalają uzmysłowić sobie, jak istotne są to dziury w zabezpieczeniach. Zagrożenie, jakie czeka na naszą sieć, jeśli nie zabezpieczymy jej odpowiednio, są poważne. Istnieją książki poświęcone zabezpieczeniom takich sieci (autor artykułu jest współautorem jednej z nich), więc można je przeczytać, aby poznać dokładnie opisywane zagadnienie.

    Zabezpieczenie sieci

    Aby zabezpieczyć naszą sieć przed atakami, wyedytować można plik sysctl jak opisano poniżej:

    [code:1]pi@raspberrypi:~ $ sudo nano /etc/sysctl.conf[/code:1]

    Modyfikując ten plik, zabezpieczamy się przed atakiem 'man in the middle', spoofingiem i innymi zagrożeniami. Poniższy kod pokazuje, jakie zabezpieczenia musimy wprowadzić:

    [code:1]...
    # Nie akceptujemy przekierowań ICMP (ochrona przed atakami MITM)
    net.ipv4.conf.all.accept_redirects = 0
    net.ipv6.conf.all.accept_redirects = 0
    # _lub_
    # Akceptujemy IC

    # Odkomentowujemy dwie kolejne linijki, co umożliwi nam zabezpieczenie przed spoofingiem
    # Włączamy weryfikację adresu sieciowego na wszystkich interfejsach sieciowych
    # co daje pewne zabezpieczenie przed spoofingiem
    net.ipv4.conf.default.rp_filter=1
    net.ipv4.conf.all.rp_filter=1

    ...

    # Nie akceptujemy przekierowań ICMP (ochrona przed atakami MITM)
    net.ipv4.conf.all.accept_redirects = 0
    net.ipv6.conf.all.accept_redirects = 0
    # _lub_
    # Akceptujemy przekierowania ICMP tylko z bramek wymienionych jako domyślne
    # na liście domyślnych bramek.
    # net.ipv4.conf.all.secure_redirects = 1
    #
    # Nie wysyłamy przekierowań ICMP (nie jesteśmy routerem)
    net.ipv4.conf.all.send_redirects = 0
    #
    # Nie akceptujemy pakietów routowania IP (nie jesteśmy routerem)
    net.ipv4.conf.all.accept_source_route = 0
    net.ipv6.conf.all.accept_source_route = 0[/code:1]

    Konfiguracja i uruchomienie firewalla

    Aby uchronić nasze Raspberry Pi przed atakami z Internetu, idealnym rozwiązaniem jest firewall, który kontrolować będzie nadchodzące połączenia. System taki zamyka wszystkie porty w systemie i otwiera jedynie te, które są potrzebne.

    Najprostszym rozwiązaniem jest zainstalowanie UFW (Uncomplicated Firewall) według poniższego opisu:

    [code:1]pi@raspberrypi:~ $ apt-get install ufw[/code:1]

    Po zainstalowaniu trzeba skonfigurować firewall do naszych potrzeb. Jednakże, najlepiej jest domyślnie zablokować przyjmowanie wszystkich połączeń nadchodzących, jak w opisie poniżej:

    [code:1]pi@raspberrypi:~ $ ufw default deny incoming[/code:1]

    Dolej dodać możemy wyjątki, takie jak na przykład SSH pochodzące z obrębu naszej sieci lokalnej. Poniższa komenda pokazuje jak dodać tego rodzaju wyjątek. W komendzie xxx.yyy.zzz reprezentuje dane naszej sieci lokalnej

    [code:1]pi@raspberrypi:~ $ ufw allow from xxx.yyy.zzz.0/24 to any port 22 proto tcp[/code:1]

    Aby umożliwić dostęp do naszego serwera sieci web z wykorzystaniem protokołów HTTP czy HTTPS, konieczne jest otwarcie odpowiednich portów. Poniższe dwie komendy otwierają te porty dla połączeń z sieci lokalnej (powyżej) a dalsze dwie dla połączeń z całego internetu.

    [code:1]# porty otwarte lokalnie:

    pi@raspberrypi:~ $ ufw allow from xxx.yyy.zzz.0/24 to any port 80 proto tcp
    pi@raspberrypi:~ $ ufw allow from xxx.yyy.zzz.0/24 to any port 443 proto tcp

    # porty otwarte globalnie:
    pi@raspberrypi:~ $ ufw allow from any to any port 80 proto tcp
    pi@raspberrypi:~ $ ufw allow from any to any port 443 proto tcp[/code:1]

    Konfiguracja systemu IDS

    IDS to system wykrywający włamania do naszego systemu. Tak jak firewall blokuje ruch przychodzący, który mógłby być niebezpieczny i przepuszcza tylko dane wysyłane na zdefiniowane porty (póki co 22, 80 i 443), tak IDS głębiej analizuje pakiety, które przejdą przez firewall, pod kątem ich zawartości, co pozwala wykrywać bardzo sprawnie ataki i złośliwe oprogramowanie. Jednym z polecanych programów typu IDS jest Snort. Niestety nie ma jeszcze wersji Snorta na Raspbiana w wersji Jesse, co znaczy, że musimy sami skompilować sobie takową. Postępujmy komenda po komendzie, jak w opisanym poniżej poradniku:

    [code:1]pi@raspberrypi:~ $ wget https://www.snort.org/downloads/snort/daq-2.0.6.tar.gz
    pi@raspberrypi:~ $ tar xvfz daq-2.0.6.tar.gz
    pi@raspberrypi:~/daq-2.0.6 $ cd daq-2.0.6
    pi@raspberrypi:~/daq-2.0.6 $ ./configure && make && sudo make install
    pi@raspberrypi:~ $ cd ..
    pi@raspberrypi:~ $ wget https://www.snort.org/downloads/snort/snort-2.9.8.0.tar.gz
    pi@raspberrypi:~ $ tar xvfz snort-2.9.8.0.tar.gz
    pi@raspberrypi:~ $ cd snort-2.9.8.0
    pi@raspberrypi:~/snort-2.9.8.0 $ ./configure --enable-sourcefire && make && sudo make install[/code:1]

    Aby skonfigurować Snorta, musimy edytować plik konfiguracyjny tego programu. Możemy to zrobić poprzez:

    [code:1]pi@raspberrypi:~ $ sudo nano /etc/snort/snort.conf[/code:1]

    Konfigurujemy sieć zewnętrzną i wewnętrzną jak opisano poniżej. Ponownie jak w powyższych przypadkach xxx.yyy.zzz to adres naszej sieci domowej:

    [code:1]###################################################
    # Step #1: Set the network variables. For more information, see README.variables
    ###################################################

    # Setup the network addresses you are protecting
    ipvar HOME_NET xxx.yyy.zzz.0/24

    # Set up the external network addresses. Leave as "any" in most situations
    ipvar EXTERNAL_NET !$HOME_NET

    ...

    # Path to your rules files (this can be a relative path)
    # Note for Windows users: You are advised to make this an absolute path,
    # such as: c:\snort\rules
    var RULE_PATH /etc/snort/rules

    ...[/code:1]

    Dodatkowo doinstalować możemy Tripwire, który dzięki śledzeniu plików systemowych pomoże nam wykrywać nieautoryzowane zmiany w tych plikach. Za każdym razem, gdy dokonana jest taka (nieautoryzowana) zmiana, Tripwoire prześle do nas e-mail. Aby zainstalować Tripwire i potrzebne oprogramowanie, wykonujemy następujące kroki:

    [code:1]pi@raspberrypi:~ $ sudo apt-get install tripwire
    pi@raspberrypi:~ $ sudo apt-get install mailutils[/code:1]

    A następnie inicjalizujemy bazę danych Tripwire poleceniem:

    [code:1]pi@raspberrypi:~ $ sudo tripwire --init[/code:1]

    Aby skonfigurować Tripwire, musimy przeprowadzić pierwsze skanowanie systemu - na podstawie wyników tego skanu dostosować możemy politykę działania Tripwire. Pierwszy skan systemu przeprowadzamy poleceniem:

    [code:1]pi@raspberrypi:~ $ sudo sh -c 'tripwire --check | grep Filename > checkResults.txt[/code:1]

    Po wygenerowaniu pliku możemy edytować konfigurację polityki i zakomentować wszystkie linie w pliku będącym wynikiem skanowania, na przykład /etc/rc.boot. Aby edytować politykę działania Tripwire, wpisujemy:

    [code:1]pi@raspberrypi:~ $ sudo nano /etc/tripwire/twpol.txt [/code:1]

    Po dostosowaniu pliku konfiguracyjnego musimy go jeszcze zaimplementować, reinicjalizować bazę danych Tripwire i sprawdzić nową konfigurację. Robimy to następującymi komendami:

    [code:1]pi@raspberrypi:~ $ sudo twadmin -m P /etc/tripwire/twpol.txt
    pi@raspberrypi:~ $ sudo tripwire --init
    pi@raspberrypi:~ $ sudo tripwire --check[/code:1]

    Teraz Tripwire jest gotowe do działania, powinniśmy skonfigurować zadanie crona w systemie tak, aby dostawać codziennie raport z działania Tripwire. Pierwsza komenda służy do do edycji zadania w crontabie, a druga do realizacji codziennie o 12 skanu z pomocą Tripwire i wysłania jej na nasz e-mail.

    [code:1]pi@raspberrypi:~ $ sudo crontab -e
    00 12 * * * /usr/sbin/tripwire --check | mail -s "Tripwire report for `uname -n`" Twoj_email(malpa)you-pi.com[/code:1]

    Zabezpieczanie komunikacji

    Zabezpieczenie warstwy transportowej (TLS) to sesja SSL wykorzystująca do zabezpieczenia komunikacji poprzez internet. TLS umożliwia pewien rodzaj tunelowania przez Internet podczas komunikacji pomiędzy serwerem a urządzeniami IoT w naszym systemie.

    Załóżmy sytuację, w której hacker analizuje pakiety w naszej sieci. Zilustrowano to na rysunku poniżej. Hacker jest w stanie przeczytać wszystkie nasze dane, jeśli nie korzystamy z TLS. Jego wykorzystanie nie uniemożliwi przechwycenia pakietów, ale uczyni je nieczytelnymi dla wszystkich oprócz adresata danych.

    Bezpieczeństwo w sieci IoT - jak zabezpieczyć ją przed hakerami?


    Zasadniczo sesja TLS składa się z trzech głównych etapów:

    * Obie strony komunikacji - serwer i urządzenie uzgadniają rodzaj szyfrowania wykorzystując do tego Handskahe w TLS.
    * Platforma i urządzenie wymieniają się kluczami do uzgodnionego algorytmu szyfrowania.
    * Nawiązywane jest szyfrowane połączenie wykorzystujące powyższe ustawienia i klucze.

    Niektóre platformy sprzętowe do sieci Internetu Rzeczy, takie jak Amazon IoT czy structure zapewniają dodatkowe funkcjonalności w zakresie bezpieczeństwa, które możemy wykorzystać podczas komunikacji z nimi. Autor poradnika korzystał z Structure niezwykle chętnie, z uwagi na zapewniany bardzo wygodny mechanizm autentykacji. Na przykład, platforma Structure zapewnia SDK do NodeJS, które wykorzystuje domyślnie TLS do komunikacji z swoim brokerem MQTT. Co więcej, platforma ta zapewnia bezpieczne gniazdo sieciowe MQTT, z którego korzystać można bezpośrednio, jak opisano w poniższym kodzie:

    Code: java
    Log in, to see the code


    Podsumowanie

    Zabezpieczenia to działka bardzo skomplikowana i trudna w implementacji, jednakże niezwykle istotna, jeśli chcemy chronić nasz system przed atakami. Powyższe oprogramowanie instalowane jest tylko raz na każdym komputerze, więc powinniśmy zadać sobie ten trud i zrealizować instalację. Sytuacja przedstawiona jest dla Raspberry Pi, ale inne jednopłytkowe komputery także oferują podobne rozwiązania, więc należy skonsultować się z producentem bądź środowiskiem twórców oprogramowania dla danej aplikacji, aby dowiedzieć się, jakie kroki możemy podjąć, aby zabezpieczyć nasz system przed atakami.

    Źródło: https://www.hackster.io/charifmahmoudi/iot-security-tips-to-protect-your-device-from-bad-hackers-768093?ref=platform&ref_id=425_trending___&offset=0

    Cool? Ranking DIY
    Can you write similar article? Send message to me and you will get SD card 64GB.
    About Author
    ghost666
    Translator, editor
    Offline 
    Fizyk z wykształcenia. Po zrobieniu doktoratu i dwóch latach pracy na uczelni, przeszedł do sektora prywatnego, gdzie zajmuje się projektowaniem urządzeń elektronicznych i programowaniem. Od 2003 roku na forum Elektroda.pl, od 2008 roku członek zespołu redakcyjnego.
    ghost666 wrote 11207 posts with rating 9465, helped 157 times. Live in city Warszawa. Been with us since 2003 year.
  • e-mierniki
  • #2
    User removed account
    User removed account  
  • #3
    logusa
    Level 2  
    Witam
    czy ktoś wie jak zabezpieczyć windows 10 Iot przed włamaniem ?