Internetowe Forum Archiwalne

Internetowe Forum Archiwalne => Problematyka budowy baz danych => Wątek zaczęty przez: Grzegorz Gałęzowski w Czerwiec 23, 2009,

Tytuł: Bezpieczeństwo baz danych
Wiadomość wysłana przez: Grzegorz Gałęzowski w Czerwiec 23, 2009,
Bezpieczeństwo baz danych i aplikacji.

Może ktoś będzie zainteresowany tematem. Chciałbym zaprezentować tekst o bezpieczeństwie baz danych i aplikacji. W poniższym artykule przedstawię jak sprawdzać bezpieczeństwo naszych danych. Na pierwszy ogień dałem MS SQL. W razie zainteresowania mogą być przedstawione inne silniki (MySQL, Postgresql, Oracle itd.).

Istnieje bardzo wielkie ryzyko, że dane z baz danych mogą wpaść w niepowołane ręce. Aby się przed tym uchronić, przedsiębiorstwa są zmuszane do nieustannej analizy zastosowanych ustawień polityki bezpieczeństwa dla pakietów oprogramowania i własnych aplikacji.

Microsoft SQL Server to popularne i niezawodne środowisko dla wielu aplikacji, które korzystają z baz danych ? w połączeniu z dużą elastycznością, daje sporo możliwości. Niestety, jeśli taki potencjał nie zostanie odpowiednio zabezpieczony, wykorzystywany może być w niewłaściwy sposób.

Ten artykuł ma na celu określenie pewnych rodzajów ryzyka, które mogą wynikać z niewłaściwego zarządzania Microsoft SQL Server.
SQL Server domyślnie pozwala wszystkim użytkownikom na dostęp do głównej bazy danych, która zawiera wszystkie ustawienia dla programu, w tym także wszystkie informacje, które SQL Server wykorzystuje do otwarcia bazy danych. Zawiera także wszystkie identyfikatory logowania SQL, danych z podłączonych serwerów itp. Oczywiście podstawowi użytkownicy nie mają dostępu do wszystkich zasobów informacyjnych. Niemniej jednak nazwy kont i baz danych (w tym informacji przechowywanych na nich) mogą być dostępne nieuprzywilejowanym użytkownikom.

W niniejszym artykule pokazane zostaną najczęstsze błędy baz danych i ich usług,
omówione metody identyfikacji i wykorzystania ich przy użyciu narzędzi dostępnych z poziomu systemu Linux i Windows.
Case studies (czyli korzystanie z otwartych i zamkniętych narzędzi audytowych) będzie oferować czytelnikowi wszechstronne podejście do korzystania z narzędzi i technik przedstawionych w tym artykule. Wiedza zdobyta na praktycznych przykładach może być bezpośrednio stosowana w odniesieniu do świata rzeczywistego.
Wszyscy, którzy będą chcieli przeprowadzać testy na bazach danych, muszą najpierw poznać podstawowy zestaw narzędzi i technologii potrzebnych do skutecznego audytu. Po pierwsze, podstawowe pojęcia: definicję bazy danych oraz poszczególnych części składowych typowego systemu zarządzania bazami danych. Następnie kilka cech powszechnie używanego systemu zarządzania bazami danych jakim jest Microsoft SQL Server, w tym jego domyślne konta użytkowników, a także jego strukturę. W końcowej fazie szczegóły techniczne instalacji bazy, w tym domyślne porty, protokoły oraz inne informacje ważne dla testów penetracyjnych.

Podstawowe pojęcia
Czym jest baza danych i jak się różni od systemu zarządzania bazą danych? Baza danych jest uporządkowanym zbiorem informacji, który związany jest w zorganizowany sposób. System zarządzania bazą danych jest programem komputerowym używanym do uzyskiwania
dostępu, zarządzania i aktualizacji informacji w bazie danych. Od tego miejsca, aż do końca artykułu, będą stosowane  terminy systemu zarządzania bazy danych i baz danych zamiennie, by odnieść się do terminu bazy danych i systemu zarządzania bazą danych.

Instalacja bazy danych
Zrozumienie tego, co się dzieje, po zainstalowaniu bazy danych jest ważne dla zrozumienia sposobu podejścia do badań, nad strukturą systemu bazy danych. Instalowanie bazy danych jest podobne do instalowania innych programów. Potrzeby bazy danych są unikalne i często oprogramowanie bazy danych jest tylko aplikacją zainstalowaną na serwerze lub stacji roboczej. Stworzenie rzeczywistej bazy danych wymaga szczególnej uwagi i wiedzy.
Różne systemy w tym i SQL Server mają funkcje do tworzenia bazy danych za pomocą kreatora, za pomocą skryptów lub też ręcznie. Kiedy baza danych jest tworzona, wraz z nią tworzone są konta domyślnych użytkowników, ich role i uprawnienia. Administrator bazy danych powinien zabezpieczyć wiele ze wspomnianych, domyślnych elementów już w momencie tworzenia.

