Subdomain Takeovers (Subdomain Devralma)

7 months ago 54
BOOK THIS SPACE FOR AD
ARTICLE AD

Miraç Küçük

Bir subdomain ele geçirmenin temel dayanağı, şu anda kullanılmayan belirli bir hizmete işaret eden bir hosttur ve bir düşman, üçüncü taraf hizmette bir hesap oluşturarak savunmasız subdomain üzerinde içerik sunmak için kullanabilir. Bir hacker ve güvenlik analisti olarak bu tür sorunlarla her gün karşılaşıyorum. Bugünkü amacım, subdomain yanlış yapılandırmalarını anlamak, bulmak, kullanmak ve raporlamak için genel bir kılavuz oluşturmaktır. Bu makale, okuyucunun Domain Name System (DNS) hakkında temel bir anlayışa sahip olduğunu ve bir subdomain’in nasıl kurulacağını bildiğini varsaymaktadır.

Subdomain devralmalarına giriş

Daha önce hiç subdomain devralma işlemi yapmadıysanız veya yeni bir giriş yapmak istiyorsanız, temel bilgileri açıklamaya yardımcı olması için örnek bir senaryo hazırladım. Bu senaryoda hedefin example.com olduğunu ve example.com’u işleten ekibin bir bug bounty programına sahip olduğunu varsayalım. Bir bilgisayar korsanı example.com’a ait tüm subdomainleri listelerken — daha sonra inceleyeceğimiz bir süreç — GitHub sayfalarına işaret eden bir subdomain olan subdomain.example.com’a rastlar. Bunu subdomain’in DNS kayıtlarını inceleyerek belirleyebiliriz; bu örnekte subdomain.example.com, GitHub’ın özel sayfalar için ayrılmış IP adreslerine işaret eden birden fazla A kaydına sahiptir.

Subdomain.example.com adresine gittiğimizde, aşağıdaki 404 hata sayfasıyla karşılaşıyoruz.

Çoğu bilgisayar korsanının hisleri bu noktada titremeye başlar. Bu 404 sayfası, üst düzey dizin altında hiçbir içerik sunulmadığını ve bu subdomain’i kişisel GitHub depomuza eklemeyi denememiz gerektiğini gösterir. Lütfen bunun tüm uygulamalarda bir devralmanın mümkün olduğunu göstermediğini unutmayın. Bazı uygulama türleri, ele geçirmeler için hem HTTP hem de HTTPS yanıtlarını kontrol etmenizi gerektirir ve diğerleri hiç savunmasız olmayabilir.

GitHub projemize özel subdomain eklendikten sonra, deponun içeriğinin subdomain.example.com adresinde sunulduğunu görebiliriz — subdomain’i başarıyla talep ettik. Gösterim amacıyla, dizin sayfasında artık bir kurbağa resmi görüntüleniyor.

İkinci dereceden subdomain devralmaları

Benim “ broken link hijacking” olarak adlandırdığım ikinci dereceden subdomain ele geçirmeleri, hedefe ait olması gerekmeyen ancak hedefin web sitesinde içerik sunmak için kullanılan savunmasız subdomainlerdir. Bu, bir kaynağın örneğin bir JavaScript bloğu aracılığıyla hedef sayfaya aktarıldığı ve bilgisayar korsanının kaynağın aktarıldığı subdomain’i talep edebileceği anlamına gelir. Sayfanın herhangi bir yerinde kullanılan bir hostun ele geçirilmesi sonuçta saklı siteler arası komut dosyasına yol açabilir, çünkü saldırgan hedef sayfaya keyfi istemci tarafı kodu yükleyebilir. Bu sorunu bu kılavuzda listelemek istememin nedeni, bir bilgisayar korsanı olarak kendimi yalnızca hedef hosttaki subdomain’lerle sınırlamak istemediğimi vurgulamaktır. Kaynak kodunu inceleyerek ve hedefin dayandığı tüm hostları haritalandırarak kapsamınızı kolayca genişletebilirsiniz.

