24 Ocak 2014 Cuma

Yapınızda kullandığınız ve dışarıya açık olan servislerin arka planda DNS gibi önemli servisi kullanması ve zorunlu olarak DNS'inizin de internete açık olduğu durumlar olabiliyor. Bu tür durumlarda DNS üzerindeki yapılandırma her zaman olduğu gibi çok dikkat edilerek yapılmalı. Böyle durumlarda yapılan hatalardan bir tanesi DNS recursion devre dışı bırakılmamasıdır.DNS recursion sorgusunu açık bırakarak kötü niyetli hackerların yapınızda bulunan DNS'lerinizi kullanmasına izin vermiş oluyorsunuz. Profesyonel bir saldırı tekniği olan DNS Amplification saldırıları, yapınızda bulunan DNS serverı kullanarak yönlendirilmiş hedefe sizin üzerinden paketler göndererek saldırı düzenler (1 DNS paketi 50 byte ise bu pakete dönecek cevap 10x olacaktır yani 500byte). Böylece saldırgan sizin bantgenişliğinizi kullanmakla kalmaz aynı zamanda kendi gizliliğini de sağlamış olur, saldırgan sizmişsiniz gibi algı oluşturur. DNS Amplification saldırısı hakkında detaylı bilgiyi buradan  , buradan  ve sayfa 32'den inceyebilirsiniz.

Peki DNS serverımızın recursion sorgusuna açık olup olmadığını nasıl bileceğiz?
2 şekilde öğrenebilirsiniz

1. İsterseniz DNS serverınızın ayarlarını kontrol edersiniz
2. Dışarıdan DNS serverınıza DNS Recursion sorgusu yaparsınız.

1.si için Microsoft DNS Server kullanıyorsanız DNS serverınızda sağ tıklayıp Advanced altında Server optionsta "Disable recursion" işaretli olup olmadığını kontrol ediyorsunuz. işaretli değilse bu Dns serverınızın recursion sorgularına açık ve saldırı amaçlı kullanılabilir olduğunu gösterir


Eğer Bind DNS server kullanıyorsanız global options içerisinde aşağıda belirtilen satırların olup olmadığını kontrol edebilirsiniz.

 options {
     allow-query-cache { none; };     
     recursion no;                             }; 

2. Seçenek için ise bu sorguyu yapan siteler aracılığıyla DNS'inizi kontrol ettirebilir (Örnek veya Örnek2  ) yada kendiniz bunu yapabilirsiniz. Ben kendi lab'ımda bulunan nmap toolunu kullanarak yaptım ve resimde görüldüğü gibi sonuç recursion açık

sorgu için aşağıdaki Nmap komutu çalıştırmanız yeterli;