Zabezpieczenie baz danych jest trudniejsze, niż większości innych systemów. Jeśli baza danych jest produkcyjna, naprawa lub wykonanie zabezpieczeń może spowodować, że przestanie ona działać prawidłowo. Ważne jest, by wymogi bezpieczeństwa były wbudowane w system w tym samym czasie, co wymagania funkcjonalne bazy danych.
Jeśli programista lub administrator buduje bazę danych korzystając z domyślnych ustawień, bez żadnych wskazówek z zakresu wymogów bezpieczeństwa, to takie bazy danych mogą posiadać wiele funkcji, które będą ją upośledzać pod względem bezpieczeństwa.

Użytkownicy Microsoft SQL Server
W SQL Server tworzone jest konto o nazwie sa, czyli administratora systemu programu SQL Server, właściciela bazy danych (dbo) i wszystkich baz danych na serwerze SQL. Konto logowania sa jest podłączone do roli sysadmin. Jest to również dbo dla wszystkich baz danych. To konto domyślnie przyznaje wszystkie przywileje i uprawnienia na bazy danych i można dzięki niemu także wykonywać polecenia systemowe na serwerze SQL.
Kiedy tworzone jest konto nowego użytkownika SQL Server, administratorzy (DBA) muszą zadbać o przydział odpowiednich przywilejów i ról dla takiego użytkownika.

Można także skonfigurować SQL Server do używania uwierzytelniania użytkowników systemu Windows tylko lub w połączeniu z SQL Server, który to tryb nazywa się trybem uwierzytelniania mieszanego. Gdy nowe konto jest tworzone, użytkownik może uwierzytelniać się do bazy i pracować na niej w granicach swoich uprawnień i funkcji. Tryb uwierzytelniania systemu Windows ułatwia pracę użytkownikowi, ponieważ ma on do zapamiętania tylko jedno hasło, ale to może również stworzyć potencjalne luki. Jeśli uwierzytelnianie dla użytkownika Windows będzie naruszone i baza danych używa właśnie takiego typu uwierzytelniania, to dostęp do bazy danych będzie bezproblemowy. Z punktu widzenia bezpieczeństwa jest to bardzo duże zagrożenie.

SQL Server ? role i uprawnienia
Microsoft SQL Server ma uproszczone zarządzanie uprawnieniami poprzez tworzenie ról.
Aby pomóc administratorom w tworzeniu, modyfikowaniu, usuwaniu i sprawdzaniu kont SQL Server wyposażony jest w zestaw wbudowanych ról bazy danych. Można je wykorzystać także do grupowania użytkowników. Do grupowania użytkowników, mających te same potrzeby dostępu, można również utworzyć własne role bazy danych i przypisać uprawnienia grupom zamiast poszczególnym użytkownikom.

