2021년 9월 24일에 발표한 ‘OWASP Top 10 – 2021’에는 신규 3개 항목이 추가됐으며, 기존 3개 항목은 다른 항목에 병합되는 등 새롭게 개정된 내용이 있음.
[OWASP TOP 10(2021) 항목]
A01: Broken Access Control(접근 통제 권한 취약점)
- 접근 제어가 취약하면 사용자는 주어진 권한을 벗어나 데이터를 무단으로 열람하거나 수정, 삭제 등의 행위가 가능하게 됨
- 대표적으로 클라이언트, 서버 단에서의 매개변수 값 변조에 의해 접근 권한을 벗어날 수 있게 되며 타 사용자의 데이터 무단 열람, 수정, 삭제 등이 가능해짐
- 메소드(post, get, delete 등)이 API 요청에 대한 접근 제어가 누락된 경우도 있음
A02: Crytograthic Failures(암호화 오류)
- Sensitive Data Exposure(민감 데이터 노출)의 명칭이 2021년에 암호화 오류로 변경됨.
- 적절한 암호화가 되어 있지 않으면 민감한 데이터가 노출될 수 있음.
- 예를 들어 SSL 프로토콜 미적용으로 인한 평문 노출, 클라이언트에서 마스킹 처리 되어 있지만 응답값 내에선 중요 정보 등이 평문으로 노출 되는 등이 있음.
A03: Injection(인젝션)
- 2013년도 부터 계속 1위를 차지했지만 2021년에는 3위가 됨
- SQL, NoSQL, OS, LDAP, EL, OGNL 등의 인젝션 취약점은 신뢰할 수 없는 데이터 명령어나 조작된 쿼리문을 통해 서버로 전송될 때 취약점이 발생함
- 대표적으론 SQL Injection이 있지만 종류가 다양하며 최근엔 프레임워크에도 SQL 인젝션 방어가 다 되어 있지만 옛날 서버에선 종종 Injection 취약점이 발생되는 곳이 있기 때문에 알아두는게 좋음.
- XSS 공격도 2021년엔 인젝션 항목에 포함되었으며 사용자 제공 데이터 조작 공격은 모두 인젝션 항목으로 통일됨.
A04: Insecure Design(안전하지 않은 설계)
- 2021년에 새로 신설된 항목으로 코드 구현 단계에 앞서 기획과 설계 단계에서 발생하는 보안 결함을 의미함
- 개발을 완료한 후에 소스 코드를 수정해도 보안 결함을 완벽하게 방어하는덴 한계가 존재함
- 소프트웨어 개발보안 방법론은 총 5가지의 단계가 존재함
A05: Security Misconfiguration(보안 설정 오류)
- 보안 설정 오류는 애플리케이션을 최초 설치하거나 업데이트 시 보안성을 고려하지 않은 설정으로 인해 취약점이 발생함
- XXE 항목은 애플리케이션의 잘못된 보안 설정으로 인해 발생하는 취약점 중 하나로 2021년엔 보안 설정 오류 항목에 병합됨.
- 대표적으로 불필요 포트, 불필요한 페이지, 계정 등이 노출되는 취약점이 있으며 그 외에도 관리자 계정(ID/Password)을 디폴트로 사용하거나 에러 정보 노출, 보안 헤더 설정 누락 등이 있음.
A06: Vulnerable and Outdated Components(취약하고 지원이 종료된 구성 요소)
- 2021년에 새롭게 생긴 항목이며 취약하고 지원이 종료된 구성요소, 취약한 버전, 소프트웨어 기술 중단 상태인 소프트웨어를 계속 사용하는 경우 그로 인해 발생할 수 있는 모든 보안 위협을 포함하고 있는 항목임.
- 서비스 구성 모든 요소(OS, WEB/WAS, DB, 어플리케이션 등)이 모두 이 항목에 해당됨
- 대표적으론 지원 종료된 OS 사용, 알려진 취약점이 존재하는 버전의 애플리케이션 사용(Apache, tomcat, nginx 등), 프레임워크 사용(Apache Struts 2, Spring 등), 라이브러리 사용(OpenSSL 등)이 있음
- 최신 버전을 잘 탐색해서 업데이트 하는 것이 중요함
A07: Idetification and Authentication Failures(식별 및 인증 실패)
- 2021년 개정으로 취약한 인증(Broken Authentication) 항목에 식별 실패를 포함 시켜서 조금 더 넓은 의미로 식별 및 인증 실패(Idetification and Authentication Failures) 항목으로 변경됨
- 사용자 신원 확인이나 인증 및 세션 관리에 해당하는 항목이며 여전히 많이 발생되는 취약점임.
- 대표적으론 멀티팩터인증, 비밀번호정책, 인증 실패 제한 부재로 Brute Force 공격이 가능한 것과 Get 메소드로 전송 시 URL에 인증 세션 ID가 노출되는 경우, 세션 타임 아웃이 없는 경우가 있음.
A08: Software and Data Integrity Failures(소프트웨어 및 데이터 무결성 오류)
- 2021년에 신설된 항목으로 기존에 안전하지 않는 역직렬화(Insecure deserialization) 항목이 병합됨.
- 애플리케이션이 신뢰할 수 없는 소스, 저장소 CDN, 플러그인, 라이브러리, 모듈에 의존하는 경우에 발생됨
- 안전하지 않은 CI/CD 파이프라인은 개발 및 배포 과정에서 애플리케이션이 변조되면 무결성이 훼손될 가능성이 있어 애플리케이션이 사용하는 코드에 대한 무결성 검증 절차 추가가 필요함
- 대표적으로 라이브러리나 모듈에 대한 무결성 검증이 없어 변조가 가능하거나 업데이트 공급망에 검증이 없는 경우, 직렬화된 데이터에 대한 무결성 검증이 없는 경우 등이 있음.
A09: Security Logging and Monitoring Failures(보안 로깅 및 모니터링 오류)
- 기존 2017년엔 불충분한 로깅 및 모니터링(Insufficient Logging & Monitoring) 항목이었으나 이번 2021년 개정에서 보안 로깅 및 모니터링 실패(Security Logging and Monitoring Failures) 항목으로 변경됨
- 적절한 로깅과 모니터링이 있어야 대응이 가능하며 취약점 공격 예방 뿐 아니라 공격 발생 감지 및 대응까지 포함 되어야 하는 걸로 개정됨.
- 대표적으로 로그인, 인증 실패, 권한설정 등에 중요 기능 수행에 대한 로깅이 없거나 일정 주기로 로그에 대한 백업이 없는 경우, 불명확한 로깅 및 모니터링을 하는 경우가 있다. 이러한 경우를 예방하기 위해선 침해 사고 대응 절차의 대한 복구 계획 수립이 있음.
A10: Server-Side Request Forgery(SSRF, 서버 측 요청 변조)
- 2021년에 신설된 항목으로 애플리케이션이 사용자 제공 데이터를 적절한 검증 없이 로컬 및 원격 리소스를 가져와 취약점을 발생시킴.
- 서버 측에 있는 값을 조작해서 공격한다는 특징을 가지고 있으며 서버 권한에 대한 신뢰 관계를 이용해 공격함.
- 대표적으로 서버가 적절한 검증 절차 없이 사용자 요청을 신뢰하여 로컬이나 원격 리소스 데이터에 접근하도록 하는 경우가 있음.
- 모든 사용자 요청에 대해 검증을 할 필요가 있으며 내부 네트워크끼리 통신할 때도 방화벽에 접근 제어 규칙 패턴을 생성해 모니터링 하는 것이 좋음.