디버그 기능이 활성화된 프로덕션에서 코드를 제공하는 것은 보안에 민감합니다. 과거에는 다음과 같은 취약점이 있었습니다:
애플리케이션의 디버그 기능은 개발자들이 버그를 쉽게 찾을 수 있게 하지만 공격자들의 작업 또한 용이하게 만듭니다. 종종 디버그 기능은 애플리케이션이 실행되는 시스템과 유저에 대한 더 자세한 정보를 제공하기도 합니다.
스스로에게 자문하세요
- 디버그 기능을 활성화하는 코드 혹은 설정파일이 프로덕션 서버 혹은 최종 사용자에게 배포됩니다.
- 애플리케이션이 기본적으로 디버그 기능이 활성화 된 채로 실행됩니다.
다음의 질문에 예라고 답하는 경우, 문제가 발생할 가능성이 있습니다.
권장되는 보안 코딩 방법
프로덕션 서버 혹은 최종 사용자에게 디버그 기능을 활성화 한 채로 배포하지 마세요.
민감한 코드의 예
Throwable.printStackTrace(...)
는 기본적으로 System.Err
에 쉽게 해석할수 없고 민감한 정보를 드러낼 수 있는 Throwable
클래스의 정보 및 스택트레이스를 출력합니다.
try {
/* ... */
} catch(Exception e) {
e.printStackTrace(); // 민감한 코드
}
스프링 프레임워크의 EnableWebSecurity
어노테이션의 debug=true
옵션은 디버깅 기능을 활성화합니다.
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
@Configuration
@EnableWebSecurity(debug = true) // 민감한 코드
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
// ...
}
안드로이드의 WebView.setWebContentsDebuggingEnabled(true) 는 디버깅 기능을 활성화 합니다.
import android.webkit.WebView;
WebView.setWebContentsDebuggingEnabled(true); // Sensitive
WebView.getFactory().getStatics().setWebContentsDebuggingEnabled(true); // 민감한 코드
규칙을 준수한 해결책
throwables 를 출력하기 위해서는 printStackTrace
대신 Loggers
를 사용해야합니다.
try {
/* ... */
} catch(Exception e) {
LOGGER.log("context", e);
}
스프링 프레임워크의 EnableWebSecurity
어노테이션의 debug=false
옵션으로 디버깅 기능을 비활성화합니다.
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
@Configuration
@EnableWebSecurity(debug = false)
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
// ...
}
안드로이드의 WebView.setWebContentsDebuggingEnabled(false) 를 통해 디버깅 기능을 비활성화합니다.
import android.webkit.WebView;
WebView.setWebContentsDebuggingEnabled(false);
WebView.getFactory().getStatics().setWebContentsDebuggingEnabled(false);
참고
- OWASP Top 10 2021 Category A5 - Security Misconfiguration
- OWASP Top 10 2017 Category A3 - Sensitive Data Exposure
- MITRE, CWE-489 - Active Debug Code
- MITRE, CWE-215 - Information Exposure Through Debug Information
If you like SONARKUBE, don’t forget to give me a star.