honeyTEA ile Sazan Avlayalım mı?

Önceki yazımda bloguma gelen saldırılardan ve hack girişimlerinden bahsederek, HoneyTEA fikrimi sizlerle paylaşmıştım. Bugün itibari ile kodları bitirip son testlerini tamamladım ve honeyTEA projemi sizlerle paylaşıyorum.

Siber saldırılar gün geçtikçe katlanarak artıyor. Saldırganlar blogunuzu, web sitenizi ya da kullandığınız bir sistemi sürekli olarak taramakta ve açık aramaktalar. Saldırganlar, saldırılarını otomatik araçlarla yaptıkları gibi manuel denemeler ve özel araçlar da kullanabiliyorlar.

Önceleri OSSEC üzerinden gelen loglara bakarak, otomatize araçları veya ardı ardına gelen istekleri inceleyip, manuel olarak kötü niyetli kişileri tespit edip, Cloudflare üzerinden bloke ediyordum. Sonrasında “bu işi nasıl otomatize yaparım?” sorusunu kendime sorarak, HoneyTEA projesini geliştirmeye karar verdim.

Kodlara Github hesabımdan ulaşabilirsiniz: https://github.com/teakolik/honeyTEA/

Giriş ve İhtiyaçlar

TEAkolik.com Centos işletim sistemli bir sunucu üzerinde çalışıyor. Ayrıca Cloudflare arkasından hizmet veriyorum. Bu sayede birçok lamere veya scriptçiye karşı da korunabiliyorum. TEAkolik.com adresime gelen tüm istekler Centos işletim sistemi üzerinde /var/log/httpd/access.log dosyasına da kayıt ediliyor. WordPress üzerinde çalışan blogumu hacklemek için genelde eklenti açıklıkları, wp-config.php dosyalarının artıkları veya benzeri teknikler kullanılmakta…

Öncelikle honeyTEA projesini kullanabilmek için Centos veya Ubuntu gibi sanal bir sunucu üzerinde çalışıyor olmanız gerekli. Ardından Cloudflare arkasında olmanız lazım. Çünkü bu projeyi Cloudflare arkasında hizmet veren sistemler üzerinde çalışabilecek şekilde ayarladım. Cloudflare arkasında hizmet aldığımız için sunucu üzerinde Apache’nin mod_cloudflare modülünün yüklü olması gerekli. Aksi takdirde ziyaretçinin ip adreslerini göremeyiz.

HoneyTEA Nasıl Çalışıyor?

Sunucu loglarınızı okuyarak web sayfamıza gelen istekleri inceliyor. Sitenize kötü niyetli bir istek gelirse (teakolik.com/wp-config.php.bak gibi) bu isteği tespit ediyor.

Örnek Log Kaydı: 

178.137.83.166 – – [22/Mar/2017:09:43:28 +0300] “GET /wp-admin/admin-ajax.php?action=revslider_show_image&img=../wp-config.php HTTP/1.1″ 200 32 “-” “Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.3$

178.137.83.166 – – [22/Mar/2017:09:43:29 +0300] “GET /wp-content/plugins/wp-ecommerce-shop-styling/includes/download.php?filename=../../../../../../../../../etc/passwd HTTP/1.1″ 404 710 “-” “Mozilla/5.0 $

Yukarıdaki birinci log kaydına baktığımız zaman, wp-config.php dosyamı okumak için bir eklenti açığını kullandığını görüyoruz. İkinci log kaydında ise başka bir eklentinin download zafiyeti kullanılarak etc/passwd dosyamı indirmeye çalıştığını görüyoruz.

Bu iki istek de kötü niyetli saldırgan tarafından gönderiliyor. Normal şartlar altında hiçbir ziyaretçi bu dosyaları okuma isteği göndermez.

honeyTEA log kayıtlarını okurken öncelikle bu istekler arasından kötü niyetli olanları tespit etmesi lazım. Bunun için config.txt dosyasını kullandım. Script çalışırken

config.txt

dosyasının içeriğini okuyor. Config.txt içerisine daha önce…

/wp-config.php
/download.php

…şeklinde tanımlamalar yaptığım için, log kayıtlarında bu dosyalara erişim sağlamak isteyen kişiyi kötü niyetli olarak tespit edebiliyor. Bu isteği gönderen kişinin ip adresini alıp…

blacklist.dat 

…dosyası içerisine yazıyorum. Ip adresini aldığı gibi o isteğin geldiği saat ve tarihi de kayıt ediyorum. Sonrasında honeyTEA, blacklist.dat içerisindeki ip adreslerini inceliyor. Bu ip adreslerini Cloudflare’ye gidip ne zaman bloke ettiyse, (zamanı bu sebeple alıyorum) kontrol edip, üzerinden 30 dakika geçmişse blokesini kaldırıyor. Yeni gelen kötü istekleri ise yine saat ve tarihinden bakarak, Cloudflare Apisi üzerinden bloke ediyor.

Soru: Neden Cloudflare üzerinden bloke ediyoruz?