Bir subdomain’i ele geçirmeyi başarırsanız, herhangi bir sayfanın subdomain’inizden varlık alıp almadığını görmek için zaman ayırmaya değer olmasının nedeni de budur.

Subdomain numaralandırma ve keşif

Artık yanlış yapılandırılmış bir subdomain’de içerik sunmak için neler gerektiğine dair üst düzey bir genel bakışa sahip olduğumuza göre, bir sonraki adım savunmasız subdomain’leri bulmak için kullanılan çok çeşitli teknikleri, hileleri ve araçları kavramaktır.

Konuya girmeden önce, kazıma ve brute forcing arasında ayrım yapmalıyız, çünkü bu süreçlerin her ikisi de subdomainleri keşfetmenize yardımcı olabilir, ancak farklı sonuçlar doğurabilir. Kazıma, belirli bir host’a ait subdomain’leri toplamak için harici hizmet ve kaynakların kullanıldığı pasif bir keşif tekniğidir. DNS Dumpster ve VirusTotal gibi bazı hizmetler, geçmişte taranmış subdomainleri indeksleyerek sonuçları fazla çaba harcamadan hızlı bir şekilde toplamanızı ve sıralamanızı sağlar.

DNS Dumpster’da reddit.com’a ait subdomains için sonuçlar.

Kazıma sadece indeksleme sayfalarını kullanmaktan ibaret değildir, hedefin GIT depolarını, Content Security Policy başlıklarını, kaynak kodunu, sorun izleyicilerini vb. kontrol etmeyi unutmayın. Kaynakların listesi sonsuzdur ve sonuçlarımı artırmak için sürekli yeni yöntemler keşfediyorum. Genellikle tekniğiniz ne kadar tuhaf olursa, başka kimsenin karşılaşmadığı bir şey bulma olasılığınızın o kadar yüksek olduğunu göreceksiniz; bu nedenle yaratıcı olun ve fikirlerinizi güvenlik açığı ifşa programlarına karşı pratikte test edin.

Ahmed Aboul-Ela tarafından yazılan Sublist3r, muhtemelen akla gelen en basit subdomain kazıma aracıdır. Bu hafif Python betiği çok sayıda arama motorundan, SSL sertifikalarından ve DNS Dumpster gibi web sitelerinden subdomainleri toplar. Kişisel makinemdeki kurulum süreci şu kadar basitti:

Subdomainleri brute forcing yaparken, hacker bir kelime listesi üzerinden yineleme yapar ve yanıta göre hostun geçerli olup olmadığını belirleyebilir. Hedefin joker karakterinin etkin olup olmadığını her zaman kontrol etmenin çok önemli olduğunu lütfen unutmayın, aksi takdirde çok sayıda yanlış pozitifle karşılaşırsınız. Joker karakterler basitçe tüm subdomainlerin bir yanıt döndüreceği anlamına gelir ve bu da sonuçlarınızı çarpıtır. Hedefin büyük olasılıkla ayarlamadığı, görünüşte rastgele bir host adı isteyerek joker karakterleri kolayca tespit edebilirsiniz.

Subdomainleri brute forcing yaparken en iyi sonuçları elde etmek için, geçmişte karşılaştığınız veya ilgilendiğiniz hizmetlerle yaygın olarak bağlantılı olan terimlerle kendi kişisel kelime listenizi oluşturmanızı öneririm. Örneğin, kendimi sık sık “jira” ve “git” anahtar kelimelerini içeren hostları ararken buluyorum çünkü bazen savunmasız Atlassian Jira ve GIT örnekleri buluyorum.

Subdomainleri brute forcing yapmayı planlıyorsanız, Jason Haddix’in kelime listesine göz atmanızı şiddetle tavsiye ederim. Jason, subdomain keşif araçlarından gelen listeleri kapsamlı bir listede birleştirme zahmetine katlanmış.

