기술 주제

OWASP Top 10이란 무엇인가요?

물음표에 초점을 맞춘 IT 항목의 일러스트레이션

개요

오픈 웹 애플리케이션 보안 프로젝트(OWASP)는 소프트웨어 보안 향상을 목표로 하는 오픈 소스 애플리케이션 보안 커뮤니티입니다. OWASP Top 10은 개발자가 설계하고 배포하는 애플리케이션의 보안을 강화할 수 있도록 가장 중요한 애플리케이션 보안 위험을 나열한 업계 표준 가이드라인입니다.

보안 위험은 끊임없이 진화하고 있기 때문에 이러한 변화를 반영하기 위해 OWASP 상위 10대 목록은 주기적으로 수정됩니다. 2021년에 발표된 최신 버전의 OWASP Top 10에서는 더 이상 심각한 위협이 되지 않는 일부 취약점 유형이 심각한 위험을 초래할 가능성이 가장 높은 취약점 유형으로 대체되었습니다.

가장 많이 인용된 취약점 중 일부는 2021년 OWASP 상위 10위 안에 들지 못했기 때문에 OWASP 상위 10위는 애플리케이션 보안을 시작하기에 좋은 곳이지만, 이를 최종 목표로 간주해서는 안 됩니다. 소프트웨어 취약점을 방어하려면 방어자는 정보 기술 스택 전반을 보다 광범위하게 살펴봐야 합니다. 즉, IT 보안 전문가는 전체 소프트웨어 에코시스템에 집중하고 '전통적인' 취약점의 원인을 넘어서야 합니다.

OWASP 상위 10위

OWASP 상위 10개(2021) 카테고리는 무엇인가요?

A1: 주입

신뢰할 수 없는 데이터 소스가 인터프리터로 전송될 때마다 인젝션 결함이 발생할 수 있습니다. 사용자가 제공한 입력이 있는 SQL, LDAP, XPath 또는 NoSQL 동적 데이터베이스 쿼리에서 종종 그 예가 발견됩니다. 공격자는 사용자 입력에 코드를 삽입하여 쿼리 인터프리터를 속여 악성 명령을 실행하도록 합니다.

애플리케이션이 인젝션 결함에 취약한 이유는 무엇인가요?

  • 사용자가 제공한 데이터의 유효성이 충분히 검증되지 않은 경우.
  • 동적 쿼리는 충분한 입력 위생 처리 없이 실행됩니다.
  • 시스템 내에서 악의적인 행동을 위해 사용되는 적대적인 데이터.

사출 결함이 미치는 영향은 무엇인가요?

  • 애플리케이션 또는 기본 호스트의 손상.
  • 민감한 데이터의 노출.
  • 생산성, 평판 또는 수익 손실.

인젝션 결함에 대해 Fortify 어떻게 도움을 줄 수 있나요?

  • 개발자인 경우: Fortify 에서 인젝션 결함을 감지하고 유형별 해결 조언을 제공합니다.
  • QA 또는 운영팀에 속한 경우: Fortify 런타임에 코드의 유효성을 검사하여 제어를 완화합니다.
  • 운영 중인 경우: Fortify 은 Java 및 .NET 인젝션 시도에 대한 런타임 로깅 및 보호 기능을 제공합니다.

A2: 인증 실패

스테이트풀 애플리케이션에서 ID 또는 세션 데이터를 관리할 때 인증이 깨질 수 있습니다. 등록, 자격증명 복구, API 경로가 만료되지 않은 세션 토큰, 무차별 대입 또는 계정 열거에 취약한 경우가 그 예입니다. 공격자는 합법적인 사용자의 신원을 사칭하여 계정을 장악하고 데이터, 프로세스 또는 시스템을 손상시킵니다.

애플리케이션이 깨진 인증에 취약한 이유는 무엇인가요?

  • 세션 ID를 노출하거나, 제대로 무효화하지 않거나, 회전하지 못합니다.
  • 비밀번호 정책을 NIST 800-63B와 같은 표준에 맞추지 않습니다.
  • 2단계 인증(2FA)이 없거나 자동화된 공격을 허용합니다.

