Jak mogę chronić się przed włamaniami i złośliwym oprogramowaniem przed podłączeniem go do Internetu (zwłaszcza na publicznym adresie IP)?

60

Przy dużej liczbie Raspberry Pis na wolności i faktu, że duże ich grupy są skonfigurowane identycznie (gdy zainstalowana jest nowo flashowana karta SD z jednym z niewielu dostępnych obrazów), prawdopodobnie będą one kuszącym celem dla złośliwe oprogramowanie, w tym botnety.

Co można zrobić, aby to złagodzić?

Jest dość dobrze znane, że należy zmienić hasło użytkownika „pi” (Debian) i „root” (Arch.) Ale co z innymi kontami systemowymi (np. „Tli”, „pnd”?) Czy któreś z nich ma uniwersalne hasła, które są prawdopodobnie takie same dla wszystkich jednostek?

I czy są jakieś znane luki w zabezpieczeniach innych pakietów zainstalowanych w obrazach SD dostępnych dla Pi (np. Z powodu ograniczeń sprzętowych lub wycinanych wersji tych pakietów?)

W szczególności martwię się o sshmysql i wszelkie inne usługi, które mogą być uruchomione na nowo zainstalowanym obrazie.

finnw
źródło

Odpowiedzi:

23

Rzeczy, które do tej pory zauważyłem na temat podstawowego obrazu Debian Squeeze:

  • / etc / shadow zawiera kilka skrótów haseł do kont, które nie są kontem pi (buildbot itp.). Zmień hasło do konta pi, oczywiście, jeśli jeszcze tego nie zrobiłeś (lub załóż nowe konto użytkownika i usuń konto pi), ale także edytuj inne wpisy i zamień skróty na * s. Uwaga / etc / passwd zawiera zduplikowane wpisy dla konta pi, co dezorientuje adduser / deluser, wystarczy je usunąć.

  • domyślna konfiguracja demona ssh pozwala na zdalne logowanie roota. To powinno być wyłączone.

  • warto użyć netstat, aby sprawdzić zestaw rzeczy nasłuchujących połączeń; zadziwiająca ilość rzeczy działa w porównaniu z typowym minimalnym netinstem Debiana. Zasadniczo dobrym pomysłem jest ograniczenie narażenia na tylko to, czego potrzebujesz , więc najpierw wyłącz wszystko lub zaporę ogniową , a następnie ujawnij tylko usługi, które celowo chcesz widzieć w publicznym Internecie (zwykle tylko ssh lub ssh + http).

  • będziesz chciał zmienić klucze hosta ssh zamiast używać tych z obrazu (AIUI najnowszy obraz faktycznie regeneruje je przy pierwszym uruchomieniu)

księżycowy cień
źródło
1
Nie widzę problemu z twoim pierwszym stwierdzeniem. Do czego służą ci dodatkowi użytkownicy? Czy nie powinny być wyłączone przy logowaniu? Możesz to sprawdzić, próbując sudo nich podejść.
Jivings,
2
Dam to -1. Głównie dlatego, że sugerujesz ręczną edycję pliku cienia. Co jest niesamowicie złym pomysłem.
Jivings,
@Jivings Nie on nie. Równie dobrze może sugerować używanie vipw; czy to zły pomysł? Nie, nie jest. +1 za sugerowanie używania vipw.
user2497,
41

Istnieje wiele sposobów usunięcia luk w zabezpieczeniach, jednak pierwszą rzeczą, którą powinieneś wiedzieć jest to, że Linux nie jest tak podatny na włamanie, jak inne systemy operacyjne. Wynika to głównie z braku złośliwego oprogramowania atakującego * NIX. Niemniej jednak chcesz wiedzieć, w jaki sposób można uzyskać dostęp do twojego systemu.

Hasła

Po pierwsze, należy zmienić domyślne hasła dla wszystkich użytkowników, którzy mogą się zalogować. W przypadku Debiana jest to tylko domyślny użytkownik Pi . W przypadku Arch Linux jest to superużytkownik root . Hasła są zmieniane po zalogowaniu jako użytkownik, wpisując passwdw wierszu polecenia.

Zaleca się stosowanie bezpiecznych haseł, ponieważ przeprowadzanie ataków słownikowych na domyślnego użytkownika byłoby dość proste. Wybierz przyzwoite hasło o średniej długości.

Zapomnienie

Zdalny dostęp jest prawdopodobnie najważniejszą luką bezpieczeństwa. To, czego możemy tutaj użyć, nazywa się bezpieczeństwem przez zaciemnienie . Powszechną metodą ataku jest skanowanie zakresu adresów IP w poszukiwaniu otwartych portów. Jednym z najprostszych środków zaradczych, jakie możemy podjąć, jest bycie użytkownikiem, który nie korzysta z domyślnych portów .

