본문 바로가기
정보보안/OWASP TOP 10(2021)

OWASP TOP 10 for 2021

by Dream_World 2021. 10. 23.

OWASP Top 10 - 2021

2021. 09


A01:2021 – Broken Access Control

A02:2021 – Cryptographic Failures

A03:2021 – Injection

A04:2021 – Insecure Design

A05:2021 – Security Misconfiguration

A06:2021 – Vulnerable and Outdated Components

A07:2021 – Identification and Authentication Failures

A08:2021 – Software and Data Integrity Failures

A09:2021 – Security Logging and Monitoring Failures

A10:2021 – Server-Side Request Forgery (SSRF)


A01 : Broken Access Control (접근 제어 취약점)

사용자가 의도한 권한 외의 작업을 수행할 수 없도록 정책을 적용합니다. 장애는 일반적으로 모든 데이터를 무단으로 공개, 수정 또는 파괴하거나 사용자의 한계를 벗어난 비즈니스 기능을 수행하게 합니다. 일반적인 액세스 제어 취약성은 다음과 같습니다

* 특정 기능, 역할 또는 사용자에게만 액세스 권한을 부여해야 하지만 모든 사용자가 사용할 수 있는 최소 권한 또는 기본적으로 거부 원칙을 위반함
* URL(매개변수 변조 또는 강제 검색), 내부 응용프로그램 상태 또는 HTML 페이지를 수정하거나 API 요청을 수정하는 공격 도구를 사용하여 액세스 제어 검사 무시
* 고유한 식별자를 제공하여 다른 사용자의 계정 보기 또는 편집 허용(보안되지 않은 직접 객체 참조)
* POST, PUT, DELETE에 대한 액세스 제어가 누락된 API에 액세스합니다.
* 권한 상승. 로그인하지 않고 사용자 역할을 수행하거나 사용자로 로그인할 때 관리자 역할을 수행합니다.
* JSON Web Token(JWT) 액세스 제어 토큰을 재생 또는 변조하거나 권한을 상승시키거나 JWT 무효화를 남용하기 위해 쿠키 또는 숨겨진 필드를 조작하는 등의 메타데이터 조작
* CORS 잘못된 구성을 통해 승인되지 않았거나 신뢰할 수 없는 원본에서 API에 액세스할 수 있습니다.
* 인증되지 않은 사용자로 인증된 페이지 또는 표준 사용자로 권한이 있는 페이지를 강제로 검색합니다.

 

A02 : Cryptographic Failures (암호화 오류)

첫 번째 단계는 전송 중이거나 사용되지 않는 데이터의 보호 요구 사항을 파악하는 것입니다. 예를 들어, 암호, 신용카드 번호, 건강 기록, 개인 정보 및 영업 기밀은 데이터가 개인 정보 보호법(예: EU의 일반 데이터 보호 규정)이나 PCI 데이터 보안 표준(PCI DSS)과 같은 금융 데이터 보호 규정에 해당할 경우 추가적인 보호가 필요합니다. 이러한 모든 데이터의 경우:

* 명확한 텍스트로 전송되는 데이터가 있습니까? 이는 HTTP, SMTP, FTP와 같은 프로토콜도 STARTTLS와 같은 TLS 업그레이드를 사용하는 것과 관련이 있습니다. 외부 인터넷 트래픽은 위험합니다. 로드 밸런싱 장치, 웹 서버 또는 백엔드 시스템 간의 모든 내부 트래픽을 확인합니다.
* 오래된 암호화 알고리즘이나 프로토콜이 기본적으로 사용되거나 오래된 코드에서 사용되는가?
* 기본 암호키가 사용 중이거나 약한 암호키가 생성 또는 재사용되었거나 적절한 키 관리 또는 순환이 누락되었습니까? 암호화 키가 소스 코드 리포지토리에 체크인됩니까?
* 예를 들어 HTTP 헤더(브라우저) 보안 지시문 또는 헤더가 누락된 경우처럼 암호화가 수행되지 않습니까?
* 수신된 서버 인증서와 신뢰 체인의 유효성이 제대로 확인되었습니까?
* 초기화 벡터가 암호화 모드에 맞게 무시, 재사용 또는 생성되지 않았습니까? ECB와 같은 안전하지 않은 작동 모드가 사용 중입니까? 인증된 암호화가 더 적절할 때 암호화를 사용하는가?
* 비밀번호 기본키 파생기능이 없는 상태에서 비밀번호가 비밀번호로 사용되고 있나요?
* 암호 요건을 충족하도록 설계되지 않은 암호 목적을 위해 무작위성이 사용되었는가? 올바른 함수를 선택하더라도 개발자에 의해 시드될 필요가 있는가, 그렇지 않다면 개발자가 충분한 엔트로피/예측 가능성이 없는 시드로 내장된 강력한 시드 기능을 덮어쓰었는가?
* MD5나 SHA1과 같이 사용되지 않는 해시함수가 사용되고 있습니까, 아니면 암호화 해시함수가 필요할 때 비암호화 해시함수가 사용되고 있습니까?
* PCKS 번호 1 v1.5와 같이 더 이상 사용되지 않는 암호 패딩 방법이 사용되고 있습니까?
* 예를 들어 패딩 오라클 공격의 형태로 암호화 오류 메시지 또는 사이드 채널 정보를 이용할 수 있습니까?

 

