Red Team/ Pentest alanında uzmanlaşmak istiyorsanız sistemin çalışma mantığını da çözmelisiniz arkadaşlar. İsteğin girişinden çıkışına kadar tüm yola hakim olmalısınız.

Gerçekten nasıl çalıştığını bilmediğin sistemlerde zafiyet mi arıyorsun?

None

Bu yazıda şu sorulara cevap bulacaksınız arkadaşlar:

  1. Cache nedir?
  2. Cache neden var?
  3. Cache olmasaydı internet nasıl çalışırdı?
  4. Cache nerelerde bulunur?
  5. Browser cache nedir?
  6. CDN cache nedir?
  7. Reverse proxy cache nedir?

Pentest tarafında cevap bulunacak sorular

  1. Pentester neden cache öğrenmeli
  2. Cache güvenlik açığına nasıl dönüşür?
  3. Cache performans sistemi iken neden güvenlik problemi olur?
  4. Pentest sırasında cache katmanı neden incelenmeli?
  5. zafiyet uygulamada değil de cache katmanında olabilir mi?
  6. Cache Poisoning nedir?
  7. Web Cache Deception nedir?
  8. Cache Key Confusion nedir?
  9. Cache üzerinden veri sızabilir mi?
  10. XSS cache üzerinden yayılabilir mi?
  11. Session bilgileri etkilenebilir mi?

Genel itibariyla bu sorulara cevap vermeye çalışacağız.

None

Cache nedir?

Sen bir siteye gittiğinde bazı isteklerde bulunursun ve sunucu da tarayıcı üzerinden onu sana ulaştırır. Sen bu isteği daimi bir hale getirince tarayıcı artık o istek için her seferinde sunucuya gitmek yerine bunu tekrar kullanılmak üzere bir yerde saklar.

İşte buna cache denir.

Cache neden var?

Cache var olmasının en temel sebebi sistemi yormamaktır.

Daha hızlı sonuçlar elde edip bilminimum sürede isteğe cevap vermekir hedef.

Basit bir isteğin bile daha sunucuya gidip gelmesindense tarayıcıda cache üzerinden saklanıp hızlı cevap vermesi yavaş sonuç problemini de ortadan kaldırıyor.

Senin normal isteğin şöyle ilerler:

kullanıcı —tarayıcı — sunucu — db — sunucu — tarayıcı — kullanıcı

ama cache devereye girince işler çok hızlanıyor:

kullanıcı — tarayıcı— kullanıcı

DİKKAT eğer cache olmasaydı tüm istekler sunucuya düşerdi ve sistem ciddi manada zarara uğrardı.

Milyonlarca kullanıcısı olan bir siteyi düşünebiliyor musunuz?

Aynı anda 10bin kişinin siteye girmesi sonucu load balancerın feleği şaşar, sunucu çöker veya aşırı yavaşlar.

None

Cache nerelerde bulunur?

En bilindik yer browser. Sen bir siteye girdiğinde tarayıcı şunları saklar:

HTML sayfaları

css dosyaları

Js

Görseller

Fontlar

site.com/logo.png — diske kaydedilir

Sen siteye tekrar girdiğinde sunucuya gidilmez direkt bilgisayardan gelir.

DNS cache

bir sitenin IP'si eğer cache olmasaydı her site açıldığında dns tekrar sorgulanırdı. Ama cache sayesinde domain IP'si burada saklanır ve tekrar tekrar dns sorgusuna ihtiyaç olmaz.

Reverse Proxy Cache

Sunucu önünde duran katmana reverse proxy denir örneğin Nginx, varnish

istek akışı normal şartlarda şöyledir:

kullanıcı isteği — Nginx — backend

ama eğer burada Nginx cache'lendiyse istek backende gitmez

kullanıcının isteği — Nginx — İsteğin cevabı

şeklinde olur.

Application Cache

Uygulamanın kendi içindeki veri saklama yöntemidir.

Burada session verileri, kullanıcı bilgileri, API response gibi veriler tutulur.

CDN cache

kullanıcıya en yakın noktada bulunan cachedir. CDN şunu yapar:

Bu veriyi ben tutayım herkes benden alsın.

CDN her ülkede farklı ama tamamen aynı mantıkta çalışır.

Tüm siteler global çalışır. Sen bir istekte bulunduğunda CDN senin konumuna en yakın sunucudan veri çeker.

CDN cache = içeriği kullanıcıya yakın yerde tutup interneti hızlandıran sistemdir.

Hemen hemen her sistemin cache'i vardır. Her cache'in mantığıda tamamen sistem yükünü hafifletip hızlı cevaplandırma yapmaktır.

NOT:

Cache tek bir şey değildir. Sistemin her katmanında tekrar eden işi azaltmak için kullanılan bir hızlandırma tekniğidir.

Her sistemin veri saklama yöntemi farklıdır ve cache ihtiyaç duyarlar.

Yani internet dünyası cache olmadan bugün çalışamaz.

None

Az çok cache mantığı oturdu diye düşünüyorum. Şimdi sıra pentest için cach önemine.

Sorulara tek tek cevap verelim.

