정보보안기초 · 11분 읽기

OWASP를 학습과 점검에 연결하기

OWASP Top 10은 주요 웹 위험을 이해하는 출발점이다. 분류 이름을 외우는 데서 나아가 원인·검증·개선 기준을 연결한다.

개념부터 찾아보기

정의·역할·동작 원리를 독립 페이지에서 확인하세요. 본문의 밑줄 용어에도 설명이 있습니다.

이 노트에서 설명할 수 있게 되는 것

  1. Top 10·ASVS·WSTG의 목적과 연결 관계를 구분한다.
  2. 한 요청 경로에 필요한 여러 보안 통제를 배치한다.
  3. CWE 유형과 개별 CVE의 적용 조건을 분리해 기록한다.

01개념과 구성 요소

  • 주요 웹 애플리케이션 위험을 설명하는 공통 분류다. 모든 시험 항목을 담은 완전한 체크리스트는 아니다.
  • 2017·2021·2025는 같은 A번호라도 이름과 범위가 다를 수 있다.
  • 는 약점 유형, CVE는 특정 취약점 식별, 는 검증 요구, 는 시험 방법과 연결된다.

02관찰된 결함을 분류하고 검증 항목으로 바꾸는 순서

  1. 요청·권한·상태 변화에서 관찰한 사실을 먼저 정리한다. 오류 문구 하나를 취약점으로 확정하지 않는다.
  2. 인증··입력 해석·저장·공급망·예외 처리 중 어떤 경계가 원인인지 찾는다.
  3. 분류의 연도와 정식 이름을 함께 선택한다. 여러 통제가 연관되면 원인과 영향의 관계를 설명한다.
  4. 의 요구와 의 시험 관점을 이용해 정상 결과와 거부 조건을 구체화한다.
  5. 원래 재현 입력과 정상 기능을 함께 시험하고 관찰 범위·남은 조건을 기록한다.

03Top 10은 위험 분류와 공통 언어

  • OWASP 은 웹 애플리케이션의 주요 을 이해하는 인식 문서다. “열 가지 공격 문자열 목록”이나 모든 시스템에 동일하게 적용하는 완전한 점검표가 아니다.
  • 한 기능에서 접근통제·입력 해석·인증·로그 문제가 함께 발생할 수 있으므로 번호를 외우는 것보다 데이터 흐름과 보호 경계를 설명하는 데 사용한다.
  • OWASP 에는 2017·2021·2025 등 서로 다른 판본이 있다. 같은 A번호가 다른 연도에는 다른 항목을 가리킬 수 있어 보고서에 A01만 쓰면 의미가 불명확하다.
  • 연도·정식 이름·관련 취약점 유형을 함께 적어 판본별 분류를 구분한다.

042025의 열 범주를 질문으로 읽기

  • 2025 목록은 접근통제, 보안 설정, 공급망, 암호, 인젝션, 설계, 인증, 무결성, 로그·경보, 예외 처리를 다룬다. 각각은 특정 제품 이름이 아니라 실패가 발생하는 영역이다.
  • 예를 들어 입력을 DB 코드에 연결한 결함과 관리자 URL의 권한 누락은 모두 웹 취약점이지만 고치는 경계가 다르다.
항목2025 정식 명칭설계·분석 질문
A01Broken 이 주체가 이 객체에 이 작업을 할 수 있는가
A02Security Misconfiguration불필요한 기능·노출·기본 설정은 무엇인가
A03Software Supply Chain Failures의존성·빌드·배포의 신뢰는 어떻게 검증되는가
A04Cryptographic Failures키·알고리즘·사용법·보관이 요구를 충족하는가
A05Injection외부 데이터가 실행 구문으로 바뀌는가
A06Insecure Design정상 업무 흐름 자체의 보안 조건이 빠졌는가
A07 Failures신원·세션의 수명과 검증이 안전한가
A08Software or Data Integrity Failures코드·자료의 신뢰 경계를 검증하는가
A09 and Alerting Failures행위를 기록하고 조치로 연결할 수 있는가
A10Mishandling of Exceptional Conditions오류·자원 부족에서 안전한 상태를 유지하는가