인증이 깨지면 어떤 영향이 있나요?

  • 사용자 신원 도용.
  • 사용자 신뢰 상실.
  • 민감한 데이터의 유출.

Fortify 어떻게 도와드릴까요?

  • 개발자인 경우: Fortify 에서 손상된 인증 문제를 감지하고 해결을 권장합니다.
  • QA 또는 운영팀에 속한 경우: Fortify 인증 및 세션 관리 보안을 동적으로 검증합니다.
  • 운영 중인 경우: Fortify 에서 Java 및 .NET 애플리케이션 이벤트에 대한 런타임 모니터링을 계측합니다.

A3: 민감한 데이터 노출

애플리케이션이 암호화되지 않은 데이터, 특히 개인 식별 정보(PII) 및 기타 규제 대상 데이터 유형에 액세스할 때 민감한 데이터 노출 문제가 발생할 수 있습니다. 레거시 애플리케이션에서 취약한 암호화 사이퍼를 사용하거나 보안 전송 프로토콜이 잘못 구현되었거나 데이터 중심 보안이 사용되지 않는 경우가 종종 그 예입니다. 공격자는 민감한 사용자 데이터에 액세스하여 실생활에서 제어할 수 있는 권한을 얻게 됩니다.

애플리케이션이 민감한 데이터 노출에 취약한 이유는 무엇인가요?

  • HTTP, SMTP, FTP와 같은 프로토콜을 통해 일반 텍스트로 데이터를 전송합니다.
  • 민감한 데이터가 불필요하게 일반 텍스트로 저장, 전송 또는 사용되는 경우.
  • 오래되었거나 취약하거나 비표준 기반 암호화 알고리즘 사용.

민감한 데이터 노출의 영향은 무엇인가요?

  • 규제 대상 데이터(예: HIPAA 또는 GDPR)의 유출로 인해 벌금이 부과되는 경우.
  • 신원 도용으로 인해 데이터를 스크러빙하거나 모니터링하는 데 비용이 발생합니다.
  • 개인정보 보호법 및 규정을 준수하지 않는 상태입니다.

민감한 데이터 노출에 대해 Fortify 어떤 도움을 받을 수 있나요?

  • 개발자인 경우: Fortify 민감한 데이터 노출을 식별하고 이슈 감사를 자동화합니다.
  • QA 또는 운영팀에 속한 경우: Fortify 템플릿을 사용하여 애플리케이션 컨텍스트 외부에서 완화한 결과를 제거합니다.
  • 운영 중인 경우: Fortify Java 및 .NET의 애플리케이션에 대한 로깅 및 보호 기능을 제공합니다.

A4: XML 외부 엔티티

XML 외부 엔티티 문제는 외부 엔티티에 대한 참조가 포함된 XML 입력이 잘못 구성된 파서에 의해 처리될 때 발생할 수 있습니다. 신뢰할 수 없는 소스에서 XML 입력을 구문 분석하는 애플리케이션, 문서 유형 정의(DTD)가 활성화된 경우 또는 SOAP 1.0과 같은 패치되지 않은 프레임워크를 사용하는 애플리케이션에서 종종 이러한 예가 발견됩니다. XML은 SVG 및 이미지 파일부터 네트워킹 프로토콜, PDF 및 RSS와 같은 문서 형식에 이르기까지 어디에나 존재합니다. 공격자는 XML 입력에서 외부 엔티티를 참조하여 프로세서를 악용하여 데이터를 추출하거나 원격으로 코드를 실행하거나 네트워크 서비스에 영향을 미칩니다.

애플리케이션이 XML 외부 엔티티에 취약한 이유는 무엇인가요?

  • 애플리케이션이 XML 문서를 구문 분석하고 프로세서에 DTD가 활성화되어 있습니다.
  • SSO, v1.2 이전 SOAP 또는 v2.0 이전 .NET Framework에 SAML을 사용합니다.
  • 구문 분석기가 신뢰할 수 없는 소스를 허용하거나 신뢰할 수 없는 XML 데이터를 삽입합니다.

