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

제 1강 - CGI의 보안


웹 서버를 시스템에 설치해서 동작시킨다는 것은 자신의 컴퓨터를 인터넷 상에 아무나 볼 수 있도록 놓아둔 것과 마찬가지라고 할 수 있다. 그런데 대부분의 사람들은 구경만하고 가지만 때로는 보는 것만으로는 만족하지 않고 기어들어 오려는 사람들이 있기 마련이다. 이런 경우를 대비해야만 한다.

소프트웨어 버그가 있으면 보안 헛점이 생길 수 있다. 소프트웨어는 복잡하고 방대한 시스템일 수록 버그가 생길 가능성이 많아지고 따라서 보안 헛점이 생길 가능성도 많아진다. 웹 서버도 복잡한 소프트웨어 시스템 중에 하나로 버그가 있을 가능성이 많아진다.

웹 서버는 CGI란 메카니즘을 통해서 임의의 외부 프로그램을 서버쪽에서 실행한다. CGI 프로그램 자체도 소프트웨어이므로 버그로 인한 보안 헛점의 가능성을 배제할 수 없다. 웹 상에서의 보안은 여러 측면에서 고려할 수 있지만 여기에서는 CGI의 보안에 관해서만 논의하겠다. CGI가 왜 위험한가?

보안측면에서 CGI가 문제가 될 수 있는 것은 웹 서버가 아무리 안전하게 작성되었다고 하더라도 CGI 자체의 버그로 인해서 외부에 서버가 노출될 가능성이 있기 때문이다.

CGI 자체도 하나의 작은 서버라고 볼 수 있기 때문에 웹 서버와 마찬가지로 조심스럽게 작성되어야만 한다. 그렇지만 많은 웹 서버 관리자들이 CGI를 통해서 처음으로 네트워크 프로그래밍을 해 보는 경우가 많다. CGI 프로그램이 보안 헛점을 가질 수 있는 건 다음과 같은 경우이다.

. 의도적이건 아니건 해커가 칩입하는데 도움을 주는 정보를 제공할 수도 있다. . 의도하지 않은 입력을 줌으로서 해커가 원하는 명령을 수행할 수도 있다.

웹 서버가 "nobody"로 수행되고 있는 경우라도 CGI 프로그램은 보안 헛점을 갖는다. "nobody"의 권한으로도 passwd 파일을 읽거나 시스템의 네트워크 정보를 읽거나 할 수 있기 때문이다. 따라서 안전한 CGI 프로그램을 위해서 몇가지 고려해야 할 사항을 알아보자. CGI 프로그램의 디렉토리

CGI 프로그램을 여기저기 둔다고 해서 특별히 보안이 더 나빠지는 것은 아니다. 그러나 CGI 프로그램의 보안 헛점을 관리하기 위해서는 아무래도 한 디렉토리에 두고 관리하는 것이 여기저기 흩뜨러뜨린 것보다 관리하기 쉽기 때문이다.

특히 사용자별로 홈페이지를 가지고 있을 경우에는 누구라도 보안 헛점을 가지고 있는 프로그램을 만들거나 사용할 수 있기 때문에 이렇게 하는 것이 더욱 좋다.

따라서 '/cgi-bin/'이라는 디렉토리에만 두고 CGI 프로그램의 설치는 웹 서버 관리자만 할 수 있도록 한다면 사용자가 작성한 잘못된 프로그램으로 인한 보안 헛점은 피할 수 있을 것이다. 사용언어

일반적으로 말하면 펄이나 쉡 스크립트같은 인터프리터 언어보다는 C와 같은 컴파일 언어가 더 안전하다고 할 수 있다.

첫번째 이유로는 프로그램의 소스를 C 프로그램인 경우는 얻을 수 없기 때문이다. 해커가 프로그램이 어떻게 동작하는지 잘 알면 버그를 찾아내기도 쉬워지기 때문에 소스가 공개되는 것은 바람직하지 않다. C 프로그램은 컴파일 한 후 바이너리를 '/cgi-bin/'에 저장해 두기 때문에 해커가 소스를 얻어낼 수는 없을 것이다.

그렇지만 인터프리터 언어는 잘못하면 소스가 공개될 수 있는 여지가 크다. 서버의 설정을 잘 하면 이렇게 되지는 않겠지만, 예를 들어 .cgi 프로그램을 수정하고 백업 파일을 .bak라는 이름으로 저장해 두었다면 .cgi 프로그램의 소스가 공개될 수도 있을 것이다. 스크립트 프로그램을 URL로 요청을 하면 소스를 얻을 수 없지만 백업 파일에 대한 URL을 요청하는 경우에는 소스를 얻어낼 수도 있다.

http://your-site/the/path/to/your_script.bak