052017·2021의 개별 항목을 잃지 않기

  • 2017에는 XXE··가 각각 명시된 범주였고 이후 개정에서는 더 넓은 실패 영역으로 묶인 항목들이 있다. 순위표에서 독립 이름이 없어졌다고 해당 기술이 사라지거나 안전해진 것은 아니다.
  • XML 파서의 외부 자원 해석, HTML/ 출력 문맥, 객체 복원 기능의 실행 동작을 별도로 이해해야 한다.
  • 2021에는 Cryptographic Failures·Insecure Design·Software and Data Integrity Failures· 등으로 분류가 재편되었다. 2021 A10은 이고 2025 A10은 예외 조건의 부적절한 처리이므로 같은 항목이 아니다.
  • 과거 항목을 현재 분류에 연결할 때도 당시 이름과 의미를 함께 남긴다.

06구현 결함과 설계 결함

  • 구현 결함은 코드가 의도한 보안 조건을 제대로 적용하지 않은 경우다. 예를 들어 prepared statement를 쓰려 했지만 특정 검색 경로만 문자열 을 만들면 구현 경로가 문제다.
  • 설계 결함은 가격을 클라이언트가 결정하게 하거나 계정 복구를 공개된 개인 정보만으로 허용하는 등 보안 조건 자체가 부족한 경우다.
  • 입력 필터를 추가해도 서버가 상품 가격·소유권·작업 상태를 authoritative하게 판단하지 않으면 업무 조작이 남는다. 쿠폰·수량·금액의 업무 규칙 위반은 특수문자 제거만으로 해결되지 않는다.
  • 정상적으로 보이는 입력의 조합과 순서도 위협 모델에 포함해야 한다.

07공급망·무결성·암호는 겹치지만 다른 질문

  • 의존성의 알려진 취약점은 사용 버전·기능·패치 상태를 대조하고, 빌드·배포 아티팩트의 무결성은 신뢰한 경로에서 만들어진 바이트인지 검증한다. 서명된 악성 기능이나 안전하지 않은 코드가 있을 수도 있으므로 서명이 존재한다는 사실과 취약점이 없다는 사실은 다르다.
  • 암호화 실패도 알고리즘 이름만의 문제가 아니다. 안전한 알고리즘을 사용해도 nonce 재사용, 키 노출, 인증서 검증 누락, 비밀번호의 빠른 일반 해시 저장으로 목적을 달성하지 못할 수 있다.
  • Salt는 비밀번호 해시의 동일 입력 비교와 사전 계산 공격을 어렵게 하는 값이며 일반 암호화의 비밀키와 역할이 다르다.

08로그·경보와 예외의 정상 동작

  • 로그 범주는 중요한 행위를 기록하지 않거나 분석·통지로 이어지지 않아 사건을 알 수 없는 문제를 다룬다. 로그가 쌓인다는 사실과 조사에 필요한 사용자·대상·결과·시각이 있다는 사실은 다르다.
  • 로컬 로그만 공격자 권한으로 변경 가능한 환경과 중앙 원본 보존 환경도 증거 가용성이 다르다.
  • 예외 처리에서는 인증 서비스 timeout을 로그인 성공으로 해석하는 fail-open, 오류 시 DB 연결을 돌려주지 않는 자원 누수, 부분 처리 후 일관성 없는 상태 등을 생각할 수 있다. HTTP 500을 숨기는 것만으로 내부 상태가 안전해지지는 않는다.
  • 정상 결과·거부·시간 초과가 각각 어떤 상태 전이를 하는지 설계해야 한다.

09CWE·CVE·ASVS·WSTG의 관계

  • 는 약점 유형, CVE는 공개된 개별 취약점 식별, 은 넓은 위험 분류이다. 는 검증 가능한 보안 , 는 웹 보안 시험 접근과 절차를 구체화하는 데 사용한다.
  • 서로 대체 관계가 아니므로 “A05를 검사했다”만으로 모든 인젝션 과 입력 경로가 검증된 것은 아니다.
  • 보고서에서는 사용한 버전과 항목 ID를 기록하고 기능의 source→변환→검증→sink→결과를 연결한다. 예를 들어 로그인 API의 문자열 결함은 A05 범주와 약점, 해당 시험 절차와 수정 을 함께 가질 수 있다.
  • 실제 적용 여부는 코드·입력·응답·상태 증거가 결정한다.
원리 심화

