it-swarm-korea.com

debug =“true”에서 웹앱을 실행하는 보안 위험이 있습니까?

이것은 스택 오버플로의 원래 질문 의 사본입니다.

앱이 debug = "true"모드 ( Scott Gu에서 좋은 런 다운 )로 실행되지 않아야하는 성능상의 이유가 많이 있지만이 방법으로 노출되는 공격 경로가 있습니까? "당신이해야합니까, 안해서는 안됩니까"라는 질문이 아니며, 분명한 것은 특정 취약점이 있는지 여부에 대한 질문입니다.

알려진 성능 문제와 함께 원격으로 감지 기능을 사용하면 서비스 가용성에 악용 될 수 있지만 좀 더 명확한 정보를 원한다고 생각합니다. 누구든지 debug = "true"를 실행하는 앱에 대해 조정될 수있는 특정 공격에 대해 알고 있습니까?

18
Troy Hunt

이 질문에 대한 흥미로운 의견이 여기에 있으며 on on Stack Overflow . 스택 추적 (디버그 문제가 아닌 사용자 정의 오류 문제) 및 성능 (보안 직접 문제가 아님)과 관련된 많은 응답이있었습니다.

가장 강력한 응답은 조건부 컴파일 상수 (#if DEBUG ...)가 예기치 않은 동작을 유발할 수 있지만 보안 위험보다 기능적 위험 (실제 환경에서 의도하지 않은 코드가 실행 됨)에 더 가깝다는 것입니다.

디버그 모드가 앱에 미치는 성능 오버 헤드와 원격으로 감지 할 수있는 능력 (서비스 연속성 위험)에 따라 다른 악용 경로를 열 수 있다고 생각합니다. OWASP .NET 개발자를위한 Top 10 6 부 : Security Misconfiguration 의 일부로 결론을 작성했습니다.

따라서 완전성을 기하기 위해 대답은 디버그 모드에서 실행할 때 명확한 보안 위험이 없지만 위에서 언급 한 요소를 감안할 때 프로덕션 앱에는 좋은 아이디어가 아닙니다.

12
Troy Hunt

잠재적 인 공격자가 소스 코드, 스택 추적 등에 잠재적으로 액세스 할 수있게하여 시스템에 대한 공격의 초점을 좁힐 수 있습니다.

또한 테스트하지는 않았지만 debug = true가 예상되는 사이트 customerror가 아닌 컴파일 오류를 유발하므로 .net customerror crypto bug에 노출 될 수 있다고 가정합니다.

http://blogs.technet.com/b/srd/archive/2010/09/17/understanding-the-asp-net-vulnerability.aspx

5
iivel

Debug = true 일 때 명심해야 할 가장 큰 것은 심볼이 있다는 것입니다. 응용 프로그램은 debug = true로 미리 컴파일 할 수 있지만 배포 프로세스의 일부입니다. 예 : 빌드 서버 또는 로컬 시스템에서 빌드하고 어셈블리를 전송합니다. (모두 프로덕션 배포 전에 응용 프로그램을 미리 컴파일하고 있습니까?! :)) 디버그에는 특정 런타임 최적화가 해제되어 있습니다. 명백한 공격은 DoS입니다. 사용자 지정 오류가 해제되어 있으면 사용자 지정 오류가 해제되고 기호가없는 경우보다 호출 스택에 대한 자세한 정보를 찾을 수 있습니다.

3
Steve

CustomErrors = off 및 debug = true 인 경우 훨씬 더 많은 정보가 공격자에게 전송 될 것입니다.

CustomErrors = on 또는 customErrors = RemoteOnly라고 말하는 것이 더 안전합니다. 이렇게하면 원격 사용자는 항상 일반 ASP.NET 오류 페이지를 얻게됩니다. MSDN 에 대한 자세한 정보

3
goodguys_activate

이것은 거의 전적으로 언어/프레임 워크/배치 환경에 달려 있습니다.

파이썬/장고의 경우 DEBUG = True가 보안 문제인 경우가 매우 분명합니다. 예를 들어 'SECRET', 'PASSWORD', 'PROFANITIES'또는 'SIGNATURE'에 대한 구성 변수를 표시하지 않는 것에 대한 참고 사항 http://docs.djangoproject.com/en/dev/ref/settings/#debug 참조

2
nealmcb

정보 유출 관점에서 나쁘기 때문에 반복 할 필요가 없습니다. 또한 디버그 모드에서 요청 실행 시간 초과는 약 5 시간이므로 시간 초과없이 응용 프로그램을 디버깅 할 수 있습니다. (일반 시간 제한 값은 기본적으로 110 초입니다.) 따라서 공격자가이 공격을 실행하는 데 너무 오래 걸리는 코드를 발견하면 서비스 거부로 바뀔 수 있습니다.

2
Nathan B.