A03 : Injection (인젝션)

응용 프로그램은 다음과 같은 경우에 공격에 취약합니다.

* 사용자가 제공한 데이터는 응용 프로그램에서 검증, 필터링 또는 검사되지 않습니다.
* 상황 인식 이스케이프가 없는 동적 쿼리 또는 매개 변수화되지 않은 호출은 인터프리터에서 직접 사용됩니다.
* 적대적 데이터는 ORM(객체 관계 매핑) 검색 매개 변수 내에서 중요한 추가 레코드를 추출하는 데 사용됩니다.
* 적대적 데이터는 직접 사용되거나 연결됩니다. SQL 또는 명령은 동적 쿼리, 명령 또는 저장 프로시저의 구조 및 악의적인 데이터를 포함합니다.

더 일반적인 주입으로는 SQL, NoSQL, OS 명령어, ORM, LDAP, 표현 언어(EL) 또는 OGNL(Object Graph Navigation Library) 주입이 있다. 그 개념은 모든 해석자들 사이에서 동일합니다. 응용 프로그램이 주입에 취약한지 여부를 탐지하는 가장 좋은 방법은 소스 코드 검토입니다. 모든 매개변수, 헤더, URL, 쿠키, JSON, SOAP 및 XML 데이터 입력에 대한 자동 테스트가 권장됩니다. 조직은 CI/CD 파이프라인에 정적(SAST), 동적(DAST) 및 인터랙티브(IAST) 애플리케이션 보안 테스트 도구를 포함하여 프로덕션 배치 전에 주입 결함을 식별할 수 있습니다.

 

A04 : Insecure Design (안전하지 않은 설계)

비보안 설계는 "누락 또는 효과적이지 않은 제어 설계"로 표현되는 다양한 약점을 나타내는 광범위한 범주이다. 안전하지 않은 설계가 다른 모든 Top 10 위험 범주의 원인이 아닙니다. 안전하지 않은 설계와 안전하지 않은 구현 사이에는 차이가 있습니다. 우리는 설계 결함과 구현 결점을 구별하는데, 그 이유는 근본 원인과 해결 방법이 다르기 때문이다. 안전한 설계에도 구현 결함이 있을 수 있으며 이로 인해 취약성이 악용될 수 있습니다. 안전하지 않은 설계는 완벽한 구현으로 수정될 수 없으며, 정의에 따르면 특정 공격을 방어하기 위해 필요한 보안 제어는 결코 생성되지 않았습니다. 안전하지 않은 설계에 기여하는 요인 중 하나는 개발 중인 소프트웨어나 시스템에 내재된 비즈니스 리스크 프로파일링의 부족이며, 따라서 보안 설계의 수준이 어느 정도인지 결정하지 못하기 때문입니다.

요구사항 및 리소스 관리
모든 데이터 자산의 기밀성, 무결성, 가용성 및 진정성과 관련된 보호 요구사항과 예상되는 비즈니스 논리를 포함하여 애플리케이션을 위한 비즈니스 요구사항을 수집하고 협상합니다. 애플리케이션이 어느 정도 노출되는지, 테넌트를 분리해야 하는지(액세스 제어에 더하여) 고려하십시오. 기능 및 비기능 보안 요구사항을 포함한 기술 요구사항을 컴파일합니다. 보안 활동을 포함한 모든 설계, 빌드, 테스트 및 운영에 적용되는 예산을 계획하고 협상합니다.

설계 보안
보안 설계는 위협을 지속적으로 평가하고 알려진 공격 방법을 방지하기 위해 코드가 견고하게 설계되고 테스트되도록 보장하는 문화 및 방법론입니다. 위협 모델링은 세분화 세션(또는 유사한 활동)에 통합되어야 하며, 데이터 흐름의 변화와 액세스 제어 또는 기타 보안 통제를 모색해야 합니다. 사용자 스토리 개발에서 올바른 흐름과 오류 상태를 결정할 때, 관련 당사자와 영향을 받는 당사자가 잘 이해하고 동의하는지 확인합니다. 예상 및 고장 흐름에 대한 가정과 조건을 분석하고 정확하고 바람직한지 확인합니다. 가정을 검증하고 적절한 행동에 필요한 조건을 적용하는 방법을 결정합니다. 결과가 사용자 스토리에 문서화되었는지 확인합니다. 실수로부터 배우고 개선을 촉진하기 위한 긍정적인 인센티브를 제공하세요. 보안 설계는 소프트웨어에 추가할 수 있는 추가 기능이나 도구가 아닙니다.

