
API 보안은 현대 소프트웨어 개발에서 매우 중요한 요소입니다. 마이크로서비스와 클라우드 네이티브의 보급으로 API는 기업 시스템의 핵심을 담당하게 되었습니다. 그러나 OWASP API Security Top 10 보고서에 따르면, API 취약점의 75%는 인증 결함, 과도한 데이터 노출, 비즈니스 로직 결함이 원인으로 지적되고 있습니다.
설정 오류나 인증 결함 등 작은 실수가 심각한 취약점으로 이어질 수 있습니다. 특히 개발 기한에 쫓기는 상황에서는 보안 대책이 후순위로 밀리기 쉽습니다.
이 글에서는 API 침투 테스트의 18가지 중요 기술과 도구를 소개합니다. 이러한 지식을 활용하면 더 안전한 API 개발 및 운영이 가능해질 것입니다.
"JWT는 안전하다"고 생각하시나요? 그것은 큰 오해일 수 있습니다!
최근 테스트한 서비스에서는 HS256 알고리즘에 너무 짧은 키를 사용하여 10분 만에 토큰을 위조할 수 있었습니다.
공격 기법:
추천 도구:
jwt_tool <JWT> -C -d wordlist.txt)방어책: RS256/ES256 알고리즘 강제 사용, 적절한 exp/nbf 타임스탬프 설정
OAuth 2.0 구현 오류는 의외로 많습니다. 특히 redirect_uri 파라미터 검증이 약하면 인가 코드가 도난당해 계정 탈취의 위험이 있습니다!
공격 패턴:
authorization_code 탈취redirect_uri 파라미터를 악용한 CSRF 공격테스트 방법:
redirect_uri를 공격자 도메인으로 변경하고, 코드가 붙은 채로 리다이렉트되는지 확인state 파라미터의 누락이나 예측 가능성 확인유용한 도구: OAuth Tester(Burp 플러그인)로 설정 오류 자동 감지
효율화 포인트: 다중 사용자 역할 테스트에는 Apidog의 인증 설정 기능이 효과적입니다. 사용자 권한을 빠르게 전환하여 다양한 시나리오에서 인가 문제를 검증할 수 있어 테스트 효율이 향상됩니다.
API 키가 유출되면 시스템에 대한 불법 접근이 가능해져 보안상 큰 위험이 됩니다. 특히 프론트엔드 JS 코드에 평문으로 작성된 경우 주의가 필요합니다.
체크포인트:
유용한 도구:
주의점: 프론트엔드 JS에 API 키를 하드코딩하면 정보 유출 위험이 높아집니다. 개발 시 충분히 주의해야 합니다.
IDOR(Insecure Direct Object Reference)은 단순하지만 효과적인 취약점입니다. 요청 내 ID를 변경하는 것만으로 다른 사용자의 데이터에 접근할 가능성이 있습니다.
Autorize(Burp 플러그인)로 권한 상승 취약점 자동 감지GET /api/user/123/profile을 GET /api/user/456/profile로 변경RESTful API나 GraphQL에서도 SQL 인젝션은 여전히 존재합니다. 특히 경로 파라미터나 GraphQL 쿼리는 간과되기 쉽습니다.
/api/users?id=1'%20OR%201=1--{user(id:"1' UNION SELECT null,version()--"){name}}--level=5로 복잡한 인젝션 포인트도 감지)MongoDB나 Redis 등 NoSQL 데이터베이스를 사용하는 API도 증가하고 있지만, JSON 형식의 파라미터 조작으로 인증을 우회할 수 있습니다!
{"username": {"$ne": ""}, "password": {"$exists": true}}NoSQLi(Burp 플러그인)로 공격 벡터 자동 생성XML을 받는 API에서 외부 엔티티 파싱이 비활성화되지 않으면 서버 파일 읽기가 가능해질 수 있습니다!
<?xml version="1.0"?>
<!DOCTYPE data [ <!ENTITY xxe SYSTEM "file:///etc/passwd"> ]>
<user><name>&xxe;</name></user>내부 네트워크 접근을 허용하는 취약점입니다. 특히 클라우드 환경에서는 메타데이터 서비스 접근이 위험합니다!
http://169.254.169.254/latest/meta-data/효율화 포인트: 파라미터 이상값 테스트에서는 Apidog의 테스트 데이터 생성 기능을 활용하면 경계값이나 불법 입력을 효율적으로 구성할 수 있습니다. Burp/ZAP와 조합하면 테스트 효율이 향상됩니다.
API가 전송된 모든 파라미터를 무조건 수용하면 본래 변경할 수 없는 필드도 업데이트할 수 있게 됩니다.
isAdmin=true 등)를 필터링하지 않음role=admin 등)를 추가Match and Replace 기능으로 파라미터 자동 추가API 호출 횟수 제한은 약간의 기술로 우회할 수 있는 경우가 많습니다.
X-Forwarded-For 헤더를 변경하여 IP 위장-t 100 -p 3으로 스레드와 지연 설정)CORS 설정 오류는 의외로 많으며, 크로스 도메인에서 데이터 탈취를 허용할 수 있습니다.
Access-Control-Allow-Origin에 *나 제어 가능한 도메인이 포함되어 있는지 확인CORS Scanner(Chrome 플러그인)로 위험 설정 빠르게 식별팀 개발 힌트: 여러 사람의 협업이나 복잡한 비즈니스 시나리오에서는 Apidog의 API Schema 검증이 필드 누락이나 설정 불일치로 인한 로직 취약점을 줄일 수 있습니다. 이는 정말 유용합니다!
API 응답의 상태나 데이터 정합성을 검증하는 테스트 스크립트를 작성하면 지속적인 보안 체크가 가능합니다.
pm.test("상태 코드는 200", () => pm.response.to.have.status(200));
pm.test("응답 시간 < 500ms", () => pm.expect(pm.response.responseTime).to.be.below(500));무료로 고기능 보안 스캐너로서 API 테스트에도 큰 활약을 합니다.
API에 특화된 퍼징 도구로, 예상치 못한 입력에 대한 동작을 테스트할 수 있습니다.
보안 테스트 자동화에 최적인 도구로, 커뮤니티 템플릿이 풍부합니다.
nuclei -t api/ -u https://target.com/api/v1효율화 포인트: 여러 도구 전환은 시간 손실이 될 수 있습니다. Apidog은 설계부터 테스트까지 일관되게 수행할 수 있고, AI 자동 테스트 케이스 생성, CI/CD 통합, Mock 환경 관리도 지원하므로 침투 테스트 중 컨텍스트 전환을 줄일 수 있습니다. 효율 향상으로 이어질 것입니다.
컨테이너 환경에서는 Kubernetes의 API 엔드포인트가 새로운 공격면이 되고 있습니다.
/api/v1/pods, /apis/extensions/v1beta1AWS Lambda 등 서버리스 환경도 침투 테스트 대상입니다.
; whoami 등의 시스템 명령 주입GraphQL은 유연한 반면, 적절히 보호되지 않으면 정보 유출 위험이 높아집니다.
./graphqlmap.py -u http://api.com/graphql -i)InQL Scanner(Burp 플러그인)로 Schema를 시각적으로 분석__typename을 이용해 인트로스펙션 쿼리가 개방되어 있는지 탐색멀티 환경 테스트 포인트: 여러 환경이나 다수의 마이크로서비스가 있는 경우, Apidog의 환경 전환과 그룹 테스트 기능을 사용하면 더 실제 비즈니스 흐름에 가까운 침투 테스트가 가능합니다. 효율적인 테스트 실시에 도움이 될 것입니다.
기술적 방어책:
Access-Control-Allow-Origin: *를 금지관리 대책:
모니터링과 대응:
실천 조언: CI/CD 프로세스에 자동 회귀 테스트를 도입하면 보안 테스트를 개발 라이프사이클 전체에 통합하고, 폐루프 방어를 형성할 수 있습니다. 많은 개발 팀에서는 이 방법으로 릴리스 후 취약점 발견이 크게 감소했다는 보고가 있습니다.
API 침투 테스트에는 도구 활용과 비즈니스 로직 분석을 결합한 접근 방식이 필요합니다. 효과적인 전략으로 다음 "3단계"가 있습니다:
오픈소스 도구와 Apidog과 같은 통합 플랫폼을 결합하면 보안 테스트의 효율과 품질을 향상시킬 수 있습니다.
이러한 기법을 실제 프로젝트에 도입함으로써 API 보안 강화가 가능해집니다.