MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Najlepsze praktyki dotyczące bezpieczeństwa MongoDB

Jeśli chodzi o zarządzanie systemami baz danych, jednym z kluczowych aspektów jest bezpieczeństwo baz danych. Brak stworzenia dobrych podstaw dla bezpieczeństwa dowolnego systemu baz danych może spowodować naruszenie danych, w wyniku którego intruz będzie miał do niego nieautoryzowany dostęp. W związku z tym wydarzenia takie jak to mogą prowadzić do utraty reputacji marki, grzywien i kar za niezgodność, naruszoną własność intelektualną, a nawet do zamknięcia firmy.

MongoDB — najpopularniejsza baza danych NoSQL — zapewnia szereg narzędzi, kontroli i środków opracowanych w celu zapewnienia podstawy dla trzech filarów bezpieczeństwa informacji — poufności, integralności i dostępności. Bezpieczeństwo danych jest najczęściej zagrożone na poziomie poufności ze względu na większą użyteczność i dostęp.

Jakie typy danych należy chronić

Podobnie jak inne bazy danych, MongoDB obejmuje dwa typy danych:

  1. Dane w spoczynku — to są dane przechowywane na dysku systemu plików.
  2. Dane w trakcie przesyłania — obejmuje to przesyłanie danych przez sieć, na przykład między bazą danych a aplikacją.

Aby chronić Twoje dane w dowolnej bazie danych, Twoje środki bezpieczeństwa muszą uwzględniać:

  • Dane w plikach bazy danych.
  • Aplikacje powiązane z bazą danych.
  • Infrastruktura obliczeniowa i sieciowa używana do uzyskania dostępu do bazy danych.
  • Fizyczny serwer bazy danych i sprzęt bazowy.

Lista kontrolna bezpieczeństwa MongoDB

Przed skonfigurowaniem wdrożenia produkcyjnego MongoDB należy wziąć pod uwagę minimalny standard bezpieczeństwa, aby zapewnić bezpieczeństwo wdrożenia. Sprawdź poniższą listę kontrolną bezpieczeństwa MongoDB, aby

  1. Określ mechanizm uwierzytelniania, włączając kontrolę dostępu . Przed zezwoleniem na dostęp do bazy danych niezbędna jest weryfikacja tożsamości użytkownika. MongoDB obsługuje w tym przypadku dwa mechanizmy:pierwszy to Salted Challenge Response Authentication Mechanism (SCRAM), który jest domyślnym mechanizmem uwierzytelniania w MongoDB. Weryfikuje dostarczone poświadczenia (nazwę użytkownika i hasło) z bazą danych uwierzytelniania, a uwierzytelnianie certyfikatem X.509 jest używane zarówno do uwierzytelniania klienta, jak i wewnętrznego uwierzytelniania członków zestawu replik i klastrów podzielonych na fragmenty.

  2. Ustal kontrolę dostępu opartą na rolach . Każda aplikacja lub osoba mająca dostęp do bazy danych powinna posiadać unikalną tożsamość stworzoną przez administratora użytkownika. Zdefiniuj role z dokładnymi prawami dostępu i przypisz je użytkownikom, którzy muszą wykonać te operacje.

  3. Komunikacja między mongod, mongos, aplikacjami i MongoDB powinna być szyfrowana . Szyfrowanie odbywa się poprzez konfigurację TLS/SSL.

  4. Ochrona danych . Jeśli używasz aparatu magazynu WiredTiger do przechowywania danych w spoczynku, możesz zaszyfrować dane przy użyciu szyfrowania w spoczynku. Jeśli używasz innego aparatu magazynu, zaszyfruj dane przy użyciu systemu plików, szyfrowania fizycznego lub urządzenia i dodaj uprawnienia systemu plików. Ponadto możesz szyfrować pola w dokumentach za pomocą szyfrowania na poziomie pola po stronie klienta przed przekazaniem danych z serwera.

  5. Bezpieczna sieć operacyjna . MongoDB powinien działać w zaufanym środowisku sieciowym, tak aby tylko zaufani klienci mieli dostęp do interfejsu sieciowego i portów. Możesz to osiągnąć, wyłączając bezpośredni dostęp do roota SSH i konfigurując konfigurację z grupami bezpieczeństwa dla ruchu przychodzącego i wychodzącego do instancji MongoDB.

  6. Kontrola działań systemu . Bardzo ważne jest śledzenie działań użytkowników związanych z dostępem do bazy danych. Audyt pozwala administratorom na przeprowadzanie odpowiednich kontroli i pozwala na właściwą analizę kryminalistyczną. Niektóre funkcje audytu, takie jak MongoDB Enterprise, zapewniają filtry dla określonych zdarzeń, takich jak zdarzenia uwierzytelniania, w celu zmniejszenia ilości danych, które należy przeanalizować.

  7. Włącz bezpieczne opcje konfiguracji podczas uruchamiania MongoDB . Zaleca się ograniczenie użycia kodu JavaScript obsługiwanego przez MongoDB, takiego jak mapReduce, $where i $function. Możesz całkowicie wyłączyć te opcje za pomocą opcji --noscripting. Sprawdź poprawność pól wejściowych za pomocą modułów, takich jak mangusta. Dodatkowo możesz użyć net.writeObjectCheck, aby upewnić się, że wszystkie dokumenty przechowywane przez instancję mongod mają prawidłowy BSON.

  8. Uruchom MongoDB z dedykowanym użytkownikiem . Nie warto uruchamiać MongoDB w systemie operacyjnym, do którego ma dostęp wielu użytkowników. Aby być po bezpiecznej stronie, MongoDB powinno być uruchamiane przez dedykowane konto użytkownika systemowego, które ma uprawnienia dostępu do danych, ale nie niepotrzebne uprawnienia, które mogą zagrozić integralności danych.