Tabela 1. Stałe role bazy danych w SQL Server
(http://www.lublin.ap.gov.pl/gsgalezowski/sql1.JPG)

SQL Server procedury przechowywane i rozszerzone
W procedurach przechowywanych znajdują się fragmenty kodu napisane w języku Transact-SQL (T-SQL), które są udostępniane do dalszego wykorzystania. Przykładem przydatnej procedury jest sp_addlogin, która to stosowana jest w celu utworzenia nowego użytkownika. Rozszerzone procedury są podobne do procedur przechowywanych, chyba że zawierają linki bibliotek dynamicznych (DLL). Rozszerzone procedury uruchamiania SQL Server służą do zwiększenia funkcjonalności bazy danych na serwerze. Jedną z rozszerzonych procedur przydatną przy testach penetracyjnych jest xp_cmdshell, która pozwala użytkownikowi na wykonanie polecenia w powłoce systemu operacyjnego Windows. Jak widać, procedury składowane w SQL Server mogą znacznie poprawić możliwości bazy danych. Jednakże mogą one także tworzyć poważne luki w zakresie bezpieczeństwa.

Komunikacja
Gdy baza danych jest już zainstalowana, użytkownik musi mieć możliwość podłączenia się do niej by móc jej używać.
Do komunikacji wykorzystywany jest protokół TCP (Transmission Control Protocol) i UDP (User Datagram Protocol). Domyślnie SQL Server wykorzystuje port TCP 1433 do połączenia z bazą danych. Ten port może być oczywiście zmieniony, ale zwykle nie jest. Większość może wiedzieć, jaki jest domyślnie wykorzystywany port TCP dla programu SQL Server, ale wielu może nie zdawać sobie sprawy, że port UDP jest także silnie związany z bazą danych. Port UDP 1434 umożliwia klientom przeglądanie bazy. Port ten może stać się celem ataku dla wielu robaków i może być wykorzystany do ataku typu przepełnienia buforu. Firma Microsoft wydała poprawkę do tego problemu, ale nadal można znaleźć tę lukę w wielu środowiskach.

Korzystanie z otwartych i zamkniętych narzędzi audytowych
Pierwszym krokiem w przeprowadzeniu wszelkich testów penetracyjnych jest odkrycie, jakie porty są otwarte na danym hoście, a także powiązanych z nimi usług. W następnych kilku krokach  wskazane będą metody identyfikacji Microsoft SQL Server.
DNS (Domain Name System) jest procesem rozwiązywania nazw hostów z adresów IP (Internet Protocol). Opisowe nazwy mogą ujawnić wiele informacji, takie jak rodzaj systemu operacyjnego i usług uruchomionych na danym systemie. Listing 1 pokazuje popularny skaner portów Nmap za pomocą którego można wykonać skanowanie (z opcją -SL), pokazany jest tu zakres adresów IP do nazw hosta.
Listing 1. Skanowanie nmap z opcją -sL

gsg ~ # nmap -sL 10.0.0.210-215

Starting Nmap 4.20 ( http://insecure.org ) at 2009-02-02 13:12 GMT
Host 10.0.0.210 not scanned
Host 10.0.0.211 not scanned
Host mssql2000.pl (10.0.0.212) not scanned
Host mssql2005.pl (10.0.0.213) not scanned
Host 10.0.0.214 not scanned
Host 10.0.0.215 not scanned
Nmap finished: 6 IP addresses (0 hosts up) scanned in 0.012 secondes
gsg ~ #

Wynik skanowania z wykorzystaniem skanera Nmap zwrócił listę adresów IP, zwróci także rozwiązaną nazwę mssql2000 i mssql2005. Można określić z uzyskanych wyników, że istnieje wysokie prawdopodobieństwo, że pod adresem 10.0.0.212 jest uruchomiony program Microsoft SQL Server 2000, a pod adresem 10.0.0.213 jest uruchomiony program Microsoft SQL Server 2005.
Skanowanie portów TCP i UDP
Skanowanie portów to działanie polegające na wysyłaniu pakietów TCP lub UDP do systemu celem sprawdzenia otwartych portów i dostępnych serwisów. Skanowanie sieci, można przeprowadzić właśnie takim programem jak Nmap, który pomaga określić, jakie hosty są aktywne i jakie porty TCP i UDP są na nich otwarte. Na Listingu 2 i Listingu 3 wykonane zostało skanowanie z wykorzystaniem Nmap w poszukiwaniu serwera Microsoft SQL i domyślnych portów TCP i UDP (patrz Ramka Port Number Service Service Description), korzystając z opcji opisanych w Ramce Opis opcji Nmap.

Port Number Service Service Description
1433/tcp ms-sql-s Microsoft-SQL-Server
1434/udp ms-sql-m Microsoft-SQL-Monitor
Opis opcji Nmap
-sS skanowanie TCP SYN
-sU skanowanie UDP
-sV sprawdzanie systemu w celu odkrycia otwartych portów, określenia usług i pozyskanie informacji o ich wersjach,
-P0 Skanuj wszystkie hosty dostępne online
-T4 ustaw czas szablonu (im wyższy tym jest szybszy)
-pT:1433,U:1434 zakres portów. Podczas skanowania obu portów TCP i UDP, można określić konkretny protokół poprzedniego numeru portu przez T: lub U:.

Listing 2. Skanowanie z wykorzystaniem Nmap

gsg ~ #nmap -sL 10.0.0.210-215

Starting Nmap 4.20 ( http://insecure.org ) at 2009-02-02 12:30 GMT
Host 10.0.0.210 not scanned
Host 10.0.0.211 not scanned
Host mssql2000.pl (10.0.0.212) not scanned
Host mssql2005.pl (10.0.0.213) not scanned
Host 10.0.0.214 not scanned
Host 10.0.0.215 not scanned
Nmap finished: 6 IP addresses (0 hosts up) scanned in 0.021 seconds

Listing 3. Skanowanie Nmap

gsg ~ #nmap -sSUV -P0 -T4 -pT:1433,U:1434 10.0.0.213
Starting Nmap 4.20 ( http://insecure.org ) at 2009-02-02 12:35 GMT
Interesting ports on mssql2005.pl (10.0.0.213):
PORT     STATE   SERVICE   VERSION
1433/tcp open ms-sql-s?
1434/udp open ms-sql-m Microsoft SQL Server 0.00.1399.06 (ServerName: MSSQL2005; TCPPort: 1433) MAC Address: 00:0C:31:DF:5A:01
Service Info: OS: Windows

Service detection performed. Please report any incorrect results at http://insecure.org/nmap/submit/
Nmap finished: 1 IP address (1 host up) scanned in 26.834 seconds

Nmap przedstawił informacje na temat wersji serwera i wykorzystywanych portów, w tym także informację o MAC adresie. Korzystając z Nmap można także określić dokładnie jaka jest to wersja serwera, a także czy i jakie zainstalowane są dodatki typu Service Pack. Pomocna przy określaniu wersji serwera będzie Ramka Publikacje wersji Sqlservr.exe, w której są wymienione różne wersje sqlserv.exe
Publikacje wersji Sqlservr.exe
Released to Manufacturing (RTM) 2000.80.194.0
SQL Server 2000 Service Pack 1 2000.80.384.0
SQL Server 2000 Service Pack 2 2000.80.534.0
SQL Server 2000 Service Pack 3 2000.80.760.0
SQL Server 2000 Service Pack 3a 2000.80.760.0
SQL Server 2000 Service Pack 4 2000.8.00.2039
SQL Server 2005 Service Pack 1 2005.90.2047
SQL Server 2005 Service Pack 2 2005.90.3042

NetBIOS i protokół Server Message Block (SMB)
W systemach Microsoft Windows Server jak i w stacjach roboczych informacje o zarejestrowanych usługach zintegrowane są z główną przeglądarką. NetViewX (www.ibt.ku.dk/jesper/NetViewX/) oraz MBEnum (www.cqure.net/wp/?page_id=20). Są to dwa programy, które mogą być wykorzystane do odpytania głównej przeglądarki i uzyskania tą drogą informacji o zarejestrowanych usługach. Analiza systemu Microsoft SQL Server z wykorzystaniem protokołu SMB jest bardzo szybka i przy tym w sumie niewykrywalna (wygląda to tak jak przy normalnej pracy z SMB) możemy odkryć, usługi ustawione na słuchanie na domyślnym porcie TCP (1433/tcp) chronione przez firewall lub w przypadku niektórych wersji, gdy usługa nie ma zezwolenia na zdalne połączenie. Listingi 4 i 5 ilustrują właściwe użycie poleceń i wykonanie odpowiednio programu NetViewX i MBEnum. W tych przykładach, odpytywana jest domena gsgcorp z Microsoft SQL Servers 2000 i 2005.

Listing 4. NetViewX używanie komend

C:\cmd>NETVIEWX.EXE -h
Usage:netviewx [-D domain] [-T type...] [-0 format : -x] [-t | -c x] [-C x]
Lists current nodes in a domain that matches servers running specific services.
Version: v0.5 19990203.
-D   domain The domain to list. Default is the current domain.
-T    type... The service types to match, Can be one or more of: workstation, server, sqlserver,domain_ctrl, domain_bakctrl, time_source, afp, novell, domain_member, printing_server, dialin_server, server_mfpn, server_nt, server_osf, server_unix, nt, wfw, potential_browser, backup_browser, master_browser, domain_master, server_vms, windows, dfs, cluster_nt, dce, alternate_xport, local_list_only, domain_enum, all. Default is all.
-0    format Selects the fields to list for the servers. The format should be a string of letters, where: n=name, m=major version, i=minor version, p=platform id, T=service types, C=comment in quotes, c=comment witch major and minor version. Default is nmipTC.
-x   A shorthand for -0nsvtc -c " " -C +
-t   Separate fields with tabs. Default is comma (,).
-c x   separate fields with the character x.
-C x   Separate the server types with the character x. Default is to separate the types with x.

C:\cmd>NETVIEWX.EXE -D gsgcorp -T sqlserver
MSSQL2000,5,0,500,nt%workstation%server_nt%server%sqlserver%backup_browser%master_browser%2000000,""
MSSQL2005,5,0,500,nt%workstation%server_nt%server%sqlserver%backup_browser %2000000,""

Listing 5. Używanie programu MBEnum

C:\cmd\mbenum
MBEnum v.1.5.0 by patrik@cqure.net
----------------------------------------------
mbenum [-s \\server] [-d don ] [-f filter] -p <mode>

Presentation modes:
1 - by server
2 - by service
3 - by service vertically
c:\cmd>mbenum.exe -d gsgcorp -f "SQL Server" -p 1

MBEnum v.1.5.0 by patrik@cqure.net
Name: MSSQL2005
Services: Server, Workstation, SQL Server, Term, server, Member server
Comment:
OS Version: Windows 2003 Server

Name: MSSQL2000
Services: Server, Workstation, SQL Server, Master browser, Term, server, Member server
Comment:
OS Version: Windows 2003 Server

W obydwu przykładach wyniki zapytania zawierają nazwy NetBIOS (MSSQL2000 i
MSSQL2005) i nie mają powiązanych z nimi adresów IP. Jak widzimy na Listingu 6 można użyć narzędzia nmblookup, które rozwiąże nazwy NetBIOS na adresy IP.

Listing 6. Rozwiązywanie nazw NetBIOS na adresy IP z wykorzystaniem nmblookup
gsg ~ # nbmlookup MSSQL2000
querying MSSQL2000 on 10.0.0.255
10.0.0.212 MSSQL2000<00>

gsg ~ # nmblookup MSSQL2005
querying MSSQL2005 on 10.0.0.255
10.0.0.213 MSSQL2005<00>

Po wykryciu bazy danych i serwera docelowego, następnym krokiem jest identyfikacja słabych punktów w usługach. Przydatnym narzędziem do tego celu będzie Metasploit Framework. Jest to pakiet, który rozwijany jako platforma do tworzenia narzędzi wykrywających luki systemowe, wykorzystuje także możliwości skanera Nessus.
Metasploit Framework 3
Program ten umożliwia pracę zarówno z linii poleceń oraz w środowisku graficznym. Warto pamiętać o aktualizacji systemu MF3 (Listing 7).

Listing 7. Aktualizacja Metasploit z wykorzystaniem Subversion (SVN)

gsg ~ # cd /pentest/exploits/framework3/
gsg framework3 #svn update

Użyjemy teraz konsoli msfcli i narzędzia wyszukiwawczego grep by odnaleźć dostępne exploity dla Microsoft SQL Server (Listing 7).

Listing 7 a. Aktualizacja Metasploit z wykorzystaniem Subversion (SVN)
gsg framework3 # ./msfcli |grep -i mssql
   exploit/windows/msql/ms02_039_slammer      Microsoft SQL Server Resolution Overflow
   exploit/windows/mssql/ms02_056_hello      Microsoft SQL Server Hello Overflow
   auxiliary/scanner/mssql/mssql_login      MSSQL Login Utility
   auxiliary/scanner/mssql/mssql_ping      MSSQL Ping Utility

Gdy już wszystko jest ustalone, wiadomo które exploity będą wykorzystane przeciwko Microsoft SQL, warto uzyskać szczegółowe informacje na ich temat, korzystając z informacji zbiorczych polecenia S. Można również wykorzystać flagę E z odpowiednimi parametrami RHOSTS dla badanego elementu. Listing 8 i 9 demonstruje sposób praktycznego wykorzystania omówionych elementów do wyświetlenia szczegółowych informacji na temat wybranych elementów.

Listing 8. Uzyskanie szczegółowych informacji z wykorzystaniem parametru S

gsg framework3 # ./msfcli auxiliary/scanner/mssql/mssql_login S


   Name: MSSQL Login Utility
Version: 4749

Provided by:
   MC y0@w00t-shell.net

Basic options:
   Name      Current Setting    Required   Description
      ------        ------------------      ----------     --------------
      RHOSTS                      yes         The target address range or CIDR identifier
   RPORT   1433         yes      The target port
   THREADS   1         yes      The number of concurrent threads

Description:
   This module simply queries the MSSQL instance for a null SA account.

gsg framework3 # ./msfcli auxiliary/scanner/mssql/mssql_login RHOSTS=10.0.0.212 E
Tytuł: Odp: Bezpieczeństwo baz danych
Wiadomość wysłana przez: Rafał Rufus Magryś w Czerwiec 24, 2009,
Tak my prosimy Postgresa :)


Pozdrawiam,
Tytuł: Bezpieczeństwo baz danych dodatkowy materiał
Wiadomość wysłana przez: Grzegorz Gałęzowski w Sierpień 23, 2009,
Poniżej ten sam tekst, ale w bardziej czytelnej wersji jako plik pdf.

http://rapidshare.com/files/270441587/Testpenetracyjny.pdf.html