CyberFlow Logo CyberFlow BLOG
Soc L2 Infra Ad Cloud

Microsoft Entra ID ile Uygulama Güvenliği ve OAuth2: Temel Bilgiler

✍️ Ahmet BİRKAN 📂 Soc L2 Infra Ad Cloud

Microsoft Entra ID ile uygulama güvenliğini artırmak ve OAuth2 sürecini anlamak için gereken tüm bilgileri keşfedin.

Microsoft Entra ID ile Uygulama Güvenliği ve OAuth2: Temel Bilgiler

Uygulama güvenliği, siber güvenliğin kritik bir parçasıdır. Microsoft Entra ID ve OAuth2 ile nasıl daha güvenli uygulamalar geliştirileceğini öğrenin.

Giriş ve Konumlandırma

Siber güvenlik alanında, uygulama güvenliği, özellikle bulut tabanlı hizmetlerin artmasıyla daha da kritik bir hale gelmiştir. Microsoft Entra ID, organizasyonlar için kullanıcı kimlik yönetimi ve uygulama güvenliğini sağlamada önemli bir rol oynar. Bu nedenle, Entra ID'nin OAuth 2.0 ile entegrasyonu, kullanıcıların ve uygulamaların güvenli bir şekilde kimlik doğrulaması ve yetkilendirilmesine olanak tanır.

OAuth 2.0 ve Yetkilendirme

OAuth 2.0, günümüzün en yaygın yetkilendirme protokollerinden biridir. Bir uygulamanın, bir kullanıcının adına belirli kaynaklara erişim sağlamasına olanak tanıyan bir standarttır. Bu protokol sayesinde, kullanıcıların kimlik bilgilerini paylaşmak zorunda kalmadan, farklı uygulamalarla güvenli bir bağlantı kurulabilir. Kullanıcıların, hesaplarına erişimi olan üçüncü parti uygulamalar için yetki vermesi gerektiğinde, OAuth 2.0 devreye girer. Bu durum, siber güvenlik perspektifinden son derece önemlidir, zira yanlış bir yetkilendirme, veri ihlallerine yol açabilir.

OAuth 2.0, uygulamaların kaynaklara erişimini sağlarken kullanıcı kimliğini korur.

Neden Önemlidir?

Organizasyonların bilgi güvenliğini sağlamak için, uygulama güvenliğine yatırım yapmaları hayati önem taşır. Microsoft Entra ID ile entegre bir OAuth 2.0 uygulamaları, bu açıdan kritik bir şemsiye işlevi görür. Kullanıcıların kimlik bilgilerini açığa çıkarmadan yetkilendirme süreçlerini yürütmek, siber saldırı riskini azaltırken, organizasyonların veri güvenliğini de artırır.

Bir diğer önemli nokta ise, yönetici onayı gerektiren belirli izin türleridir. Yönetici onayı (Admin Consent), hassas verilere erişim isteyen uygulamaların, tüm organizasyon adına yetkilendirilmesini kontrol altında tutar. Bu sayede, potansiyel kötü niyetli uygulamaların sisteme sızması önlenebilir.

Siber Güvenlik Bağlamı

Pentesting (penetration testing) ve savunma mekanizmaları bağlamında, uygulama güvenliği anlayışı önem kazanır. Uygulama bazlı saldırıların artışı, organizasyonların bu tür tehditlere karşı proaktif önlemler almalarını zorunlu kılıyor. OAuth 2.0 protokolü, uygulamalara erişim izinlerini en iyi şekilde yöneterek, yetkisiz girişimlerin önlenmesine yardımcı olur.

Uygulama izinleri arasındaki farkları anlamak, bu tür saldırılara karşı korunma stratejilerinin oluşturulmasında kritik bir rol oynar. Örneğin, "Delegated Permissions" (devredilen izinler) ve "Application Permissions" (uygulama izinleri) arasındaki farkı analiz ederek, hangi izinlerin daha riskli olduğunu belirleyebiliriz.

Teknik Hazırlık

Bu blog yazısında, Microsoft Entra ID ve OAuth 2.0 bağlamında uygulama güvenliğine dair ayrıntılı bilgilere yer vereceğiz. İlgili konuları ele alırken, token türleri, izinlerin yönetimi ve kötü niyetli saldırı senaryoları gibi konular üzerinde duracağız. Ayrıca, erişim ve kimlik doğrulama süreçlerini yönetmenin en iyi yolları hakkında pratik öneriler sunacağız.

