The Open Web Application Security Project Top 10 (OWASP Top 10)
웹 애플리케이션의 가장 심각한 보안 위험 10가지를 정리한 보고서.
이 프로젝트는 전 세계 보안 전문가들의 연구와 실제 데이터를 기반으로 주기적으로 업데이트된다.
주요 특징:
- 정기적인 업데이트: OWASP Top 10은 3~4년 주기로 업데이트되며, 가장 최근 버전은 2021년에 발표되었다.
- 데이터 기반 선정: 취약점 순위는 공격 가능성과 기술적 영향을 기준으로 매겨진다
- 커뮤니티 참여: 업계 전문가들의 설문조사와 사용자 제공 데이터 분석을 통해 선정된다.
목적:
- 보안 인식 제고: 개발자, 설계자, 아키텍트, 관리자 및 조직에 가장 중요한 웹 애플리케이션 보안 위험에 대한 인식을 높인다.
- 보안 실천 장려: 이러한 위험에 대한 대응 방법을 제시하여 보안 실천을 장려한다.
- 표준 제공: 많은 기관과 기업에서 애플리케이션 개발 및 보안성 검토 기준으로 활용된다.
중요성:
- 취약점 인식: 개발자와 보안 전문가들에게 주요 취약점에 대한 인식을 제공한다.
- 보안 강화 가이드: 웹 애플리케이션의 보안을 강화하기 위한 실질적인 가이드라인을 제공한다.
- 업계 표준: 많은 조직에서 웹 애플리케이션 보안 평가 및 개선의 기준으로 활용된다.
2021 주요 변경사항:
- 신규 항목 추가: ‘Insecure Design’, ‘Software and Data Integrity Failures’, ‘Server-Side Request Forgery’가 새롭게 추가되었습니다.
- 항목 통합: ‘XML External Entities(XXE)‘와 ‘Cross-Site Scripting(XSS)‘은 ‘Injection’ 항목으로 통합되었다.
2021 OWASP Top 10
- 접근 통제 실패 (Broken Access Control): 사용자가 권한이 없는 리소스에 접근하는 것을 막지 못하는 취약점.
예를 들어, 일반 사용자가 관리자 페이지에 접근하거나, 다른 사용자의 개인정보를 볼 수 있는 경우가 여기에 해당한다. 이를 방지하기 위해서는 모든 요청에 대해 적절한 인증과 권한 검사가 필요하다. - 암호화 실패 (Cryptographic Failures): 민감한 데이터가 제대로 암호화되지 않거나, 취약한 암호화 알고리즘을 사용하는 경우.
예를 들어, 패스워드를 평문으로 저장하거나, SSL/TLS 없이 데이터를 전송하는 것이 이에 해당한다. 강력한 암호화 알고리즘과 안전한 키 관리가 필수적이다. - 인젝션 (Injection): SQL 인젝션, NoSQL 인젝션, OS 명령어 인젝션 등이 여기에 포함된다.
사용자 입력값이 적절한 검증 없이 쿼리나 명령어로 실행될 때 발생한다. 이를 방지하기 위해서는 입력값 검증과 매개변수화된 쿼리 사용이 필요하다. - 취약한 설계 (Insecure Design): 보안을 고려하지 않은 시스템 설계로 인한 취약점.
예를 들어, 비즈니스 로직 오류나 부적절한 접근 제어 설계가 여기에 해당한다. 보안을 설계 단계부터 고려하는 “Security by Design” 원칙이 중요하다. - 보안 설정 오류 (Security Misconfiguration): 기본 계정/패스워드 미변경, 불필요한 기능 활성화, 최신 보안 패치 미적용 등이 해당된다.
모든 환경(개발, 테스트, 운영)에서 보안 설정을 표준화하고 자동화하는 것이 중요하다. - 취약하고 오래된 구성요소 (Vulnerable and Outdated Components): 패치되지 않은 라이브러리, 프레임워크, 운영체제 등을 사용하는 경우.
의존성 체크와 정기적인 업데이트가 필요하며, 사용하지 않는 구성요소는 제거해야 한다. - 식별 및 인증 실패 (Identification and Authentication Failures): 부적절한 인증 메커니즘, 세션 관리 실패, 약한 패스워드 정책 등이 포함된다.
다중 인증(MFA), 강력한 패스워드 정책, 안전한 세션 관리가 필요하다. - 소프트웨어 및 데이터 무결성 실패 (Software and Data Integrity Failures): 검증되지 않은 업데이트, 중요 데이터의 무결성 검증 실패 등이 해당된다.
디지털 서명, 무결성 검사, 신뢰할 수 있는 저장소 사용이 중요하다. - 보안 로깅 및 모니터링 실패 (Security Logging and Monitoring Failures): 보안 이벤트 감지 실패, 부적절한 로깅, 모니터링 부재 등이 포함된다.
효과적인 로깅, 모니터링, 경고 시스템 구축이 필요하다. - 서버 사이드 요청 위조 (Server-Side Request Forgery): 공격자가 서버를 통해 내부 시스템에 접근하는 취약점.
URL 검증, 네트워크 분리, 접근 제어 등의 대책이 필요하다.
취약점 분석 및 대응 방안 상세 가이드
항목 | 주요 취약점 | 방지 방법 | 테스트 방법 | 테스트 도구 |
---|---|---|---|---|
A01: 접근 제어 취약점 | • 인증 우회 • 권한 상승 • 강제 탐색 | • 최소 권한 원칙 적용 • 역할 기반 접근 제어 구현 • 서버 측 접근 제어 강화 | • 권한 없는 사용자로 접근 시도 • URL 조작을 통한 우회 시도 • 권한 상승 시도 | • OWASP ZAP • Burp Suite • Acunetix |
A02: 암호화 실패 | • 취약한 암호화 알고리즘 사용 • 평문 데이터 전송 • 하드코딩된 암호 | • 강력한 암호화 알고리즘 사용 • 모든 민감 데이터 암호화 • 안전한 키 관리 | • 암호화 알고리즘 확인 • 데이터 전송 중 암호화 확인 • 저장된 데이터 암호화 확인 | • Wireshark • OpenSSL • Qualys SSL Labs |
A03: 인젝션 | • SQL 인젝션 • OS 명령어 인젝션 • XSS | • 입력값 검증 및 살균 • 매개변수화된 쿼리 사용 • ORM 프레임워크 활용 | • 다양한 인젝션 페이로드 테스트 • 동적 및 정적 코드 분석 • 자동화된 스캔 도구 사용 | • SQLmap • OWASP ZAP • Acunetix |
A04: 안전하지 않은 설계 | • 부적절한 인증 제어 • 입력값 검증 부재 • 안전하지 않은 자격 증명 저장 | • 보안을 고려한 설계 패턴 적용 • 위협 모델링 수행 • 정기적인 보안 코드 리뷰 | • 설계 문서 검토 • 위협 모델 분석 • 보안 요구사항 검증 | • Microsoft Threat Modeling Tool • OWASP Threat Dragon |
A05: 보안 설정 오류 | • 기본 계정/비밀번호 사용 • 불필요한 기능 활성화 • 상세한 에러 메시지 노출 | • 보안 설정 표준화 • 최소 기능만 활성화 • 자동화된 설정 관리 도구 활용 | • 기본 설정 확인 • 불필요한 기능 점검 • 에러 메시지 노출 확인 | • Nessus • OpenVAS • Nikto |
A06: 취약하고 오래된 구성요소 | • 알려진 취약점이 있는 라이브러리 사용 • 지원 종료된 소프트웨어 사용 | • 정기적인 업데이트 및 패치 • 의존성 관리 도구 사용 • 불필요한 구성요소 제거 | • 구성요소 버전 확인 • 알려진 취약점 데이터베이스 대조 • 자동화된 의존성 스캔 | • OWASP Dependency-Check • Snyk • WhiteSource |
A07: 식별 및 인증 실패 | • 약한 비밀번호 정책 • 부적절한 세션 관리 • 다중 인증 부재 | • 강력한 비밀번호 정책 적용 • 안전한 세션 관리 구현 • 다중 인증(MFA) 구현 | • 비밀번호 정책 테스트 • 세션 관리 취약점 확인 • 인증 우회 시도 | • Hydra • Burp Suite • OWASP ZAP |
A08: 소프트웨어 및 데이터 무결성 실패 | • 무결성 검사 부재 • 신뢰할 수 없는 소스의 데이터/코드 사용 | • 무결성 검사 및 디지털 서명 사용 • 신뢰할 수 있는 저장소만 사용 • CI/CD 파이프라인 보안 강화 | • 무결성 검사 메커니즘 점검 • 데이터/코드 소스 확인 • CI/CD 파이프라인 보안 점검 | • GitGuardian • Snyk • SonarQube |
A09: 보안 로깅 및 모니터링 실패 | • 중요 이벤트 로깅 부재 • 로그 데이터 무결성 부족 • 실시간 모니터링 부재 | • 중요 이벤트에 대한 로깅 구현 • 로그 데이터 무결성 보장 • 실시간 모니터링 및 경고 시스템 구축 | • 로깅 범위 및 품질 확인 • 로그 무결성 검증 • 모니터링/경고 시스템 점검 | • ELK Stack • Splunk • Graylog |
A10: 서버 측 요청 위조 (SSRF) | • 내부 리소스에 대한 무단 접근 • 외부 서비스로의 악의적 요청 | • 사용자 제공 URL에 대한 엄격한 검증 • 화이트리스트 기반 URL 필터링 • 네트워크 분리 및 세그먼테이션 | • 내부 리소스 접근 시도 • 다양한 URL 스키마 테스트 • 에러 메시지를 통한 정보 노출 확인 | • OWASP ZAP • Burp Suite • SSRFmap |
취약점들을 예방하기 위한 핵심 원칙들
- 심층 방어 (Defense in Depth) 여러 계층의 보안 통제를 구현하여 하나의 방어책이 실패하더라도 다른 방어책이 보호할 수 있도록 합니다.
- 최소 권한 원칙 사용자와 프로세스에 필요한 최소한의 권한만을 부여합니다.
- 입력값 검증 모든 사용자 입력은 신뢰할 수 없다고 가정하고, 서버 측에서 철저히 검증합니다.
- 보안 모니터링 지속적인 모니터링과 로깅을 통해 보안 사고를 빠르게 감지하고 대응합니다.