컴퓨터2010.01.27 13:00
WebDAV  인증 우회에 대한 취약점

마이크로소프트 보안 권고문 971492(http://www.microsoft.com/technet/security/advisory/971492.mspx)이 5월 18일자로 공지되었습니다.
Microsoft Internet Information Services (이하 IIS) 의 WebDAV 를 사용하는 경우에 발생할수 있습니다.

WebDAV 에서 유니코드(동아시아 언어권에서 주로사용)로 코드를 처리하는 과정에서 발생하는 취약점으로
HTTP GET 요청에 "Translate: f" 를 HTTP 해더에 추가하여서 WebDAV폴더로 파일을 업로드 하는 방법 입니다.

다음에 해당하시는 분들에게 영향을 줄수 있는 내용입니다.
- IIS 5.x, IIS 6  의 버전을 사용
- WebDAV 를 사용 (IIS 6.0 에서는 기본적으로 WebDAV 가 비활성화되어 있습니다. )

대응 방법

1. 파일 ACL 을 이용해서 웹서비스에 사용되는 IUSR_<computername> 계정에 대한 쓰기 거부
기술문서 : IIS 5.0 웹 서버에 필요한 NTFS 권한 및 사용자 권한을 설정하는 방법
http://support.microsoft.com/kb/271071

2. WebDAV 설정의 비활성화
기술문서 : IIS 5.0용 WebDAV를 해제하는 방법
http://support.microsoft.com/kb/241520

3. URLScan 을 이용한 요청제한
기술문서 : UrlScan Security Tool (기본설정으로는 서비스에 문제가 있을수 있으니 반드시 테스트후 적용해야합니다.)
http://technet.microsoft.com/en-us/security/cc242650.aspx

4.  Webknight 를 이용한 방법 ( 2.2 버젼 기준 )
- Web Applications - Allow WebDAV 비활성


참고1. 윈도우 버전별 IIS 의 버전
Windows 2000 - IIS 5.0
Windows XP   - IIS 5.1
Windows 2003 - IIS 6.0
Windows 2008 - IIS 7.0

참고2. 참조문서
- IIS 인증우회에 대한 추가정보
http://blogs.technet.com/srd/archive/2009/05/18/more-information-about-the-iis-authentication-bypass.aspx

- WebDAV 인증우회에 대한 추가정보
http://blogs.technet.com/srd/archive/2009/05/20/answers-to-the-iis-webdav-authentication-bypass-questions.aspx
Posted by Zasfe
TAG IIS, webdav

댓글을 달아 주세요

컴퓨터2009.12.15 09:00

마이크로소프트 윈도우 라고 하면 네모모양의 GUI 메뉴를 기본적으로 생각을 하고 계신 분들이 많습니다. 그것들은 윈도우를 편리하게 사용하기 위해서 만들어 놓은 장치들입니다. 편리하게 만들어 놓은 장치도 있지만, 대다수가 편리하게 생각하는 방법도 어떻게 쓰려는지에 따라 불편하게 느껴지게 마련입니다. ( 저는 이래서 컴퓨터를 알아가면 갈수록 어렵다는 생각이 들게 됩니다.)

사용자가 원하는 작업을 위해서는 굳이 GUI 메뉴를 이용할 필요는 없습니다. 바로 커맨드라인때문입니다.

커맨드라인은 윈도우에는 기본적으로 설치가 되어 있는 명령행프로그램입니다. 명령행이라는 단어에서 느껴지듯이 하나의 행을 기준으로 명령어가 실행되는 프로그램입니다. 이를 조금더 확장시켜 하나의 행을 실행하면서 결과를 반환하는 것들이 모여서 결과를 표시하거나 조합 변경시키는 것이 가능하도록 할수 있는 것이 배치파일[각주:1]입니다.

배치파일에는 명령행으로 작업할수 있는 부분의 한계는 분명히 있습니다. 하지만 그것들을 감안하더라도 충분히 알아둘만합니다.

일예로 여러 PC 의 특정폴더를 USB 메모리로 복사하는 예를 들어보겠습니다.

USB 메모리는 아시다시피 기본 하드디스크 문자의 가장 나중 문자로 드라이브문자를 할당받습니다. 결국 사용하는 PC의 드라이브갯수에 따라서 특정폴더명이 아무리 동일하도라도 드라이브문자가 달라지기때문에 그때마다 탐색기로 복사를 따로 하거나, 배치파일의 내용을 수정해서 사용을 해야 합니다.

딱보기에도 번거로워 보이고, 잊어먹기 딱 좋아보입니다.

그렇다면 어떻게 하는게 좋은 방법일까요..

정답은 배치파일에서 드라이브명을 찾아내서 변수[각주:2]로 처리를 하는 것입니다.

예제를 보여드리도록 하겠습니다. 예제는 snoopy님의 어제글인 VHD 파일 자동교체 부팅메뉴 등록하기 를 참조했습니다.

예제1
@echo off
for %%A in (C: D: E:) do (
    if exist %%A\vhd\win7x86.vhd (
        for %%B in (C: D: E:) do (
            if exist %%B\backup\win7x86.vhd copy /y %%B\backup\win7x86.vhd %%A\vhd\win7x86.vhd
        )
    )
)
exit


어떤 드라이브의 backup폴더내에 있는 win7x86.vhd 를 어떤 드라이브의 vhd 라는 폴더의 win7x86.vhd 로 복사하는 배치파일입니다. 여기서 사용된 %%A, %%B 는 변수로서 실행시마다 변경이 될수 있는 값입니다. 이를 이용해서 backup 폴더와 vhd 폴더 위치만 맞는다면 어디서나 사용이 가능합니다.

조금더 바꾸어 볼까요?

만약 같은 드라이브에 backup 폴더와 vhd 폴더가 있는 구조라면 어떻게 바꿀수 있을까요?

예제2
@echo off
setLocal

for %%A in (C: D: E:) do (
	if exist %%A\vhd\win7x86.vhd (
		if exist %%A\backup\win7x86.vhd (
			SET _DIR_BACKUP=%%A
			SET _DIR_REAL=%%A
		)
	)
	
)
IF NOT [%_DIR_REAL%]==[] (
	copy /y %_DIR_BACKUP%\backup\win7x86.vhd %_DIR_REAL%\vhd\win7x86.vhd
)
EndLocal
exit


내부적인 변수를 선언해서 사용하는 예제로 변경을 한것입니다. 사용된 부분중 if exist 파일명 부분은 만약 파일이 있을경우 실행이 되도록 하는 것이고, IF NOT [%_DIR_REAL%]=[] 은 %_DIR_REAL% 라는 변수의 값이 없지 않을경우, 그러니까 있을경우에만 실행이 되도록 하는 것입니다.


제 경우에는 USB 메모리카드와 회사 PC, 집PC 의 데이터를 동기화시키는데 이용을 합니다.

참 많을 일을 할수 있을것 같지 않습니까?

  1. 배치스크립트 라고도 합니다. [본문으로]
  2. 프로그래밍에서 변수란 프로그램에 전달되는 정보나 그 밖의 상황에 따라 바뀔 수 있는 값을 의미한다  - 텀즈 변수 [본문으로]
Posted by Zasfe

댓글을 달아 주세요

컴퓨터2009.12.08 12:00

예전에는 별로 신경을 쓰지 않던 부분이였는데, 그냥 지나치려다가 기억력을 돕는 차원에서 정리합니다.

대부분 session.timeout 은 사용자의 로그인등에 사용을 합니다. 사이트 방문자의 경우 로그인같이 특별한 경우가 아니면 성능상 불필요합니다. 또한, 되도록이면 session 변수의 사용을 자제하는것이 사이트의 성능을 높이는 방법이 되고 있습니다.

그렇다 하더라도 Session.Timeout 의 최대값에 대해서는 알아둘 필요가 있습니다.

ASP 에서는 24시간(1440분)이 최대 Session.timeout 값 입니다.

그 이상의 값을 설정했을경우 오류가 발생을 하게 됩니다.

 

 

이 설정은 의도된 설정이라고 합니다.

 

이 설정을 우회하기 위해서는 쿠키를 이용하여야 합니다.

 

- 참조

PRB: Session.Timeout의 최대값은 24시간이다
성능 및 스타일 향상에 도움이 되는 28가지 ASP 팁

Posted by Zasfe

댓글을 달아 주세요

컴퓨터2009.08.11 18:00



좋은 저장프로시저를 위한 21가지 팁

  1. 키워드
    SQL 명령어는 대문자로 알아보기 쉽게 표시한다.

  2. SQL-92
    항상 ANSI 92 를 사용하도록 노력해야 합니다.

  3. 변수
    가능한 최소한으로 사용하여 캐쉬 공간에 여유를 주어야합니다.

  4. 동적 쿼리
    최소한으로 사용하여야한다. 동적쿼리에 따라 재컴파일이 된다.

  5. 친숙한 전체 이름 사용
    database_name.schema_name.table_name 으로 사용을 해야 하며, CREATE PROCEDURE dbo.Your_Proc_name 처럼 사용해여 합니다.

  6. SET NOCOUNT OFF
    실행 결과 행은 네트워크 트래픽을 사용하게 되므로 주의해여 한다.

  7. sp_ 접두어를 사용하지 않는다
    시스템데이터베이스(MASTER) 와 사용자 데이터베이스에 같은 이름의 저장프로시져가 있게 되면 사용자 데이터베이스는 결코 실행되지 않는다.

  8. sp_executeSQL 과 KEEPFIXED PLAN 옵션
    sp_executeSQL 과 KEEPFIXED PLAN 옵션은 저장프로시저를 재컴파일합니다. 만약 동적 SQL 을 사용하려면 EXEC(proc_name) 대신에 sp_eecutesql 을 사용해야 합니다.

  9. SELECT 와 SET
    SELECT는 서로 다른 여러 변수를 사용할수 있습니다. SET 은 하나의 변수만을 사용합니다.

    SELECT @var1 = @var1 + 1, @var2 = @var2 - 1

    SET @var1 = @var1 + 1
    SET @var2 = @var2 - 1

  10. WHERE 연산자
    =, >, <, >=, <=, <>, !=, !>, ! 의 사용을 줄여야 합니다.
    SQL Server 2008 Books Online (July 2009) Operator Precedence (Transact-SQL)

  11. WHERE 연산자 추가
    쉽게 LOWER 등의 연산자를 이용해서 대소문자를 구별하곤 하는데, OR 명령을 이용하는 편이 보다 빠른 처리를 할수 있습니다.


    SELECT emp_name FROM table_name WHERE LOWER(emp_name) = 'edu'


    SELECT emp_name FROM table_name WHERE emp_name = 'EDU' OR emp_name = 'edu'


    또한 EXISTS  대신에 IN 연산자를 사용하면 보다 빠른 처리가 가능합니다


    SELECT * FROM employee WHERE emp_no NOT IN (SELECT emp_no from emp_detail)
    SELECT * FROM employee WHERE NOT EXISTS (SELECT emp_no FROM emp_detail)

  12. CAST 와 CONVERT
    CONVERT 보다 CAST 를 쓰도록 합니다. CAST 는 ANSI-92 지만 CONVERT 는 MSSQL 에서만 사용이 가능합니다. 다만 DATETIME 데이타타입의 변형에는 CONVERT 를 사용해야 합니다. CAST 는 안되거든요.

  13. DISTINCT 와 ORDER BY
    추가적인 데이터베이스작업이 요구되기 때문에 굳이 필요하지 않다면 사용하지 않는 것이 좋습니다. 성능상 좋지 않습니다.

  14. 커서 사용
    되도록 가상테이블이나 테이블을 이용하여야 합니다.

  15. SELECT 구문
    컬럼을 지정해야 합니다. 그렇지 않으면 모든 컬럼을 가져오게 되어서 레코드셋이 불필요하게 가득차게 됩니다.

  16. 서브쿼리 와 조인
    서비쿼리와 조인은 거의 비슷합니다. 추가설명 필요;;

  17. CREATE TABLE 와 SELECT INTO
    SELECT * INTO 는 작은 테이블을 만들기에는 좋지만 큰 레코드가 있거나, 오래걸리는 쿼리 테이블에는 많은 시간이 걸립니다.

  18. 임시테이블 대신에 사용자 테이블변수를 사용하라
    임시 테이블은 저장프로시저를 재컴파일하는 원인이 됩니다. 하지만 테이블 변수는 실행하는 동안 저장프로시저를 다시 설계합니다.
    추가 설명 필요;;

  19. 인덱스의 사용
    인덱스를 사용하면 보다 빠른 결과를 얻을수 있고, 작은 테이블보다는 큰 테이블에 효과적이다.

  20. 프로파일러를 사용하라

원문 : Twenty tips to write a good stored procedure


Posted by Zasfe

댓글을 달아 주세요

  1. 프로시저를 보니 옛날 생각이 나는군요. 웹 기반 프로그래밍은 HTML, 자바스크립트, PHP, SQL에 프로시저까지 써야 하기 때문에 디버깅으로 날밤을 새던.

    2009.08.13 10:05 [ ADDR : EDIT/ DEL : REPLY ]
    • Zasfe

      SQL 은 언제 공부해도 새롭(?)더라구요. 이글역시 단기기억력을 보유한 제 두뇌를 위한 저장소로 사용되었습니다. ㅋ

      2009.08.13 12:54 [ ADDR : EDIT/ DEL ]

컴퓨터2009.08.06 18:00
 

1. [CLCL] 은...

클립보드를 확장시켜주는 유틸로서 이미지파일마저 저장할수 있습니다.




한글패치파일은 직접 다운받아서 파일을 교체하시기 바랍니다
한글패치 배포 페이지 : QAOS.com - 가볍고 강력한 멀티 클립모드 유틸, CLCL 


2. 스크린샷



설명이 잘되어 있어서 링크 겁니다.
- 멀티 클립보드 CLCL (http://suban.tistory.com/566)
Posted by Zasfe

댓글을 달아 주세요