Złe praktyki bezpieczeństwa MongoDB, których należy unikać

Ostatnio wzrosła liczba incydentów włamań do baz danych, zwłaszcza MongoDB. Nie dzieje się tak dlatego, że MongoDB nie spełnia standardów dotyczących bezpieczeństwa, ale raczej z powodu nieprzestrzegania przez programistów najlepszych praktyk bezpieczeństwa.

MongoDB to DBMS o otwartym kodzie źródłowym, co oznacza, że ​​niektórzy programiści mogą znać tajniki lepiej niż inni. Nie zawsze oznacza to, że Twoja baza danych jest zagrożona włamaniami z zewnątrz, chyba że popełnisz jeden z następujących błędów:

  1. Korzystanie z portów domyślnych . Nie ma nic złego w korzystaniu z domyślnych portów (27017 i 27018), ale czasami możesz zapomnieć ustawić grupy bezpieczeństwa odpowiedzialne za zarządzanie ruchem w twoim systemie. Hakerzy zawsze najpierw próbują uzyskać dostęp do bazy danych z domyślnymi portami, zanim spróbują czegoś innego. MongoDB można uruchomić na innym porcie z opcją portu, np. $mongo –port 23456. Zalecanym sposobem jest jednak zmiana konfiguracji w pliku /etc/mongod.conf poprzez edycję poniższej linii z preferowanym numerem portu:

    net:
    	port:27017


    MongoDB domyślnie działa bez uwierzytelniania, co często stanowiło problem w przypadku nowych wdrożeń wprowadzanych do środowiska produkcyjnego. Brak włączenia uwierzytelniania oznacza, że ​​każdy może z łatwością uzyskać dostęp do bazy danych. Zawsze twórz użytkownika z uprawnieniami dostępu opartymi na rolach do interakcji z bazą danych MongoDB.

  2. Niewłaściwe przechowywanie danych logowania użytkownika . Niektórzy programiści na stałe kodują poświadczenia nazwy użytkownika i hasła do projektu, a kiedy upubliczniają je, każdy może mieć do nich dostęp, co powoduje, że baza danych jest podatna na ataki.

  3. Nie udało się ograniczyć dostępu do bazy danych do znanych urządzeń sieciowych . W takim przypadku należy zawsze ograniczać dostęp do bazy danych tylko do znanych aplikacji i systemów równoważenia obciążenia poprzez białą listę. Ogranicza to dostępność bazy danych do nieznanych sieci, które mogą stanowić zagrożenie dla bezpieczeństwa.

  4. Unikanie używania SSL . Uwierzytelnianie SSL jest bardzo ważne dla zapewnienia, że ​​tylko zaufane połączenia trafiają do bazy danych.

  5. Nie można użyć protokołu LDAP do rotacji haseł . Protokół LDAP wiąże użytkowników z katalogiem korporacyjnym, dzięki czemu w przypadku zmiany ich roli lub opuszczenia firmy zmiany te są automatycznie stosowane do grupy bazy danych. Gwarantuje to, że ich dostęp do danych będzie ograniczony do roli, do której zostali ponownie przypisani, lub całkowicie ograniczony, jeśli opuszczą firmę.