Wszystko, co należy tutaj zrobić, to zmienić domyślne porty dla często używanych protokołów. Na przykład domyślny port SSH to 22, a FTP to 21. W moim systemie SSH używa 222 i FTP 221, co powinno ukrywać te protokoły przed jakimkolwiek zautomatyzowanym atakiem.

Bezpieczeństwo połączenia

Po pierwsze, najważniejszym problemem związanym z bezpieczeństwem jest to, że konto root nie powinno być w stanie zalogować się przez SSH. Możesz wyłączyć logowanie użytkownika root w /etc/ssh/sshd_configpliku, komentując lub usuwając ten wiersz:

PermitRootLogin yes

Domyślnie powinna być ustawiona na no, ale najlepiej się upewnić.


Jeśli często korzystasz z SSH i martwisz się atakami typu „mężczyzna w środku”, atakami słownikowymi na hasło, możesz użyć SSH Keys.

Uwierzytelnianie oparte na kluczach ma kilka zalet w porównaniu z uwierzytelnianiem za pomocą hasła, na przykład wartości kluczy są znacznie trudniejsze do użycia z użyciem siły, niż zwykłe hasła.

Aby skonfigurować uwierzytelnianie klucza SSH, musisz najpierw utworzyć parę kluczy. Najłatwiej to zrobić na komputerze klienckim (maszynie, z którą chcesz uzyskać dostęp do Pi).

# ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/pi/.ssh/id_rsa):

Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/pi/.ssh/id_rsa.
Your public key has been saved in /home/pi/.ssh/id_rsa.pub.

Jak widać, utworzono dwa pliki, klucz prywatny id_rsai klucz publiczny id_rsa.pub.

Klucz prywatny jest znany tylko tobie i należy go bezpiecznie chronić . Natomiast klucz publiczny może być swobodnie współdzielony z dowolnym serwerem SSH, z którym chcesz się połączyć.

Chcielibyśmy więc skopiować klucz publiczny na Raspberry Pi. Możemy to zrobić bardzo łatwo:

ssh-copy-id pi@address

Gdzie pijest nazwa użytkownika Raspberry Pi i addressadres IP Pi.

Powtarzam, dystrybuujemy klucz publiczny . Klucz prywatny jest twój. Trzymaj się mocno, aby zwolnić ten klucz, narusza bezpieczeństwo systemu.

Arch wiki ma doskonały opis tego, jak to działa:

Gdy serwer SSH ma zapisany klucz publiczny i widzi, że żądasz połączenia, używa klucza publicznego do skonstruowania i wysłania wyzwania. To wyzwanie jest jak zakodowana wiadomość i musi zostać spełnione odpowiednią odpowiedź, zanim serwer udzieli ci dostępu. To, co sprawia, że ​​ta zakodowana wiadomość jest szczególnie bezpieczna, polega na tym, że może ją zrozumieć tylko osoba posiadająca klucz prywatny. Chociaż klucza publicznego można użyć do zaszyfrowania wiadomości, nie można go użyć do odszyfrowania tej samej wiadomości. Tylko Ty, posiadacz klucza prywatnego, będziesz w stanie poprawnie zrozumieć wyzwanie i uzyskać prawidłową odpowiedź.

Aby uzyskać więcej informacji na temat bezpieczeństwa uwierzytelniania za pomocą klucza publicznego, Wikipedia zawiera dokładne wyjaśnienie .

Dzięki zastosowanym zabezpieczeniom SSH możesz wykonać ogromną ilość zaszyfrowanych, bezpiecznych transferów danych. W razie potrzeby praktycznie każde inne połączenie z portem może być kierowane przez SSH. Możesz nawet przesłać sesję X przez SSH, aby pojawiła się na innym komputerze.

Jako interesujący przykład, wczoraj uruchomiłem Eclipse na moim pulpicie, przeglądałem go na moim Raspberry Pi oraz kontrolowałem mysz i klawiaturę z mojego Netbooka. Taka jest siła SSH.

Uprawnienia

Uprawnienia do plików stanowią sedno systemu bezpieczeństwa Linux. Wpływają na to, kto może zobaczyć twoje pliki i foldery, i mogą być bardzo ważne w ochronie twoich danych. Na przykład zaloguj się do Raspberry Pi jako zwykły użytkownik i uruchom:

cat /etc/shadow

shadowPlik zawiera zaszyfrowane hasła dla użytkowników systemu, więc nie chcemy po prostu o nikogo spojrzeć na to! Powinieneś zobaczyć tę odpowiedź:

cat: /etc/shadow: Permission denied