XML 외부 엔티티의 영향은 무엇인가요?

  • 민감한 데이터 도난.
  • 공격자가 제어하는 URL 로드.
  • 서비스 거부 공격(DoS).

Fortify XML 외부 엔티티에 어떤 도움을 줄 수 있나요?

  • 개발자인 경우: Fortify 에서 취약한 XML 파서를 탐지하고 완화 요인을 권장합니다.
  • QA 또는 운영팀에 속한 경우: Fortify 취약한 XML 파서를 자동으로 스캔하고 익스플로잇 페이로드를 검증합니다.
  • 운영 중인 경우: Fortify 에서 Java 및 .NET 애플리케이션의 문제에 대한 런타임 로깅 및 보호 기능을 제공합니다.

A5: 액세스 제어 고장

접근 제어 문제는 코드 및 환경 제한이 불완전하게 겹치거나 유사한 기능에 대해 여러 곳에 정의되어 있을 때 발생할 수 있습니다. 제한된 페이지에 대한 강제 탐색을 통해 모호성을 통한 보안이 깨지거나 애플리케이션이 여러 방법과 위치에서 액세스 제어를 위한 복잡한 방법을 정의하는 경우의 예가 종종 발견됩니다. 공격자는 액세스 경계를 손상시켜 민감한 데이터를 훔치거나 운영을 방해할 수 있습니다.

애플리케이션이 취약한 액세스 제어에 취약한 이유는 무엇인가요?

  • 로그인하지 않고 사용자로 활동하거나 사용자로 로그인한 상태에서 관리자로 활동할 수 있습니다.
  • 무단으로 또는 권한 상승을 위해 메타데이터 또는 토큰을 조작하는 행위.
  • 비잔틴, 강제되지 않거나 흩어져 있는 액세스 제어 로직.

액세스 제어가 중단되면 어떤 영향이 있나요?

  • 무단 정보 공개 또는 민감한 데이터의 유출.
  • 데이터 수정 또는 파기.
  • 사이트 관리 또는 사용자 인수인계.

고장난 액세스 제어에 대해 Fortify 어떻게 도움을 받을 수 있나요?

  • 개발자인 경우: Fortify 감사를 자동화하고 템플릿을 사용하여 다른 곳에서 완화한 문제를 제거할 수 있습니다.
  • QA 및 운영에 종사하는 경우: Fortify 에이전트는 숨겨진 공격 표면과 고장난 액세스 제어 시스템을 탐지합니다.
  • 운영 중인 경우: Fortify Java 및 .NET 애플리케이션에 대한 런타임 액세스 제어 로깅을 계측합니다.

A6: 보안 구성 오류

애플리케이션 또는 기본 환경을 구성하는 동안 보안 구성 결함이 발생할 수 있습니다. 잘못된 구성은 네트워크 서비스 및 애플리케이션 서버부터 컨테이너 및 스토리지에 이르기까지 애플리케이션 스택의 모든 수준에서 발생할 수 있습니다. 기본 계정 및 구성, "누수" 오류 메시징, 패치되지 않은 프레임워크 및 서비스에서 종종 발견됩니다. 공격자는 배포 정보를 얻고 권한 있는 데이터에 액세스하여 운영을 방해할 수 있습니다.

애플리케이션이 보안 구성 오류에 취약한 이유는 무엇인가요?

  • 불필요하게 활성화된 기본 포트 및 계정 또는 변경되지 않은 비밀번호.
  • 오류 및 예외 발생 시 스택 추적 또는 기타 메시지를 표시합니다.
  • 스택의 일부에서 발생하는 위험에 대한 보안을 적절하게 강화하지 않습니다.

보안 구성이 잘못되면 어떤 영향이 있나요?

영향은 정보 공개부터 시스템 전체 손상까지 다양합니다.

보안 설정 오류에 대해 Fortify 어떻게 도움을 받을 수 있나요?

  • 개발자인 경우: Fortify 스캔하는 동안 애플리케이션 종속성 및 구성 파일을 식별합니다.
  • QA 및 운영팀에 속한 경우: Fortify 애플리케이션 및 서버 구성에 문제가 있는지 동적으로 평가합니다.
  • 운영팀에 속한 경우: Fortify 환경 위험에 대한 보고를 위한 오픈 소스 분석을 제공합니다.

