[EVI$ION 7기] OWASP top 10 / A05 Security Misconfiguration

김예원·2024년 10월 10일

Security Misconfiguration

발생 원인

  • 적절한 보안 강화의 누락 또는 클라우드 서비스에 대한 권한 구성 오류
  • 불필요한 기능(ex. 불필요한 포트, 서비스, 페이지, 계정 또는 권한)의 존재
  • 기본 계정과 해당 계정의 비밀번호 사용
    *타사용자의 계정을 훔쳐서 승인되지 않은 접근권한을 얻거나 기본 계정을 통해 접근
  • 오류 메세지에 스택 트레이스 등의 민감한 내용 표시
  • 최신 보안 기능의 비활성화 또는 안전하게 구성되지 않은 경우
  • 애플리케이션 서버, 애플리케이션 프레임워크(ex. 스트럿츠, 스프링, ASP.NET), 라이브러리, 데이터베이스 등의 보안 설정이 보안 값으로 설정되지 않은 경우
  • 서버가 보안 헤더나 지시문을 보내지 않거나 보안 값으로 설정되어 있지 않은 경우
    *웹프레임워크 -> 복잡한 구성을 가져서 보안 구성 오류 위험이 커짐.
  • 오래되거나 취약한 소프트웨어(*A06:2021-Vulnerable and Outdated Components 참조)
  • 패치되지 않은 시스템
    *패치되지 않은 버그를 악용하여 악성코드 삽입 등
  • 암호화되지 않은 파일
  • 방화벽 보호 부족
  • 기술적 영향도 중간 정도, 사업적 영향도 또한 중간 정도

=> 일관되고 반복 가능한 애플리케이션 보안 구성 프로세스가 없다면 위험. 보안옵션이 보안을 극대화하는 방식이 아니거나 기본 설정으로 배포가 될 때 해당 취약점 발생.
감지가 쉽고 이를 이용해 상당한 피해를 입힐 수 있음.

예시

>디렉터리 목록 취약점

>오류 메시지 취약점
  • 샘플 애플리케이션 취약점
  • 디렉터리 목록 취약점
    : 공격자가 디렉터리 목록을 확인할 수 있게 허용
  • 오류 메시지 취약점
    : 오류 메시지에 민감한 정보를 포함함
  • 기본 권한 취약성
    : 사용자 권한을 적절히 검증하지 않고, 다른 사용자의 자원에의 접근을 허용
  • 불필요한 기능 취약점
  • 부적절한 데이터 검증 취약점
    : SQL injection, XSS, Path traversal, Command injection과 같은 공격을 허용
  • 미공개 URL 취약점
    : url을 조작해서 접근 권한이 없는 자원에 접근을 허용하게 만드는 취약점
  • 오래된 소프트웨어 취약점
    : 패치를 통한 소프트웨어를 업데이트 필요

예방 대책

  1. 반복 가능한 경화 프로세스 채택
    : 적절하게 보호된 또다른 환경을 빠르고 쉽게 배포 가능.
    각 환경마다 다른 사용되는 자격 증명을 사용하면서 개발, QA 및 프로덕션 환경은 모두 동일하게 구성되어야 함.
  2. 반복적인 작업 자동화
    : 새로운 보안 환경을 설정하는 데에 필요한 작업을 최소화하도록 자동화된 프로세스
    -> 자동화된 프로세스는 사람보다 효과적으로 수행할 수 있기 때문에 가능한 많은 작업을 자동화해서 보안 구성 설정.
  3. 정기적으로 소프트웨어 업데이트
    : 패치 관리 프로세스의 일부로 모든 보안 노트, 업데이트 및 패치에 적합한 구성을 검토하고 업데이트. 클라우드 스토리지 권한(ex. S3 버킷 권한) 검토.
  4. 빈번한 감사 수행
    : 모든 환경에서 구성 및 설정의 효과를 검증하는 자동화된 프로세스. 주기적인 검사를 통해 잠재적인 보안 위험을 감지.
  5. 세그먼트화된 아키텍처 구축
    : 세분화, 컨테이너화 또는 클라우드 보안 그룹(ACLs)을 통해 구성 요소 또는 테넌트 간에 효과적이고 안전한 분리를 제공.
  6. 사용하지 않는 기능 피하기
    : 불필요한 기능, 구성 요소, 설명서 및 샘플이 없는 최소한의 플랫폼. 사용하지 않는 기능과 프레임워크를 제거하거나 설치하지 않음.
  7. 클라이언트에 보안 지침 보내기
    : ex. 보안 헤더

공격 시나리오 예시

#1: 애플리케이션 서버에 프로덕션 서버에서 제거되지 않은 샘플 애플리케이션이 함께 제공. 이러한 샘플 애플리케이션은 공격자가 서버를 손상시키는 데 사용할 수 있는 보안 결함을 표시. 이러한 애플리케이션 중 하나가 관리 콘솔이며 기본 계정이 변경되지 않았다고 가정.
-> 공격자는 기본 비밀번호로 로그인하여 인수를 수행.

