본문 바로가기
블로그 이미지

방문해 주셔서 감사합니다! 항상 행복하세요!

  
   - 문의사항은 메일 또는 댓글로 언제든 연락주세요.
   - "해줘","답 내놔" 같은 질문은 답변드리지 않습니다.
   - 메일주소 : lts06069@naver.com


웹 취약점(Web vulnerability)

취약한 printStackTrace 메소드(CWE-497)

야근없는 행복한 삶을 위해 ~
by 마샤와 곰 2022. 1. 17.

 

자바로 개발된 프로그램에서 오류(Exception)와의 관련된 처리는 try - catch문구를 사용하여 가능 합니다.

catch 문법에서 콜백함수로 Exception을 받을 수 있는데..

printStackTrace 메소드를 사용하면 쉽게 오류 정보의 위치 및 형태를 확인 할 수 있습니다.

대표적인 catch에서의 모습입니다.

 

해당 메소드를 사용하면 패키지, 클래스 및 오류의 종류까지 전부 log에 출력을 하게 됩니다.

그러므로 해커가 만약 침투에 성공하였다면 해당 로그를 탈취하여 각종 클래스 및 정보를 획득 할 수 있기에 취약점 도구를 사용하면 "제거필요" 한 메소드로 자주 검출 됩니다.

 

#방법1

printStackTrace 메소드를 전부 제거하는 것 입니다. 

무엇보다 효과적이면서 간단한 방법입니다.

그러나 오류를 아에 남기지 않으므로 유지보수를 위해서는 좋은 방법이라 할 수 없습니다.

 

#방법2

catch문법에서는 Exception 클래스 1개로 묶는 것이 아니라 오류의 종류별로 묶도록 권장하고 있습니다.

아래 사진처럼 오류의 종류를 세분화한 뒤에 해당 오류가 나면 무엇을 하는지 정의를 해 주면 됩니다.

 * 데이터베이스저장 또는 파일 기록

Exceptio으로 표기하는 것이 아니라 세분화 하도록 합니다.

 

데이터베이스에 기록이 필요한 경우라면 데이터베이스에 기록을 하면 되지만 일반적으로는 로거를 활용하여 기록을 하는데.. 2021년도 log4j에 대한 이슈가 있었으므로 해당 이슈에 대한 최신 라이브러리 버전을 사용하여 아래처럼 적용하면 되겠습니다.

private final Logger logger = LoggerFactory.getLogger(this.getClass());

{
    try{
        //블라블라....
    } catch (FileNotFoundException e) {
        logger.error("FileNotFoundException", e);
    } catch (IOException e) {
        logger.error("IOException", e);
    }
}

 

또는 오류 자체가 나는 경우를 아에 정의를 해서 써 줄수도 있습니다.

오류 객체 자체를 아에 사용하지 않는 것 입니다.

private final Logger logger = LoggerFactory.getLogger(this.getClass());

{
    try{
        //블라블라....
    } catch (FileNotFoundException e) {
        logger.error("디렉토리의파일이 없는 오류발생입니다.");
    } catch (IOException e) {
        logger.error("파일쓰기오류입니다.");
    }
}

 

개발에 편리한 printStackTrace!!

그러나 취약점 항목에(CWE 497) 있는 기능이므로 개발 이외에 배포시에는 가급적 사용하지 않아야 하겠습니다.

이상으로 간단하게 살펴본 printStackTrace 메소드의 취약점 이였습니다. 

* Exposure of Sensitive System Information to an Unauthorized Control Sphere

궁금한점 또는 틀린부분은 언제든 연락주세요!!! 👻

 

반응형
* 위 에니메이션은 Html의 캔버스(canvas)기반으로 동작하는 기능 입니다. Html 캔버스 튜토리얼 도 한번 살펴보세요~ :)
* 직접 만든 Html 캔버스 애니메이션 도 한번 살펴보세요~ :)

댓글