Pentesterlar için cache neden önemli?

Çok basit çünkü modern sistmelerin tamamında cache kullanılıyor. Bu da zafiyeti beraberinde getiriyor.

Browser cache

CDN cache

Reverse Proxy cache

API gateway cache gibi gibi bir çok cache türü mevcuttur.

Her sistemin mecburi cache kullanması şu sorunu da doğurmaz mı:

Aynı veri farklı kullanıcılar arasında yanlış paylaşılabilir.

Bu da doğrudan veri sızıntısı demektir. Peki bu nasıl bir güvenlik açığına dönüşebilir ona da bi bakalım.

Cache işleyişi normal şartlarda sunucuya tekrar tekrar gitme cevabı kendi içinde sakla idi

Eğer cache neyi saklayacağını doğru anlamazsa kullanıcıya ait özel bilgileri de dbden alıp farklı kullanıcılara gösterebilir.

Çünkü cache genelde şu temel anahtarlara göre çalışır:

URL

Wuery String

Bazen de bazı header'lar

Her zaman kullancıya ait özel verileri ayırt edildiği söylenemez.

None

Cache Poisoning nedir?

Cache Poisoning yani ön bellek zehirlenme saldırganın cache yanlış veya zararlı içerik yerleştirmesidir.

Ana mantık şu şekilde işler:

Normalde bir verinin yolu USER — CDN/PROXY — SERVER iken

cache ilk gelen isteği cache kaydeder ve sonraki kullanıcılar için aynı isteği alır.

Peki saldırgan ne yapar?

Saldırgan burada isteğin unique request olarak sanmasını sağlar yani benzersiz istek olarak gönderir.

Ve:

Zararlı JS

Redirect

Manipüle edilmiş HTML

Header İnjection

Örnek vermek gerekirse:

GET / HTTP/1.1
Host: target.com
X-Forwarded-Host: evil.com

Eğer cache ey bu header'ı kullanmıyorsa HTML içine

<script src="evil.com"></script>

Eklenebilir.

Cache'e yazdırılır ve tüm sistem patlatılır. (Tabi sistem zayıflığı varsa)

Web Cache Deception nedir?

Bu saldırı türü biraz daha kurnaz bir yoldan gelir. Burada kurnaz hacker normal şartlarda herkese açık olan bir yola cache manipüle edilerek katmanlı bir yol daha çizdirir.

örneğin

/profile

bu yol herkeste olan kullanıcıya özel ve cache edilmemesi gereken bir yoldur.

ya da /admin gibi

Saldırgan burada şu isteği :

/profile.css

/profile.js

/profile.jpg

gibi yollar dener ve CDN bunu statik dosya sanıp cache saklar.

Neden öyle sanıyor?

Çünkü jpg — js— css özel değildir ve tekrar tekrar göstermek için cache saklanırdı.

None

Sonuç itibariyle başka kullanıcıların profili, dashboard verisi hatta bazen token içeren HTML bilgisi dahi cuplanabiliyor.

Bu zafiyet neden ortaya çıkar peki?

Yanlış CDN config

Cache key hataları

extension-based routing kullanan sistemlerde çok görülür.

Cache Key Confusion nedir?

Bu, cache sistemlerinin en kritik zayıflıklarından biridir.

Cache sistemleri bir isteği UNİQUE( benzersiz) yapmak için bir cache key oluşturur.

Genelde:

URL

Query string

Host

Bazı header'lar

Eğer backend ve cache sistemi farklı şeyleri key'e dahil ediyorsa, çakışma olur.

Diyelim ki cache key:

/page?lang=en

ama backend ayrıca şunları kullanırsa:

User-Agent Cookie Authorization

eğer cache bunları hesaba katmazsa Auth bypass ve veri sızıntısı kaçınılmaz olur.

XSS cache üzerinden yayılabilir mi?

Evet yayılabilir ve bu olası en tehlikeli yolllardan biridir.

Hacker sayfaya bir payload enjekte eder:

<script>stealCookies()</script>

eğer bu istek cache'e girerse her kullanıcı XSS'i çalıştırır ve stored XSS gibi davranır ama cache üzerinden yayılır.

DİKKAT

Bazı sistemlerde:

  1. CDN HTML cache eder
  2. Güvenlik header'ları yoktur
  3. Response dynamic sanılır

Bu durumda:

Cache sayesinde reflected XSS stored XSS'e dönüşür ve bu, CDN-based saldırılarda en kritik senaryolardan biridir.

Velhasılı:

Konuyu baştan sona şu cümleyle özetlemek ve konunun ana mantığını vurgulamak istiyorum:

Cache zafiyetleri sizin tek isteğinize bağlı olarak ortaya çıkan zafiyetler değildir sistem tasarım hatasını yakalamaktır.

KONUYLA ALAKALI ÇÖZÜLECEK LAB'LAR

Bu lablar sonunda konuyu tamamen oturtmanız gerekiyor

None

Buraya kadar okuduysan tebrik ederim. Umarım faydalı olmuştur. Bir sonraki yazılarda görüşmek üzere .

Değinmemi istediğiniz başka konu var mı?

ZEKİ KAYAALP