#2: 서버에서 디렉토리 목록이 비활성화되지 않았다고 가정.
-> 공격자는 단순히 디렉토리를 나열할 수 있다는 사실을 발견. 공격자는 컴파일된 Java 클래스를 찾아서 다운로드하고, 이 클래스를 압축 해제 및 리버스 엔지니어링하여 코드를 볼 수 있음. 그런 다음 공격자는 응용 프로그램에서 심각한 접근 제어 결함을 발견.

#3: 애플리케이션 서버의 구성을 통해 스택 트레이스와 같은 자세한 오류 메시지를 사용자에게 반환한다고 가정.
-> 이를 통해 민감한 정보나 취약한 것으로 알려진 구성 요소 버전과 같은 근본적인 결함이 노출.

#4: 클라우드 서비스 제공업체(CSP)는 다른 CSP 사용자가 인터넷에 개방된 기본 공유 권한을 가짐.
-> 클라우드 저장소에 저장된 민감한 데이터에 액세스 가능.

주목할만한 CWE

CWE-16 Configuration

  • 소프트웨어 또는 시스템에서 잘못된 구성으로 인해 발생하는 일반적인 취약점
발생 원인
  • 기본값 사용
  • 보안 설정의 미비
  • 구성 파일 오류
  • 버전 불일치 및 패치 미적용
  • 환경별 설정 오류

CWE-611 Improper Restriction of XML External Entity Reference

XML 문서에는 문서 유형 정의(DTD)가 옵션으로 포함되어 있음.
-> 이를 통해 다른 기능에서도 XML 엔티티를 정의 가능.
ex) URI 형태의 대체 문자열을 제공하여 엔터티를 정의.
=> XML 파서는 제공된 URI의 내용에 액세스하고 이를 다시 XML 문서에 포함하여 추가 처리.

발생 원인
  • 애플리케이션이 XML 입력을 처리할 때, XXE 공격에 대비하지 못하면 공격자가 임의의 파일을 읽거나 코드를 실행할 수 있음.
  • 잘못 구성된 XML 파서는 보안 취약점을 초래
    -> XML 입력을 처리하는 웹 애플리케이션에서 외부 엔티티가 허용되어, 공격자가 시스템 파일을 읽을 수 있음.
예시
  • 외부 엔티티를 정의하는 XML 파일에 file://URI 형태의 입력을 제출함으로써 처리 응용 프로그램이 특정 로컬 파일의 내용을 읽게 유도하는 공격.
    ex) file:///c:/winnt/win.ini와 같은 URI는 Windows에서 C:\Winnt\win.ini 파일을 가리킴.
    file://etc/passwd는 유닉스 기반 시스템에서 비밀번호 파일을 가리킴.
  • URI가 읽히면 해당 내용은 XML을 처리하는 애플리케이션에 피드백되는데, 이 애플리케이션은 데이터를 에코백하여(ex. 오류 메시지) 파일 내용을 노출할 수 있음.
  • XXE를 이용한 SSRF 공격
  • SSRF를 통해 내부 경로에 접근할 수 있음
  • 공격자는 http://와 같은 다른 방식의 URI를 사용하여 본인이 직접 도달할 수 없는 서버에 발신 요청을 하도록 강제할 수 있으며, 이는 방화벽을 우회하거나 포트 스캔과 같은 공격의 출처를 숨기는 데 사용 가능.
    ex) <!DOCTYPE test [ <!ENTITY xxe SYSTEM "http://169.254.169.254/lastest/meta-data/"> 이런 식의 입력을 넣을 수 있는데, 169.254.169.254는 해당 웹서버에 엔드단에 위치한 서버이고, 기본적으로 접근이 불가능하지만 위의 구문처럼 xxe를 이용하면 "latest"라고 응답이 오는 걸 확인할 수 있음. meta-data라는 경로가 출력이 되고 meta-data를 따라가면 "iam" 출력, 계속 따라가면 최종적으로 admin에 접근할 수 있음.
  • 이미지 파일 업로드를 이용한 XXE
  • 이미지에 XML 태그를 삽입
    ex)
<?xml version="1.0" standalone="yes"?><!DOCTYPE test [ <!ENTITY xxe SYSTEM"file:///etc/hostname" > ]><svg width="128px" height="128px" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1"><text font-size="16" x="0" y="16">&xxe;</text></svg>
  • 댓글을 작성할 때 패킷을 캡처해서 보면 svg 파일인 것 확인
  • 위의 구문을 댓글에 작성해서 제출하면 /etc/hostname 파일의 내용을 가져와서 텍스트로 표시하도록 동작함. 프로필 사진에 hostname이 표시됨.
  • 폰트 크기 등을 수정할수도 있고, 구문을 약간 수정해서 password 파일을 불러올 수 있음.
    *xml 파서가 외부 엔티티를 처리할 때 민감한 정보가 xml에 포함되어 노출.
    +url 스킴을 통해 파서가 원격 서버에 접근하도록 할 수 있음. 포트 스캐닝과 같은 추가적인 공격 가능.

=> 외부 엔티티를 처리하는 부분이 제대로 되어 있지 않으면 중요한 정보를 공격자에게 노출할 수 있음.

참고

https://owasp.org/Top10/A05_2021-Security_Misconfiguration/
위의 자료와 5주차 심화스터디 ppt 내용을 바탕으로 작성되었음.

0개의 댓글