안전한 개발 수명 주기
보안 소프트웨어에는 보안 개발 수명 주기, 보안 설계 패턴, 포장 도로 방법론, 보안 구성요소 라이브러리, 툴링 및 위협 모델링이 필요합니다. 전체 프로젝트와 소프트웨어 유지 관리 전반에 걸쳐 소프트웨어 프로젝트를 시작할 때 귀사의 보안 전문가에게 문의하십시오. OWASP 소프트웨어 보증 성숙도 모델(SAMM)을 활용하여 안전한 소프트웨어 개발 노력을 체계화하는 것을 고려해 보십시오.

 

A05 : Security Misconfiguration (보안 설정 오류)

응용 프로그램은 다음과 같은 경우에 취약할 수 있습니다.

* 애플리케이션 스택의 모든 부분에서 적절한 보안 강화가 누락되었거나 클라우드 서비스에 대해 잘못 구성된 권한이 없습니다.
* 불필요한 기능(예: 불필요한 포트, 서비스, 페이지, 계정 또는 권한)이 사용되거나 설치됩니다.
* 기본 계정과 암호는 여전히 활성화되고 변경되지 않습니다.
* 오류 처리는 사용자에게 스택 추적 또는 기타 지나치게 유익한 오류 메시지를 표시합니다.
* 업그레이드된 시스템의 경우 최신 보안 기능이 비활성화되거나 안전하게 구성되지 않습니다.
* 애플리케이션 서버, 애플리케이션 프레임워크(예: Struts, Spring, ASP)의 보안 설정.NET), 라이브러리, 데이터베이스 등이 보안 값으로 설정되지 않았습니다.
* 서버가 보안 헤더 또는 지시문을 보내지 않거나 보안 값으로 설정되지 않았습니다.
* 소프트웨어가 최신 버전이 아니거나 취약합니다(A06:2021-취약하고 오래된 구성 요소 참조).

일관되고 반복 가능한 응용프로그램 보안 구성 프로세스가 없으면 시스템이 더 큰 위험에 노출됩니다.

 

A06 : Vulnerable and Outdated Components (취약하고 오래된 구성 요소)

취약할 수 있습니다.

* 사용하는 모든 구성요소의 버전을 모르는 경우(클라이언트 측과 서버 측 모두) 여기에는 사용자가 직접 사용하는 구성 요소와 중첩된 종속성이 포함됩니다.
* 소프트웨어가 취약하거나 지원되지 않거나 오래된 경우. 여기에는 OS, 웹/응용프로그램 서버, 데이터베이스 관리 시스템(DBMS), 응용프로그램, API 및 모든 구성 요소, 런타임 환경 및 라이브러리가 포함됩니다.
* 정기적으로 취약성을 검사하지 않고 사용하는 구성 요소와 관련된 보안 게시판에 가입하는 경우
* 기본 플랫폼, 프레임워크 및 종속성을 위험 기반 적시에 수정하거나 업그레이드하지 않는 경우 이 문제는 패치 적용 작업이 변경 사항이 적용되는 월별 또는 분기별 작업인 환경에서 일반적으로 발생하며, 조직은 며칠 또는 몇 개월 동안 수정 취약성에 불필요하게 노출될 수 있습니다.
* 소프트웨어 개발자가 업데이트, 업그레이드 또는 패치 적용 라이브러리의 호환성을 테스트하지 않는 경우.
* 구성 요소의 구성에 보안을 설정하지 않은 경우(A05:2021-보안 잘못된 구성 참조).

 

A07 : Identification and Authentication Failures (식별 및 인증 실패)

인증 관련 공격으로부터 보호하기 위해서는 사용자의 신원, 인증 및 세션 관리를 확인하는 것이 중요합니다. 응용 프로그램이 다음과 같은 경우 인증 취약점이 있을 수 있습니다.