A7: 사이트 간 스크립팅

신뢰할 수 없고 위생 처리되지 않은 사용자 입력이 HTML의 일부로 실행되거나 사용자가 악성 링크와 상호 작용하도록 영향을 받을 수 있는 경우 크로스 사이트 스크립팅(XSS) 결함이 발생할 수 있습니다. 자바스크립트나 플래시와 같은 언어의 익숙한 코드 구성이 신뢰할 수 없는 소스에서 허용되거나 나중에 다른 사용자 에이전트가 표시할 수 있도록 저장되는 경우가 종종 있습니다. 공격자는 사용자 컴퓨터에서 원격 코드 실행을 수행하거나 자격 증명을 훔치거나 리디렉션 사이트에서 멀웨어를 전달할 수 있습니다.

애플리케이션이 크로스 사이트 스크립팅(XSS)에 취약한 이유는 무엇인가요?

일반적으로 브라우저와 같은 사용자 에이전트를 대상으로 하는 세 가지 형태의 XSS가 있습니다:

  • 반영된 XSS: 애플리케이션 또는 API가 HTML 출력에 신뢰할 수 없는 입력을 포함합니다.
  • 저장된 XSS: 디스크에 저장된 소독되지 않은 코드는 나중에 사용자 작업에 의해 트리거됩니다.
  • DOM XSS: 신뢰할 수 없는 입력을 소비하는 애플리케이션, 프레임워크 및 API.

크로스 사이트 스크립팅(XSS)의 영향은 무엇인가요?

  • 애플리케이션에서 피해자의 계정을 탈취합니다.
  • 대상 웹 애플리케이션에서 데이터 검색.
  • 페이지의 콘텐츠 수정.

크로스 사이트 스크립팅(XSS)에 대한 Fortify 의 도움은 어떻게 받을 수 있나요?

  • 개발자인 경우: Fortify 코드에서 XSS 취약점을 탐지하고 익스플로잇 가능성을 예측합니다.
  • QA 및 운영 부서에 근무하는 경우: Fortify XSS에 취약한 비위생화 입력에 대해 동적으로 코드의 유효성을 검사합니다.
  • 운영 중인 경우: Fortify 무단 리디렉션을 포함한 Java 및 .NET 이벤트에 대한 로깅을 제공합니다.

A8: 안전하지 않은 역직렬화

안전하지 않은 역직렬화 결함은 언어와 프레임워크가 신뢰할 수 없는 직렬화된 데이터를 객체로 확장할 수 있도록 허용하는 경우, 주로 웹 애플리케이션이 사용자와 통신하거나 애플리케이션 상태를 저장할 때 발생할 수 있습니다. 개발자가 역직렬화 프로세스 중에 자체 실행할 수 있는 메서드에 아무런 제한을 두지 않는 경우가 종종 있습니다. 공격자는 애플리케이션 로직 외부에서 호출되는 이러한 "가젯 체인"을 활용하여 원격으로 코드를 실행하거나 서비스를 거부하거나 무단 액세스를 얻습니다.

애플리케이션이 안전하지 않은 역직렬화에 취약한 이유는 무엇인가요?

  • 애플리케이션은 신뢰할 수 없는 소스의 데이터를 역직렬화합니다.
  • 애플리케이션은 역직렬화하기 전에 소스나 콘텐츠를 확인하지 않습니다.
  • 불필요한 가젯 노출을 방지하기 위해 허용되는 클래스는 화이트리스트에 포함되지 않습니다.

안전하지 않은 역직렬화의 영향은 무엇인가요?

  • 이러한 결함은 가장 심각한 공격 중 하나인 원격 코드 실행 공격으로 이어질 수 있습니다.

안전하지 않은 역직렬화에 대해 Fortify 어떻게 도움을 줄 수 있나요?

  • 개발자인 경우: Fortify 소스 코드의 취약점을 탐지하고 구성 요소 분석을 제공합니다.
  • QA 및 운영에 종사하는 경우: Fortify 동적으로 실행되는 애플리케이션을 계측하여 공격 경로를 검증합니다.
  • 운영 중인 경우: Fortify 역직렬화를 포함한 Java 및 .NET 이벤트에 대한 로깅을 계측합니다.