Fingerprinting

Subdomain bulma konusunda sonuçlarınızı artırmak için, ister kazıma ister brute forcing yapıyor olun, parmak izi adı verilen bir teknik kullanılabilir. Parmak izi, hedefiniz için özel bir kelime listesi oluşturmanıza olanak tanır ve genel bir kelime listesi kullanarak bulamayacağınız hedefe ait varlıkları ortaya çıkarabilir.

Önemli araçlar

Subdomain devralmaları için çok çeşitli araçlar bulunmaktadır. Bu bölüm, şimdiye kadar bahsedilmemiş olan bazı önemli araçları içermektedir.

Altdns

Subdomainleri recursively brute force etmek için Shubham Shah’ın Altdns scriptine bir göz atın. Altdns aracılığıyla bir hedefin parmak izini aldıktan sonra özel kelime listenizi çalıştırmak son derece faydalı olabilir. Altdns’i daha sonra diğer araçlarla çalıştırmak üzere kelime listeleri oluşturmak için kullanmayı seviyorum.

Commonspeak

Shubham’ın bir başka aracı olan Commonspeak, Google’ın BigQuery’sini kullanarak kelime listeleri oluşturmaya yarayan bir araçtır. Amaç, teknolojinin hızla geliştiği günümüzde ve çağımızda özellikle önemli olan güncel eğilimleri yansıtan kelime listeleri oluşturmaktır. Bu aracın nasıl çalıştığını ve anahtar kelimeleri nereden topladığını daha iyi anlamak istiyorsanız https://pentester.io/commonspeak-bigquery-wordlists/ adresini okumaya değer.

SubFinder

Hem kazıma hem de brute forcing’i güzel bir şekilde birleştiren bir araç SubFinder. Genel amaçlı subdomain bulma aracım olarak SubFinder’ı artık Sublist3r’dan daha fazla kullanıyorum. Daha iyi sonuçlar elde etmek için, SubFinder’ın subdomainleri bulmak için kazıma yaptığı çeşitli hizmetlerin API anahtarlarını eklediğinizden emin olun.

Massdns

Massdns son derece hızlı bir subdomain numaralandırma aracıdır. Bazı araçlarla çeyrek saat sürecek bir işlemi Massdns bir dakika içinde tamamlayabilir. Lütfen Massdns’i çalıştırmayı planlıyorsanız, ona geçerli çözümleyicilerin bir listesini sağladığınızdan emin olun. https://public-dns.info/nameservers.txt adresine bir göz atın, çözümleyicilerle oynayın ve hangilerinin en iyi sonuçları verdiğini görün. Çözümleyici listenizi güncellemezseniz, çok sayıda yanlış pozitif sonuçla karşılaşırsınız.

İş akışınızı otomatikleştirme

Subdomain ele geçirmeleri için avlanırken otomasyon çok önemlidir. En iyi hata ödül avcıları sürekli olarak hedefleri değişikliklere karşı izler ve bulabildikleri her bir subdomain’e sürekli olarak göz kulak olurlar. Bu rehber için, izleme kurulumlarına odaklanmanın gerekli olduğuna inanmıyorum. Bunun yerine, size zaman kazandırabilecek ve kolayca otomatikleştirilebilecek basit hilelere bağlı kalmak istiyorum.

Otomatikleştirmeyi sevdiğim ilk görev, bir host listesinden canlı subdomainleri filtrelemektir. Subdomainler için kazıma yaparken, bazı sonuçlar eski olacak ve artık ulaşılamayacaktır; bu nedenle, hangi hostların canlı olduğunu belirlememiz gerekir. Lütfen daha sonra göreceğimiz gibi, bir hostun çözümlenmemesinin mutlaka ele geçirilemeyeceği anlamına gelmediğini unutmayın. Bu görev host komutu kullanılarak kolayca gerçekleştirilebilir — artık canlı olmayan bir subdomain hata döndürecektir.

