세미콜론을 이용한 IIS 파일 파싱 우회 취약점
I. 취약점 개요
1. 목 적
2009년 12월 말에 발표된 IIS 파일 파싱 부분에서 발생한 취약점을 소개하기 위해 이 문서를 제작하였습니다. IIS 서버 관리자 및 관련 개발자분들께서는 참조하시기 바랍니다.
2009년 12월 말에 발표된 IIS 파일 파싱 부분에서 발생한 취약점을 소개하기 위해 이 문서를 제작하였습니다. IIS 서버 관리자 및 관련 개발자분들께서는 참조하시기 바랍니다.
2. 위험도
수준 : 상
이유 : 웹 상에서 임의의 파일 업로드를 이용한 시스템 장악 가능
3. 취약 버전
Microsoft Internet Information Services 6.x 이하 버전의 거의 모든 버전에서 취약한 것으로 알려져 있습니다. 처음 발표 시 모든 버전이 취약한 것으로 알려졌지만, 현재는 일부 버전에서는 취약하지 않은 것으로 확인되었습니다. 이 취약점에 대한 보고서에도 'All Version'이라는 부분이 현재에는 삭제되어 있는 것을 확인할 수 있습니다.
OS 별/ IIS 버전 별 취약한 내용은 SecurityFocus(http://www.securityfocus.com/bid/37460)에 상세하게 소개되어 있으니 참고하시기 바랍니다.
테스트는 IIS 5.1과 IIS 6.0에서 이루어졌으며, 테스트가 이루어지지는 않았으나, IIS 7.5와 닷넷 프레임워크에서는 취약하지 않은 것으로 알려져 있습니다.
Microsoft Internet Information Services 6.x 이하 버전의 거의 모든 버전에서 취약한 것으로 알려져 있습니다. 처음 발표 시 모든 버전이 취약한 것으로 알려졌지만, 현재는 일부 버전에서는 취약하지 않은 것으로 확인되었습니다. 이 취약점에 대한 보고서에도 'All Version'이라는 부분이 현재에는 삭제되어 있는 것을 확인할 수 있습니다.
OS 별/ IIS 버전 별 취약한 내용은 SecurityFocus(http://www.securityfocus.com/bid/37460)에 상세하게 소개되어 있으니 참고하시기 바랍니다.
테스트는 IIS 5.1과 IIS 6.0에서 이루어졌으며, 테스트가 이루어지지는 않았으나, IIS 7.5와 닷넷 프레임워크에서는 취약하지 않은 것으로 알려져 있습니다.
II. 취약점 상세
1. 설 명
이 취약점은 IIS에서 파일을 파싱하는 과정에서 ";" 부분을 인식하여 앞부분의 확장자를 체크함으로써 발생하는 취약점입니다. 보통 웹 개발자들이 파일 업로드 부분에서 파일 확장자 필터링의 경우 파일명의 제일 끝부분을 체크하는 경우가 많기 때문에 정상적으로 이미지 파일(jpg, gif등)로 인식하지만, 실제 파일을 웹 상에서 열게 되면, ";"부분까지만 인식하여 실행가능한 asp파일로 실행하게 되는 취약점입니다.
2. 위 협
앞에서 이야기한 바와 같이 일반적인 ASP 게시판에서 파일 업로드 부분의 확장자 필터링 루틴을 위의 방법을 이용하여 우회가 가능합니다. 우회가 가능하게 된 경우 공격자에 의해 웹쉘 업로드 및 실행을 통하여 웹 서버 시스템의 권한 획득이 가능하게 됩니다.
3. 버전별 실행여부 확인
해당 취약점에 대해 버전 별(IIS5.1/XP포함, IIS6.0/서버2003포함)로 비교한 것을 캡쳐한 화면입니다.
다음은 XP(SP3)에서 지원하는 IIS 5.1 버전에서 asp 실행여부를 확인하는 장면입니다. 아래는 asp파일을 이용하여 서버의 IIS 버전을 확인하는 화면입니다.
이 취약점은 IIS에서 파일을 파싱하는 과정에서 ";" 부분을 인식하여 앞부분의 확장자를 체크함으로써 발생하는 취약점입니다. 보통 웹 개발자들이 파일 업로드 부분에서 파일 확장자 필터링의 경우 파일명의 제일 끝부분을 체크하는 경우가 많기 때문에 정상적으로 이미지 파일(jpg, gif등)로 인식하지만, 실제 파일을 웹 상에서 열게 되면, ";"부분까지만 인식하여 실행가능한 asp파일로 실행하게 되는 취약점입니다.
2. 위 협
앞에서 이야기한 바와 같이 일반적인 ASP 게시판에서 파일 업로드 부분의 확장자 필터링 루틴을 위의 방법을 이용하여 우회가 가능합니다. 우회가 가능하게 된 경우 공격자에 의해 웹쉘 업로드 및 실행을 통하여 웹 서버 시스템의 권한 획득이 가능하게 됩니다.
3. 버전별 실행여부 확인
해당 취약점에 대해 버전 별(IIS5.1/XP포함, IIS6.0/서버2003포함)로 비교한 것을 캡쳐한 화면입니다.
다음은 XP(SP3)에서 지원하는 IIS 5.1 버전에서 asp 실행여부를 확인하는 장면입니다. 아래는 asp파일을 이용하여 서버의 IIS 버전을 확인하는 화면입니다.
[그림 1] IIS 버전 확인(5.1)
아래와 같이 asp가 실행되지 않고 평문으로 출력하는 것을 확인할 수 있습니다. 이는 asp가 아닌 jpg로 인식하기 때문에 그대로 출력되어 asp가 실행되지 않는다고 할 수 있습니다.
[그림 2] 파일 소스가 텍스트로 출력
다음은 서버 2003 R2 버전의 IIS 6.0 버전에서 테스트한 화면입니다. 아래는 asp 파일을 이용하여 서버의 IIS 버전을 확인하는 화면입니다.
[그림 3] IIS 버전 확인(6.0)
아래와 같이 asp로 실행된 화면을 보여주는 것을 확인할 수 있습니다.
[그림 4] asp로써 파일이 실행된 화면
III. 대응방안 및 참고사이트
1. 대응방안
KrCERT에서 발표한 내용과 발표자의 자료를 기초로 하여 대응방안을 정리하였습니다.
KrCERT에서 발표한 내용과 발표자의 자료를 기초로 하여 대응방안을 정리하였습니다.
가. 웹 개발자
- 웹 어플리케이션 측에서 업로드 파일명을 랜덤문자열로 치환하여 파일명과 확장자를 임의 지정하도록 해야합니다. 사용자의 입력값을 그대로 파일명으로 사용하지 못하도록 해줍니다.
- 파일명과 확장자에 알파벳과 숫자만 사용하도록 해야합니다.
- 웹 어플리케이션 측에서 업로드 파일명을 랜덤문자열로 치환하여 파일명과 확장자를 임의 지정하도록 해야합니다. 사용자의 입력값을 그대로 파일명으로 사용하지 못하도록 해줍니다.
- 파일명과 확장자에 알파벳과 숫자만 사용하도록 해야합니다.
나. 웹 서버 관리자
- 업로드 디렉토리의 파일 실행권한을 제거해 줍니다.
- 업로드 디렉토리의 파일 실행권한을 제거해 줍니다.
2. 참고 사이트
가. 참고 사이트
- http://soroush.secproject.com/blog/2009/12/microsoft-iis-semi-colon-vulnerability/
- http://soroush.secproject.com/downloadble/iis-semicolon-report.pdf
- http://www.ntossecure.com/folder2/2009/12/24/iis-0-day-vulnerability-in-parsing-files/
- http://blog.metasploit.com/2009/12/exploiting-microsoft-iis-with.html
- http://secunia.com/blog/70/
- http://www.exploit-db.com/exploits/10791
- http://www.vupen.com/english/advisories/2009/3634
- http://soroush.secproject.com/blog/2009/12/microsoft-iis-semi-colon-vulnerability/
- http://soroush.secproject.com/downloadble/iis-semicolon-report.pdf
- http://www.ntossecure.com/folder2/2009/12/24/iis-0-day-vulnerability-in-parsing-files/
- http://blog.metasploit.com/2009/12/exploiting-microsoft-iis-with.html
- http://secunia.com/blog/70/
- http://www.exploit-db.com/exploits/10791
- http://www.vupen.com/english/advisories/2009/3634