* 공격자가 유효한 사용자 이름 및 암호 목록을 가지고 있는 자격 증명 채우기와 같은 자동 공격을 허용합니다.
* 무차별 공격 또는 기타 자동 공격을 허용합니다.
* 기본 비밀번호, 취약 비밀번호 또는 "비밀번호1" 또는 "admin/admin"과 같은 잘 알려진 비밀번호를 허용합니다.
* 안전할 수 없는 "지식 기반 답변"과 같은 취약하거나 비효율적인 자격 증명 복구 및 암호를 잊어버린 프로세스를 사용합니다.
* 일반 텍스트, 암호화되거나 약하게 해시된 암호 데이터 저장소를 사용합니다(A02:2021-암호 오류 참조).
* 다중 요인 인증이 누락되었거나 효과적이지 않습니다.
* URL에 세션 식별자를 표시합니다.
* 성공적으로 로그인한 후 세션 식별자를 재사용합니다.
* 세션 ID를 올바르게 무효화하지 않습니다. 사용자 세션 또는 인증 토큰(주로 SSO(Single Sign-On) 토큰)은 로그아웃 중이나 비활성 기간 동안 제대로 유효하지 않습니다.

 

A08 : Software and Data Integrity Failures (소프트웨어 및 데이터 무결성 오류)

소프트웨어 및 데이터 무결성 장애는 무결성 위반으로부터 보호되지 않는 코드 및 인프라와 관련이 있습니다. 응용 프로그램이 신뢰할 수 없는 소스, 리포지토리 및 콘텐츠 전송 네트워크(CDN)의 플러그인, 라이브러리 또는 모듈에 의존하는 경우를 예로 들 수 있습니다. 안전하지 않은 CI/CD 파이프라인은 무단 액세스, 악성 코드 또는 시스템 손상 가능성을 초래할 수 있습니다. 마지막으로, 많은 응용 프로그램에는 충분한 무결성 확인 없이 업데이트를 다운로드하여 이전에 신뢰할 수 있는 응용 프로그램에 적용하는 자동 업데이트 기능이 포함되어 있습니다. 공격자는 잠재적으로 배포될 자체 업데이트를 업로드하고 모든 설치에서 실행할 수 있습니다. 또 다른 예로는 객체나 데이터가 인코딩되거나 직렬화되어 공격자가 보고 수정할 수 있는 구조가 안전하지 않은 역직렬화에 취약하다는 것입니다.

 

A09 : Security Logging and Monitoring Failures (보안 로깅 및 모니터링 실패)

OWASP Top 10 2021로 돌아가면 이 범주는 활성 위반을 탐지, 에스컬레이션 및 대응하는 데 도움이 됩니다. 로깅과 모니터링이 없으면 위반을 탐지할 수 없습니다. 언제든지 불충분한 로깅, 탐지, 모니터링 및 활성 응답이 발생합니다.

* 로그인, 실패한 로그인 및 높은 가치 트랜잭션과 같은 감사 가능한 이벤트는 기록되지 않습니다.
* 경고 및 오류는 로그 메시지를 생성하지 않거나 부적절하거나 불분명하게 만듭니다.
* 응용 프로그램 및 API의 로그는 의심스러운 활동에 대해 모니터링되지 않습니다.
* 로그는 로컬로만 저장됩니다.
* 적절한 경고 임계값 및 대응 에스컬레이션 프로세스가 마련되어 있지 않거나 효과적이지 않습니다.
* 동적 애플리케이션 보안 테스트(DAST) 도구(OWASP ZAP 등)에 의한 침투 테스트 및 스캔은 경보를 트리거하지 않습니다.
* 응용 프로그램은 실시간 또는 거의 실시간으로 활성 공격을 탐지하거나 에스컬레이션하거나 경고를 보낼 수 없습니다.

사용자 또는 공격자가 로깅 및 알림 이벤트를 표시하도록 하여 정보 유출에 취약합니다(A01:2021-중단된 액세스 제어 참조).

 

A10 : Server-Side Request Forgery(SSRF) (서버측 요청 위조)

SSRF 결함은 웹 응용 프로그램이 사용자 제공 URL의 유효성을 검사하지 않고 원격 리소스를 가져올 때마다 발생합니다. 방화벽, VPN 또는 다른 유형의 ACL(네트워크 액세스 제어 목록)에 의해 보호되는 경우에도 공격자가 응용 프로그램이 예기치 않은 대상으로 조작된 요청을 보내도록 강제할 수 있습니다.

현대의 웹 애플리케이션은 최종 사용자에게 편리한 기능을 제공하므로 URL을 가져오는 것이 일반적인 시나리오가 됩니다. 그 결과 SSRF의 발생률이 증가하고 있다. 또한 클라우드 서비스와 아키텍처의 복잡성으로 인해 SSRF의 심각도가 점점 높아지고 있습니다.

계속해서 정리 중...

 

https://owasp.org/Top10/

 

OWASP Top 10:2021

Introduction Welcome to the OWASP Top 10 - 2021 Welcome to the latest installment of the OWASP Top 10! The OWASP Top 10 2021 is all-new, with a new graphic design and an available one-page infographic you can print or obtain from our home page. A huge than

owasp.org

댓글