Şu ana kadar sahip olduğumuz her şeyi bir araya getirirsek, aşağıdaki iş akışını elde ederiz.

Bir sonraki adım, çeşitli subdomain’lere genel bir bakış elde etmektir. İki seçenek vardır: Birincisi, tüm subdomain’lerde bir ekran görüntüsü betiği çalıştırmaktır; ikincisi ise sayfanın içeriğini bir metin dosyasında saklamayı gerektirir.

Ekran görüntüsü almak için benim kullandığım araç şu anda EyeWitness. Bu araç, host listenizdeki tüm ekran görüntülerini, yanıt gövdelerini ve başlıklarını içeren bir HTML belgesi oluşturuyor.

EyeWitness bazı durumlar için biraz fazla ağır olabilir ve sayfanın içeriğini yalnızca subdomain’in en üst düzey dizinine basit bir GET isteği yoluyla depolamak isteyebilirsiniz. Bu gibi durumlarda Tom Hudson’ın meg. meg programını kullanıyorum. meg eşzamanlı olarak istek gönderiyor ve ardından çıktıları düz metin dosyalarında saklıyor. Bu da onu subdomainlerinizi elemek için çok verimli ve hafif bir çözüm haline getiriyor ve anahtar kelimeler için grep yapmanıza izin veriyor.

Özel durumlar

Frans Rosén’in “Bulut sağlayıcıları kullanarak DNS kaçırma — Doğrulama gerekmez” başlıklı konuşmasında vurguladığı, dikkat etmemiz gereken özel bir durum var. DNS’de ölü kayıtlarla karşılaştığınızda, o subdomain’i ele geçiremeyeceğinizi varsaymayın. Frans’ın da belirttiği gibi, host komutu bir hata döndürebilir, ancak dig komutunu çalıştırmak ölü kayıtları ortaya çıkaracaktır.

Exploitation

Doğru, şimdi hedefe ait bir subdomain’i kontrol ediyorsunuz, bundan sonra ne yapabilirsiniz? Yanlış yapılandırılmış bir subdomain ile olası saldırı senaryolarını belirlerken, subdomain’in temel ad ve hedefin çekirdek hizmeti ile nasıl etkileşime girdiğini anlamak çok önemlidir.

Cookies

subdomain.example.com, example.com’a kapsamlandırılmış cookieleri değiştirebilir. Bu, kurbanın oturumunu temel adda ele geçirmenize olanak tanıyabileceğinden bunu hatırlamak önemlidir.

output.jsbin.com adresinden jsbin.com için cookie ayarlayabiliriz.

Kaynak adı session fixation’a karşı savunmasızsa ve HTTPOnly çerezleri kullanıyorsa, bir cookie ayarlayabilirsiniz ve daha sonra kullanıcı tarayıcısını yeniden başlattığında, kötü niyetli cookie’niz yeni oluşturulan cookie’ye göre öncelikli olacaktır çünkü cookie’ler zamana göre sıralanır.

Cross-Origin Resource Paylaşımı

Cross-Origin Resource Sharing (CORS), bir hostun bir sayfanın içeriğini cross-origin paylaşmasına izin veren bir teknolojidir. Uygulamalar, ana bilgisayarların kimliği doğrulanmış veriler de dahil olmak üzere veri çıkarmasına izin veren bir dizi kural içeren bir kapsam oluşturur. Bazı uygulamalar, subdomain’lerin güvenilir varlıklar olduğu varsayımıyla subdomain’lerin çapraz kaynaklı HTTP istekleri yapmasına izin verir. Bir subdomain’i ele geçirdiğinizde CORS başlıklarını arayın — Burp Suite Pro’nun tarayıcısı genellikle bunları algılar — ve uygulamanın subdomain’leri beyaz listeye alıp almadığına bakın. Bu, ana uygulamadaki kimliği doğrulanmış bir kullanıcıdan veri çalmanıza olanak sağlayabilir.

