웹 보안 - 에러 핸들링

이유승·2024년 3월 17일
0

웹 보안

목록 보기
1/7

웹 개발에서 너무 자세한 에러 핸들링을 제공하는 것은 실제로 보안 위험을 증가시킬 수 있습니다. 에러 메시지가 너무 자세하면 다음과 같은 이유로 악의적인 사용자에게 시스템에 대한 추가 정보를 제공할 수 있기 때문입니다.



1. 부적절한 에러 핸들링

Improper handling of errors can introduce a variety of security problems for a web site. The most common problem is when detailed internal error messages such as stack traces, database dumps, and error codes are displayed to the user (hacker). 출처 : OWASP 재단

오류를 부적절하게 처리하면 웹 사이트에 다양한 보안 문제가 발생할 수 있습니다. 가장 일반적인 문제는 스택 트레이스, 데이터베이스 덤프, 오류 코드 등 세부적인 내부 오류 메시지가 사용자(해커)에게 표시되는 경우입니다.

세한 에러 메시지는 서버의 운영 체제, 사용 중인 소프트웨어 버전, 데이터베이스 구조 등의 내부 정보를 노출할 수 있으며 이 정보는 공격자가 취약점을 찾는 데 도움이 될 수 있습니다. 시스템의 내부 구조에 대한 힌트를 제공할 수 있으며, 이는 SQL 인젝션 공격과 같은 공격 유형에 도움이 될 수 있기 때문입니다. 또한 일부 에러는 보안 메커니즘을 우회하여 비인가된 액세스를 허용하는데 이용될 수도 있습니다.



2. 악의적인 공격자는 어떤 방법으로 에러 핸들링을 공격에 이용하는가

  • 시스템 정보를 통한 공격 계획:
    공격자는 에러 메시지에서 얻은 시스템 정보를 사용하여 공격 계획을 세울 수 있습니다. 예를 들어, 소프트웨어 버전 정보를 바탕으로 알려진 취약점을 타겟팅할 수 있습니다

  • 에러 메시지 분석을 통한 취약점 발견:
    에러 메시지를 분석하여 애플리케이션의 구조를 파악하고 취약점을 찾을 수 있습니다. 예를 들어, 데이터베이스 구조에 대한 정보를 통해 SQL 인젝션 공격을 시도할 수 있습니다.

  • 디렉토리 구조 추측:
    에러 메시지에서 파일 경로 정보를 통해 서버의 디렉토리 구조를 추측하고, 민감한 파일에 접근을 시도할 수 있습니다.



잘못된 에러 핸들링의 예시

스택 트레이스 노출:

NullPointerException at com.example.myapp.MyClass.method(MyClass.java:25)

애플리케이션의 내부 구조와 실행 흐름에 대한 자세한 정보가 노출되는 경우입니다. 이 정보를 통해 공격자는 시스템의 구조를 이해하고 취약한 부분을 찾아낼 수 있으며, 이 정보를 사용하여 더 정교한 공격을 계획하고 시스템을 침투할 수 있습니다.

데이터베이스 쿼리 정보 노출:

SQL Error: 'SELECT * FROM users WHERE username = ' 입력값 '' at line 1

SQL 쿼리의 세부 정보는 데이터베이스 구조와 쿼리 로직에 대한 중요한 정보를 노출합니다. 이를 통해 공격자는 SQL 인젝션 공격 등을 수행할 수 있는 기회를 얻을 수 있습니다. 이로 인해 민감한 데이터의 유출이나 데이터베이스의 무단 변경, 시스템 손상 등의 심각한 보안 문제를 초래할 수 있습니다.

서버 구성 정보 노출:

Apache Tomcat/7.0.82 - Error report...<hr/><p><b>type</b> Exception report</p>

서버 버전이나 구성 세부 사항을 노출하면, 공격자는 해당 시스템의 취약점을 찾기 위해 이 정보를 사용할 수 있습니다. 특히 공개된 취약점이 있는 구버전 서버는 큰 위험에 노출됩니다.

경로 정보 노출

File not found - /var/www/app/config.xml

서버의 내부 파일 시스템 경로를 노출하는 것은 디렉토리 트래버설 공격에 필요한 정보를 제공할 수 있습니다. 이를 통해 공격자는 보호되어야 할 파일에 접근할 수 있습니다.

상세한 인증 오류 정보:

로그인 실패: 'admin' 사용자는 존재하지만 비밀번호가 잘못되었습니다.

인증 오류가 발생했을 때, 특정 정보의 존재 유무에 대한 구체적인 정보를 제공하는 것은 브루트 포스 공격에 필요한 정보를 제공합니다. 공격자는 이를 이용해 유효한 사용자 이름을 찾아낼 수 있습니다.

  • 브루트 포스 공격?
    웹 보안에서 가장 흔하게 발생되는 공격 방법 중 하나. 보안 메커니즘에서 사용되는 모든 조합을 시도하는 방식으로 진행된다. 숫자만 사용되는 4자리 비밀번호가 있다면 0000부터 9999까지 비밀번호에 사용될 수 있는 모든 숫자 조합들을 눌러보는 것.

    가장 단순하고 확실하지만 그만큼 방어하는 방법도 쉽다. 비밀번호 조합에 문자, 숫자, 특수문자 등을 사용가능하게 하면 가능한 모든 조합의 숫자가 천문학적으로 늘어나고 공격자가 사용해야하는 시간과 자원도 폭발적으로 증가하기 때문. 4자리 비밀번호가 설정할 수 있는 보안 메커니즘에서, 숫자만 사용 가능할 때 / 숫자, 문자만 사용 가능할 때 / 숫자, 문자에 특수문자까지 사용 가능할 때. 이렇게 3가지 유형이 있으면 각각 10,000개의 조합, 4,776,336개의 조합, 78,074,896개의 조합이 가능하다.

    이외에는 비밀번호 입력 횟수를 제한하거나 2단계 인증 시스템을 도입하여 공격을 방어할 수 있다.



3. 안전한 에러 핸들링의 방법과 예시

  • 일반화된 에러 메시지 사용:
    사용자에게는 간단하고 일반적인 에러 메시지를 제공하고, 자세한 정보는 서버 로그에만 기록합니다.

  • 에러 로깅과 관리:
    자세한 에러 정보는 보안된 로그 파일에 기록하여, 분석과 모니터링에 사용합니다. 민감한 정보를 로그에 포함하지 않도록 주의합니다.

  • 일관된 에러 처리:
    모든 에러 유형에 대해 일관된 처리 방식을 사용하여, 에러 메시지를 통한 시스템의 반응 예측을 어렵게 합니다.

  • 에러 핸들링 정책 문서화:
    에러 핸들링 방법과 메시지 형식에 대한 정책을 문서화하고, 개발자가 이를 준수하도록 합니다.



안전한 에러 핸들링의 예시

"오류가 발생했습니다. 관리자에게 문의해주세요."

"404 - 페이지를 찾을 수 없습니다" 또는 "500 - 내부 서버 오류"

안전한 에러 핸들링의 핵심은, 자세한 정보를 절대 노출하지 않고 간단하고 일반적인 에러 메시지만 사용자에게 출력되도록 구현하는 것입니다. 에러 발생과 관련된 정보는 서버 등지에 로그 파일로 남겨 관리자 혹은 운영자만 접근이 가능하도록 해서 사용자에게 필요한 정보를 제공하면서 동시에 보안 리스크를 최소화시킬 수 있습니다.

profile
프론트엔드 개발자를 준비하고 있습니다.

0개의 댓글