Sonuç olarak, siber güvenlikteki dinamik yapılar, organizasyonların bu konudaki bilgi birikimlerini güncellemelerini zorunlu hale getiriyor. Microsoft Entra ID ve OAuth 2.0'nın sağladığı çözüm ve imkanlar, uygulama güvenliğinde önemli bir referans noktası olmaktadır. Bu nedenle, bu yazı dizisinin takip edilmesi, teknik bilgi düzeyinin artırılmasına katkı sağlayacaktır.

Teknik Analiz ve Uygulama

OAuth 2.0 ve Yetkilendirme

Siber güvenlik açısından, bir uygulamanın kullanıcı adına belirli kaynaklara erişimini sağlayan en önemli protokollerden biri OAuth 2.0'dır. OAuth 2.0, uygulamaların bir kullanıcının bilgilerine ve kaynaklarına güvenli bir şekilde erişimini sağlar. Bu, kullanıcının kimlik bilgilerini doğrudan paylaşmadan yapılır ve kullanıcı deneyimini arttırırken güvenlik düzeyini de artırır.

OAuth 2.0 yapısında, ilk adım genellikle bir "yetkilendirme isteği" göndermektir. Bu istekte, kullanıcının hangi uygulama aracılığıyla hangi verilere erişeceği belirtilir. Kullanıcı, istenen izni verdiğinde, uygulama bir "yetkilendirme kodu" alır. Ardından bu kod, bir erişim jetonuna dönüştürülür. Erişim jetonu, uygulamanın verilere erişmesine izin verir.

Uygulama geliştiricileri, bu akışı uygulamak için genelde şu tür bir kod kullanabilir:

const authorizationCode = "YOUR_AUTHORIZATION_CODE"; // Kullanıcıdan alınan yetkilendirme kodu
const clientId = "YOUR_CLIENT_ID"; // Uygulama kimliği
const clientSecret = "YOUR_CLIENT_SECRET"; // Uygulama şifresi
const redirectUri = "YOUR_REDIRECT_URI"; // Yönlendirme URL'si

// Erişim jetonu almak için isteği oluştur
fetch("https://example.com/oauth/token", {
  method: "POST",
  headers: {
    "Content-Type": "application/x-www-form-urlencoded",
  },
  body: new URLSearchParams({
    grant_type: "authorization_code",
    code: authorizationCode,
    redirect_uri: redirectUri,
    client_id: clientId,
    client_secret: clientSecret,
  }),
})
  .then(response => response.json())
  .then(data => {
    console.log("Access Token:", data.access_token);
  });

Token Türleri

OAuth 2.0, kullanılabilir üç ana jeton türü sağlar:

  1. Erişim Jetonu (Access Token): API'lere erişim için kullanılmaktadır. Örneğin Microsoft Graph API üzerinden verilere erişim sağlamak için gereklidir.
  2. ID Jetonu (ID Token): Kullanıcının kimlik bilgilerini içermektedir. Genellikle OpenID Connect ile ilişkilidir.
  3. Yenileme Jetonu (Refresh Token): Erişim jetonu süresi dolduğunda eldeki erişim yetkisini yenilemek için kullanılmaktadır.

Tokenların yönetimi oldukça kritiktir ve bu yüzden uygulama geliştiricileri, API çağrılarında bu jetonları güvenli bir şekilde saklamalıdır.

// Erişim jetonunu kullanarak bir API çağrısı yapma
fetch("https://graph.microsoft.com/v1.0/me", {
  headers: {
    "Authorization": `Bearer ${accessToken}`, // Erişim jetonu burada kullanılır
  },
})
  .then(response => response.json())
  .then(data => {
    console.log("User Info:", data);
  });

Yönetici Onayı (Admin Consent)

Kritik verilere erişim isteyen uygulamalar için, yönetici onayı almak çok önemlidir. Yönetici onayı, hassas verilere erişim talep eden uygulamaların organizasyon adına yetkilendirilmesini kontrol altında tutar. Bu izin süreçleri, uygulama bir yere başvuruda bulunmadan önce yöneticinin onayı gerektiren işlemleri içerir.

İzin Türleri (Permissions)

OAuth 2.0, belirli akses türlerine göre iznin ayrımını yapar. İki ana kategori vardır:

  • Delegated Permissions: Uygulama, hem kendi yetkileri hem de oturum açan kullanıcının yetkilerinden faydalanır.
  • Application Permissions: Uygulama, kullanıcının oturumu olmadan doğrudan verilere erişim sağlar.