nmap -sU -p 53 -sV -P0 --script "dns-recursion" X.X.X.X (DNS'inizin IP adresi)

Nmap hakkında detaylı bilgi almak için buraya bakabilirsiniz.




Dns Recursion sorgularına açık olduğunu öğrendiğimize göre artık ne yapmamız gerektiğine bakabiliriz. Çözüm oldukça basit yukarıda 1.seçenek için bahsetmiş olduğum kontrol noktalarını DNS serverınıza eklemeniz yeterli olacaktır.

Microsoft DNS server için resimdeki gibi Dns server propreties altında Advanced sekmesindeki server options'tan "Disable recursion" seçeneğini seçili hale getiriyoruz,

Komut ortamıyla devre dışı bırakmak için aşağıdaki komutu kullanabilirsiniz

dnscmd MAIL /Config /NoRecursion 1
MAIL: Server Name
1: Recursion devredışı
0: Recursion aktif
BIND DNS Server kullanıyorsanız global options (named.conf ) içerisine aşağıdaki satırları eklemeniz yeterli olacaktır
options {
     allow-query-cache { none; };     
     recursion no;                             }; 

Bunun haricinde sizin belirlediğiniz IP veya Network'e göre limitlendirmek isterseniz aşağıdaki gibi bir acl(Access Control List) yazabilirsiniz,


acl internalnetworks { 
    127.0.0.1/32; 
    192.168.0.0/24; 
    };
yukarıdaki acl'de 127.0.0.1/32 ve 192.168.0.0./24 networkleri tanımladık,

options {
    allow-query {
        any;
    };
    allow-recursion {
        internalnetworks;
    };
};
Yukarıdaki options seçeneği ile de sadece acl'de tanımlamış olduğumuz internalnetworks grubuna recursion sorgusunu açmış olduk.

Not:  Microsoft DNS Server'da,Bind Dns server'da olduğu gibi ACL tanımlaması maalesef yapamıyoruz. Microsoft henüz böyle bir seçenek sunmuyor, Firewall üzerinden belki yapılabilir ama benim bir bilgim yok araştırma gereği de duymadım açıkçası. 

Bu ayarları yaptıktan sonra tekrar kontrol edelim bakalım hala açık mı?

yukarıda kullanmış olduğum nmap sorgusunu tekrar kullanıyorum ve sonuç resimde görüldüğü gibi kapalı,




Böyle bir durumda yapımızda bulunan ve dışarıya hizmet veren diğer servislerin durumu ne olur?

Mesela yapınızda Exchange Mail Server kullandığınızı düşünelim,

Recursion sorgularını devre dışı bıraktığınız zaman resimlerde de görüldüğü gibi Forwarderların da devre dışı bırakılacağını belirtiyor. Forwarder devre dışı bırakıldığında ise sizin mevcut lokalinizde bulunan DNS server, Exchange Server tarafından gelen domainlerin çözümlemesini yapamayacağından mailleriniz Queue'de (Kuyrukta) beklemede kalacak, alacağınız hata ise aşağıdaki gibi olacaktır.




bu durumda yapacağımız şey ise Exchange Server'ın Transport Servisini DNS sorgulamalarını internal'dan değilde External DNS Server'dan yapmasını sağlamak.

Bunun içinde işlem basit.

Exchange Server 2010 kullanıyorsanız sırasıyla aşağıdaki adımları yapmanız yeterli olacaktır.

1. Exchange Management Console açın
2. Server Configuration'a tıklayın
3. Mail Serverınızın üzerine sağ tıklayıp Properties 'e tıklayın

4. Açılan pencerede "External DNS Lookups" sekmesine gelin
5. "Use these DNS Servers" işaretleyip DNS leri girin



Resimde de görüldüğü gibi ben Google Dnslerini kullandım. External DNS Serverlarımızı girdiğimize göre şimdi Hub Transport 'a External DNS'leri kullan diyebiliriz.
Bunun içinde sırasıyla,
1. Organization Configuration altında Hub Transport 'a tıklıyoruz
2. Send Connectors'e gelip daha önce tanımlamış olduğumuz Send connectors'e sağ tıklayıp Propreties diyoruz.
3. Network sekmesine geliyoruz ve "Use the External DNS Lookup settings on the transport server" seçeneğini işaretliyoruz.



Artık tek yapmamız gereken Transport servisini restart etmek. Bunun içinde Powershell'i açıp "Restart-Service msexchangetransport" komutunu girmeniz yeterli. Sonuç aşağıdaki gibi olacaktır.

PS C:\Users\Administrator> Restart-Service msexchangetransport
WARNING: Waiting for service 'Microsoft Exchange Transport (msexchangetransport)' to finish stopping...
WARNING: Waiting for service 'Microsoft Exchange Transport (msexchangetransport)' to finish starting...
WARNING: Waiting for service 'Microsoft Exchange Transport (msexchangetransport)' to finish starting...

Tekrar Queue kontrol ettiğimizde resimde gördüğünüz gibi tüm maillerin gönderildiğini ve Queue'nin boş olduğunu göreceksiniz.



Exchange 2013 için ise;

Not: DNS server'da ki değişiklikler aynı şekilde o yüzden tekrar anlatma gereği duymuyorum.

1. Exchange Yönetim Admin Center'a web paneliniz üzerinden erişiyorsunuz. Örnek https://mail.kasimerkan.com

2. Servers menüsünden server'ınızı seçip edit diyoruz
3.Açılan pencerede DNS Lookups'a geliyoruz
4. External DNS Lookups altında DNS Server IP address için Custom Settings'i seçiyorunuz ve DNS Serverlarımızı giriyoruz.
5. Save edip kapatıyoruz.




DNS Serverlarımızı girdiğimize göre sıra Transport servisimize tanımlamış olduğumuz Send Connectors aracılığıyla external DNS serverları kullan demeye geldi

bunun için,

1. Mail Flow ardından Send Connectors'e tıklıyoruz
2. Daha önce tanımlamış olduğumuz send connector'ü seçip edit diyoruz
3. Açılan pencerede "Delivery" sekmesini tıklıyoruz
4. Enaltta yer alan "Use the external DNS lookup Settings on servers with Transport roles" seçeneğini işaretliyoruz.



Save edip kapattıktan sonra Exchange 2010'da olduğu gibi Transport servisini restart ediyoruz.

İsterseniz PowerShell ile aşağıdaki komutu girerek restart edebilirsiniz, istersenizde Control panel altından Servisleri açıp oradan Microsoft Exchange Server Transport servisini restart edebilirsiniz.


PS C:\Users\Administrator> Restart-Service MSExchangeTransport

WARNING: Waiting for service 'Microsoft Exchange Transport (MSExchangeTransport)' to stop...

WARNING: Waiting for service 'Microsoft Exchange Transport (MSExchangeTransport)' to stop...

WARNING: Waiting for service 'Microsoft Exchange Transport (MSExchangeTransport)' to stop...

WARNING: Waiting for service 'Microsoft Exchange Transport (MSExchangeTransport)' to start...

WARNING: Waiting for service 'Microsoft Exchange Transport (MSExchangeTransport)' to start....







0 yorum: