Hi! You are a th visitor to my blog. Please remain the messages if you want to know me more. :)

Tuesday, December 23, 2008

pre-patched SQL Server vulnerability

취약점 소개 : http://blogs.zdnet.com/security/?p=2333

--------------------------------------------------------------------------------------------------
SQL 패치가 몇년간 하나도 없었던 것이 이상하다 싶긴 했지만,
지난 몇달간 뭉뚱그려 여러개의 취약점을 한꺼번에 fix하는 패치들을 내보내고
서버에 적용하면서 문제가 간간히 생기는 것을 바라보던 터라...
여전히 아직 패치되지 않은 취약점이 있다는 소식이 -_- 우울하다.
(다만, 이번 취약점은 패치를 하지 않아도 extended procedure를 이용하지 않는다면 삭제하는 방식을 이용하면 되니까, 
뭐 큰 문제는 없을 듯 하다)

물론 일반적으로는 웹 사이트가 SQL injection이 되는 경우, 
혹은 외부에서 바로 SQL 서버로의 접근이 열려있는 경우가 공격의 target이 될 텐데.. 
일반적인 경우 DB 서버는 내부에 위치하고 바로 접근이 안되는 경우가 많기 때문에
이 취약점 exploit이 나왔다고 해도 worm성 공격이 쉽게 이뤄지지는 않을거라고 생각하거니와,
위에서도 이야기 했듯이 'sp_replwritetovarbin'을 삭제하면 취약점이 없어지는 건이라
MS에서도 패치를 쉽게 내보내지 않는 것 같다.

그래도 MS에서도 드디어 이 취약점을 이용하여 원격에서 코드 실행이 가능한 취약점이라는 것을 인식했으니, 
게다가 exploit까지 나왔으니.. 조만간 patch가 나오거나 공식적인 권고가 있지 않을까...

문제의 Extended procedure인 'replwritetovarbin'을 제거하려면, 아래의 명령어를 실행하면 된다.
execute dbo.sp_dropextendedproc 'sp_replwritetovarbin'


Extended procedure 제거하는 방법에 대한 더 자세한 안내는 아래 MS 사이트 참고.

MS Win XP 판매 기간 연장

PC 제조 회사인 Dell이나 IBM 등에게 XP 탑재한 PC를 판매하는 것을
2009년 중반 정도까지 허용하는 것으로 결정 되었다고 한다.

Vista를 선보이고 판매 실적이 안나오자, 2009년 1월 말로 XP 판매를 중단하겠다고 하던 MS에서도,
지금과 같은 불황에서는 값싸고 안정적인 XP의 수요가 끊임없이 일자..
판매를 연장하기로 결정한 듯 하다. (환영할만한 일!)

나도 현재 WinXP 영문판을 쓰고 있는데, (Vista Enterprise K와)
Vista는 H/W사양을 너무 타서 사용하기가 좀 부담스러운게 사실이었다.

여하튼 보안 관련 뉴스는 아니지만, XP 판매 기간을 연장한다는 것은 대환영!

Tuesday, December 16, 2008

IE7 zero-day attack

얼마전 대만의 한 웹 사이트가 해킹을 당해서 이 IE zero-day exploit이 삽입된 웹 사이트를 서비스 하고 있는 것을
websense security lab에서 발견하고 경고를 한 바 있다.

[발견된 look.tw 웹 페이지에 삽입되어 있는 zero-day exploit code]

결국 zero-day 취약점의 경우 완전한 해결 방법이 없는 상태이기 때문에,
무지한 사용자가 그저 어떤 웹 사이트를 방문한 결과 만으로도 본인의 PC를 해킹당할 수 있다는
잠재적은 위험에 처해지게 된 것이다..

MS에서 보안 패치를 조만간 며칠 안에 내보낼 거라고는 하지만, (적어도 한국은 19일 전까지는 나올 예정)
아직도 해결되지 않은 Internet Explorer 의 zero-day 취약점의 임시 방편 해결방안에 대해 안내한다.

(1) 가장 간단한 방법
 - 패치가 나올 때 까지 IE를 사용하지 않는 것. 
   웹 서핑은 google chrome이나 opera, mozilla, Firefox같은 다른 웹 브라우저를 사용한다.

(2) IE를 사용하면서 취약한 부분을 제거 (단, 다른 어플리케이션 실행 시 문제가 있을 수도 있다.)
  
A. System Access Control List를 이용해 OLEDB32.DLL을 disable



이 작업을 완료한 이후 icacls를 이용하여 아래와 같이 적용시킬 수 있다.


만약 원복시키고 싶다면 아래와 같이 작업한 이후, icacls를 이용하여 다시 적용시킨 것을 원복시킬 수 있다.


B. OLEDB32.dll 파일의 "Row position"기능을 disable

레지스트리에서 다음의 키를 찾아서 삭제한다.
HKEY_CLASSES_ROOT\CLSID\{2048EEE6-7FA2-11D0-9E6A-00A0C9138C29}

만약 다시 OLEDB32.DLL 파일의 "Row Position" 기능을 되살리고 싶다고 하면, 아래의 레지스트리를 추가해 주면 된다.
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\CLSID\{2048EEE6-7FA2-11D0-9E6A-00A0C9138C29}]
@="Microsoft OLE DB Row Position Library"
[HKEY_CLASSES_ROOT\CLSID\{2048EEE6-7FA2-11D0-9E6A-00A0C9138C29}\InprocServer32]
@="C:\\Program Files\\Common Files\\System\\Ole DB\\oledb32.dll"
"ThreadingModel"="Both"
[HKEY_CLASSES_ROOT\CLSID\{2048EEE6-7FA2-11D0-9E6A-00A0C9138C29}\ProgID]
@="RowPosition.RowPosition.1"
[HKEY_CLASSES_ROOT\CLSID\{2048EEE6-7FA2-11D0-9E6A-00A0C9138C29}\VersionIndependentProgID]
@="RowPosition.RowPosition"

C. OLEDB32.DLL 파일을 unregister 하는 방법 (Administrator로 실행해야 함)

32bit system에서,
Regsvr32.exe/u "Program Files\Common Files\System\Ole DB\oledb32.dll"

64bit system에서는,
Regsvr32.exe/u "Program Files\Common Files\System\Ole DB\oledb32.dll"
Regsvr32.exe/u "Program Files (x86)\Common Files\System\Ole DB\oledb32.dll"

이 명령어를 실행시키면 된다.

원복을 위해서는,
32bit system에서는
Regsvr32.exe "Program Files\Common Files\System\Ole DB\oledb32.dll"

64bit system에서는
Regsvr32.exe "Program Files\Common Files\System\Ole DB\oledb32.dll"
Regsvr32.exe "Program Files (x86)\Common Files\System\Ole DB\oledb32.dll"

이 명령어를 실행시켜 재 등록 해 주면 된다.


레퍼런스 :
http://www.microsoft.com/technet/security/advisory/961051.mspx
http://support.microsoft.com/kb/961051


Tuesday, December 9, 2008

directory listing 없애는 방법 (apache 웹 서버)

Apache를 설치한 경로에서 httpd.conf를 연다.

예) /etc/httpd/conf/httpd.conf (RPM 설치시)
/usr/local/apache/conf/httpd.conf (tar 설치시)

vi등의 editing 프로그램을 이용하여 httpd.conf를 열어 다음의 구문을 찾는다.

Options All Indexes FollowSymLinks MultiViews

여기에서 "Indexes"구문을 없애고 아래와 같이 수정해 준다.

Options All FollowSymLinks MultiViews

그 이후 apache 서비스를 재시작한다.

Wednesday, December 3, 2008

.net의 입력값 check

웹을 개발할 때, 사용자 입력값에 대한 필터링을 하여,
기본적으로 XSS나 SQL injection에 대비하도록 권고를 하고 있는데,
IIS .NET을 사용하는 경우, 이에 대한 입력값 체크의 기본적인 기능이 있어 이를 소개하려고 한다.
(적용 되는 버전은 ASP .NET 1.1과 ASP .NET 2.0이다)

CF. http://www.asp.net/learn/whitepapers/request-validation/
-------------------------------------------------------------------------------------------------

일반적으로 공격자가 XSS취약점등을 이용하여 공격을 시도하고자 할 때,
입력값에 와 같은 스크립팅 구문을 넣는데,
만약 '<'와 같은 특수문자가 필터링 되지 않고 실행되는 경우에는 XSS 공격이 성공되게 된다. 

이와 같은 공격을 막기 위해서 .NET에서는 기본적으로 요청에 대한 validation checking을 한다. 

1. Default .net setting

아래와 같은 ASP .NET 코드를 가진 경우,



textbox에 helloworld!라는 구문을 넣으면 아래와 같이 정상 실행이 되지만,



textbox에 라는 구문을 넣으면 아래와 같이 에러 페이지로 던져진다.




2. Disabling request validation on some page

하지만, 특수한 웹 페이지의 경우에는 사용자의 입력값에 특수 문자를 허용해야 하는 경우가 있게 마련이다.

따라서 그런 경우에는 각 웹 페이지에  같은 구문을 추가해 주어, 
그 웹 페이지의 경우는 Request validation을 끈다는 attribute를 넣어 주어야 한다.

※ 만일 모든 웹에서 Request validation을 끄기 위해서는 web.config 파일에 아래와 같이 넣어 주어야 한다.



아래와 같이 request validiation을 끈 ASP .NET 페이지의 경우


를 입력값으로 넣어 실행 시켰을 때, 아래와 같이 정상적으로 실행이 된다.


하지만, 이와 같이 정상적으로 실행이 되는 경우에는 XSS 스크립트 실행이 되어 공격자의 공격이 성공할 수 도 있기 때문에,
일반적으로 사용자 입력값에 대한 추가적인 체크 routine이 필요하게 된다.
이를 위해 .NET에서는 htmlEncode()라는 함수를 제공하는데, 아래와 같이 사용하면 된다.

아래와 같이 request validation은 끄고, 사용자의 입력값을 받는 경우 htmlEncode() 함수 처리를 한 웹 페이지의 경우에는,


사용자가 와 같은 입력값을 넣었을 때에도,
스크립트 실행은 되지 않고 페이지는 정상적으로 실행됨을 확인할 수 있다.