SNMP Protokolü Nedir? Saldırı Türleri ve Araçları?
“Simple Network Management Protocol” ün kısaltması. “Basit Ağ Yönetimi Protokolü” adı verilen bu teknoloji, bilgisayar ağları büyüdükçe bu ağlar üzerindeki birimleri denetlemek amacıyla tasarlanmıştır. Cihaz üzerindeki sıcaklıktan, cihaza bağlı kullanıcılara, internet bağlantı hızından sistem çalışma süresine kadar çeşitli bilgiler SNMP’de tanımlanmış ağaç yapısı içinde tutulurlar.
SNMP Nedir?
SNMP, ağ cihazlarında yönetimsel bilgi alışverişinin sağlanması için oluşturulmuş bir uygulama katmanı protokolüdür. TCP/IP protokolünün bir parçası olan SNMP; ağ yöneticilerinin ağ performansını arttırması, ağ problemlerini bulup çözmesi ve ağlardaki genişleme için planlama yapabilmesine olarak sağlar. Günümüzde kullanımda olan 3 tane SNMP sürümü mevcuttur.
SNMP Versiyonları
SNMPv1
En eski versiyonudur ve yönetilen cihazlardan veri çekmek için basit fonksiyonlar sağlar. Basit ve kolay kullanılabilir bir yapıya sahiptir ve şifreleme algoritması barındırmaz. Güvenlik sebebiyle sadece LAN seviyesinde kullanmak daha sağlıklı olacaktır.
En büyük dezavantajı ise 32-bit counter yapısı ile günümüzde gigabyte ve terabyte’larla ifade edilen trafik için yetersiz kalmasıdır.
SNMPv2
Bu versiyonla 64-bit counter yapısına geçilmiştir fakat hala bazı kritik bilgilerin clear text olarak gönderiliyor olması, güvenlik açısından pek değer katmamıştır.
SNMPv2 konuşulurken genelde SNMP “v2c” ile karşılaşırız. “c” community anlamına gelmektedir. SNMP ”v2p“ ve . SNMP ”v2u” olmak üzere iki farklı versiyonu daha bulunmaktadır ama bunlar çok nadir durumlarda kullanılırlar.
SNMPv3
2002 yılında ortaya çıkarılan SNMPv3, önceki versiyon olan SNMPv2c özelliklerini barındırmakla birlikte, farklı güvenlik çözümleri ile gelmiştir: Kullanıcı hesabı (user account) tanımlama, kimlik doğrulama (authentication) ve veri şifreleme (encryption) özelliği. Bu açıdan kullanılması tavsiye edilen SNMP versiyonudur fakat unutulmamalıdır ki; bu özellikler yapılandırmayı zorlaştırdığı gibi daha çok veri işlem kapasitesine de ihtiyaç oluşturur.
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.
SNMP’yi Oluşturan Bileşenler:
•Ajan uygulama: SNMP hizmetini cihaz üzerinde çalıştırıp gerekli bilgileri kayıtlı tutarak yönetici birime aktaran veya yönetici birimden gelen değişikliği cihaza uygulayan uygulamaya verilen isim.
• Yönetici uygulama: Ajan uygulamadan ihtiyaç duyulan bilgileri alıp kullanıcıya gösteren ve kullanıcının değiştirmek istediği değerleri cihaza gönderen uygulama.
• Ağ Yönetim Sistemi (NMS): Yönetici birimde çalışan ve bir ağa bağlı tüm cihazların izlenmesini ve yönetimini sağlayan uygulamaya verilen isimdir.
•SNMP Yönetim Bilgi Birimleri(MIB) :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ı):
a : ISO (International Standart Organization)
b : Org (organization)
c : Dod (Department of defense)
d : Internet
e : Mgmt (Network management entries)
f : SNMP MIB v2
g : system
h : sysName
ı : Dalın sonundaki ilk girdiyi belirtir.
Sistem dalı altındaki diğer değerler ise aşağıdaki gibidir:
1.3.6.1.2.1.1.1 — sysDescr (Cihaz tanımlaması için)
1.3.6.1.2.1.1.2 — sysObjectID (Cihaz 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 tipini belirler)
Artan ağ gereksinimlerini karşılayabilmek için MIB değerleri zaman içerisinde üretici firmalar tarafından arttırılmıştır. Daha efektif 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) dökümanları 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 için sadece bazı kontrol nesneleri tanımlanmıştır, bu yüzden gelişmiş ağlar için yeterli değildir. MIB v1’de en fazla 100 veri çekişine izin verilmekte olup gereksiz veri çekmeyi engeller.
MIB v1 aşağıdaki alanlarla ilgili veri çekebilir:
a. Sistem
b. Arayüzler
c. Adres çevrimi
d. IP
e. ICMP
f. TCP
g. UDP
h. EGP
1-) MIBv2
MIB v1’den farklı olarak; yeni işlemsel gereksinimler için eklentiler sunar. Bunlar SMI/MIB ve SNMP ile ileriye doğru uyumluluk sağlama, çoklu protokolleri destekleyen cihazları destekleme ve açıklık, okunabilirlik için daha anlaşılabilir bir yapı sunmak şeklinde özetlenebilir.
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.
SNMP Paket Türleri
SNMP üzerinde bulunan 7 adet paket türü:
- Get
- GetNext
- GetBulk (SNMPv2) ( Bant genişliğinden tasarruf eder.)
- GetResponse
- Set
- Trap
- Inform (SNMPv2)
Yönetici Get, GetNext ya da GetBulk mesajları ile bir ya da birden fazla değişken verisi talep eder, agent ise GetResponse mesajı ile talep edilen veriyi ya da isteğin neden cevaplandırılamadığını belirten hata mesajını iletir.
Yönetici Set mesajı ile bir değişken üzerindeki verinin değiştirilmesini talep eder, agent ise GetResponse mesajı ile değişikliğin yapıldığını veya hangi nedenle yapılamayacağını belirten GetResponse mesajı iletir.
Trap mesajı ise agent tarafından yöneticiye iletilen, önemli olayı ya da durumu belirten mesajdır.
Inform mesajı, mesaj iletildikten sonra yöneticiden onay paketi beklenir. Onay gelmediği durumda Inform mesajı tekrar gönderilir.
SNMP Saldırıları
Öncelikle öğrendiklerimizin üstünden geçelim ve neler yapılabilir aşama aşama gidelim. İlk olarak az önce okuduğunuz paket türlerinden bu konuda işimize yarayanı ele alalım.
· GetBulkRequest
Bu paket sistemimiz üzerindeki araçların birçok değerini hafızaya kaydeder. Örneğin yazıcımızın ismini, ne tarz toner kullandığını, router üzerindeki IP adreslerini ve benzer bilgileri kaydeder. Buradan çıkarmamız gereken sonuç şudur. GetBulkRequest manipüle edilerek karşılaştığımız sistem hakkında kritik bilgilere ulaşabiliriz. Daha da önemlisi hedefe 87 byte’lık bir getBulkRequest yolladığımızda tüm cihazların verilerinin toplamında 60k byte’a yakın parçalanmış veri geri döner. Yolladığımız veriden 700 kat daha büyük bir veri. Bu öğrendiğimiz bilgiyi biraz daha ileri götürelim. Sürekli olarak sisteme getBulkRequest attığımızı düşünelim. En sonunda erişeceğimiz nokta Denial Of Service !
· Versiyon Kaynaklı Saldırılar
Az önce Version1 ve Version2c’nin güvenlik açısından eksik olduğundan bahsetmiştim. Nedenini Version3’ten az da olsa kestirebilirsiniz. Bu iki versiyonda veriler plain-text’tir. Herhangi bir encryption kullanılmaz. Şifreler plain-text olduğundan dolayı network trafiğinden doğruca snifflenebilir.
· Default Configuration
Default Configuration kullanılması durumunda değiştirilmemiş kullanıcı ismi ve şifre ile sisteme girilebilir. Sistemdeki “Public” ve “Private” community stringlere erişilebilir.
a. Public Community String, bize sistem üzerinde sadece okuma izni olan yerlere erişim imkanı sağlar. Yani Management Information Base (MIB)’e erişimimiz olur. Burada tutulan her veriyi okuyabiliriz. Network arayüzleri, bağlantılar, Sistem versiyonu, dolaylı olarak sistem üzerinde bulunan zaafiyetleri burada okuduğumuz veriler sayesinde öğrenebiliriz.
b. Private Community String, sistem üzerinde hem okuma hem yazma iznine sahip olmamızı sağlar. Yazma iznimiz olduğuna göre Network Arayüzlerini down duruma getirerek başka bir Denial Of Service Attack yapabiliriz. Burada yapılacak başka bir yöntem de yönlendirmeler üzerinde oynayarak başka sistemleri üzerimize yönlendirip bu sistemlere erişim sağlamaktır.
Özet olarak; Simple Network Management Protokolü tanımış olduk. Çalışma mekanizması hakkında fikirler edindik. Edindiğimiz fikirler doğrultusunda sistemi zarara uğratmaya neler sebep olur, bunları gördük. Bu bilgilerin üzerine bir şeyler koyup daha iyilerini yapabilmek size kalmış
Saldırıdan önce GNS3 ile simülasyon ortamını oluşturalım.
Buradan bakabilirsiniz.
Router’a SNMP Konfigurasyonu yapmak için buraya bakabilirsiniz.
SNMPWALK
SNMPWALK, bilgi için bir ağ aygıtını sorgulamak için SNMP GETNEXT isteklerini kullanan Güvenlik Yönetim Sistemi (SMS) CLI ‘sinde bulunan Basit Ağ Yönetimi Protokolü (SNMP) uygulamasıdı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ılırız.
snmpwalk v1 kullanımı:
snmpwalk -v1 -c public 192.168.227.10 1.3.6.1.2.1.1.5.0
snmpwalk v2c kullanımı:
snmpwalk -v2c -c public 192.168.227.10 1.3.6.1.2.1.1.5.0
Not: “snmpwalk” ile gerçekleştirilen benzer işlemler, “snmpbulkwalk” aracı ile de gerçekleştirilebilir. “snmpbulkwalk” aracı SNMPv1 için çalışmamakla birlikle, SNMPv2 üzerinde oldukça hızlı çalışmaktadır.
snmpwalk v3 kullanımı:
snmpwalk -v3 -l authPriv -u USER -a SHA -A “PASSWORD1” -x AES -X “PASSWORD1” 192.168.227.10:161
Daha detaylı bir şekilde bakmak isterseniz buradan bakabilirsiniz.
SnmpManager Makinesinden agent’a snmp get isteği gönderip gelen bilgiyi görebiliriz.
Versiyon 2c kullandığımız için trafik şifreli değildir. Wireshark ile paketin içeriği görülebilir.
Eğer paketin şifreli olarak gelmesi için versiyon 3 kullanmamız gerekir.
Şimdi saldırı araçlarını kullanarak SNMP şifrelerini ele geçirebiliriz.
Saldırı Araçları
Hydra
Hydra genellikle tercih edilen araçtır. Telnet, FTP, HTTP, HTTPS, smb, çeşitli veritabanları ve çok daha fazlası dahil olmak üzere 50'den fazla protokole karşı hızlı sözlük saldırıları gerçekleştirebilir
Şimdi bir kelime listesi seçmemiz gerekiyor. Herhangi bir sözlük saldırısında olduğu gibi, kelime listesi anahtardır. Kali’de yerleşik çok sayıda kelime listesi var.
Aşağıdaki komutu çalıştırın:
hydra -P /usr/share/metasploit-framework/data/wordlists/snmp_default_pass.txt 192.168.227.10 snmp
-P: şifre listesinin yolunu gösterir
Komutlar yürütüldüğünde, sözlük saldırısını uygulamaya başlayacaktır ve böylece hemen doğru kullanıcı adı ve şifreye sahip olursunuz. Gördüğünüz gibi SNMP şifresini public, private ve pass olarak başarıyla yakaladık.
Medusa
Medusa’nın hızlı, büyük ölçüde paralel, modüler, giriş brute-forcer olması amaçlanmıştır. Birçok protokolü destekler: AFP, CVS, FTP, HTTP, IMAP, rlogin, SSH, SNMP ve VNC
medusa -M snmp -h 192.168.227.10 -P ~/Desktop/trypass -u test-admin
Buraya
-h: ana bilgisayar IP’sini gösterir
-u: belirli bir kullanıcıyı gösterir
Ancak Brute zorlama SNMP kullanıcı adı gerektirmez, ancak medusa uygun bir sözdizimi olmadan çalışmaz, istediğiniz herhangi bir kullanıcı adını kullanabilirsiniz
- P: şifre listesinin yolunu gösterir
Gördüğünüz gibi SNMP şifresini public, private ve pass olarak başarıyla yakaladık .
Metasploit
Bu modül, çeşitli makinelerde SNMP girişlerini test edecek ve başarılı girişleri bildirecektir. Bir veritabanı eklentisi yüklediyseniz ve bir veritabanına bağlandığınızda, bu modül başarılı girişleri ve ana bilgisayarları kaydeder, böylece erişiminizi takip edebilirsiniz. Metasploit’te SNMP ile ilgili birçok modül vardır. Örnek olarak snmp_login modülü kullanılacaktır.
Açık Kali terminal tipi msfconsole
use auxiliary/scanner/snmp/snmp_login
msf auxiliary(scanner/snmp/snmp_login)> set rhosts 192.168.227.10
msf auxiliary(scanner/snmp/snmp_login)> set stop_on_success true
msf auxiliary(scanner/snmp/snmp_login)> run
Aşağıdaki görüntüden SNMP şifresini başarıyla aldığımızı gözlemleyebilirsiniz.
Nmap
Nmap kullanarak snmp ile ilgili bilgiler almak için birçok nse script’leri vardır.
Buradan bakabilirsiniz.
Eğer tüm SNMP numaralandırma nmap komut dosyalarını bir ana bilgisayara karşı çalıştırmak istiyorsak ‘-sC’ seçeneğini kullanırız.
sudo nmap -sU -p 161 -sC -sV 192.168.227.10
Onesixtyone
Onesixtyone, birden fazla IP adresine birden çok SNMP isteği gönderen, farklı topluluk dizelerini deneyen ve yanıt bekleyen bir SNMP tarayıcıdır.
onesixtyone 192.168.227.10 -c ~/Desktop/trypass
Yukarıda gördüğünüz gibi şifre onesixtyone kullanarak pass, public ve private olarak bulunmuş oluyor.
SNMPPLUX
SNMPPLUX adlı böyle bir araç, daha büyük bir geliştirme projesinin (ORR) bir dalıdır. SNMPPLUX, pysnmp, re, sys, getopt, dizi, zaman ve çok işlemli python modülleri tarafından desteklenen USM uyumlu SNMPv1, SNMPv2c ve SNMPv3 kimlik doğrulama tarayıcısıdır. SNMPv1 ve v2c topluluk sözlüğü saldırılarını sağlamanın yanı sıra, aşağıdaki kimlik doğrulama türleri için SNMPv3 için kullanıcı adı ve parola sözlüğü saldırıları da sağlar. https://github.com/InteliSecureLabs/SNMPPLUX adresinden indirilebilir.
SNMPDoS
Amplifikasyon ile yapılan SNMP reflection saldırısı, nispeten küçük bir giriş akışından bile çok daha yüksek trafik hacimleri üretebilir ve sonuçta çok daha etkili ve daha tehlikeli bir hizmet reddi tehdidine dönüşebilir. Buna amplification saldırısı denir. Bu araç ile bu saldırı yapılabilir. https://github.com/vpnguy-zz/snmpdos adresinden indirilebilir.
SNMPwn
SNMPwn, bir SNMPv3 kullanıcı numaralandırıcı ve saldırı aracıdır. Güvenlik uzmanları ve penetrasyon test cihazları tarafından test etme iznine sahip olduğunuz ana bilgisayarlara karşı kullanılmak üzere tasarlanmış meşru bir güvenlik aracıdır. SNMP kullanıcısı olmadığında, SNMPv3 sistemlerinin “Unknown User Name” ile yanıt vermesi avantajından yararlanır ve bu sayede büyük kullanıcı listelerinde dolaşanları bulmamıza izin verir. https://github.com/hatlord/snmpwn adresinden indirilebilir.
Referanslar:
http://peanuter.darpanet.org/?p=84
https://bestmonitoringtools.com/snmpwalk-example-v3-v2-snmpget-snmpset-snmptrap/
https://resources.infosecinstitute.com/snmp-pentesting/
https://www.sans.org/reading-room/whitepapers/networkdevs/securing-snmp-net-snmp-snmpv3-1051
https://www.9tut.com/simple-network-management-protocol-snmp-tutorial
http://fac.ksu.edu.sa/sites/default/files/lab-06-snmpv3-security.pdf
http://www.on-time.com/rtos-32-docs/rtip-32/programming-manual/snmp/snmpv2.htm
https://home.cyber.ee/~ahtbu/CDS2011/MaunoPihelgasSlides.pdf
http://www.h3c.com.hk/download.do?id=622882
http://www.snmp.com/snmpv3/v3bcp.pdf
https://www.usenix.org/system/files/conference/woot12/woot12-final14.pdf