A9: 알려진 취약점이 있는 구성 요소 사용

이러한 결함은 오픈 소스 또는 타사 프레임워크와 라이브러리를 애플리케이션에 도입하여 동일한 권한으로 실행할 때 발생할 수 있습니다. 구성 요소 기반 개발로 인해 종속성과 관련된 위험에 대한 이해가 부족하고 구성 요소 또는 시스템을 패치하기 어렵거나 불가능한 경우가 종종 있습니다. 공격자들은 취약한 구성 요소를 활용하여 역사상 가장 큰 규모의 침해 사고를 일으켰으며, 취약성은 애플리케이션 손상에서 원격 코드 실행에 이르기까지 다양합니다.

애플리케이션이 오픈 소스 또는 타사 프레임워크 및 라이브러리에 취약한 이유는 무엇인가요?

  • 이는 우발적(예: 코딩 오류)이거나 의도적(예: 백도어된 컴포넌트)일 수 있습니다.
  • 애플리케이션 또는 환경이 패치되지 않았거나 오래된 구성 요소를 사용합니다( 애플리케이션 현대화가 필수적인 이유 중 하나).
  • 타사 코드 또는 중첩된 종속성에서 취약점을 검사하지 않습니다.
  • 사용할 수 없는 구성 요소 인벤토리 또는 무시된 보안 게시판.

알려진 취약점이 있는 컴포넌트를 사용하면 어떤 영향이 있나요?

알려진 취약점 중 일부는 경미한 영향을 미치지만, 하트블리드 및 셸쇼크와 같이 알려진 대규모 침해 사고는 공유 구성 요소의 알려진 취약점을 악용하는 데 의존했습니다. 알려진 코드 취약점이 있는 구성요소를 사용하면 영향을 받는 서버에서 원격 코드가 실행되어 공격자가 시스템을 완전히 제어할 수 있습니다.

Fortify 오픈소스 보안에 어떤 도움을 줄 수 있나요?

  • 개발자인 경우: Fortify 소나타입 통합을 통해 소프트웨어 구성 요소 분석을 제공합니다.
  • QA 및 운영에 종사하는 경우: Fortify 런타임 시 알려진 취약점에 대한 동적 유효성 검사를 자동화합니다.
  • 운영팀에 있는 경우: Fortify Java 및 .NET 애플리케이션 구성 요소에 대한 로깅 및 보호 기능을 제공합니다.

A10: 불충분한 로깅 및 모니터링

불충분한 로깅 및 모니터링 결함은 공격 벡터나 애플리케이션의 잘못된 동작을 잘 이해하지 못하거나 침해 지표에 대한 모니터링 모범 사례를 따르지 않을 때 발생할 수 있습니다. 로깅 기능이 없는 레거시 시스템, 애플리케이션 침투 테스트 로그를 검토하지 않거나 로그가 공격자가 수행한 작업을 이해하는 데 충분한 세부 정보를 제공하지 않는 경우의 예가 종종 발견됩니다. 공격자는 일반적으로 외부에서 발견되는 탐지에 평균 200일 정도의 시간을 두고 지속성을 확보하고 취약한 시스템을 추가로 공격합니다.

애플리케이션이 불충분한 로깅 및 모니터링에 취약한 이유는 무엇인가요?

  • 경고 및 오류는 로그 메시지가 없거나 부적절하거나 불명확한 메시지를 생성합니다.
  • 로그는 변조 제어 없이 로컬에 저장되거나 모니터링되지 않습니다.
  • 알림 임계값 및 대응 프로세스가 불충분하거나 아무런 조치도 취하지 않습니다.

불충분한 로깅 및 모니터링이 미치는 영향은 무엇인가요?

