Google Arama Bot'u Adres Sormaz ki!

Ferruh Mavituna - 05 Kasım 2018 -

Siteniz arama motorunun saldırısı altında mı? Google arama botları aracılığı ile saldırılarını websitenize yönlendiriyor olabilirler. Apache Struts zafiyetlerinde yakın zamanda çıkanlardan bir tanesi (CVE-2018-11776) bakın botlarla beraber ne amaçlarla kullanılıyormuş.

Google Arama Bot'u Adres Sormaz ki!

İstatistikler Google'ın arama motoru pazar payında yüzde 70'in altına düşmediğini gösteriyor. 2018'in Ocak ayından, bu yazının yazıldığı tarihe kadar Google ortalama yüzde 73'lük bir dilim ile hâlâ aslan payına sahip.

Çoğu internet kullanıcısının Google arama kutusunu, browser adres çubuğu olarak kullandığı günümüz dünyasında yukarıdaki istatistikler ile beraber Google'da görünür olmak hepimiz için çok önemli. Bu yüzden Google'ın bir dediğini iki etmiyoruz!

Peki Google dahil arama motorları sitemizi nasıl dolaşıyor, milyonlarca web sitesi arasından bizim sitemizi nasıl bulup indexliyor.

Her birinin algoritmalarındaki farklı yoğurt yiyişleri bir yana, temel olarak arama botları sayesinde web'i gezerek buldukları kaynakları derecelendiriyor ve listeliyor.

Sitemizi bu arama motorlarına kaydettikten sonra arama botunun sayfamızı ziyaret edip, indexlemesini bekliyoruz.

Arama botlarının özellikle de Google arama botlarının sitemizi rahat gezebilmelerini sağlamak için belki de güvenlik için yazdığımız kurallarda Google Bot lehine kimi toleranslar tanıyoruz.

Nitekim Google da sıhhatli bir indexleme için Google arama botunun kesinlikle bloklanmamasını öneriyor.

Google arama botlarına tanınan bu hüsnü kabulün farkında olan saldırganlar yepyeni bir atak vektörü ile karşımıza çıkıyor: Google Botlarını zararlı isteklerine alet etmek.

Peki bu nasıl mümkün oluyor?

2001 yılında Michael Zalewski, Phrack dergisinde bu saldırının ayak seslerini ve engellenmesinin güçlüğünü yazsa da gerçek bir tehdit olarak karşımıza çıkmasını F5 Labs'ın CroniX Crypto Miner'ı incelediği raporunda görüyoruz.

F5 Lab, tehdit istismar sistemlerinin alarm verdiği istekleri incelediğinde bu isteklerin Google Botlarından geldiğini fark ediyorlar.

Öncelikle Google Botların kullandığı User-Agent değerinin kullanıldığını düşünen F5 Labs araştırmacıları, isteklerin kaynaklandığı IP adreslerini incelediklerinde gerçekten de Google'a ait olduğunu tespit ediyorlar.

Geriye ihtimaller silsilesini bir bir gözden geçirmek kalıyor. Google Bot'larına ait sunucular ele geçirilmiş olabilir mi?

Buna ihtimal vermeyen araştırmacılar on yedi yıl öncesinden kurgulanmış, yukarıda da sözünü ettiğimiz Michael Zalewski'nin senaryosu üzerinde duruyorlar. Evet, Google arama botlarının davranışlarının kötüye kullanıldığı sonucuna varıyorlar.

Peki bu nasıl mümkün oluyor?

Web sayfanızda aşağıdaki gibi bir link olduğunu varsayalım:

<a href="http://victim-address.com/exploit-payload">malicious link<a>

Google arama botu sitenizde bu URL'i gördüğünde bu sayfayı da indexlemek için ziyaret edecek. Payload içeren istek Google botu tarafından yapılacak.

Atacker'ların google botlarını kullanması.

Kaynak: https://www.f5.com/labs/articles/threat-intelligence/abusing-googlebot-services-to-deliver-crypto-mining-malware

Araştırmacılar bunu bir deneyle de doğruluyor.

