OWASP란? Open Web Application Security Project의 약자로, 오픈소스 웹 애플리케이션 보안 프로젝트입니다. 주로 웹에 관한 정보노출, 보안 취약점 등을 연구하며, 10대 웹 애플리케이션의 취약점을 발표합니다.
OWASP Top 10은 개발자가 웹 애플리케이션을 개발할 때 보안을 강화할 수 있도록 가장 중요한 보안 위험 10가지를 나열한 것입니다. 이는 3~4년에 한 번씩 주기적으로 발표됩니다.
2021은 2017과 비교하여 3개의 항목이 새롭게 추가되었고, 일부 항목이 통합되어 항목이 편성되었습니다.
OWASP Top 10 2021
A01 : Broken Access Control (잘못된 접근제어)
웹 애플리케이션 보안에서 가장 중요하고 흔한 취약점 중 하나입니다. 이 취약점이 발생하면 다른 사용자의 계정 및 데이터에 접근하여 중요파일을 볼 수 있고, 권한을 수정하는 등의 작업도 할 수 있습니다. 따라서 ACL(Access Control List)을 적용하는 것이 좋습니다. 또한 웹 서버 디렉토리 목록을 비활성화하고, 사용자 권한은 최소 권한을 부여해야합니다.
A02 : Cryptographic Failures (암호화 오류)
이전에 민감데이터 노출의 원인이 암호화 오류로 분석되어 해당 취약점 명칭이 '암호화 오류'로 변경되었습니다. 이 취약점이 발생하면 민감데이터 노출의 문제가 발생할 수 있습니다. 따라서 민감한 데이터는 불필요하게 저장하지 않아야 하며, 만약 민감데이터를 저장해야한다면 최신 암호화 알고리즘을 사용하여 안전하게 암호화해야합니다.
A03 : Injection (삽입 공격)
SQL, Command, LDAP 등 신뢰할 수 없는 데이터가 삽입될 때 발생하며, 예상치 못한 명령을 실행하거나 잘못된 권한으로 데이터에 접근하여 ID, PW, 개인정보 유출 등의 피해를 입을 수 있습니다. 따라서 사용자 입력 값에 대한 특수문자, 키워드 필터링이 필요합니다. 추가로 백엔드의 서버에서 Prepared Statement와 바인딩 변수를 사용하도록 하는 것이 좋습니다.
=> prepared statement는 쿼리를 미리 준비하여 데이터베이스에 저장한 후, 실행 시에는 실행할 데이터만 바인딩하여 쿼리를 실행하는 방식입니다.
A04 : Insecure Design (불안전한 설계)
보안 설계 및 아키텍처의 결함으로 인한 취약점으로, 안전한 설계를 위해서는 위협 모델링, 보안 설계 패턴, SSDLC 등이 필요합니다.
=> SSDLC : Secure Software Development Life Cycle)
A05 : Security Misconfiguration (보안 구성 오류)
2017과 비교하여 한 단계 올라온 이 항목은 취약한 기본구성, 에러 메시지에 불필요한 정보 노출, 잘못된 클라우드 접근 권한 설정 등이 일반적입니다. 따라서 불필요한 기능, 구성요소를 최소화 하고, 샘플 페이지는 제거 해야합니다.
A06 : Vulnerable and Outdated Components (취약하고 업데이트 안되는 모듈 사용)
2017과 비교하여 9위에서 6위로 올라온 이 항목은 OS, DBMS, API, 라이브러리 등의 잘 알려진 취약점을 악용하여 공격이 가능합니다. 관리되지 않은 구성요소, 보안패치가 되지 않은 버전 사용 등의 문제로 발생합니다. 따라서 CVE, CWE를 지속적으로 모니터링 하는 것이 좋습니다. 또한 사용하지 않는 기능, 구성요소를 제거해야하고, 패치 관리 시스템을 사용하는 것이 좋습니다.
A07 : Identification and Authentication Failures (식별 및 인증 오류)
admin, p@ssw0rd, 1234와 같은 기본 암호, 취약하거나 잘 알려진 암호를 사용하는 경우에 발생합니다. 따라서 2Factor 인증을 구현하거나 강력한 비밀번호를 사용하도록 패스워드 설정규칙을 적용하고, 취약한 비밀번호 목록에 대해서는 사용을 금지하도록하는 것이 좋습니다.
A08 : Software and Data Integrity Failures (소프트웨어 및 데이터 무결성 오류)
새롭게 추가된 이 항목은 무결성이 확인되지 않은 소프트웨어 업데이트, 중요데이터, CI/CD 파이프라인의 취약점과 관련이 있습니다. 따라서 무결성 검사 또는 디지털 서명 등을 통해 데이터 변조 여부를 확인하는 것이 좋습니다.
A09 : Security Logging and Monitoring Failures (보안 로깅 및 모니터링 오류)
로깅 및 모니터링을 하지 않는다면 공격자가 언제, 어디서, 어떤 일을 했는지 확인하기 어려워 추적이 불가능합니다. 따라서 공격활동을 감지하고 빠른 대응을 위해 모니터링 및 경고 시스템을 설정해야합니다. 또한 통합 로그 관리 솔루션(ESM, SIEM, NMS)을 사용하는 것이 좋습니다.
A10 : Server-Side Request Forgery (SSRF) (서버 측 요청 위조)
SSRF는 웹 애플리케이션의 서버 측에서 다른 서버로의 요청을 조작할 수 있는 공격입니다. 이 취약점은 내부 네트워크 리소스에 접근하거나, 인증정보를 탈취하는 등의 문제가 발생할 수 있습니다. 따라서 서버사이드 요청에 사용되는 입력값 검증 및 필터링을 강화해야하며, 화이트 리스트 방식으로 사용자 입력에 대한 신뢰할 수 있는 URL 목록을 사용하여 외부 연결을 차단해야합니다.
[참고] https://owasp.org/www-project-top-ten/