W szczególności początkujący testerzy penetracyjni kładą mniejszy nacisk na ogólne bezpieczeństwo baz danych. Aplikacja bez konfiguracji bazy danych i testów bezpieczeństwa nie może być bezpieczna. Być może już korzystasz z oprogramowania MySQL, systemu zarządzania bazami danych, więc jak możesz zwiększyć jego bezpieczeństwo? Oto siedem kroków, które musisz wykonać.
1. Użyj tunelowania SSH zamiast połączenia zdalnego
Usługa MySQL domyślnie działa na porcie 3306. Podczas instalacji MySQL zobaczysz, że port 3306 jest w trybie nasłuchiwania dla wszystkich połączeń. W tej chwili port MySQL jest otwarty na świat zewnętrzny. Dlatego powinieneś ustawić usługę MySQL, aby nasłuchiwała tylko adresu lokalnego.
Ponieważ serwery są zwykle uruchamiane w dystrybucji Linuksa, poniższe przykłady są oparte na dystrybucji Debiana. Plik, którego potrzebujesz do tunelowania SSH zamiast zdalnego połączenia i zamknięcia domyślnego portu na świat zewnętrzny to
/etc/mysql/my.cnf. W tym pliku musisz otworzyć pole o nazwie [mysqld] i napisz następujące polecenie:[mysqld]
wiązać-adres=127.0.0.1
Po tym procesie nie zapomnij zapisać tego pliku i ponownie uruchomić usługę za pomocą następującego polecenia:
sudo systemctl zrestartuj mysqld
# Lub
Sudosystemctlponownie uruchomićmariadb.praca
Dzięki temu usługa MySQL będzie nasłuchiwać tylko adresu lokalnego.
Jeśli używasz MariaDB, możesz również sprawdzić /etc/mysql/mariadb.conf.d/50-server.cnf i sprawdź, czy istnieje definicja dla adres powiązania.
Teraz, gdy masz ustawiony adres powiązania na 127.0.0.1, który jest hostem lokalnym, możesz uruchomić skanowanie Nmap i sprawdzić wynik:
Możesz zobaczyć port MySQL, ponieważ 127.0.0.1 reprezentuje hosta lokalnego, który widzisz. Możesz spróbować ponownie zmienić adres powiązania, aby upewnić się, że to działa:
[mysqld]
wiązać-adres=127.5.5.1
Następnie zapisz /etc/mysql/my.cnf plik i zrestartuj usługę MySQL. Jeśli wykonasz skanowanie Nmap ponownie na tym etapie, nie powinieneś widzieć tego adresu powiązania na hoście lokalnym.
Gdy już wiesz, że to działa, wróć do ustawień z pierwszego kroku i ustaw adres powiązania z powrotem na 127.0.0.1 i zapisz ponownie.
2. Skonfiguruj lokalną barierę dostępu do plików
MySQL może komunikować się z lokalnym systemem plików. Dzięki zapytaniom możesz zobaczyć treść tekstu w lokalnym systemie plików lub nagrać wynik zapytania na dysk. Aby uniemożliwić złośliwym atakującym korzystanie z tej funkcji, należy uniemożliwić MySQL komunikowanie się z lokalnym systemem plików.
Możesz użyć funkcji o nazwie local-infile, aby zachować środki ostrożności. Na przykład wyobraź sobie, że masz plik o nazwie „/etc/secretfile.txt” i masz w nim hasło. Jeśli wartość funkcji local-infile w pliku /etc/mysql/my.cnf wynosi 1, dostęp jest otwarty. Możesz więc uzyskać dostęp do pliku secretfile.txt.
Wartość funkcji local-infile wynosi 1. Uruchom ponownie bazę danych MySQL, aby zmiany zostały wprowadzone. Teraz połącz się z MySQL za pomocą następującego polecenia i sprawdź, czy widzisz plik secretfile.txt:
WYBIERAĆZAŁADUJ PLIK("/etc/tajnyplik.txt");
Przechwycenie informacji w dowolnym pliku na komputerze nie jest trudne.
Aby rozwiązać ten problem, zmień wartość local-infile w pliku /etc/mysql/my.cnf w następujący sposób:
[mysqld]
lokalny-w pliku=0
Uruchom ponownie usługę MySQL. Połącz się ponownie z MySQL i powtórz poprzedni krok; nie powinieneś już widzieć zawartości pliku.
Jeśli użytkownicy nie mają jeszcze uprawnień do odczytu i zapisu plików lokalnych, nie będą mogli zobaczyć tego pliku. Jednak nadal jest to coś, co powinieneś sprawdzić w testach penetracyjnych i bezpieczeństwie baz danych.
3. Ustaw użytkowników aplikacji i hasła
Użytkownik zarządzający bazą danych i użytkownik MySQL uzyskujący dostęp do bazy danych muszą się różnić. Innymi słowy, łączenie aplikacji z MySQL przez użytkowników root jest niezwykle niebezpieczne. Jeśli to możliwe, zdefiniuj użytkowników aplikacji, które nie działają Operacje UPDATE lub INSERT osobno.
Kolejną rzeczą do rozważenia w tym momencie są hasła użytkowników. Jak w prawie każdej dziedzinie, hasła dla użytkowników MySQL muszą być złożone i nieprzewidywalne. Jeśli potrzebujesz pomocy w tym zakresie, istnieją świetne systemy generatorów haseł, z których możesz skorzystać.
4. Usuń anonimowych użytkowników
Podczas domyślnej instalacji MySQL pojawia się kilku anonimowych użytkowników. Musisz je usunąć i zablokować im dostęp. W przypadku bezpiecznego serwera MySQL nie powinieneś otrzymać żadnej odpowiedzi w wyniku następującego zapytania:
WYBIERAĆ * Z mysql.użytkownik GDZIEUŻYTKOWNIK="";
# Przykładowe dane wyjściowe
Pusty ustawić (0,001 s)
Jeśli są jakieś wyniki, należy usunąć tych anonimowych użytkowników. Na przykład, jeśli istniało anonimowe konto o nazwie „anonuser” w środowisku o nazwie „localhost”, w celu usunięcia tego konta musiałbyś użyć następującego polecenia:
USUŃ UŻYTKOWNIKA 'anonimowy użytkownik'@'Lokalny Gospodarz';
5. Sprawdź uprawnienia do plików lokalnych MySQL
Wyobraź sobie, że jesteś administratorem bazy danych i chcesz wrócić do danych sprzed tygodnia. W takim przypadku może być konieczne połączenie się z serwerem bazy danych przez SSH i zmiana żądanych plików MySQL. Robiąc to, mogłeś użyć uprawnień użytkownika root w systemie Linux; oznacza to, że własność i uprawnienia do plików danych mogą ulec zmianie. Nie chcesz tego.
Zajrzyj do katalogu /var/lib/mysql, aby sprawdzić przyznane uprawnienia. Tutaj musisz sprawdzić, czy właścicielem wszystkich plików jest użytkownik MySQL. Poniższe polecenie załatwi sprawę:
sudo ls -al /rozm/lib/mysql
Uprawnienia do odczytu i zapisu plików powinny należeć tylko do użytkownika MySQL. Żaden inny użytkownik nie powinien mieć żadnych uprawnień.
6. Użyj SSL MySQL
Myślenie o konkretnym przykładzie jest najlepszym sposobem zrozumienia użycia MySQL i SSL. Wyobraź sobie, że jeden z serwerów w regionie ABC, gdzie znajduje się wiele różnych serwerów, zostaje przejęty przez złośliwych hakerów. Hakerzy przeprowadzą wewnętrzne skanowanie w regionie ABC. W ten sposób zbierają informacje o serwerach.
Jeśli podczas tego procesu wykryją serwer MySQL, mogą wykonać a Atak Man-in-the-Middle (MitM) na serwer docelowy, co oznacza, że mogą wykraść informacje o sesji aplikacji i użytkowników łączących się z tym serwerem. Jednym z najlepszych sposobów uniknięcia tego jest włącz SSL na serwerze MySQL.
7. Pliki dziennika i historii
Używasz dzienników MySQL do analizowania i znajdowania błędów. Możesz edytować miejsce przechowywania tych dzienników, wprowadzając my.cnf w następujący sposób:
# /etc/mysql/my.cnf
[mysqld]
dziennik =/var/dziennik/mylogfiles
Możesz zmienić nazwę lub lokalizację mylogfiles według własnego uznania. Jest jeszcze jeden plik, który musisz sprawdzić. Kiedy łączysz się z serwerem MySQL w terminalu Linux i wpisujesz różne polecenia, te zapytania są zapisywane w pliku mysql_history. Jeśli uruchomisz następujące polecenie, możesz zobaczyć zapytania, których używasz w terminalu MySQL:
kot ~/.mysql_history
Musisz usunąć zawartość tego pliku, jeśli nie chcesz podawać informacji o tym, jakiego rodzaju zapytania wykonujesz na serwerze. Użyj następującego polecenia, aby usunąć zawartość pliku:
sudo echo "wyczyszczony"> ~/.mysql_history
Następnie możesz ponownie sprawdzić zawartość pliku.
Ktokolwiek jest właścicielem bazy danych, jest właścicielem systemu
Bez względu na branżę, w której pracujesz, Twoja baza danych zawsze zawiera ważne informacje. Mogą to być Twoi klienci, konta bankowe i hasła. Złośliwi napastnicy znają ich znaczenie i wartość. Programiści i administratorzy baz danych muszą przynajmniej znać podstawy, z którymi zetkną się podczas testów penetracyjnych, aby pokonać hakerów.