Możemy zrozumieć, dlaczego dzieje się tak, patrząc na uprawnienia do pliku:

ls -l /etc/shadow
-rw------- 1 root root 821 Jun 11 22:13 /etc/shadow

To mówi nam, że plik jest własnością root, a tylko właściciel ma uprawnienia do odczytu / zapisu. Podzielmy ten wynik.

-rw-------

To jest stan uprawnień. Pierwszy bit mówi nam o typie pliku ( -oznacza zwykły plik). Następne trzy bity reprezentują akcje dostępne dla właściciela pliku. Pozostałe trzy bity reprezentują grupę , a ostatnie trzy są dla innych lub dla wszystkich innych. Tak więc katalog z pełnymi uprawnieniami wyglądałby tak:

drwxrwxrwx  10 root root   280 Jun 20 11:40 tmp/

To uprawnienia do odczytu, zapisu i wykonywania dla właściciela, grupy i wszystkich innych.

Kolejną ważną częścią są te dwa nazwiska. W naszym przypadku root root. Pierwszy użytkownik jest właścicielem pliku. Druga to grupa użytkowników . Na przykład często można zobaczyć:

drwxr-xr-x  10 pi users   280 Jun 20 11:40 home/pi

Umożliwiłoby to dostęp do odczytu / zapisu użytkownikowi piw jego katalogu domowym oraz dostęp do odczytu dla wszystkich innych użytkowników.

Uprawnienia najczęściej przywoływane i kontrolowane przy użyciu wartości ósemkowych. Na przykład, jeśli chcemy ustawić rw tylko dla właściciela, wpiszemy:

chmod 600 /path/to/file

To jest podstawowe omówienie, aby uzyskać więcej informacji na temat uprawnień do plików w systemie Linux, oto dobry artykuł.


To zrozumienie jest ważne przy zabezpieczaniu plików i folderów. Powiedzmy, że właśnie skonfigurowaliśmy klucze SSH. Zdecydowanie nie chcemy, aby inni użytkownicy widzieli w naszym ~/.sshkatalogu, w przeciwnym razie mogliby wziąć nasz klucz prywatny. W ten sposób usuwamy ich uprawnienia do odczytu:

chmod 700 ~/.ssh
ls -la ~/.ssh 
drwx------   2 james users  4096 Jun 18 03:05 .

Mam nadzieję, że rozwiąże to niektóre z twoich obaw związanych z zabezpieczeniem Linuksa. Z tego powodu powinieneś zobaczyć, że jest to dość bezpieczny system i jeśli jesteś ostrożny, nie powinieneś mieć problemów z bezpieczeństwem.

Jivings
źródło
10
Nie zgadzam się z twoją uwagą Obscurity, mapowanie portów otwartych na twoim urządzeniu i znalezienie twojego serwera ssh zajęłoby kilka sekund. Wyłącz logowanie hasłem i trzymaj się normalnych portów. Wątpię, że w ogóle potrzebujesz ftp, zamiast tego użyj scp.
Alex Chamberlain,
2
@AlexChamberlain Jest to tymczasowe ograniczenie prędkości dla atakujących, ale w żadnym wypadku nie jest to kompletne rozwiązanie.
Jivings,
4
Zmiana domyślnych portów powoduje mniejsze pukanie do drzwi, co często prowadzi do ataków słownikowych. Oczywiście, jest to bardzo niewielki środek bezpieczeństwa, ale ma również inne zalety, np. Może ograniczyć wzdęcia. To raczej działanie zapobiegawcze niż bezpieczeństwo, ale nadal warte rozważenia.
Beeblebrox
2
@AlexChamberlain, Podczas klęski klucza debian ssh zarejestrowaliśmy wiele prób na porcie 22 i nigdzie indziej. W takim przypadku uruchomienie innego portu dałoby ci dużo czasu, podczas gdy hakerzy próbowali ustalić, który z wykorzystywanych hostów był cenny. SBO nie pomaga prawie tak samo, jeśli atakujący celuje w ciebie konkretnie.
John La Rooy,
1
Zgadzam się. Chodzi mi o to, że to nie tylko thereotical - nastąpił czas w świeżej pamięci, gdzie SBO zdecydowanie zrobił pomocy, i zrobił znaczącą różnicę.
John La Rooy,
6

Aby zapobiec atakom z użyciem siły, możesz zainstalować i skonfigurować fail2ban. Parsuje pliki dziennika (takie jak /var/log/auth.log) i próbuje wykryć, czy kilka prób logowania się nie powiodło. Następnie automatycznie zablokuje źródłowe adresy IP za pomocą iptables.

Istnieje wiele poradników w Internecie.

Morgan Courbet
źródło