가능한 공격

몇가지 이유로 인해 PHP를 서버 소프트웨어(아파치 등)의 모듈로 사용하지 않거나, 다른 종류의 CGI wrappers로 스크립트에 대해 안전한 chroot와 setuid 환경을 제공하기 위해 CGI 바이너리로 PHP를 사용하는 것을 선택할 수 있습니다. 이 설치는 보통 실행 가능한 PHP 바이너리를 웹서버 cgi-bin 디렉토리에 두는 것입니다. CERT 권고 » CA-96.11는 어떠한 인터프리터도 cgi-bin에 두지 않을 것을 권장합니다. PHP 바이너리는 독립 인터프리터로 사용할 수 있지만, 이러한 방법의 설치가 가능하도록 하는 몇가지 공격을 방지하도록 설계되어 있습니다.

  • 시스템 파일에의 접근: http://my.host/cgi-bin/php?/etc/passwd URL 후의 물음표(?)에 존재하는 질의 정보는 CGI 인터페이스에 의해 인터프리터에 명령줄 인수로 전해집니다. 보통 인터프리터는 명령줄의 첫 인수에 지정한 파일을 열고 실행합니다. CGI 바이너리로 호출할 때, PHP는 명령줄 인수를 해석하는 것을 거절합니다.
  • 서버의 어떠한 웹 문서로의 접근: http://my.host/cgi-bin/php/secret/doc.html PHP 바이너리 이름 뒤의 URL의 경로 정보 부분, /secret/doc.html는 일반적으로 CGI 프로그램에 의해 그 이름의 파일을 열고 해석하도록 사용합니다. 보통 몇몇 웹 서버 환경 설정 지시어(아파치: Action)는 PHP 인터프리터에 http://my.host/secret/script.php 등의 요청으로 리다이렉트하도록 합니다. 이러한 설치로는, 웹 서버는 우선 디렉토리 /secret에 대해 접근 권한을 확인하고, 리다이렉트된 요청 http://my.host/cgi-bin/php/secret/script.php을 생성합니다. 불행하게도, 이러한 형식으로 요청이 주어지면, /secret/script.php에 대한 접근 확인은 이루어지지 않고, 단순히 /cgi-bin/php 파일만을 확인합니다. 이 방법으로 /cgi-bin/php에 접근할 수 있는 어떠한 유저라도 웹 서버로 보호된 어떠한 문서라도 접근할 수 있습니다. PHP에서는, 서버 문서 트리에 접근 제한을 가진 어떠한 디렉토리가 존재한다면, 컴파일시의 환경설정 옵션 --enable-force-cgi-redirect, 실행시 환경설정 지시어 doc_rootuser_dir를 사용하여 이 공격을 방지할 수 있습니다. 여러가지 조합에 관한 자세한 설명은 아래쪽을 참고하십시오.
add a note add a note

User Contributed Notes

There are no user contributed notes for this page.
To Top