Aşağıdaki örnek, bir uygulamanın kullanıcı bilgilerine erişim izni alırken izlenecek adımları göstermektedir:

1. Uygulama, gerekli izinleri belirtir.
2. Kullanıcıdan onay almak için bir yetki isteği gönderir.
3. Kullanıcı onay verdikten sonra, uygulama erişim jetonunu ve gerekirse yenileme jetonunu alır.

Managed Identities (Yönetilen Kimlikler)

Managed Identities, uygulamaların güvenli bir şekilde erişim sağladıkları kimlikler sunar. Yapılandırma dosyalarına veya kodlara parolaların saklanması gerekliliğini ortadan kaldırır, bu da uygulamanın güvenliğini artırır. Kullanım örneği olarak, Azure kaynaklarına erişimde Managed Identities’in kullanımı gösterilebilir:

// Azure SDK kullanarak yönetilen kimlik ile kaynaklara erişim
const { DefaultAzureCredential } = require("@azure/identity");
const { SecretClient } = require("@azure/keyvault-secrets");

const credential = new DefaultAzureCredential();
const client = new SecretClient("https://<YOUR-KEY-VAULT-NAME>.vault.azure.net", credential);

Microsoft Graph API

Microsoft Graph API, Entra ID verilerine ve Microsoft 365 servislerine programatik olarak erişmek için kullanılan ana ağ geçididir. API, uygulamaların çalışan çevresinde ihtiyaç duyduğu kullanıcı ve içerik bilgilerine erişim sağlamaktadır.

Örneğin, bir kullanıcının e-postalarını okumak için aşağıdaki API çağrısı yapılabilir:

GET https://graph.microsoft.com/v1.0/me/messages
Authorization: Bearer YOUR_ACCESS_TOKEN

Illicit Consent Grant Saldırısı

Kötü niyetli uygulama onay (consent) saldırıları, genellikle kullanıcıların izniyle yapılır. Geliştiricilerin, kullanıcıların bu tür uygulamalara yetki vermesini engellemek için dikkat etmeleri gereken pek çok ipucu bulunmaktadır. Kullanıcıların izinsiz verilere erişim sağlamasına olanak tanımamak için izin ayarlarını dikkatli bir şekilde yönetmek gerekiyor.

Tespit ve İzleme

Uygulama bazlı saldırıları tespit etmek ve izlemek için Audit Logs altındaki "Consent to application" kategorisi kullanılmalıdır. Bu loglar, uygulamaların aldığı izinler, kullanıcıların uygulamalara verdiği onaylar ve diğer kritik durumların izlenmesine olanak sağlar.

Uygulama Sıkılaştırma

Kullanıcıların kendi başlarına rastgele uygulamalara yetki vermesini engellemek için "User Consent" ayarları kısıtlanmalıdır. Bu da, uygulama güvenliği açısından önemli bir adım olarak değerlendirilmelidir. Yönetici, yalnızca belirli uygulamalara izin vererek kullanıcıların denetimini artırabilir.

Sonuç olarak, Microsoft Entra ID ile uygulama güvenliği ve OAuth 2.0 süreci, doğru şekilde uygulandığında güvenliği artırırken kullanılabilirliği de sağlar. Bu nedenle, uygulama geliştiricilerinin bu konulara özel önem göstermeleri gerekmektedir.

Risk, Yorumlama ve Savunma

Siber güvenlik alanında risk değerlendirmesi, bir sistemdeki zayıf noktaların belirlenmesi ve bunların olası etkileri üzerine analiz yapmak için kritik öneme sahiptir. Microsoft Entra ID kullanarak uygulama güvenliği sağlandığında, OAuth 2.0 protokolü ile yetkilendirme süreçleri dikkatlice yönetilmeli ve sürekli olarak izlenmelidir. Bu bölümde, elde edilen bulguların güvenlik anlamını yorumlayarak, potansiyel riskleri, zayıf noktaları ve gerekli önlemleri ele alacağız.

Elde Edilen Bulguların Güvenlik Anlamı

Sızma testleri ya da güvenlik incelemeleri sonucunda elde edilen veriler, sistemin genel güvenlik durumu hakkında kritik bilgiler sağlar. Örneğin, uygulamanın yalnızca "Application Permissions" (Uygulama İzinleri) ile yapılandırıldığını varsayarsak, bu durum uygulamanın tüm kullanıcı verilerine erişim sağlayabileceği anlamına gelir. Bu tür bir yapılandırma, kötü niyetli aktörlerin veri sızdırma veya kötüye kullanma olasılığını artırır.

