12-SNMP ATTACK
Last updated
Last updated
SNMP (Simple Network Management Protocol), bir uygulama katmanı protokolüdür. Sunucu, anahtar (switch), yönlendirici (router) gibi ağ cihazlarını yönetmek için geliştirilmiştir. Bu sayede ağın performansı yönetilebilir, sorunlar tespit edilip çözülebilir ve ağın genişlemesi planlanabilir. SNMP'nin üç farklı versiyonu vardır: SNMPv1, SNMPv2 ve SNMPv3.
SNMP, SNMP yöneticisi (SNMP manager), SNMP ajanı (SNMP agent) ve Yönetim Bilgi Tabanı (MIB - Management Information Base) adlı üç bileşenden oluşur. SNMP yöneticisi, SNMP yazılımının yüklü olduğu bir bilgisayardır. SNMP ajanı ise yönetilen ağ cihazıdır. Her bir ajan üzerinde bulunan MIB, cihaz hakkında bilgi saklar ve yönetici, uzaktan her bir cihazın MIB'ine erişebilir.
*SNMP aracısı, istekleri UDP bağlantı noktası 161'den alır.
*Yönetici, 162 numaralı bağlantı noktasından bildirimler (Traps ve InformRequests) alır.
*Aktarım Katmanı Güvenliği veya Datagram Aktarım Katmanı Güvenliği ile kullanıldığında, istekler 10161 numaralı bağlantı noktasından alınır ve bildirimler 10162 numaralı bağlantı noktasına gönderilir.
Evet, SNMP (Basit Ağ Yönetim Protokolü) kullanarak bir ağdaki cihazları izlemek oldukça yaygın bir uygulamadır. Örneğin, yukarıdaki topolojide bulunan yönlendirici, sunucu ve Çok Katmanlı Anahtar gibi cihazlar SNMP ajanlarını çalıştırabilirler. Bu ajanlar, cihazların durumu ve performansıyla ilgili bilgileri toplar ve bunları SNMP Manager yazılımı gibi bir izleme aracına iletebilirler.
SNMP, Yönetici ve Aracı (Agent) arasında çalışan bir iletişim protokolüdür. Yönetici, izleme işlemlerini gerçekleştirmek için SNMP Manager yazılımını kullanır ve bu yazılım aracılığıyla cihazlardan bilgi toplar veya cihazlara konfigürasyon değişiklikleri yapabilir. Aracılar ise (agent), cihazlarda çalışan SNMP ajan yazılımlarıdır ve bu ajanlar SNMP Manager iletişimi için gerekli mesajları işlerler.
İzleme işlemi, bir MIB (Yönetim Bilgi Tabanı) kullanılarak gerçekleştirilir. MIB, ağ cihazlarını tanımlayan parametreler ve nesnelerin standartlaştırılmış bir veritabanıdır. Bu MIB içeriği, IP adresleri, arayüzler, CPU kullanımı gibi çeşitli ağ özelliklerini temsil eder. Yönetici, SNMP Manager yazılımı aracılığıyla MIB'den gelen bilgileri kullanarak cihazları izler. Bu süreçte, yönetici cihazlardan bilgi almak için GET istekleri gönderebilir ve cihazlara konfigürasyon değişiklikleri yapmak için SET istekleri gönderebilir. Bu şekilde, izleme süreci MIB'den gelen bilgilerin GET ve SET işlemleri aracılığıyla gerçekleştirilir.
Yönetici (Manager), yönetilen cihazlar üzerinde değişiklik yapabilir (set) ve bilgi toplayabilir (get). Ayrıca, yönetilen cihazlarda belirli kriterler belirlenerek bu kriterler aşıldığında yöneticiye bildirim göndermesi sağlanabilir. SNMPv1 için TRAP kullanılırken, diğer versiyonlar için ise farklı mekanizmalar bulunmaktadır.
SNMP iletişimi için parola yerine geçen community string'leri kullanır. İki tür community string vardır:
RO (Read Only): Bu community string değerini bilen yönetici sadece cihazdan bilgi alabilir.
RW (Read-Write): Bu community string değerini bilen yönetici hem bilgi toplayabilir hem de cihaz üzerinde değişiklik yapabilir.
Varsayılan community string çoğu cihaz için "PUBLIC" değeridir. Güvenlik açısından bu değer değiştirilmelidir. Ancak, bu değer değiştirilse bile karşı tarafa açık (clear-text) bir şekilde gönderildiği için (SNMPv3 hariç) güvenlik riski taşır.
MIB adreslerinin ilk dört numarası standartlar gereği aynıdır ve genellikle "1.3.6.1" şeklinde başlar. MIB adresleri bilgi içermez, sadece cihaz üzerinde bulunan bilginin yolunu belirtirler. Bu şekilde, tüm adresler cihazlara özeldir. Yani kısaca, ajan uygulama ile yönetici arasında iletilen bilgiler MIB'lerde tutulmaktadır.
Ağ yöneticisi, yönetilen cihazları SNMP'de dört ana komut ile yönetir. Bunlar "get", "set", "trap", ve "walk" komutlarıdır ve tamamı ağ yönetim sistemi yazılımında kullanılır. Bu komutlar, ağ cihazlarına bilgi almak, ayar yapmak, olayları izlemek ve ağda dolaşmak gibi işlemleri gerçekleştirmek için kullanılır.
read (get): Ağ yönetim sistemi tarafından ajan uygulamanın olduğu cihazdaki bilgileri almak için kullanılır.
write (set): Ağ yönetim sistemi tarafından cihazlar üzerinde yapılandırma yapmak için kullanılır.
trap: Cihazda meydana gelen değişiklikleri ağ yönetim sistemine bildirmek için kullanılır. Trap mesajları UDP 162. porta gönderilir.
traversal (walk): Ajan uygulamanın çalıştığı cihaz üzerinde hangi değişkenlerin MIB'de barındırıldığını öğrenmek için kullanılır.
SNMP'nin temel olarak çalışma prensibi istek gönderme ve gönderilen isteğe cevap alma şeklinde olur. Transport (Ulaşım) katmanında UDP protokolü kullanılır. Bu nedenle, gönderilen bilgilerin adrese ulaşıp ulaşmadığı kontrol edilmez. Bunun avantajı ise, gereksiz paket trafiğinden kurtulacağı için veri aktarımının hızlı olmasıdır. Ağ yöneticisi, ajan uygulamanın çalıştığı cihaza ihtiyaç duyduğu bilgi isteğini gönderir ve cihaz da istenilen bilgileri yönetici uygulama sayesinde ağ yöneticisine gönderir. Bu işlemler yapılırken kullanılan yöntemler şunlardır:
GET: Ağ yöneticisi tarafından, yönetilen cihazlardaki bir veya birden fazla cihaz bilgisini elde etmek için gönderilen istektir. Buradan elde edilecek değerler, Yönetim Bilgi Birimindeki ilgili değerlerdir.
GETNEXT: GET komutu ile elde edilen bilginin bir sonraki değerini almak için kullanılır.
SET: Yönetici tarafından kontrol edilen cihaz üzerinde yapılacak olan değişiklikler için gönderilen komuttur.
TRAP: Bu komut, ajan uygulamanın çalıştığı cihazda herhangi bir değişiklik olduğunda yöneticiye otomatik olarak bilgi değişikliğini bildirmeye yarayan bir işlemdir. Diğer komutlardan farklı olarak, yönetim sisteminden herhangi bir istek gönderilmez. Cihazda değişiklik algılandığında, yöneticiye değişikliği rapor eden bir paket gönderilir.
GETBULK: Bu istek, büyük boyutlu bilgilerin daha verimli bir şekilde alınabilmesi için kullanılır. Yani, bu işlemle beraber aynı tabloda birden fazla sütunun görüntülenmesi mümkündür.
INFORM: Bir yönetim sisteminden diğerine bilgi aktarmak için kullanılır. Bu, TRAP'a benzer şekilde çalışır ancak bilgi alındıktan sonra bir onaylama (acknowledgement) talep eder.
GET-RESPONSE : SNMP yönetici tarafından bilgi talebinde bulunulduğunda yanıt göndermek için bu mesaj türünü kullanmaktadır.
SNMP'nin farklı sürümleri bulunmaktadır. Bunlar SNMPv1, SNMPv2 ve SNMPv3'tür. Yukarıda anlatılan işlemler tüm sürümler tarafından kullanılmamaktadır. SNMPv1'de sadece GET, GETNEXT, SET ve TRAP gibi temel SNMP işlemleri yapılabilir. Bunlara ek olarak, GETBULK ve INFORM işlemleri diğer iki sürümde mevcuttur. Ayrıca, son sürümün (SNMPv3'ün) diğerlerinden farkı güvenlik açıklarının kapatılmış olması şeklinde düşünülebilir. SNMPv3'te yönetici ile ajan uygulama arasındaki bilgiler şifreli bir şekilde iletilir. Son sürümün bir diğer avantajı ise kimlik denetimini mümkün kılmasıdır.
SNMP ile gönderilen paketler genellikle iki bölümden oluşur: başlık (header) ve protokol veri bileşeni (Protocol Data Unit - PDU). Başlık kısmında, kullanılan SNMP sürümünün adı ve topluluk bilgileri belirtilir. PDU'nun içerdiği bilgiler ise PDU türü (PDU type), İstek numarası (Request ID), Hata durumu (Error status), Hata tipi (Error Index) ve PDU'nun veri kısmı (object value) şeklindedir. Bu biçim, GET komutu ile alınan bir SNMP paketinin formatını ifade eder. Ayrıca, TRAP ve GETBULK komutları ile elde edilecek olan paket içeriği farklılık gösterebilir.
SNMPv2 versiyonundan itibaren TRAP mesajları daha geniş bir kullanım alanı bulmuştur. Bu mesajlar, ajan/aracı uygulama çalışan cihazlardaki anlık durum değişikliklerini yöneticiye bildirmek için kullanılır. Bu işlem otomasyonla gerçekleştirilebilir, böylece yönetici herhangi bir istek göndermeden durum değişikliklerinden haberdar olabilir. Yapay zeka gibi otomasyon araçları da bu süreci daha etkin hale getirebilir, çünkü yapay zeka sistemleri cihazlardan gelen verileri analiz edebilir, anlamlı sonuçlar çıkarabilir ve gerektiğinde yöneticiyi uyarabilir. Bu sayede ağ yönetimi daha verimli ve etkili bir şekilde yapılabilir.
Peki SNMP protokolü bize ne gibi bilgiler elde etmemizi sağlıyor.
Ağ cihazlarının durum ve akış bilgisi
Cihazların bilgilerini (Marka, model, seri numarası vb.)
CPU, RAM kullanım bilgisi
Cihazların çalışma sürelerini
Hafıza bellek kullanımı
Ve daha fazlası…
MIB'ler (Yönetim Bilgi Tabanları), hiyerarşik bir yapıda tutulan bilgi koleksiyonudur. SNMP'de belirli bir değişkenin değerine ulaşmak için bu koleksiyonun ilgili birimleri kullanılır. Örneğin, bir cihazın üreticisi tarafından atanmış cihaz açıklamasına erişmek için 1.3.6.1.2.1.2 birimindeki bilgiye başvurulur. Bu ağaç yapısındaki numaralar, genellikle "iso.identified-organization.dod.internet.mgmt.mib-2.description" gibi bir değere karşılık gelir. Bu numaralandırma sistemi, bilgiye erişmek için standartlaştırılmış bir yol sunar ve farklı cihazlarda tutulan verilere kolayca ulaşmayı sağlar.
MIB kavramı bir ağaç yapısına benzetilebilir. Ulaşılmak istenen değeri tutan değişkene OID (Object IDentifier, Nesne Tanımlayıcısı) adı verilir. MIB yapısındaki sıralamaya göre değer alır. Her kuruluşun, “Internet Engineering Task Force (IETF)” tarafından atanan bir değeri vardır, yani belirli bir yere kadar ağaç yapısı evrenseldir, ancak kurumların kendi kullanacakları yönetim nesneleri için bu kodu her kurum kendi tanımlar . Bu değişkenler ağacın dallarının en uç noktasında olup bir cihazla ilgili tek bir değeri tutabileceği gibi kendisinden sonra gelen bütün alt dalları ifade etmek için de kullanılabilir. Kökten ağaç dalına uzanan bu hiyerarşi birbirlerinden nokta ile ayrılmış sayı dizileriyle ifade edilir. Yönetilen nesneler köke bağlı mantıksal gruplar şeklinde öbeklenir . MIB’i, SNMP ağ cihazlarının veri nesnelerinin tanımlandığı bir ASCII metin belgesi olarak da tanımlayabiliriz. Mesela SNMP sözlüğü gibi düşünebiliriz. Bu sözlükte her SNMP nesnesinin karşılığı rakamsal olarak tutulur. SNMP cihazı bir bildirimde bulunduğu zaman her veri nesnesini OID’lerle tanımlar.
OID değeri ―1.3.6.1.2.1.1.5‖ olan ―sysName‖ değeri ağaç yapısında gösterilmiştir. Buradaki ilk girdi de sysName.0 olarak adlandırılır. Yani komutta 1.3.6.1.2.1.1.5.0 yerine sysName.0 yazılırsa da aynı işlevi görür. Değişkenin başındaki ilk dört sayı, yani 1.3.6.1 standarttır. Bu noktadan sonra ulaşmak istediğimiz bilgiye göre alt dallara ilerlenir. Örneğin 1.3.6.1.2.1.1 dalı sistemle ilgili sistem adı, sistem tanımı, sistemin ayakta olduğu süre gibi değerleri tutar. Bunun alt dalı olan 1.3.6.1.2.1.1.5.0 değişkeni bunlardan biridir (sistem adı):
1: ISO (International Organization for Standardization)
3: org (Organizations)
6: dod (Department of Defense)
1: internet
2: mgmt (Management)
1: mib-2 (SNMP MIB v2)
1: system
5: sysName
0: sysName.0 (Dalın sonundaki ilk girdi)
Bu şekilde, her bir dalın OID ile benzersiz bir şekilde tanımlandığı ve ağaç yapısının kökten başlayarak uzandığı görülebilir.
Bu değerlerin her biri cihazın çeşitli özelliklerini tanımlıyor. Aşağıdaki şekilde her OID'nin karşılık gelen açıklamasını ve kullanımını görebiliriz:
1.3.6.1.2.1.1.1: sysDescr (Cihazın tanımı için)
1.3.6.1.2.1.1.2: sysObjectID (Cihazın ID'si için)
1.3.6.1.2.1.1.3: sysUpTime (Cihazın ne zaman güncellendiği)
1.3.6.1.2.1.1.4: sysContact (Cihaz iletişim bilgileri)
1.3.6.1.2.1.1.5: sysName (Cihaz adı)
1.3.6.1.2.1.1.6: sysLocation (Cihazın fiziksel yeri)
1.3.6.1.2.1.1.7: sysServices (Cihazın hizmet türünü belirler)
Bu değerler, ağ yöneticisinin cihaz hakkında önemli bilgiler elde etmesine yardımcı olur ve ağ performansını izlemek ve sorunları tanımlamak için kullanılabilir.
Artan ağ gereksinimlerini karşılayabilmek için MIB değerleri zaman içerisinde üretici firmalar tarafından arttırılmıştır. Daha etkili bir ağ yönetimi sağlayabilmek için sahadaki cihazlardan daha fazla bilgi çekmek gerekir. İhtiyaç duyulan bu veriler için yeni MIB değerleri ortaya çıkarılmıştır. IETF (Internet Engineering Task Force) tarafından bu MIB değerlerini düzenlemek için farklı RFC (Request for Comments) belgeleri tanımlanmıştır. Bu MIB değerleri iki ana başlık altında toplanmıştır:
1-) MIBv1
Hem hata yönetimi hem de konfigürasyon yönetimi için geliştirilmiş olan MIB v1, sadece belirli kontrol nesnelerini tanımlar, bu yüzden gelişmiş ağlar için yeterli değildir. MIB v1'de en fazla 100 veri çekişine izin verilir, bu da gereksiz veri çekmeyi engeller.
MIB v1, aşağıdaki alanlarla ilgili veri çekebilir:
a. Sistem
b. Arayüzler
c. Adres dönüşümü
d. IP
e. ICMP
f. TCP
g. UDP
h. EGP
2-) MIBv2
MIB v2, MIB v1'den farklı olarak yeni işlevsel gereksinimler için eklentiler sunar. Bu eklentiler, SMI/MIB ve SNMP ile ileriye doğru uyumluluk sağlama, çoklu protokolleri destekleyen cihazları destekleme ve daha anlaşılabilir bir yapı sunmak için açıklık ve okunabilirlik sağlar. MIB v2, aşağıdaki alanlarla ilgili veri çekebilir:
a. Sistem
b. Fiziksel adresler
c. Arayüzler
d. Adres çevrimleri
e. IP
f. ICMP
g. TCP
h. UDP
i. EGP
j. İletişim
k. SNMP
Bu çalışmada, "System", "Interface", "At" ve "IP" ana başlıkları altındaki MIB II değerleri kullanılmaktadır.
SNMPv3, önceki sürümlerde mevcut olan güvenlik zayıflıklarını gidermek için önemli geliştirmeler sağlar. Bu sürümde topluluk dizisi kavramı mevcut değildir. SNMPv3, varlıkları, kullanıcıları ve grupları kullanarak çok daha güvenli bir iletişim sağlar. Bu, üç yeni ana özelliğin uygulanmasıyla elde edilir:
Mesaj bütünlüğü, iletilen bir paketin aktarım sırasında değiştirilmemesini sağlamak için kullanılan bir güvenlik önlemidir. Mesaj bütünlüğü genellikle bir karma (hash) fonksiyonu kullanılarak sağlanır. Gönderici, iletilen mesajın bir karma değerini hesaplar ve bu değeri mesajla birlikte gönderir. Alıcı, aldığı mesajın karma değerini yeniden hesaplar ve gönderici tarafından gönderilen karma değeriyle karşılaştırır. Eğer bu iki değer eşleşiyorsa, mesajın bütünlüğü korunmuş demektir.
Kimlik doğrulama, bir mesajın ağdaki geçerli bir kaynaktan geldiğinden emin olmak için kullanılan bir güvenlik önlemidir. Kimlik doğrulama genellikle şifreli bir anahtar kullanılarak yapılır. Gönderici, iletilen mesajı imzalar ve bu imza mesajla birlikte gönderilir. Alıcı, gelen mesajı ve imzayı alır ve gönderici tarafından kullanılan anahtarla imzanın doğruluğunu kontrol eder. Eğer imza doğrulanırsa, mesajın gönderici tarafından geldiği doğrulanmış olur.
Gizlilik (şifreleme), bir mesajın içeriğini üçüncü tarafların okumasını engellemek için kullanılan bir güvenlik önlemidir. Mesajın içeriği şifrelenir ve sadece doğru anahtara sahip olanlar tarafından okunabilir. Bu, mesajın gizliliğinin korunmasını sağlar ve hassas bilgilerin sızmasını önler. Şifreleme genellikle simetrik veya asimetrik olabilir, ve farklı şifreleme algoritmaları kullanılabilir (örneğin DES, AES, RSA).ü
Not: SNMPv3 daha iyi güvenlik sunsa da SNMPv2c yine de daha yaygındır. Cisco, IOS 12.0.3T sürümünden bu yana yönlendiricilerinde SNMPv3'ü desteklemektedir.
SNMP tuzakları belirli olaylar gerçekleştiğinde önceden tanımlanmış eylemleri gerçekleştirmek için kullanılır ve bir SNMP ajanı tarafından gönderilir. Tuzaklar genellikle UDP bağlantı noktası 162 üzerinden iletilir. Tuzakların gönderilebilmesi için SNMP grubundaki MIB değişkeni SnmpOutEnableAuthTraps'in etkinleştirilmesi gerekir. Ayrıca, tuzak gönderen yöneticinin xn_snmp_config ile yapılandırılması gerekmektedir. Bu ayarlar yapıldıktan sonra, SNMP yöneticisi belirli olaylara yanıt olarak tuzaklar alabilir.
Cold Start : Bu tuzak, ağ yeniden başlatıldığında ve cihazın yapılandırma bilgileri değiştirildiğinde oluşturulur. Özellikle, xn_snmp_config çağrıldığında bu tuzak oluşturulur. Bu şekilde, SNMP yöneticisi ağdaki bu tür önemli olaylardan haberdar olabilir.
Warm Start: RTIP-32 Sıcak Başlatma özelliğini desteklemediği için ağ yeniden başlatıldığında ve cihazın yapılandırma bilgileri değiştirilmediğinde bu tuzak hiçbir zaman oluşturulmaz. Bu durumda, SNMP aracısı bu tür olaylardan haberdar olmaz.
Link Down : Bir arayüz başarısız oldu. Bu, RTIP-32 tarafından oluşturulmaz ancak bir uygulama tarafından arayüzün arızalı olduğunu tespit ettiğinde oluşturulabilir.
Link Up : Bir arayüz ortaya çıktı. Bu tuzak, xn_interface_open veya xn_attach başarıyla çağrıldığında oluşturulur.
Authentication Failure : Yanlış bir topluluk alanına sahip bir SNMP mesajı alındı. Bu tuzak, hata tespit edildiğinde RTIP-32 tarafından oluşturulur.
Enterprise Specific : RTIP-32 bu tuzağı oluşturmaz. Bir uygulama belirli bir tuzak eklemek isterse xn_snmp_send_trap'i çağırarak bu tuzağı oluşturur (aşağıya bakın).
Tuzaklar, xn_snmp_send_trap işlevi çağrılarak oluşturulur. Bir uygulama, xn_snmp_send_trap'i sp_trap_no 6'ya (TRAP_ENTERPRISE) ayarlı olarak çağırarak ve hangi tuzağın üretildiğini tanımlayan gn_trap_no'yu çağırarak kendi tanımlı tuzaklarını oluşturabilir. xn_snmp_add_binding işlevi, xn_snmp_send_trap için bir bağlama listesi oluşturmak üzere çağrılabilir.
Bu versiyon, temel yönetim işlevlerini yerine getirirken güvenlik ve şifreleme konularında kısıtlıdır. Bu nedenle, genellikle LAN seviyesinde kullanılması tercih edilir. Ancak, günümüzde sıkça karşılaşılan yüksek trafik hacimlerini yönetme konusunda 32-bit counter yapısının yetersiz kalması büyük bir dezavantajdır. Bu versiyonun trafik verilerini doğru bir şekilde işleyememesi, modern ağ yönetimi gereksinimlerini karşılamakta zorlanmasına neden olabilir. Bu yüzden, büyük ağlarda veya yüksek trafikli ortamlarda kullanımı tavsiye edilmemektedir.
SNMPv2, 64-bit counter yapısına geçerek önceki sürümlerin trafik hacmini doğru bir şekilde yönetememe sorununu çözmüştür. Ancak, güvenlik açısından önemli olan bazı kritik bilgilerin hala açık metin olarak iletiliyor olması, bu versiyonun güvenlik konusunda yetersiz kalmasına neden olmuştur.
SNMPv2'nin genellikle "v2c" olarak adlandırılmasının nedeni, "c"nin "community" (topluluk) anlamına gelmesidir. Ancak, "v2p" (proxy) ve "v2u" (user-based security model) gibi daha az yaygın iki farklı versiyonu daha bulunmaktadır. Bu versiyonlar genellikle nadir durumlarda veya belirli güvenlik gereksinimlerini karşılamak için kullanılırlar.
2002'de tanıtılan SNMPv3, önceki sürüm olan SNMPv2c'nin özelliklerini korurken, farklı güvenlik çözümleri sunar. Bu çözümler arasında kullanıcı hesabı tanımlama, kimlik doğrulama ve veri şifreleme bulunur. Bu nedenle, SNMPv3, güvenlik odaklı bir ağ yönetimi için tavsiye edilen SNMP versiyonudur. Ancak, bu özelliklerin yapılandırılması karmaşık olabilir ve daha fazla veri işleme kapasitesine ihtiyaç duyabilir.
o noAuthNoPriv : Kimlik doğrulama ve gizlilik olmadan iletişim.
o authNoPriv : Kimlik doğrulama ile ve gizlilik olmadan iletişim. Kimlik Doğrulama için kullanılan protokoller MD5 ve SHA’dır (Güvenli Karma Algoritma).
o authPriv : Kimlik doğrulama ve gizlilik ile iletişim. Kimlik Doğrulama için kullanılan protokoller MD5 ve SHA’ dır; ve Gizlilik için DES (Veri Şifreleme Standardı) ve AES (Gelişmiş Şifreleme Standardı) protokolleri kullanılabilir. Gizlilik Desteği için bazı üçüncü taraf gizlilik paketleri yüklemeniz gerekir. Kurulumla ilgili ayrıntılar “Gizlilik Desteği” konusunda ele alınmaktadır.
Bu paket, sistemimiz üzerindeki araçların birçok değerini hafızaya kaydeder. Örneğin, yazıcımızın ismini, kullandığı toner türünü, router üzerindeki IP adreslerini ve benzer bilgileri kaydeder. Bu durumdan çıkarılacak sonuç şudur: GetBulkRequest manipüle edilerek hedef sistem hakkında önemli bilgilere erişilebilir. Dahası, hedefe 87 byte'lık bir GetBulkRequest gönderildiğinde, tüm cihazların verilerinin toplamında 60 KB'a yakın parçalanmış veri geri döner. Gönderdiğimiz veriden 700 kat daha büyük bir veri. Bu bilgiyi biraz daha ileri götürelim: Sürekli olarak sisteme GetBulkRequest gönderilirse, sonunda bir Hizmet Reddi (Denial Of Service) durumu oluşabilir!
SNMPv1 ve SNMPv2c'de veriler açık metin olarak iletilir, yani şifrelenmez. Bu durum, ağ trafiğinin kolayca dinlenebilmesi anlamına gelir. SNMPv3'te ise veriler şifrelenir ve kimlik doğrulama yapılır, bu da verilerin daha güvenli bir şekilde iletilmesini sağlar. Dolayısıyla, SNMPv3, SNMPv1 ve SNMPv2c'ye göre daha güvenlidir.
Birçok cihazda varsayılan yapılandırma kullanıldığında, yöneticinin varsayılan kullanıcı adı ve şifreyle sisteme giriş yapması mümkündür. Ayrıca, "Public" ve "Private" gibi varsayılan topluluk dizesine erişim de mümkündür. Bu nedenle, güvenlik önlemleri alınmadığında, varsayılan yapılandırmalar cihazlar için ciddi güvenlik riskleri oluşturabilir. Bu nedenle, cihazları yapılandırırken varsayılan kullanıcı adı, şifre ve topluluk dizesi gibi değerlerin değiştirilmesi önemlidir.
"Public" topluluk dizisi, SNMP yöneticisinin cihaz üzerinde sadece okuma izni olan yerlere erişim sağlar. Bu, MIB'deki verilere sadece okuma yetkisi olduğu anlamına gelir. Bu veriler arasında ağ arayüzleri, bağlantılar, sistem versiyonu ve diğer birçok bilgi bulunabilir. Bu bilgileri okuyarak, ağdaki cihazların durumu hakkında bilgi edinmek mümkündür. Ancak, "Public" topluluk dizisiyle erişilen bilgiler genellikle sınırlıdır ve yapılandırmaya ilişkin hassas bilgileri içermez. Bu nedenle, bu topluluk dizesiyle elde edilen bilgiler genellikle ağ yönetimi ve izleme amaçları için kullanılır.
"Private" topluluk dizisi, SNMP yöneticisinin cihaz üzerinde hem okuma hem de yazma iznine sahip olduğu yerlere erişim sağlar. Bu, MIB'deki verilere okuma ve yazma yetkisi olduğu anlamına gelir. Dolayısıyla, bu topluluk dizesiyle sistemdeki ağ arayüzlerini devre dışı bırakarak (örneğin, "down" durumuna getirerek) bir Denial of Service (Hizmet Reddi) saldırısı gerçekleştirilebilir. Ayrıca, yönlendirme ayarlarını değiştirerek (örneğin, yönlendirmeleri değiştirerek), başka sistemleri saldırıya açık hale getirebilir veya saldırıya maruz bırakabilirsiniz. Bu, istismar edilebilecek bir güvenlik açığı oluşturabilir ve ciddi ağ güvenliği risklerine neden olabilir. Bu nedenle, özel topluluk dizilerinin güvenli bir şekilde yönetilmesi ve kullanılması önemlidir.
Bu belgese ise SNMP attack tiplerinin bir kaç örneğini görmekteyiz.
Bu yazıda öncelikle, SNMP saldırılarının mantığını anlamak için basit bir düzeyde bir saldırı gerçekleştireceğiz. Ardından, mantığı anladıktan sonra gerçek hayat senaryolarında daha ileri düzeyde bir saldırı senaryosuna geçeceğiz.
Kullanılacak olan topoloji bu şekilde ve ilk önce konfigürasyonları yapalım
SNMP, genel mesajlar için 161/UDP ve tuzak mesajları için 162/UDP bağlantı noktalarıyla UDP üzerinden çalışır.
Ağdaki aktif cihazları tarayıp buluyoruz.
Aktif UDP portlarını buluyoruz.
Aktif TCP açık portları hızlıca buluyoruz.
Bizim hedefimiz UDP portları olduğu için TCP portlarını geçiyorum.
Saldıracağımız hedefi bilmemiz önemli ondan dolayı versiyon bilgisi önemli.
SNMP sunucusu hakkında küçük bir banner bilgisi.
Sadece işaretli olan yer, bulunduğunuz ana makinedeki konumu temsil etmektedir; diğerleri zaten varsayılmıştır.
Ayarlar sonrası detaylar.
Görüldüğü gibi artık sistemden yapılandırma bilgisi alındı. Geçmiş olsun, işlem tamamlanmıştır.
Eğer içinde önemli bilgiler varsa, bunları kullanarak başka sistemlere sızılabilir.
Başka bir Metasploit modülü olan snmp_enum, ayrıntılı donanım bilgilerinin toplanmasında uzmanlaşmıştır. Her iki topluluk dizesi türüyle de çalışır ve başarılı yürütme için hedefin IP adresini gerektirir
Bu bölümde public ile toplayabileceğimiz birkaç bilgiye bakalım ve dikkat ederseniz, konu anlatımı kısmında yapılan konfigürasyonları dikkatlice analiz etmiştik, burada onlara tekrar değinmeyeceğiz.
Görüldüğü gibi public string'de bu kadar önemli bilgi elde edilebiliyorsa, şimdi private string'i deneyelim ve ne tür bilgiler elde edebileceğimize bakalım.
Görüldüğü gibi aynı çıktıyı aldık.
Nmap tarafında SNMP ile ilgili kullanılabilecek bazı betikler şunlardır ve birkaçını kullanalım.
snmp-brute: SNMP cihazlarına brute force saldırısı yapmak için kullanılır.
snmp-info: SNMP cihazları hakkında bilgi toplamak için kullanılır.
snmp-netstat: SNMP cihazlarındaki ağ bağlantılarını denetlemek için kullanılır.
snmp-sysdescr: SNMP cihazlarının sistem açıklamasını almak için kullanılır.
snmp-interfaces: SNMP cihazlarındaki ağ arayüzlerini listelemek için kullanılır.
Bu betikler, Nmap'in SNMP taraması sırasında kullanabileceğiniz temel araçlardır.
Burada nmap, kendi veritabanındaki stringleri deneyerek null değerleri arar. İlk başta böyle yapmak mantıklı olabilir.
Girilmesi gerekenleri girildi.
Dikkatlice bakılırsa iki tane buldum, biri RW diğeri ise RO; çok tehlikeli bir durumdur.
NMAP ile de harici bir kaynaktan stringler bulunabilir.
Bu dördüncü yazıda ise MIB'leri çekip hangisinin neye bağlı olduğuna bakacağız.
Toplamda 2464 satır geldi ve bunları bir .txt dosyasında paylaşacağım, isteyen inceleyebilir.
snmpwalk, SNMP sorgusu yaparken GETNEXT isteklerini kullanır. Belirtilen Object ID'nin altındaki alt ağaçtaki tüm değişkenler sorgulanır ve değerleri kullanıcıya sunulur. GET isteğinde bulunmak için snmpget, SET isteğinde bulunmak için snmpset komutları kullanılır. Uzak SNMP-enabled bir cihazdan merkezi bir toplayıcı olan "SNMP yöneticisi"ne uyarı mesajları göndermek için snmptrap komutunu kullanırız.
Not: "snmpwalk" ile gerçekleştirilen benzer işlemler, "snmpbulkwalk" aracı ile de gerçekleştirilebilir. "snmpbulkwalk" aracı SNMPv1 için çalışmamakla birlikte, SNMPv2 üzerinde oldukça hızlı çalışmaktadır.
Not: Net-SNMP kurulum paketleri resmi web sitesinin indirme alanında bulunabilir. Windows için ikili dosyalar OpenSSL sürüm 0.9.8r'yi temel aldığından, uyumluluk nedenleriyle sürüm 1.0 veya üzerinin kurulu olduğu sistemlerde kurulum çalışmaz.
Belirli bir OID kullanarak MIB değerleri sorgulanabilir.
SNMP-Check
Snmpwalk gibi, SNMP-check de SNMP cihazlarını numaralandırmanıza olanak tanır ve çıktıyı insanlar tarafından okunabilir, kolay bir formatta sunar. Sızma testi veya sistem izleme için yararlı olabilir
Snmp-check ile yazma, hiçbir string olmadan kontrol edilebilir. En azından public string varsa daha yararlı olabilir.
Eğer elinizde geçerli bir public değeri varsa, snmp-check bunu kullanarak açıklamada belirtildiği gibi insan okuma arayüzlü bir iyimser OİD'nin neye karşılık geldiğini düzgün şekilde verebilir.
İki ana ayar, ağ yönetiminde çok önemli bir bileşen olan OID ağacının tamamına erişim sağlar:
rwuser noauth, kimlik doğrulamaya gerek kalmadan OID ağacına tam erişime izin verecek şekilde ayarlanmıştır. Bu ayar basittir ve sınırsız erişime izin verir.
Daha spesifik bir kontrol için aşağıdakiler kullanılarak erişim verilebilir:
İPV4 adresleri için tanımlanan conf. rwcommunity
İPV6 adresleri için tanımlanan conf. rwcommunity6
Eğer ki belirli bir OID değerlerini çektik ve bunların içinde filtreleme yapmak için bazı kısaltmalara gitmemiz gerekebilir, örneklere bir göz atalım.
grep ".1.3.6.1.2.1.1.1.0" *.snmp
// belirli OID değere göre arama yapılabilir.
grep -i "login|fail" *.snmp
//Başarılı veya başarısız girişleri kontrol et.
grep -E -o "\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+.[A-Za-z]{2,6}\b" *.snmp
// E postalar varsa kontrol et.
Bu yazımızda, şimdiye kadar yazdıklarımızla sınırlı kalacak ve bir sonraki aşamada gerçek hayat senaryosuna dayalı bir topolojiyi düzgün bir şekilde ayarlayıp, sanki gerçek bir sızma testi yapıyormuşuz gibi her şeyi tartışacağız.
SNMP (Simple Network Management Protocol) v1, güvenlik açısından zayıf bir protokoldür ve kritik string değerleri olarak "public" ve "private" gibi varsayılan community stringlerinin kullanılması büyük bir güvenlik riskidir. Bu durumu düzeltmek ve sistemi daha güvenli hale getirmek için aşağıdaki önlemleri alabilirsiniz:
SNMP v3, güvenlik özellikleri ekler ve kimlik doğrulama, şifreleme gibi özellikler sunar. Mümkünse SNMP v3'e geçiş yaparak güvenliği artırın.
Örnek Yapılandırma:
SNMP v1 veya v2c kullanıyorsanız, varsayılan community stringlerini değiştirin.
Örnek Yapılandırma:
SNMP erişimini sınırlamak için ACL kullanarak yalnızca belirli IP adreslerine izin verin.
Örnek Yapılandırma:
Community stringlerini güçlü ve tahmin edilmesi zor olacak şekilde belirleyin.
Öneriler:
Büyük ve küçük harfler, sayılar ve özel karakterler kullanın.
En az 12 karakter uzunluğunda stringler kullanın.
SNMP kullanarak sistemdeki önemli olaylar hakkında bilgi sahibi olun ve anormal durumları tespit etmek için traps ve notifications kullanın.
Örnek Yapılandırma:
SNMP v1 ve v2c arasında daha güvenli olan v2c'yi tercih edin, ancak mümkünse v3'e geçiş yapın.
Örnek Yapılandırma:
SNMP'ye ihtiyacınız yoksa bu servisi devre dışı bırakın.
Örnek Yapılandırma:
SNMP etkinliklerini izlemek ve günlükleri incelemek için SNMP sunucunuzda logging ve monitoring özelliklerini etkinleştirin.
SNMP erişim haklarını minimum düzeyde tutarak sadece gerekli bilgilerin paylaşıldığından emin olun.
Örnek Yapılandırma:
SNMP yazılım ve cihazlarınızı düzenli olarak güncelleyin ve güvenlik yamalarını zamanında uygulayın.
Bu önlemleri uygulayarak SNMP v1 kullanımındaki güvenlik risklerini azaltabilir ve ağınızın daha güvenli hale gelmesini sağlayabilirsiniz.