Hardowanie infrastruktury sieciowej

Wiele razy zagrożenia bezpieczeństwa zaczynają się na poziomie ekspozycji sieci, ponieważ jest to najłatwiej dostępna część dla większości hakerów. Oprócz zapewnienia, że ​​tylko zaufane hosty mają dostęp do MongoDB, możesz zwiększyć bezpieczeństwo poprzez wzmocnienie sieci. Wzmacnianie sieci obejmuje dwie procedury w odniesieniu do MongoDB:

  1. Zapory sieciowe . Zapory ogniowe służą do ograniczania ruchu przychodzącego z niezaufanych hostów, które w przeciwnym razie naraziłyby bazę danych MongoDB na włamania z zewnątrz. W systemach operacyjnych Windows interfejs wiersza poleceń netsh zapewnia dostęp do Zapory systemu Windows. W systemach Linux interfejs iptables zapewnia dostęp do podstawowej zapory sieciowej netfilter. Zapora odfiltruje niezaufane hosty i zapewni, że tylko ruch z zaufanych źródeł będzie mógł dotrzeć do mongod i mongos, oprócz tworzenia połączenia z zaufanymi wyjściami.

  2. Wirtualne sieci prywatne (VPN) . Sieci VPN umożliwiają łączenie się dwóch sieci przez zaszyfrowaną i zaufaną sieć o ograniczonym dostępie. Robią to, zapewniając weryfikację certyfikatu i wybór protokołów szyfrowania, które mogą wymagać rygorystycznego poziomu uwierzytelniania i identyfikacji wszystkich klientów. VPN zapewniają bezpieczny tunel; dlatego połączenia tworzone z instancją MongoDB za pomocą VPN mogą zapobiegać manipulacjom i atakom typu man-in-the-middle.

Zawijanie

Podobnie jak w przypadku wszystkich baz danych typu open source, bezpieczeństwo powinno być najwyższym priorytetem infrastruktury MongoDB. Wdrożenie bazy danych MongoDB z ustawieniami domyślnymi to wyraźna droga do katastrofy bezpieczeństwa. Dlatego ważne jest, aby w pełni zrozumieć, jak działa bezpieczeństwo w MongoDB i postępować zgodnie ze wszystkimi najlepszymi praktykami, aby zapewnić maksymalne bezpieczeństwo. Co najważniejsze, audyt działań użytkowników, takich jak uwierzytelnianie, zapewnia możliwość identyfikacji luk i planowania na przyszłość, zanim dojdzie do katastrofy.

Narzędzia takie jak ClusterControl pomagają wyeliminować zgadywanie z bezpieczeństwa bazy danych i zapewniają, że wdrożenia MongoDB zawsze będą zgodne z odpowiednim modelem bezpieczeństwa. Dzięki ClusterControl możesz łatwo skonfigurować swoje bazy danych, kontrolę dostępu i szyfrowanie danych w spoczynku i podczas przesyłania. Jeśli jeszcze tego nie zrobiłeś, pobierz ClusterControl już dziś i rozpocznij bezpłatny 30-dniowy okres próbny, aby zobaczyć, jak ClusterControl może pomóc w zarządzaniu i poprawie bezpieczeństwa bazy danych MongoDB.


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Jak zorganizować relację wiele do wielu w MongoDB

  2. Natywne maskowanie MongoDB (trzecia metoda)

  3. zapytanie mongodb bez nazwy pola

  4. MongoDB - $set do aktualizacji lub wypchnięcia elementu Array

  5. Różnica między .save() a użyciem update()