날짜: 1996-06-05 | 글쓴이: 도아 | 5224 번 | 프린트 | 메일로보내기

제 5강 - CERT 권고


문제의 정의

공격자가 유효한 프로세스 UID 환경에서 CGI를 이용, WWW 서버에 임의의 명령을 수행할 수 있다. 이것은 대부분의 스크립트 저자가 사용자의 입력을 충분히 검사, "살균"하지 못했기 때문에 발생한다. 살균의 정의

CGI 스크립트가 사용자의 입력을 어디에서 받아들이지를 고려하자. 실제로 이러한 데이타는 사용자가 입력한 많은 수의 소스로부터 나온다. 그러나 이 예의경우 QUERY_STRING이라는 환경변수에서 온다고 하자. 데이타가 변수로 변환되는 과정은 중요하지 않다. 여기서 중요한 점은 QUERY_STRING내에 데이타를 검사, 조정한 후, 다음 처리를 할 필요가 있다. 이렇게 조정 하는 것을 데이타를 "살균"한다고 한다. 일반적인 방법(권고하지 않음)

데이타를 살균할 필요성을 인식한 스크립트 저자는 스크립트에서 잘 알려진 많은 수의 메타문자를 제거하고 이들을 밑줄로 교체하려할 것이다. 이렇게 하는 것이 일반적이지만 바람직한 방법은 아니다. 왜냐하면 이 방법은 특수문자들도 제거하기 때문이다.

예를들어 펄에서:

#!/usr/local/bin/perl
$user_data = $ENV{'QUERY_STRING'};	# 데이타를 가져온다.
print "$user_data\n";
$user_data =~ s/[\/ ;\[\]\<\>&\t]/_/g;	# 잘못된 문자들을 제거한다. 
					# 잘못된 방법임!!!
print "$user_data\n";
exit(0);

이 방법은 프로그래머가 사용자가 입력해서는 안되는 문자를 결정해서 이러한 문자를 제거해야 한다. 이러한 접근법의 문제는 프로그래머가 모든 가능한 입력을 예측할 필요가 있다는 것이다. 만약 사용자의 입력을 프로그래머가 예측하지 못했다면 이 스크립트는 프로그래머가 의도하지 않은 방법으로 사용될 가능성이있다. 권고하는 방법

더 나은 방법은 받아들일 문자의 목록을 정의하고 받아들일 수 없는 임의의 문자를 밑줄로 대치하는 것이다. 타당한 입력 값의 목록은 전형적으로 예측가능하며, 처리가능한 크기를 갖는다.

이 접근법의 잇점은 프로그래머가 리턴되는 문자열이 무엇인가 확실히 알 수있다는 것이다. 리턴되는 문자열은 프로그래머 자신이 제어할 수 있는 문자만 포함한다.

이 접근법은 앞서 논의한 접근법과는 대조된다. 앞서의 접근법(권고하지는 않는다)에서 프로그래머는 받아들일 수 없는 모든 문자를 예측해야하므로 오류에대한 어떠한 여유도 남겨서는 안된다. 권고하는 접근법에서는 프로그래머는 주의를 기울여 받아들일 수 있는 문자들만 확실히할 필요가 있다. 따라서 프로그래머는 공격자가 보안검사를 우회하기위해 시도하는 문자가 무엇이지 크게 관심을 가질 필요가 없다.

이러한 생각을 구현하기위해 위에서 제시한 펄 프로그램은 단지 허용되는 문자만 포함하도록 살균될 수 있다. 예:

#!/usr/local/bin/perl
$_ = $user_data = $ENV{'QUERY_STRING'};	# 데이타 얻기
print "$user_data\n";
$OK_CHARS='-a-zA-Z0-9_.@';	# 적당한 RFC와 일치하도록 변경된
				# 제한 목록
s/[^$OK_CHARS]/_/go;
$user_data = $_;
print "$user_data\n";
exit(0);
권고

전절에서 설명한 접근법으로 사용자의 입력을 살균했는지 확실히 하기위해, 웹 서버를 통해 사용 가능한 모든 스크립를 조사할 것을 강력하게 권고한다. 추가적인 팁

모든 사이트는 전체 httpd 설정을 검사해봐야 한다. 특히 필요하지 않은 모든 CGI 프로그램은 제거하고 남아있는 모든 CGI는 가능한 보안상 취약점을 조사해야 한다.

또한 모든 httpd의 자식 프로세스들은 특권이 없는 사용자로 실행되는지 확실히 하는 것이 중요하다. 이 것은 종종 설정가능한 옵션이다. 보다 자세한 것은 사용하고있는 httpd 배포본의 문서를 본다.

WWW 보안에관련된 많은 자원을 사용할 수 있다. 다음 페이지는 유용한 시작점을 제공한다. 이들은 일반적인 WWW 보안, 보안 httpd 설정과 보안 CGI 프로그래밍을 설명하는 링크를 포함한다.

World Wide Web 보안 FAQ: http://www-genome.wi.mit.edu/WWW/faqs/www-security-faq.html

다음 책은 보안 프로그래밍 기법등 유용한 정보를 포함하고 있다.

Practical Unix & Internet Security
Simson Garfinkel와 Gene Spafford
2nd edition
O'Reilly and Associates, 1996.

CERT/CC와 AUSCERT는 위의 URL이 확실히 존재한다고 약속할 수 없다. 이 사이트에서 어떠한 문제를 접하게되면 사이트 관리자에게 연락하기 바란다.

또하나 고려할 수 있는 또다른 자원은 CGI.pm 모듈이다.

이 모듈은 폼문서와 다른 웹을 기초로한 프로그램을 만드는 방법을 제공한다. 그러나 위에서 논의한 문제에서 프로그래머를 해방시키는 것은 아니다.



다음글: 펄용 CGI 라이브러리 CGI.pm (5964)1996-06-30
이전글: 제 4강 - 펄 언어로 안전한 스크립트 작성하기 (7812)1996-06-04

세상사는 이야기

  • 찾아라! 아이폰 순정용 >
  • 만원대 피젯 스피너를 >
  • 망하는 길을 택한 쿠팡 >
  • 물놀이에 적당한 가성 >
  • 컴퓨터를 IPTV로 2, po >
  • 컴퓨터를 IPTV로 만들 >
  • Warning.or.kr도 우회 >
  • 한국의 100대 부자, 어 >
  • 세상을 바꾼 크롬: 크 >
  • 장난(?)으로 시작한 여 >


  • RSS 구독 (익명 | 회원 | 강좌 | 포럼)
    (C) 1996 ~ 2017 QAOS.com All rights reserved.