대부분의 성공적인 공격은 취약점 조사에서 시작됩니다. 이러한 프로브를 계속 허용하면 공격 성공 가능성이 높아질 수 있습니다. 공격자는 지속성을 확보하여 애플리케이션과 운영 체제를 백도어하고 데이터를 훔치거나 다른 방법으로 눈에 띄지 않게 시스템을 무단으로 제어할 수 있습니다. 보안에 중요한 정보를 적절하게 기록하거나 저장하지 않으면 포렌식 분석을 통해 공격의 출처를 찾을 수 있는 흔적이 남지 않습니다. 공격자가 로깅 기능을 계속 제어할 경우 문제가 있다는 사실을 파악하는 것이 더 어려워지거나 불가능해질 수 있습니다.

불충분한 로깅 및 모니터링에 대해 Fortify 어떤 도움을 받을 수 있나요?

  • 개발자인 경우: Fortify 애플리케이션 및 API의 로깅 기능에 취약점이 있는지 검사합니다.
  • QA 및 운영팀에 속한 경우: Fortify 동적 스캔은 펜 테스트와 같은 충분성 검토를 위한 애플리케이션 로그를 생성합니다.
  • 운영팀에 있는 경우: Fortify Java 및 .NET 애플리케이션을 위한 계측 로깅 및 보호 기능을 제공합니다.

OWASP(2021)의 새로운 기능은 무엇인가요?

2017년 마지막 톱 10이 발표된 이후 4년이 지났지만, 사이버 보안 업계에는 많은 변화가 있었기 때문에 최우선 관심사나 추가할 새로운 관심사에 대해 다시 생각하게 되었습니다.

세 가지 새로운 카테고리가 도입되었습니다:

A04:2021

안전하지 않은 디자인: 이 범주는 설계 결함에 중점을 둡니다. 개발에서 왼쪽으로 이동하려면 위협 모델링에서도 왼쪽으로 이동해야 하기 때문에 이 카테고리가 필요합니다.

A08:2021

소프트웨어 및 데이터 무결성 실패: 소프트웨어 업데이트, 중요 데이터 및 CI/CD 파이프라인이 영향을 미칠 수 있는 무결성을 검증하지 않고 가정에 초점을 맞춥니다. 여기에는 A08:2017 - 안전하지 않은 역직렬화도 포함됩니다.

A10:2021

서버 측 요청 위조(SSRF): 이 카테고리는 커뮤니티 설문조사에서 대부분 상위 10위 안에 들었습니다. 평균 이상의 악용 가능성과 영향력 때문에 이 취약점을 강조했습니다.

기타 변경 사항

다른 카테고리는 이름이 변경되었거나 순위가 이동되었거나 다른 카테고리로 통합되었습니다:

  • A01:2017 - 주입이 A:03으로 하향 조정되었습니다.
  • A02:2017 - 인증 실패가 신원 확인 및 인증 실패로 이름이 변경되어 A07로 이동했습니다.
  • A03:2017 - 민감한 데이터 노출이 증상뿐 아니라 근본 원인을 보다 완벽하게 해결하기 위해 암호화 실패로 이름이 변경된 A02로 상향 조정되었습니다.
  • A05:2017 - 테스트한 애플리케이션의 94%가 어떤 형태로든 취약한 액세스 제어에 노출된 것으로 나타났기 때문에 취약한 액세스 제어가 A01로 이동했습니다.
  • A06:2017 - 보안 구성 오류가 A05로 한 단계 상향 조정되었습니다.
  • A07:2017 - 크로스 사이트 스크립팅(XSS)이 A03 인젝션으로 통합되었습니다.
  • A09:2017 - 알려진 취약점이 있는 구성 요소 사용은 A06으로 상향 조정되었으며 취약하고 오래된 구성 요소로 이름이 변경되었습니다. 이 변경은 커뮤니티에서 이 문제를 2순위로 선정한 것이 큰 영향을 미쳤습니다.
  • A10:2017 - 불충분한 로깅 및 모니터링이 A09로 올라갔으며, 이제 보안 로깅 및 모니터링 실패라고 불립니다.

Fortify 이 조직에 어떤 도움을 줄 수 있는지 알고 싶으신가요? 지금 OpenText™ 에서 Fortify 온디맨드 15일 무료 평가판을 시작하세요.

어떻게 도와드릴까요?

각주