Posted on December 8th, 2013

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 =  0x06 ise bu sistem Windows Vista/7 veya 2008 ‘ dir.

dwMajorVersion = 0x05 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 , 0x05 olacaktı.