İyi günler Türk Hack Team ailesi.
Bugün sizlerle günümüzde çok yaygın kullanılan protokollerin yanlış ve zayıf yapılandırmasından kaynaklı ortaya çıkan zaafiyetleri konuşacağız.
Uzun zamandır konu paylaşımı yapmadığım için konu yazma stilimi unutmuş olabilirsiniz Önce teorik bilgi ardından pratik bilgi şeklinde ilerleyeceğiz.
Bundan dolayı sonuna kadar okumanızda fayda var.
OAuth Nedir?
OAuth, modern web uygulamalarında sıkça karşılaştığımız bir durumu ele alır: "Bir uygulama, Facebook veya Google hesabınızı kullanarak oturum açmanızı ister." İşte bu noktada OAuth devreye girer ve sizin izninizle erişim sağlamak için bir yöntem sunar.
Diyelim ki, bir uygulamaya oturum açarken "Facebook ile oturum aç" seçeneğini gördünüz. Bu seçeneği seçtiğinizde, uygulama sizin adınıza Facebook'a yönlendirilir. Ancak, uygulama sizin kullanıcı adınızı ve parolanızı asla görmez veya kaydetmez.
Bunun yerine, OAuth protokolünü kullanarak size erişim talebi yapar ve sizin izninizle belirli verilere veya kaynaklara erişim sağlamasına izin verir. Bu şekilde, uygulama sizi doğrudan doğrulama sağlayıcısıyla ilişkilendirerek güvenli bir oturum açma süreci sunar.
Bu tam olarak bir OAuth modelidir. Yani kısacası aşağıdaki görsel anlamanıza daha yardımcı olabilir.
Kısacası bu tarz yapılara OAuth deriz.
Arka tarafta yapı şu şekildedir:
İlk önce OAuth yaptığımız servis yani Gmail olduğunu varsayıyoruz. Client id ve ilgili oyunun URL'inin bulunduğu bir istek atılır.
Bugün sizlerle günümüzde çok yaygın kullanılan protokollerin yanlış ve zayıf yapılandırmasından kaynaklı ortaya çıkan zaafiyetleri konuşacağız.
Uzun zamandır konu paylaşımı yapmadığım için konu yazma stilimi unutmuş olabilirsiniz Önce teorik bilgi ardından pratik bilgi şeklinde ilerleyeceğiz.
Bundan dolayı sonuna kadar okumanızda fayda var.
OAuth Nedir?
OAuth, modern web uygulamalarında sıkça karşılaştığımız bir durumu ele alır: "Bir uygulama, Facebook veya Google hesabınızı kullanarak oturum açmanızı ister." İşte bu noktada OAuth devreye girer ve sizin izninizle erişim sağlamak için bir yöntem sunar.
Diyelim ki, bir uygulamaya oturum açarken "Facebook ile oturum aç" seçeneğini gördünüz. Bu seçeneği seçtiğinizde, uygulama sizin adınıza Facebook'a yönlendirilir. Ancak, uygulama sizin kullanıcı adınızı ve parolanızı asla görmez veya kaydetmez.
Bunun yerine, OAuth protokolünü kullanarak size erişim talebi yapar ve sizin izninizle belirli verilere veya kaynaklara erişim sağlamasına izin verir. Bu şekilde, uygulama sizi doğrudan doğrulama sağlayıcısıyla ilişkilendirerek güvenli bir oturum açma süreci sunar.
Bu tam olarak bir OAuth modelidir. Yani kısacası aşağıdaki görsel anlamanıza daha yardımcı olabilir.
Kısacası bu tarz yapılara OAuth deriz.
Arka tarafta yapı şu şekildedir:
İlk önce OAuth yaptığımız servis yani Gmail olduğunu varsayıyoruz. Client id ve ilgili oyunun URL'inin bulunduğu bir istek atılır.
GET https://accounts.google.com/o/oauth/v2/auth?client_id=enistein23&redirect_uri=https://hedefurl.com/callback&scope=profile&response_type=code&state=foobar
Herşey yolunda giderse ve kullanıcı izinleri verirse Gmail servisleri token oluşturmak için yeni bir istek oluşturur.
POST www.googleapis.com/oauth2/v4/token
Content-Type: application/x-www-form-urlencodedcode=oGd5GkJs5mKrtgH5&
client_id=enistein123
client_secret=enistein_secret_123&
grant_type=authorization_code
Bununda başarıyla tamamlandığını varsaydığımızda api, kullanıcıya bir token atayıp geri dönecektir.
{
"access_token": "FgrgGsd456GdSghDsgsa3fHg",
"expires_in: 4560,
"token_type": "Bearer"
}
Böylece bir OAuth döngüsü tamamlanmış olacaktır.
OpenID Connect Nedir?
OpenID Connect, anlatım olarak Oauth'a biraz benziyor. Bundan dolayı kafaları yakmamak için konunun hemen başında bir uyarı geçeyim.
OAuth sizi tanıyordu ve verilere erişmek için google gibi bir servisi kullanarak token oluşturmuştu.
Bu noktada OpenID Connect devreye giriyor ve kimlik doğrulama sürecini yönetiyor.
Yani OpenID Connect, OAuth protokolünü temel alarak kimlik doğrulama ve kullanıcı kimliği hakkında bilgi sağlama sürecini gerçekleştiriyor.
OpenID Connect ile bir uygulamaya oturum açmak istediğinizde, uygulama sizi doğrulama sağlayıcısına (örneğin Google, Facebook gibi) yönlendirir.
Doğrulama sağlayıcısı, sizin kimlik bilgilerinizi doğrular ve size bir kimlik belgesi olan ID token'ı verir.
Bu ID token, uygulamaya geri gönderilir ve uygulama bu tokenı kullanarak sizin kimliğinizi doğrular. Böylece uygulama, sizin kimlik bilgilerinizi doğrulama sağlayıcısına sormadan, güvenli bir şekilde oturum açmanızı sağlar.
Örneğin, "Google hesabınızla oturum aç" seçeneğini seçtiğinizde, OpenID Connect protokolü devreye girer. Sizi doğrulama sağlayıcısına yönlendirir, kimlik bilgilerinizi doğrular ve size bir ID token verir. Uygulama bu ID token'ı kullanarak sizin kimliğinizi doğrular ve oturum açma işlemini tamamlar.
Eğer bu teknolojiler ve standart bir web haberleşmesine aşinanız yoksa çok karışık gelmiş olabilir.
Bilgisayarınızı tekmelemeden önce farklı kaynaklardan da bu yapılar hakkında araştırma yapabilirsiniz.
OAuth ve OpenID Connect Zaafiyetleri
Artık OAuth ve OpenID Connect kafamızda biraz yer edindiğine göre bu zat-ı muhteremlerden dolayı ortaya çıkan zaafiyetleri inceleyebiliriz.
Konunun bu tarafında biraz daha realistik senaryoları görmeniz için Hackerone ve gibi platformlarda bildirilmiş olan ve gerçek hayat senaryoları üzerinden anlatımımı gerçekleştireceğim.
JWT(Json Web Token) Saldırıları
JSON Web Token (JWT), OpenID Connect protokolünde kullanılan bir kimlik doğrulama mekanizmasıdır. Buna ben de dahil birçok geliştiricinin hayatını kolaylaştıran bir mimaridir aslında.
Fakat doğru yapılandırılmadığı takdirde birçok zaafiyete yol açabilir. Bu zaafiyetler arasında, Account Takeover, Token Overflow, vb. gibi birçok farklı yaklaşım olabilir. Saldırı vektörleri biraz hedef websitenin mimarisine göre değişebilir.
Account Takeover
Örneğin JWT kullanılan bir yapıda, websiteye login olurken veya olduktan sonra her isteğimizde aşağıdaki gibi bir parametre yer alır.
JWT'ler her zaman cookie bilgisi içerisinde tutulmaz. Fakat, öğrendikten sonra header'de nerede olursa olsun gördüğünüzde anlayabilirsiniz.
Ayrıca Burp Suite'de JWT'leri otomatik tespit etmek için belirli araçlar mevcuttur.
Cookie'de yer alan jwt verisini herhangi bir jwt decodere attığımızda şu şekilde gözükür:
Gördüğünüz gibi user bilgisi içerisinde sadece benim nickim yer alıyor. Başka bir anahtar ile koruma yapılmamış. Fakat, her halükarda JWT için Secret Key'e ihtiyacım var.
Bunu elde etmek için John The Ripper veya Hashcat gibi araçları kullanabilirsiniz.
JWT'yi kopyalayıp, bir txt dosyasına atıyorum. Ardından John The Ripper ve Rockyou.txt'yi kullanarak kırmayı deniyorum.
OpenID Connect Nedir?
OpenID Connect, anlatım olarak Oauth'a biraz benziyor. Bundan dolayı kafaları yakmamak için konunun hemen başında bir uyarı geçeyim.
OAuth sizi tanıyordu ve verilere erişmek için google gibi bir servisi kullanarak token oluşturmuştu.
Bu noktada OpenID Connect devreye giriyor ve kimlik doğrulama sürecini yönetiyor.
Yani OpenID Connect, OAuth protokolünü temel alarak kimlik doğrulama ve kullanıcı kimliği hakkında bilgi sağlama sürecini gerçekleştiriyor.
OpenID Connect ile bir uygulamaya oturum açmak istediğinizde, uygulama sizi doğrulama sağlayıcısına (örneğin Google, Facebook gibi) yönlendirir.
Doğrulama sağlayıcısı, sizin kimlik bilgilerinizi doğrular ve size bir kimlik belgesi olan ID token'ı verir.
Bu ID token, uygulamaya geri gönderilir ve uygulama bu tokenı kullanarak sizin kimliğinizi doğrular. Böylece uygulama, sizin kimlik bilgilerinizi doğrulama sağlayıcısına sormadan, güvenli bir şekilde oturum açmanızı sağlar.
Örneğin, "Google hesabınızla oturum aç" seçeneğini seçtiğinizde, OpenID Connect protokolü devreye girer. Sizi doğrulama sağlayıcısına yönlendirir, kimlik bilgilerinizi doğrular ve size bir ID token verir. Uygulama bu ID token'ı kullanarak sizin kimliğinizi doğrular ve oturum açma işlemini tamamlar.
Eğer bu teknolojiler ve standart bir web haberleşmesine aşinanız yoksa çok karışık gelmiş olabilir.
Bilgisayarınızı tekmelemeden önce farklı kaynaklardan da bu yapılar hakkında araştırma yapabilirsiniz.
OAuth ve OpenID Connect Zaafiyetleri
Artık OAuth ve OpenID Connect kafamızda biraz yer edindiğine göre bu zat-ı muhteremlerden dolayı ortaya çıkan zaafiyetleri inceleyebiliriz.
Konunun bu tarafında biraz daha realistik senaryoları görmeniz için Hackerone ve gibi platformlarda bildirilmiş olan ve gerçek hayat senaryoları üzerinden anlatımımı gerçekleştireceğim.
JWT(Json Web Token) Saldırıları
JSON Web Token (JWT), OpenID Connect protokolünde kullanılan bir kimlik doğrulama mekanizmasıdır. Buna ben de dahil birçok geliştiricinin hayatını kolaylaştıran bir mimaridir aslında.
Fakat doğru yapılandırılmadığı takdirde birçok zaafiyete yol açabilir. Bu zaafiyetler arasında, Account Takeover, Token Overflow, vb. gibi birçok farklı yaklaşım olabilir. Saldırı vektörleri biraz hedef websitenin mimarisine göre değişebilir.
Account Takeover
Örneğin JWT kullanılan bir yapıda, websiteye login olurken veya olduktan sonra her isteğimizde aşağıdaki gibi bir parametre yer alır.
JWT'ler her zaman cookie bilgisi içerisinde tutulmaz. Fakat, öğrendikten sonra header'de nerede olursa olsun gördüğünüzde anlayabilirsiniz.
Ayrıca Burp Suite'de JWT'leri otomatik tespit etmek için belirli araçlar mevcuttur.
Cookie'de yer alan jwt verisini herhangi bir jwt decodere attığımızda şu şekilde gözükür:
Gördüğünüz gibi user bilgisi içerisinde sadece benim nickim yer alıyor. Başka bir anahtar ile koruma yapılmamış. Fakat, her halükarda JWT için Secret Key'e ihtiyacım var.
Bunu elde etmek için John The Ripper veya Hashcat gibi araçları kullanabilirsiniz.
JWT'yi kopyalayıp, bir txt dosyasına atıyorum. Ardından John The Ripper ve Rockyou.txt'yi kullanarak kırmayı deniyorum.
Kod:
echo "jwttokeniniz" > jwt.txt
./john jwt.txt --format=HMAC-SHA256 --wordlist=wordlist/dizini/rockyou.txt
Görselde gördüğünüz gibi Secret Key ilovepico olarak çıktı. Artık ben burada istediğim gibi JWT içerisindeki verileri değiştirip, doğrulayıp sunucuya gönderebilirim.
Yukarıdaki görselde görmüş olduğunuz gibi user'i admin olarak değiştirdim, VERIFY SIGNATURE adresine kırmış olduğumuz secret keyi yazdık. Sol alt tarafta da Signatura Verified şeklinde JWT'imizin onaylandığını belirtti. Şimdi Manipüle edilmiş JWT kodumuzu kopyalayıp, sunucumuzda değiştirelim ve olacakları görelim.
Burp Suite'de JWT'mi değiştiriyorum.
Yukarıdaki görselde görmüş olduğunuz gibi admin olarak giriş yapmış olduk.
Şimdi biraz da discord eğitimlerinde sürekli üzerinde durmuş olduğum konu Exploit Chaining yani Zaafiyet Yükseltme veya farklı zaafiyetlerle birleştirmeye bakalım.
Gerçek hayatta yaşadığım bir senaryo.
Oldu da şifreyi kıramadık? Bu durumda açıkta kalan dizinleri tarayarak unutulmuş dosyaları arayabilirsiniz.
Örneğin benim senaryomda bir websitede .env dosyası açıkta kalmış ve içerisinde JWT_SECRET olarak secret key saklanmış.
Böylece herhangi bir decode işlemiyle uğraşmamıza gerek kalmadı.
Kontrol Edilmeyen Callback Yapıları
OAuth yapıları bir callback ile
evet, ben bu işlemi gerçekleştirdim x kişisine artık yetki verebilirsin şeklinde bir dönüş yaparlar.
Fakat burada yapılan Callback kontrol edilmiyorsa hinliği, şeytanlığı başında olan saldırganlar gelir ve servise şunu diyebilir;
ben bu işlemi gerçekleştirdim artık x kişisinin admin olarak login olmasını sağlayabilirsin.
Bu anlatımı Hackerone 'da bulduğum bir rapor üzerinden yapacağım. Okumak isterseniz bu adresten okuyabilirsiniz.
Kullanıcı giriş yaparken arkada dönen şu OAuth yapısını takip ediyor.
redirect_uri=https%3A%2F%2Fbooth.pm%2Fusers%2Fauth%2Fpixiv%2Fcallback&response_type=code&scope=read-works+read-favorite-users+read-friends+read-profile+read-email+write-profile&state=%3A1a38b53563599621ce25094661b1c4458ddb52d79d771149
Ardından redirect_uri parametresinde yer alan callback url'ini değiştirerek path traversal yapıyor ve başka bir kullanıcıya login olmasını sağlıyor.
redirect_uri=https%3A%2F%2Fbooth.pm%2Fusers%2Fauth%2Fpixiv%2Fcallback/../../../../ja/items/4503924
Böylece serviste callback yanıtını kontrol eden herhangi bir mekanizma olmadığı için 4503924 idli kullanıcının hesabına giriş yapmış oluyor.
Yine farklı bir Hackerone raporunda kullanıcı oauth'ta yer alan callback'ın redirect ettiği urlyi modifiye ederek open redirect zaafiyetinden faydalanıyor. Bu durum da firmanın kullanıcılarına yönelik güçlü phishing senaryoları doğuruyor.
Yani aslında örneklere baktığımızda callback yapısı doğru bir şekilde kontrol edilmediğinde birçok zaafiyeti beraberinde getiriyor.
Kapanış
Okuduğunuz için teşekkürler. Uzun zamandır konu yazmadığım için biraz paslanmış olabilirim.
Fakat, paslanmadan önce yazdığım o güzel konuları okumak isterseniz linklerini aşağıda bırakıyorum.
Yine farklı bir Hackerone raporunda kullanıcı oauth'ta yer alan callback'ın redirect ettiği urlyi modifiye ederek open redirect zaafiyetinden faydalanıyor. Bu durum da firmanın kullanıcılarına yönelik güçlü phishing senaryoları doğuruyor.
Yani aslında örneklere baktığımızda callback yapısı doğru bir şekilde kontrol edilmediğinde birçok zaafiyeti beraberinde getiriyor.
Kapanış
Okuduğunuz için teşekkürler. Uzun zamandır konu yazmadığım için biraz paslanmış olabilirim.
Fakat, paslanmadan önce yazdığım o güzel konuları okumak isterseniz linklerini aşağıda bırakıyorum.
Zerologon Zaafiyeti | Nedir? | Nasıl Heklenir? | Nasıl Test Ortamı Kurulur?
İyi günler Türk Hack Team ailesi. Bugün sizlerle, 2020'de çok ses getiren bir zaafiyet hakkında konuşacağız. Umarım bu anlatım sizlere farklı bir bakış açısı katar. Zerologon Nedir? Zerologon, 2020 yılında ortaya çıkan ve Microsoft'un Windows Server işletim sistemlerinde bulunan bir...
www.turkhackteam.org
Blue Team ve Tehdit Avcılığı (Threat Hunting)
İyi günler Türk Hack Team ailesi. Siber güvenlik dünyasında, proaktif savunma stratejileri giderek daha önemli hale gelmektedir. Bu bağlamda, Blue Team için tehdit avcılığı (threat hunting) kavramı ön plana çıkmaktadır. Bu içerikte, tehdit avcılığına odaklanarak, bu yaklaşımın Blue Team için...
www.turkhackteam.org
Code Review Nedir? Nasıl Yapılır? Örneklerle Anlatım!
İyi günler Türk Hack Team ailesi. Bugün sizlerle siber güvenlik alanında mesleğini icra edenlerin çok sık karşılaştığı code review konusuna değineceğiz. Code review, yazılım geliştirme sürecinin önemli bir parçasıdır ve hataların, güvenlik açıklarının ve diğer sorunların tespit edilmesine...
www.turkhackteam.org
SCADA & ICS Zaafiyetleri ve Bash Örnekleri!
İyi günler Türk Hack Team ailesi. Bugün sizlerle beraber günümüzün en tehlikeli zaafiyetleri hakkında konuşacağız. Ayrıca bu zaafiyetlere yönelik, önceden ortaya çıkmış olan CVE'lere göre hazırlamış olduğum, bash scriptlerini sizlerle paylaşacağım. Bu bash scriptlerini kendinize göre...
www.turkhackteam.org
Meltdown ve Spectre: Modern İşlemcilerdeki Güvenlik Zaafiyetleri
İyi günler Türk Hack Team ailesi. Bugün 2018 yılında, ortaya atılan Meltdown ve Spectre zaafiyetleri üzerine bir konu yazacağım. Bu konunun önemli olduğunu düşünüyorum. Çünkü bu zaafiyete sahip milyonlarca işlemci mevcut. Ayrıca işlemci mimarileri sonradan değiştirilemediği için suni olarak...
www.turkhackteam.org
Python ile Zararlı Yazılım Analizi!
İyi günler Türk Hack Team ailesi. Bugün sizlere zararlı yazılım analizi hakkında bir içerik hazırlayacağım. Aynı zamanda biliyorsunuz ki günümüzde doğrudan sonuç odaklı yaşıyoruz. Bundan dolayı sizler için Python ile geliştirebileceğiniz analiz kod örnekleri vereceğim. Daha sonrasında bu kodları...
www.turkhackteam.org