10위험 분류를 검증 가능한 요구사항으로 분해하기

  • 범주는 넓은 위험군이다. 범주 하나를 확인했다는 말은 모든 구현·상태·입력 경로가 안전하다는 증거가 아니다.
  • 한 에는 보호 대상·허용 조건·거부 조건·관찰 가능한 결과를 적는다. 검증 기준의 판본과 항목 ID도 고정한다.
  • 요청마다 권한 검사를 호출하는지는 구현 문제이고, 어떤 역할이 환불을 승인할 수 있는지는 업무 정책의 설계 문제다.
  • 위험 범주→구체 약점→코드·설정 위치→시험→증거를 연결하면 같은 원인으로 생긴 여러 증상을 묶을 수 있다.
  • 검증한 버전·배포 설정·권한 역할과 제외 경로를 남긴다. 결과를 다른 환경 전체의 안전성으로 일반화하지 않는다.
예제로 추적

11가상 문서 기능의 권한 시험 행렬

  1. 문서 하나에 소유자·공유 사용자·외부 사용자 세 역할을 두고 읽기·수정·삭제 세 행동을 시험한다고 가정한다.
  2. 역할 3×행동 3=9개 조합이다. 소유자는 세 행동, 공유 사용자는 읽기, 외부 사용자는 모두 거부하도록 정책을 정한다.
  3. 허용 4개·거부 5개를 시험 전에 적는다. 실제 응답을 본 뒤 기대값을 맞춰 바꾸면 결함을 숨기게 된다.
  4. 각 조합에서 상태 코드뿐 아니라 본문 노출·DB 변경·감사 결과를 기록한다. 200 응답에 오류 메시지가 있는 경우도 결과를 분리한다.
  5. 9개가 통과해도 검색·첨부·다른 Tenant·비동기 내보내기는 별도 경로다. 이번 검증의 분모를 9로 명확히 적는다.
검증·예외

12분류표가 검증을 대신하게 되는 오류

  • 문서에 위험 이름이 많다는 사실과 실제 시험 사례가 많다는 사실은 다르다. 요구사항마다 재현 가능한 증거의 유무를 본다.
  • 같은 누락 때문에 생긴 API 여러 건을 각각 다른 근본 원인으로 세지 않는다. 영향 경로 수와 원인 수를 분리한다.
  • 서로 다른 · 판본의 번호를 이름 없이 섞으면 추적이 끊긴다. 번호·명칭·판본을 함께 보존한다.
  • 자동 도구가 찾지 못했다는 결과는 도구의 입력·권한·탐지 범위 안에서만 해석한다. 업무 정책 오류는 별도의 정상·비정상 비교가 필요하다.

13분류를 학습 문서와 시험 범위로 연결하기

  • 이 사이트의 ···접근통제·파일 처리· 문서는 위험 범주를 구체적인 처리 경계로 나누어 설명한다. 암호·인증·관제 문서는 예방과 탐지의 조건을 이어 준다.
  • 한 카테고리에 링크가 있다고 그 항목을 실제 환경에서 모두 시험했다는 의미는 아니다.
  • 분류표에 있는 이름과 실제 재현·수정 증거는 구분한다. 개념 설명에는 성립 조건을, 시험 결과에는 입력·버전·관찰값을 연결한다.
  • 범주 목록을 성과나 인증 취득의 증거로 사용하지 않는다.

설명과 함께 보는 보조 도식

처리 과정

모식도 · 웹 요청 경로의 보안 통제

분류를 외우는 대신 통제가 집행되는 실제 경계를 찾는다.

전체 단계를 한 번에 읽기
  1. 01

    요청 진입

    전송 조건과 기본 요청 형식을 검사한다.

  2. 02

    신뢰 경계 통과

    인증 결과와 현재 자원 권한을 확인한다.

  3. 03

    업무 처리

    입력을 데이터로 처리하고 허용 범위의 저장소를 사용한다.

  4. 04

    증거 생성

    개별 단계의 결과를 요청 식별자로 연결한다.

    주의
    한 계층의 통과가 전체 안전을 뜻하지 않음
구성요소와 데이터 이동을 단순화한 학습용 모식도입니다. 실제 제품의 모든 내부 모듈을 나타내지는 않습니다.
학습 확인

이해했는지 확인하기

  • OWASP 번호를 사용할 때 판본을 함께 적는다.
  • 분류·요구사항·시험 방법 중 어떤 자료가 필요한지 구분한다.
  • 각 위험을 정상·비정상 결과가 있는 검증 항목으로 바꾼다.

함께 확인할 공식 자료