Deney kapsamında biri saldırgan sitenin rolünü üstlenecek bir site olmak üzere, biri de hedefe ait iki site hazırlanıyor. Saldırgan rolündeki siteye hedef siteye gönderilecek ve payload içerecek linkler konuluyor. Google arama botunun siteyi dolaşması için gerekli aksiyonları aldıktan sonra (Google Webmaster Tool'a başvuru yaparak sitenin indexlenmesi için başvuruda bulunabilirsiniz.) beklemeye başlıyorlar. Bir süre sonra gelen istekleri incelediklerinde, Google arama botuna ait makinelerden payload'u içeren isteğin geldiğini doğruluyorlar.

Saldırının Limitleri

Bu senaryo sadece payloadların URL'den gönderilebileceği GET tipindeki istekler için mümkün. Fakat isteklerde headerlara müdahale edebilmek de mümkün değil. Üstelik Google arama botunun sayfayı ne zaman gezeceği ve ne zaman payloadun gönderileceği de saldırganın kontrolü dışında. Aynı şekilde saldırgan hiçbir zaman isteğe dönen yanıttan haberdar olamayacak.

Peki böylesi bir saldırı kimin işine yarar?

Apache Struts Remote Code Evaluation CVE-2018-11776

Apache Struts ilk olarak 2001 yılında yayımlanan Java temelli bir framework. Son birkaç yıl frameworkte tespit edilen code evaluation tipindeki zafiyetler epey yankı uyandırdı. 439 milyon dolarlık kayba ve milyonlarca kişinin bilgilerinin ifşa olmasına yol açan Equifax hadisesi de Apache Struts frameworkündeki CVE-2017-5638 zafiyetinden kaynaklanmış idi.

Ancak Ağustos ayında tespit edilen CVE-2018-11776 ise yukarıdaki Google arama botu davranışını suistimal ederek blacklist engellerini aşmak isteyen saldırganların ağzına layık.

Zira bu son zafiyette payload URL üzerinden gönderiliyor.

Zafiyeti kısaca hatırlatacak olursak, Apache Structs 2.3'den  2.3.34'e ve 2.5'ten 2.5.162'e kadarki sürümlerde istismar edilebilecek zafiyetin kaynağı sınıflardaki olayları URL ile eşleştirmemize yarayan action'lara herhangi bir namespace atanmadığı ya da wildcard namespacelerin kullanılabildiği durumlarda ortaya çıkıyor.

Şimdi burada bir de action namespace'ine kısaca vurgu yapmak gerekiyor. Action namespace'i bir grup action'ın kendi altında toplandığı gruba verilen isim. Örneğin:

http://www.example.com/hello/index.action  buradaki hello bir namespace.

Aynı şekilde

http://www.example.com//index.action burada da namespace / olarak kabul ediliyor.

Herhangi bir namespace tanımlanmadığı durumlarda, zafiyete sebep olan konfigürasyon path'den kendisine gönderilen kullanıcı tanımlı namespacelere izin veriyor. Bu durumu da OGNL (Object-Graph Navigation Language) yani Java'da kullanılan bir ifade dili ile de birleştirildiğinde saldırı ortaya çıkıyor.

CVE-2018-11776 zafiyetine yol açan örnek bir konfigürasyon:

<struts>
<constant name="struts.mapper.alwaysSelectFullNamespace" value="true" />

<package name="default" extends="struts-default">

<action name="help">
   <result type="redirectAction">
       <param name="actionName">date.action</param>
   </result>
</action>
..
..
.
</struts> 

CVE-2018-11776 'ı doğrulamak için örnek bir saldırı payloadu:

http://TEST_URL/${4*4}/help.action

Eğer yukarıdaki URL http://TEST_URL/16/date.action 'a yönleniyorsa zafiyetin varlığını doğrulayabiliriz.

URL'den gönderilen atak payloadunun zafiyet istismarı için yeterli olduğu bu durum Google arama botlarına olan güvenle de birleştirildiğinde saldırganın işi giderek kolaylaşıyor.

Saldırganlar tarafından kripto miner zararlısını yaymak için kullanılan Apache Struts CVE-2018-11776 payloadu:

Struts zafiyetinde kullanılan payload.

Kaynak: https://www.f5.com/labs/articles/threat-intelligence/apache-struts-2-vulnerability--cve-2018-11776--exploited-in-cron

Biraz da çözümü konuşalım.

Google arama botlarından yönelen böylesi riskler, üçüncü partilerin güven endeksimizdeki yerini tekrar gözden geçirmemize neden olacak.

Google arama botlarının isteklerini tamamen engellemek arama motorundaki sıralamanızı olumsuz etkileyecektir. Sitenizi gezemeyen arama botları arama sıralamanızdaki puanınızın düşmesine sebep olabilir. Dahası böyle bir tedbir aldıysanız saldırganlar Google botları üzerinden yönelecek zararlı payload barındıran isteklerle blokaja sebep olup, Google'daki sıralamanızı düşürecek başka türlü bir atak kurgulanabilir.

Sitenizdeki External Bağlantıları Kontrol Edin

Saldırganlar arama botlarına zararlı istekler yaptırmak için her zaman kendilerine ait siteleri değil, kendi kontrolündeki siteleri de kullanabilirler. Yine aynı şekilde saldırganlar underground piyasasında da bir iş kalemi haline gelmiş hacklink satışı ile de kendilerinden hizmet alan kişilerin web adreslerini, sitenizde buldukları bir açık ya da doğru dizayn edilmemiş bir fonksiyonalite vasıtası ile sitenize ekleyip, SEO'da haksız rekabete yol açabilir.

Unutmamak gerekiyor, bu linkler her zaman sizin çıplak gözle görebileceğiniz şekilde yerleştirilmiyor. CSS özellikleriyle bu elemanları invisible yani görünmez yapabiliyorlar.

<a href="http://www.example.com" style="display:none;">link</a>

Bu bağlantıları siz göremeseniz de sitelere Lynx tarayıcı gözüyle bakan arama botları tüm sayfadaki elemanları görüp, seçebilmektedir.

Peki sitenizdeki external linklerden yani harici bağlantılardan haberdar mısınız?

Netsparker, Knowledge Base vasıtası ile sitenizdeki tüm out-of-scope yani taramaya konu olan domain dışındaki tüm URL'leri Out-of-Scope Link node 'u altında listelemektedir.

Netsparker'da Out of Scope zafiyetinin ayrıntıları.

Eğer sitenize kullanıcılardan aldığınız linkleri ekliyorsanız arama botlarının bu linkleri takip etmemesini sağlamak için rel özelliğini kullanabilirsiniz:

 <a rel="nofollow" href="http://www.functravel.com/">Cheap Flights</a>

rel özelliğinin nofollow değeri sayesinde sitenizi gezen arama botları bu linkleri dolaşmayacaktır.

Aynı şekilde <head></head> sectionları arasında tanımladığınız meta tagları ile de sayfadaki tüm URL'lerde gerçekleşecek arama botlarının davranışını yönetebilirsiniz:

<meta name="googlebot" content="nofollow" />
<meta name="robots" content="nofollow" />

Bu talimatları X-Robots-Tag response headerı ile de verebilmeniz mümkün:

X-Robots-Tag: googlebot: nofollow

X-Robots-Tag ve meta tagları ile verilen talimatların harici ya da internal tüm bağlantılar için geçerli olacağını unutmamak gerekiyor.

Araştırmanın ayrıntılarına ulaşmak için tıklayınız.

Ferruh Mavituna

About the Author

Ferruh Mavituna

Ferruh Mavituna is the founder and CEO of Invicti Security, a world leader in web application vulnerability scanning. His professional obsessions lie in web application security research, automated vulnerability detection, and exploitation features. He has authored several web security research papers and tools and delivers animated appearances at cybersecurity conferences and on podcasts. Exuberant at the possibilities open to organizations by the deployment of automation, Ferruh is keen to demonstrate what can be achieved in combination with Invicti’s award-winning products, Netsparker and Acunetix.