Cevap: Sunucunuz üzerinde iptables veya firewalld kullanarak da bloke edebilirsiniz. Ancak Cloudflare’nin çalışma mantığını unutmamak gerekiyor. Eğer iptables veya firewalld üzerinden bloke edersek hiçbir işe yaramayacaktır. Çünkü Cloudflare hiçbir zaman ziyaretçiyi sitenize göndermez. Sunucunuza gelen Cloudflare’dir. Ziyaretçi Cloudflare’den alır isteği, Cloudflare’ye sorar, aracılığı yapan Cloudflare olduğu için kötü niyetli kişinin ipsini bloke etmeniz bir işe yaramayacaktır.

Soru: Ziyaretçinin gerçek ip adresini o zaman nasıl alıyoruz?

Cevap: Cloudflare’den ziyaretçinin gerçek ip adresini Apache’nin mod_cloudflare modülünü kullanarak header bilgilerinden alıyoruz. Kısacası Cloudflare sizin sunucunuza geliyor ve bu modülü kurarsanız, gelirken isteğin header bilgisinde ziyaretçi ip adresini de size verebiliyor.

Sonrasında honeyTEA işlerini bitiriyor. Tabi bu sırada…

Line.dat

..dosyası içerisine bir satır numarası ekliyor. Bir sonraki çalışmasında okuduğu access.log içerisinde kaçıncı satırada kaldığını bu dosya içine yazdırıyorum. Mesela önceki çalıştığında log dosyamız 3100 satırdı. Sonra yeni istekler geldi. Log dosyası 3.500 satır oldu. honeyTEA Line.dat doyasına bakıyor ve 3.100’üncü satırdan itibaren log dosyasını okuyor. Bu sayede her seferinde log dosyasını baştan aşağıya okumasına gerek kalmıyor ve işler yolunda gidiyor.

Aksi takdirde her çalıştığı zaman baştan aşağı okuyacak ve her seferinde daha büyük bir yükle çalışacak. Doğal olarak da işler sarpa sarabilir. Sunucu da log dosyalarını belirli zaman aralıklarında yeniler. Mesela 100kb olduğu zaman access.log.tar yapar. Sıfırdan yeni bir access.log dosyası açar. Böyle bir durumda line.dat dosyasında 3.100 yazarken, access.log dosyamızda bir satır log kaydı olur ve patlardı… Bunun için de birkaç kod yazıp, Line.dat dosyasındaki satır sayısı ile access.log içerisindeki satır sayısını karşılaştırıyorum. Line.dat daha büyükse yani 3.100’de kalmışken, access.log üzerinde 100 satır log varsa en başa dönüyor ve birinci satırdan itibaren okumaya başlıyor.

Kısacası aklıma gelen her türlü senaryoyu düşünerek bu projeyi hazırladım.

Sonuç olarak,

honeyTEA.sh: Ana sistem kodlarımız ve ayarlarımız yer alıyor.
config.txt: Kötü istekleri yazıyoruz ve loglarda bu istekleri honeyTEA arıyor.
line.dat: Script logları okurken kaçıncı satırda kaldığını yazıyor.
blacklist.dat: Kötü istekleri gönderen ip adresleri ve zaman tutuluyor.

…dosyalarını kodlamış oldum.

Kurulum!

  1. Bu dosyaları sunucunuzda bir klasöre kopyalayın. Ben /etc/local/TEAkolik/ klasörü içerisinde kullanıyorum.
  2. honeyTEA.sh dosyasına Chmod +x komutu ile çalıştırma izni veriyoruz.
  3. nano veya benzeri bir editörle honeyTEA.sh dosyamızı açıp, ayarlar bölümüne gerekli ayarları yazıyoruz.
  4. Crontab üzerinde bu scripti 5 dakika, 10 dakika gibi bir aralıkla çalıştırıyoruz.

Ayarlar!

[root@TEAkolik] nano honeyTEA.sh komutu ile scripti düzenlediğiniz zaman aşağıdaki gibi ayarlar bölümünü göreceksiniz.

### AYARLAR ###
## IP Bloke Süresi Dakika Cinsinden
BANNED_TIME=30
## Cloudflare Üyeliği E-posta Adresi
USER=”[email protected]
## Cloudflare Public Api Key
TOKEN=”CLOUDFLAREPUBLICAPIKEYGIRILECEK
## IP Ayar Dosyaları Lokasyonları
LINE_FILE=”/etc/local/teakolik/line.dat
BLACKLIST_FILE=”/etc/local/scripts/blacklist.dat
## Apache Access Log Dosyanızın Lokasyonu ve Adı
LOG_FILE=”/var/log/httpd/access.log
### AYARLAR BURADA BİTİYOR! ###

BANNED_TIME değeri dakika cinsinden bloke süresini belirtiyor. Ben 30 dakika yaptım ve yeterli olacağını düşünüyorum. Bu süreden sonra script otomatik olarak bloke ettiği ip adresinin blokesini Cloudflare’ye gidip açıyor.

USER değerine Cloudflare üyelik mail adresini yazmanız gerekiyor. Cloudflare Apisi bu şekilde çalışıyor. Üyelik mailinizi yazıyorsunuz.

