2010-07-27 2 views
17

누군가 (아마도 봇) (IIS 7.0에서 실행) 내 ASP.NET 4.0 웹 양식 응용 프로그램에 다음 URL로 요청을 보내"잠재적으로 위험한 요청"으로 간주되는 콜론이 포함 된 URL을 사용하는 이유는 무엇입니까?

http://ipaddress-of-my-applications-domain/bla1.bla2.bla3.bla4.bla5:)

이는 System.Web.HttpException 발생했습니다.

잠재적으로 위험한 Request.Path 값이 클라이언트 (:)에서 감지되었습니다. ASP.NET HealthMonitoring에서 로깅 전자 메일을 받았습니다.

스택 추적했다 :

System.Web.HttpRequest.ValidateInputIfRequiredByConfig() 
System.Web.HttpApplication.PipelineStepManager.ValidateHelper(HttpContext context) 

왜 "잠재적 위험"URL에 콜론? 그런 URL로 어떤 위험한 일을 할 수 있습니까? 내가 모르는 보안 구멍이 여기에 있습니까?

미리 설명해 주셔서 감사합니다.

편집

나는 쿼리 문자열 (같은 http://mydomain.com?Test=9:))에 콜론이 예외가 발생하지 않음을 테스트했습니다.

+0

이 질문을 참조하십시오 - http://stackoverflow.com/questions/2053132/is-a-colon-safe-for-friendly-url-use - 저는 중복 된 것으로 생각하지 않지만 콜론에 대해 논의하지 않습니다. URL – ChrisF

+0

[URL 인코딩] (http://www.blooberry.com/indexdot/html/topics/urlencoding.htm)의이 페이지는 예약 된 문자 표에 콜론을 나열하지만 그 용도에 대해서는 설명하지 않습니다. – ChrisF

+0

링크를 제공해 주셔서 감사합니다! 그러나이 질문은 URL 인코딩과 관련하여 콜론이 "안전"한지 여부를 논의하는 것으로 보입니다. 보안상의 위협이 될 수있는 것처럼 ASP.NET 예외가 더 많이 들립니다. – Slauma

답변

19

, 주어진 파일 경로가 여러 관련 데이터 스트림을 가질 수 있습니다. $DATA이라고도하는 메인 스트림 외에도 다운로드 된 파일에 인터넷 영역 마커와 같은 메타 데이터를 저장하는 데 일반적으로 사용되는 다른 것이있을 수 있습니다.

Alternate Data Streams은 콜론 구분 기호 (예 : file.dat:$DATAfile.dat을 말하는 다른 방법입니다. 웹을 통한 ADS의 존재로 인해 Microsoft는 과거에 ASP 페이지의 소스 코드를 반환하는 등의 보안 문제를 야기했습니다 (예 : 실행중인 ASP 페이지의 소스 코드를 반환하는 등). 경로 부분은 종종 파일 시스템에 매핑되기 때문에 URL (귀하의 경우는 아님). 이것은 쿼리 문자열에서 발생할 가능성이 적으므로 차단되지 않습니다.

이것은 최악의 거짓 긍정 요청 확인이 생성하는 것과는 거리가 있습니다. 그것의 anti-injection 특징은 매우 나쁘다. 나는 개인적으로 항상 그것을 무력화시킬 것이다. 사실 웹 앱을 결코 안전하게 만들 수없는 어리석은 깨진 기능이기 때문이다. 문자열 이스케이프 (그리고 파일 이름으로 사용할 계획의 무거운 sanitisation)에만주의를 기울여야합니다.

요청 확인을 끈 경우에도 라우팅을 위해 경로 부분을 넣을 수없는 다른 문자가 있습니다. 특히 슬래시 (%2F, %5C 및 유효하지 않은 UTF-8 시퀀스를 해결하는 바이트 시퀀스)와 0 바이트입니다. 일반적으로 경로에 넣는 것에 대해 보수적 인 것이 가장 좋습니다.

+2

이것은 NT4에서의 실질적인 오류입니다. http://www.securityfocus.com/bid/149/discuss – devio

+0

감사합니다. 훌륭한 설명입니다! 따라서이 보안 검사와 콜론의 위험은 MS-Windows 관련 문제입니다. ASP.NET 요청 유효성 검사를 해제하는 권장 사항 : 페이지별로 (응용 프로그램의 많은 페이지에 대해) 수행했으며 적절한 검사와 인코딩을 직접 수행했습니다. 그러나 솔직히 말해서, 당신의 대답은 당신이 설명하는 보안 위험이 내게 상당히 복잡해 보이기 때문에 전 세계적으로 해제하지 않는 것이 나에게 확신을주었습니다. 내장 된 Request Validation 체크의 또 다른 위험 요소는 무엇입니까? 내가 이것을 끄면 이러한 모든 위험을 알아야하고 내 자신의 조치를 제공해야합니다. – Slauma

+3

'bla1.bla2.bla3.bla4.bla5 :)'값을 라우팅 매개 변수로만 사용하고 실제 파일 이름으로 사용하지 않는다면 아무런 취약점이 없습니다. (Windows에서 파일 이름으로 사용하기위한 사용자 입력을 살균하는 것은 실제로이 문제보다 훨씬 어려운 작업입니다. 일반적으로 파일 이름에 대해 사용자가 제공 한 콘텐츠를 사용하지 마십시오.) 요청 유효성 검사를 신뢰하지 마십시오. 일반적인 경우의 취약점으로부터 당신을 보호 할 수는 없으며, 완벽하게 유효한 입력을 차단합니다. – bobince

0

이것은 클라이언트의 웹 사이트 공격을 차단하는 ASP.NET의 요청 유효성 검사 기능 때문입니다. 이 기능은 기본적으로 사용하도록 설정되어 있습니다.

다음 링크는 더 나은 설명 : http://www.asp.net/learn/whitepapers/request-validation NTFS에

+0

URL의 콜론이 "삽입 공격"인 이유는 무엇입니까? 요청 확인 기능을 알고 있지만, 지금까지는