
인젝션, 인증 실패, 접근 제어 같은 OWASP Top 10 항목을 모두 챙겨도 사고는 납니다. 프록시와 서버가 같은 요청을 다르게 읽고, 같은 쿠폰 요청이 동시에 두 번 들어오고, 정상 기능이 봇의 속도로 쓰이고, 재시도가 서비스를 스스로 멈춥니다. 이 시리즈는 01~09편에서 OWASP Top 10(2025)에 독립 항목이 없는 공격 20가지를 개념부터 설명하고, 서버 코드와 아키텍처로 막는 방법을 정리합니다. 첫 편은 2026년 10월 북한이 바이낸스에서 64억 달러를 빼낸 사건입니다. 10~20편은 Top 10 안의 기본기와 사고 대응을 짧은 개념과 간단한 Spring Boot 예시 코드로 정리합니다.
이 시리즈의 공격을 실제 쇼핑몰 코드에서 직접 재연하고 막아 보는 인프런 강의가 열렸습니다. 실제 해킹 사고로 배우는 Spring Boot·Express 시큐어 코딩
| 편 | 글 | 다루는 공격 |
|---|---|---|
| 01 | 바이낸스 64억 달러 탈취 해부: EIP-7702 위임과 서명 시스템 장악, 세탁 경로, 그리고 서버·클라이언트 방어법 | 서명 시스템 장악, 위임 악용, 세탁 (북한 TraderTraitor) |
| 02 | 두 번 해석되는 요청: 파서 차이, 요청 밀반입, SMTP 밀반입을 서버에서 막는 법 | URL·파서 해석 차이, HTTP 요청 밀반입, SMTP 밀반입 |
| 03 | 남의 계정 페이지가 캐시에 남는다: 캐시 속임과 캐시 오염 막기 | 웹 캐시 속임, 웹 캐시 오염 |
| 04 | 경계 밖의 이름이 문을 연다: DNS 리바인딩과 서브도메인 탈취 | DNS 리바인딩, 서브도메인 탈취 |
| 05 | 쿠폰 한 장으로 열 번 할인: 경쟁 조건과 웹훅 멱등성을 DB로 막기 | 경쟁 조건·한도 초과, 웹훅 중복 처리 |
| 06 | 봇과 청구서가 공격이 될 때: 자동화 위협과 비용 고갈 막기 | 카드 테스팅·사재기·프로모 남용, 비용 고갈 |
| 07 | 로그인 말고 복구로 들어온다: 재설정 오염, MFA 피로, SMS 의존, 타이밍 공격 | 비밀번호 재설정 오염, MFA 피로, SMS 단일 인증, 타이밍 |
| 08 | 연동 앱이 뚫리면 내 데이터는: OAuth 토큰 탈취와 토큰 바인딩 | OAuth 동의 피싱·토큰 탈취·재사용 |
| 09 | 정규식 하나, 재시도 하나가 서비스를 멈춘다: ReDoS, HTTP/2 공격, 재시도 폭주 | ReDoS·압축 폭탄, HTTP/2 Rapid Reset·CONTINUATION, 재시도 폭주 |
| 편 | 글 | 다루는 것 | OWASP |
|---|---|---|---|
| 10 | 남의 것이 보인다: 남의 번호 조회, 대량 할당, SSRF를 서버에서 막기 | 소유권 조건, 요청 전용 객체, 나가는 요청 통제 | A01 |
| 11 | 입력이 명령이 될 때: SQL 바인딩, 정렬 허용 목록, 저장형 XSS, 파일 업로드 | 바인딩, 허용 목록, 출력 인코딩·CSP, 업로드 검사 | A05 |
| 12 | 비밀번호가 맞아도: 비밀번호 저장, 크리덴셜 스터핑, 토큰 수명 | 느린 해시, 로그인 속도 제한, 짧은 토큰·회전 | A07 |
| 13 | 교체할 수 있는 키: 서명키 회전과 봉투 암호화 | kid·JWKS, 데이터 키와 마스터 키 | A04 |
| 14 | 코드 밖에 둘 것: 시크릿 저장소, 열린 저장소, 오류 응답과 보안 헤더 | 시크릿 저장소, 망 분리, 공통 오류 응답 | A02 |
| 15 | 확인한 것만 배포한다: SBOM, CI 고정, 이미지 서명, 역직렬화 | 부품 목록, 해시 고정, 서명 확인 | A03·A08 |
| 16 | 7개월을 줄이는 기록: 감사 로그, 대량 조회 탐지, 마스킹, 지울 수 없는 로그 | 감사 로그, 탐지 규칙, 해시 사슬 | A09 |
| 17 | 오류가 나면 문이 열린다: 실패하면 막는 예외 처리 | fail-open 찾기, 실패하면 막기 | A10 |
| 18 | 운영 권한은 필요할 때만: 공용 계정과 상시 권한 없애기 | 개인 계정, 시간 제한 권한 | A01·A07 |
| 19 | 백업이 같이 잠기지 않게: 불변 백업과 복구 훈련 | 객체 잠금, 복구 시간 재기 | — |
| 20 | 사고가 났을 때 첫 한 시간: 대응 런북과 신고 | 격리·증거·연락, 신고 | — |
Top 10은 위험 범주의 목록입니다. 아래 네 갈래의 공격은 "안전하지 않은 설계(A06)"나 "예외 상황 처리 미흡(A10)" 같은 넓은 범주에 흩어져 있어서, 목록만 보고 점검하면 빠지기 쉽습니다.
| 갈래 | 무엇이 문제인가 | 편 |
|---|---|---|
| 두 번 해석 | 두 구성 요소가 같은 입력을 다르게 읽는다 | 02, 03 |
| 경계와 자산 | 코드가 아니라 DNS·연동 앱 같은 자산의 관리 문제 | 04, 08 |
| 동시성과 흐름 | 정상 기능을 정상 순서로 쓰는데 결과가 틀린다 | 05, 06, 07 |
| 가용성과 비용 | 데이터가 아니라 서비스와 청구서가 표적이다 | 06, 09 |
| 서명과 사람 | 키가 아니라 서명하는 시스템과 그 앞의 사람이 표적이다 | 01 |
오늘 본 사고의 원인은 대부분 서버와 코드의 기본기에서 막을 수 있는 것들이었습니다. 직접 손으로 막아 보고 싶다면 이런 강의가 있습니다.
실제 해킹 사고로 배우는 Spring Boot·Express 시큐어 코딩
서버 보안 기초부터 차근차근 시작하고 싶다면 이 강의도 있습니다.
백엔드 개발자를 위한 서버 보안 실무: 해킹 방어부터 정보유출 방지까지