TOKEN değerinde ise Cloudflare Apisinin size özel verdiği Keyi yazıyoruz. Cloudflare hesap ayarlarına (Cloudflare.com/a/account/my-account) girdiğiniz zaman hemen aşağıda GLOBAL API KEY satırının karşısında VIEW API KEY butonuna tıkladığınız zaman görebilirsiniz.

LINE_FILE değeri satır numaralarını tuttuğumuz dosyadır ve hangi klasöre kopyaladıysanız dosyaları bu klasörün yolunu yazıyorsunuz.

BLACKLIST_FILE değerinde ise bloke ettiğimiz ip adreslerini tuttuğumuz blacklist.dat dosyasının yolunu yazıyoruz. Aynı şekilde nereye kopyaladıysanız dosya yolunu yazıyoruz.

LOG_FILE değerinde ise sunucunuzun access.log dosyasını belirtiyorsunuz. Centos için /var/log/httpd/access.log şeklindedir. Ancak Nginx kullanıyorsanız bu dosya yolu farklı olacaktır. Ya da Centos yerine Ubuntu kullanıyorsanız yine bu yol farklı olacaktır. Ne kullanıyorsanız ona göre doğru klasörü göstererek yazın.

Önceki yazımda bahsettiğim gibi hırsıza yaptığımız muamelenin aynısını lamerlere, hackerlara, spammerlara ve benzeri bilimum mahlukata bu proje ile yapıyoruz… Hırsıza karşı en büyük silahınız caydırıcılıktır. Kötü niyetli saldırganlara karşı da bu silahı kullanabilirsiniz. Etkilidir ve güvende hissetmenizi sağlar. Ancak unutmayalım, %100 güvenlik diye bir şey yoktur!

Config.txt Dosyasını Unutmuyoruz!

Config.txt dosyasını açarsanız WordPress için bazı kötü niyetli istekleri yazdığımı göreceksiniz. Bu dosya içeriğini kullandığınız CMS sistemine göre değiştirebilirsiniz. Joomla, Drupal gibi sistemler için de rahatlıkla çalışabilecek bir projedir.

WordPress için eklediğim satırları silip, Joomla veya Drupal ya da özel bir Web sitesi için kendinize göre bu istekleri yazabilirsiniz. En kötü sunucunuzun Access.Log dosyasını açıp, gelen istekleri bir süre izleyerek, kendinize göre geliştirmenizi sağlamanız mümkün! Kısacası WordPress dışındaki ve Centos dışındaki sistemleri de unutmadım…

Nasıl çalışıyor?

Çok basit bir şekilde çalışıyor. Çalıştırırken Config.txt dosyasını unutmayın. Aksi takdirde hata verecektir. Ayarlarınızı yaptıktan sonra Crontab’a 5 dakikalık aralarla tekrar çalışmasını sağlamayı da unutmayın. Çalıştırmak için aşağıdaki komutu kullanabilirsiniz.

[root@TEAkolik] ./honeyTEA.sh config.txt 

Crontab üzerine aşağıdaki değeri girerek 5 dakikada bir otomatik olarak çalışmasını sağlayabilirsiniz.

5 * * * * /etc/local/teakolik/honeyTEA.sh  /etc/local/teakolik/config.txt

Kısacası

Server loglarım + honeypot tuzaklarım + Cloudflare’yi birleştirerek birkaç satır kod ile bu sistemi geliştirdim.

Yalnız şunun altını çizmeden konuyu bitirmek istemiyorum. Bir yazılımcı değilim, bir güvenlik uzmanı değilim… Güvenlik konusunda yılların getirdiği IT uzmanlığı ve bloggerlık ile birleştirerek bu sistemi yazdım. Elbette ki hataları vardır ve elbette ki eksik yanları bulunacaktır.

Geliştirmek isterseniz Github hesabımda bol bol yorum, bol bol fork yapabilirsiniz. Eleştirilere ve önerilerinize de her zaman açığım. Bu projeyi de açık kod olarak yayınlamak ve benim gibi saldırılardan illallah etmiş herkese bir nebze faydalı olmaktır amacım…

Umarım bol bol geliştirip, daha tatlı bir hale getirebilirim…

Github hesabımdan kodlara ulaşabilirsiniz: https://github.com/teakolik/honeyTEA

Sonrası?

Sonra bekleyin, lamerler gelsin sitenizi taramaya açık aramaya başlasın. 🙂 Beş dakika sonra “The owner of this website (www.teakolik.com) has banned your IP address” mesajını görecektir 🙂

Dosyalara Github hesabımdan ulaşabilirsiniz. Github üzerinde takip etmeyi ve forklamayı unutmayın!

Görsel: Deposit Photos

“honeyTEA ile Sazan Avlayalım mı?” üzerine 4 yorum

  1. Hamza hocam çok güzel bir proje yapmışsınız. Okurken her bir ayrıntısını çok iyi anladım ve çok güzel bir çalışma olmuş. Mutlaka kendi projelerimde kullanmayı düşünüyorum. Takıldığım bir yer olursa soracağım hocam. Ellerinize sağlık. Selamlar hocam.

    Yanıtla

Emrullah Ocak için bir yanıt yazın Yanıtı iptal et