(이것때문에도 CGI 프로그램을 '/cgi-bin/'이라는 디렉토리에 두는 게 좋다) 크기와 복잡성 측면에서도 컴파일된 코드가 인터프리트 코드보다 안전할 수 있다. 쉘이나 펄 프로그램은 자체가 상당히 큰 소프트웨어이기 때문에 C로 작성된 간단한 CGI 프로그램보다는 버그가 생길 가능성이 커지기 때문이다. 펄 인터프리터의 버그로 인한 보안 헛점을 이용해서 해커가 공격해 올 수도 있다.

두번째로 펄이나 쉡과 같은 인터프리터 언어에서는 시스템 명령을 수행하고 그 결과를 캡쳐하는게 컴파일 언어에 비해서 상당히 편하게 되어 있다. 시스템 명령을 수행하는 것이 보안 헛점을 유발할 가능성이 크다. C 언어에서는 시스템 명령을 수행하기 위해서는 상당히 복잡한 과정을 거쳐야 하므로 프로그래머가 시스템 명령을 수행할 가능성은 그 만큼 작아진다.

그렇지만 컴파일된 코드라고 해서 반드시 안전한 것은 아니다. 얼마전에 NCSA 1.4.x에 딸려 있던 util.c라는 파일에 있던 루틴에서 보안 헛점이 발견된 적도 있었다. 또, 펄같은 경우 내부적으로 보안을 체크하는 루틴이 있어서 그 기능을 이용하면 상당히 안전한 스크립트를 짤 수도 있다. 공개용 CGI 프로그램을 설치시 유의 사항

인터넷 상에 공개되어 있는 CGI 프로그램도 마찬가지로 보안 헛점을 가질 수 있으므로 주의깊게 조사하고 그 프로그램의 기능과 작동방식을 잘 이해한 후 설치해야 한다. 다음은 을 검사힐 때 체크해봐야 할 것들이다.

복잡도
복잡하면 할수록 보안 헛점의 가능성은 커진다.

파일쓰기여부
파일을 읽어들이는 프로그램은 시스템 정보를 읽어들여서 해커에게 보낼 수도 있다. 파일을 기록하는 프로그램은 문서를 변경시키거나 손상시킬 수도 있다. 더 심한 경우는 트로이 목마를 집어 넣을 수도 있다.

다른 프로그램과의 연계여부
예를 들어 많은 CGI 프로그램이 전자우편을 보낼 때 sendmail을 사용한다. 이런 상호작용이 안전한 방법으로 이루어지는지 검사해야 한다.

SUID의 권한여부
일반적으로 suid 프로그램은 매우 위험하다. 특별한 경우가 아니라면 이렇게 할 이유가 없다.

입력검사 여부
프로그램의 저작자가 입력을 충분히 검사하는 가를 본다. 입력을 검사한다는 것은 저작자가 보안 헛점을 이미 고려하고 있다는 뜻이 될 것이다.

경로지정
PATH 환경변수에 의존해서 외부 프로그램을 호출하는 것은 아주 위험하다.
CGI 프로그램의 보안 헛점

인터넷 상에 널리 배포된 프로그램 중에서 보안 헛점을 가지고 있는 것이 많이 발견됐다. 다음 프로그램들이 있다면 이전 버전은 제거하고 최신버전으로 업그레이드해야 한다.

Anyform
http://www.uky.edu/~johnr/AnyForm2

FormMail
http://alpha.pr1.k1w.co.us/~mattw/scripts.html

"phf" phone book script, distributed with NCSA httpd and Apache
http://hoohoo.ncsa.uiuc.edu/

"phf"의 버그는 NCSA 웹 서버에 있는 util.c에 있는 버그로 인한 것으로 util.c에 대한 패치는 다음 URL에서 구할 수 있다. "http://isdn.modacom.co.kr/~yskim/www-security-faq/wwwsf8.html#util.c"

util.c를 사용해서 CGI 프로그램을 작성했다면 util.c를 버그 패치한 다음 다시 프로그램을 컴파일 해야 한다.



다음글: 제 2강 - CGI 프로그래밍시 주의점 (7156)1996-06-02
이전글: Part IV - CGI Security (4810)1996-05-31

세상사는 이야기

  • 컴퓨터를 IPTV로 만들 >
  • Warning.or.kr도 우회 >
  • 한국의 100대 부자, 어 >
  • 세상을 바꾼 크롬: 크 >
  • 장난(?)으로 시작한 여 >
  • 탈옥의 필수, QuickDo >
  • 윈도 10, 한영 전환도 >
  • 바보도 할 수 있는 War >
  • 북마크에도 확장 아이 >
  • 크롬은 가라, 비발디가 >


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