Aşağıda bu tür bir durumun etkisini gösteren basit bir örnek bulunmaktadır:

- Uygulama İznine sahip bir API istemcisi:
  - Erişim: Tüm kullanıcı verilerine.
  - Risk: Tüm kullanıcı verileri bir sızdırma durumunda tehdit altındadır.

Ayrıca, geçerli bir "ID Token" (kimlik jetonu) almadan bir kullanıcının giriş yapması mümkün olamayınca, kullanıcıların kimlik bilgilerini tehdit eden durumlar da dikkatle izlenmelidir.

Yanlış Yapılandırmalar ve Zayıf Noktalar

Yanlış yapılandırmalar, sistem zayıflıklarının ortaya çıkmasına neden olabilir. Örneğin, "Reply URL mismatch" (Yanlış Yanıt URL'si) durumu, bir uygulamanın yetki isteklerine şüpheliURL'ler kullanarak kaynaklara erişim talep etmesi riskini taşıyabilir. Bu tür hatalı yapılandırmalar, saldırganların yetkisiz erişim kazanmasına zemin hazırlayabilir.

Aynı zamanda uygulamanın yöneticisiz bırakılan bazı izin ayarları da oldukça risklidir. Örneğin, kullanıcıların kendi başlarına belirsiz uygulamalara yetki vermesi durumunda, bu uygulamaların içerdikleri zayıflıklar kötüye kullanılabilir. Bu nedenle, kullanıcı onayı (User Consent) ayarlarının belirli kısıtlamalar dahilinde düzenlenmesi kritik öneme sahiptir.

Sızan Veriler ve Topoloji

Güvenlik açığı tespiti sürecinde, sızan verilerin türü ve bu verilerin bulundukları topolojiler, saldırının boyutunu anlamak açısından önemlidir. Örneğin, "Mail.Read" (E-posta Okuma) iznine sahip bir uygulama, tüm gelen ve giden e-postalara erişim sağlayarak ciddi bir bilgi sızıntısı riskine yol açabilir. Benzer şekilde, "Notes.Read.All" gibi geniş kapsamlı izinler, kullanıcıların hassas belgelerine erişim sağlamakta ve bilgi güvenliği ihlallerine yol açmaktadır.

Bu tür verilerin izlenmesi ve yönetimi, izleme sistemleri yardımıyla sağlanmalıdır. Microsoft Graph API kullanarak izinlerin ve onay işlemlerinin izlenmesi, olası tehditleri tespit etmek açısından oldukça etkilidir. Aşağıda izinlerin izlenmesi için bir örnek kod parçası yer almaktadır:

import requests

def get_audit_logs(token):
    url = "https://graph.microsoft.com/v1.0/auditLogs/directoryAudits"
    headers = {
        "Authorization": f"Bearer {token}"
    }
    response = requests.get(url, headers=headers)
    return response.json()

Profesyonel Önlemler ve Hardening Önerileri

Güvenlik açığı risklerini minimize etmek için aşağıdaki profesyonel önlemler alınmalıdır:

  1. Yetkilendirme Üzerinden Kontrol: Uygulamanızın erişim izinlerini kullanarak, gerekmedikçe geniş kapsamlı izinler vermemelisiniz. Bunun yerine, "Delegated Permissions" (Temsilci İzinler) kullanarak daha kontrollü erişim sağlamalısınız.

  2. Yönetici Onayı: Kritik verilere erişim isteyen uygulamalar için yönetici onayı almak zorunlu kılınmalıdır. Bu, erişim kontrolünü etkin bir şekilde sağlamaktadır.

  3. Kullanıcı Onayı Kısıtlamaları: Kullanıcıların rastgele ve bilinmeyen uygulamalara yetki vermesini engellemek için kısıtlamalar getirilmelidir. Bu, son kullanıcıların güvenlik dışı uygulamalara yetki vermesini önleyecektir.

Sonuç

Yukarıda ele alınan konular, Microsoft Entra ID kullanarak uygulama güvenliği sağlamak için kritik unsurlardır. Yanlış yapılandırmalar, yetki yanlışları ve alınmayan önlemler ciddi güvenlik açıklarına yol açabilir. Bu nedenle, sistemin düzenli olarak gözden geçirilmesi ve sıkılaştırma (hardening) işlemlerinin uygulanması gerekmektedir. Uygulama izinlerinin ve olası tehditlerin sürekli izlenmesi, genel güvenliği artırmaya yönelik önemli adımlardır.