Oauth whitelisting

Cross-Origin Kaynak Paylaşımına benzer şekilde, Oauth akışı da geliştiricilerin hangi geri arama URI’larının kabul edilmesi gerektiğini belirleyebildiği bir beyaz liste mekaniğine sahiptir. Buradaki tehlike bir kez daha subdomain’lerin beyaz listeye alınması ve bu nedenle Oauth akışı sırasında kullanıcıları subdomain’inize yönlendirerek potansiyel olarak Oauth token’larını sızdırmanızdır.

Content-Security Policies

Content-Security Policy (CSP), bir uygulamanın güvendiği hostların bir başka listesidir, ancak buradaki amaç, hangi hostların uygulama bağlamında client-side kod çalıştırabileceğini kısıtlamaktır. Bu başlık özellikle siteler arası komut dosyalarının etkisini en aza indirmek isteyenler için kullanışlıdır. Kendi subdomain’iniz beyaz listeye dahil edilirse, politikayı atlamak ve uygulama üzerinde kötü amaçlı client-side kod çalıştırmak için subdomain’inizi kullanabilirsiniz.

Clickjacking

Cure53 Browser Security White Paper “da açıklandığı gibi, Internet Explorer, Edge ve Safari, X-Frame-Options header’ında ALLOW-FROM yönergesini destekler; bu da subdomain’iniz beyaz listeye alınmışsa, hedef sayfayı frame’leyebileceğiniz ve dolayısıyla clickjacking saldırıları gerçekleştirebileceğiniz anlamına gelir.

Parola yöneticileri

Bu mutlaka bir rapora dahil edeceğiniz bir konu değildir, ancak bazı parola yöneticilerinin ana uygulamaya ait subdomain’lerde oturum açma formlarını otomatik olarak dolduracağını belirtmek gerekir.

“Az önce @lastPASS’in varsayılan olarak tüm subdomain’lerde şifreleri otomatik doldurduğunu öğrendim. Bu, bir web sitesinin düz metin şifrenizi içeren http olmayan aşırı kapsamlı bir cookie ayarlamasına eşdeğerdir… yani bonkerslastpass.com/support.php?cm…”

E-postalara müdahale

Rojan Rijal, SendGrid’de uber.com’a ait bir subdomain’i talep ederek e-postaları nasıl ele geçirebildiğini gösterdi.

Subdomain ele geçirmelerini raporlama
Bir subdomain ele geçirmesini bildirmeye çalışmadan önce, subdomain’de gerçekten içerik sunabildiğinizden emin olun. Ancak, ne yaparsanız yapın, daha önce gösterildiği gibi zararsız bir kurbağa resmi olsa bile dizin sayfasında hiçbir şey yayınlamayın. En iyi uygulama, bir HTML yorumunda gizli bir mesaj içeren gizli bir yolda bir HTML dosyası sunmaktır. Bu, bulgunuzla ilgili olarak programla ilk temasa geçtiğinizde sorunu göstermek için yeterli olacaktır. Ancak ekip size izin verdikten sonra, sorunu tırmandırmaya çalışmalı ve güvenlik açığının genel etkisini gerçekten göstermelisiniz. Ancak çoğu durumda, ekip zaten etkinin farkında olmalı ve raporunuz subdomain ele geçirmelerinin istismar edilebilirliğine ilişkin bilgiler içermelidir.

Subdomain ele geçirme hakkında bir rapor yazarken acele etmeyin, çünkü bu tür bir sorun son derece faydalı olabilir ve subdomain üzerinde kontrolü olan tek kişi siz olduğunuz için kimse sizi geçemez.

Bir subdomain’in ele geçirilmesi için yalnızca bir kopya rapora tanık oldum, bu nedenle hala olasılık olsa da, bunun başınıza gelme ihtimali oldukça düşük.

Read Entire Article