모든 pull request 엔드포인트를 추가하거나 변경하면 API 공격 표면이 바뀝니다. 대부분의 API 보안 도구는 해당 엔드포인트가 실제로 운영되어 트래픽이 발생하기 전까지는 이를 감지하지 못합니다. 그때가 되면 수정은 더 이상 코드 검토에서 한 줄을 수정하는 것으로 해결되지 않고, 사고 대응 논의가 필요하게 됩니다.
API 보안은 애플리케이션이 엔드포인트를 노출하는 방식에서 발생하는 위험 요소를 찾아 해결하는 작업입니다. 즉, 누가 해당 엔드포인트를 호출할 수 있는지, 어떤 데이터를 반환하는지, 그리고 문서에 명시된 대로 작동하는지 여부를 확인하는 것입니다.
이 문제를 해결하기 위해 개발된 대부분의 도구는 공격자가 하는 방식과 동일하게 외부에서 런타임 시에 API를 테스트합니다. 이러한 접근 방식은 효과적이지만, API가 배포된 후에만 작동합니다. 제니 이전 방식대로 작동합니다. 즉, 단 하나의 요청도 엔드포인트에 도달하기 전에 소스 코드와 API 사양을 읽습니다.
API를 테스트하는 네 가지 방법과 각 방법의 장점
대부분의 완성도 높은 프로그램은 이러한 기능 중 하나 이상을 실행합니다.
- 정적 테스트 배포 전에 소스 코드와 API 사양을 분석합니다. "우리가 방금 무엇을 노출했는가?"라는 질문에 대한 답을 찾는 것입니다. 이 글에서는 이러한 접근 방식에 초점을 맞춥니다.
- 동적 테스트(DAST) 실행 중인 API에 실제 트래픽을 전송하고 응답을 관찰합니다. 이를 통해 "현재 실제로 접근 가능하고 악용될 수 있는 것은 무엇인가?"라는 질문에 대한 답을 찾습니다.
- 퍼지기 잘못되었거나 예상치 못한 입력을 엔드포인트에 전달하여 충돌 및 예외적인 오류를 찾아냅니다. 즉, "예상치 못한 입력에서 어떤 오류가 발생하는가?"라는 질문에 대한 답을 제시합니다.
- 수동 침투 테스트 자동화 도구가 놓치는 논리적 오류를 찾아내기 위해 인간의 판단력을 더합니다. 이는 "똑똑한 공격자는 어떤 것을 연결할까?"라는 질문에 대한 답을 제시합니다.
이 중 어느 것도 다른 것을 대체하지 않습니다. 각각은 프로그램 수명 주기의 서로 다른 시점에서 다른 질문에 대한 답을 제시하며, 대부분의 프로그램이 겪는 격차는 바로 첫 번째 질문에 대한 답입니다.
대부분의 API 보안 도구가 위험을 너무 늦게 감지하는 이유는 무엇일까요?
런타임 API 보안 테스트는 실제 애플리케이션에 트래픽을 전송하고 응답을 관찰하는 방식입니다. 이는 합법적이고 필요한 보안 계층입니다. 하지만 본질적으로 런타임 테스트는 지연 지표입니다. 엔드포인트가 존재하고 배포되어 접근 가능해야 런타임 스캐너가 어떤 결과를 보여줄 수 있습니다. 따라서 테스트가 실행되는 동안 이미 해당 엔드포인트는 노출되어 있었을 가능성이 높습니다.
타이밍 문제 이면에는 또 다른 문제가 있습니다. 런타임 도구는 존재하는 것으로 알려진 것만 테스트할 수 있습니다. 엔드포인트가 문서화되지 않았거나, 누군가 새로운 경로를 배포하는 순간 OpenAPI 사양이 구식이 되어버린 경우, 런타임 스캐너는 해당 엔드포인트가 존재하는지 알 방법이 없습니다. 마치 지도를 테스트하는 것과 같죠. 실제 지형을 테스트하는 것이 아닙니다.
정적 API 보안 테스트는 배포 전에 엔드포인트가 정의된 위치, 즉 코드와 API 사양에서 검사를 수행함으로써 두 가지 격차를 모두 해소합니다. pull request 엔드포인트를 도입하는 것은 다음과 같습니다. pull request 그것이 위험성을 드러낸다.
정적 API 보안의 실제 의미는 무엇일까요?
Xygeni는 애플리케이션의 소스 코드와 OpenAPI 및 Swagger를 포함한 API 사양이라는 두 가지 소스를 기반으로 API 인벤토리를 구축합니다.
사양서만으로 구성된 인벤토리는 누군가가 문서화한 엔드포인트만 보여줍니다. 코드만으로 구성된 인벤토리는 존재하는 엔드포인트는 보여주지만, 의도된 사용 방식은 반드시 보여주지는 않습니다. 두 가지 모두를 살펴보면 팀에서 문서화한 엔드포인트와 아무도 문서화하지 않은 엔드포인트를 모두 파악할 수 있습니다.
그 재고 목록은 다른 모든 것의 기반이 됩니다.
- 발견된 총 API 수와 위험에 처한 자산 수를 기준선 대비 측정했습니다.
- HTTP 메서드별로 분류된 엔드포인트
- 서비스별로 분류된 문제들
- 각 엔드포인트는 해당 메서드, 경로, 서비스, 모듈, 인증 상태 및 위험 점수를 포함합니다.
엔지니어링 리더는 티켓을 하나도 열지 않고도 API 표면의 형태를 파악할 수 있습니다.
Xygeni가 발견한 모든 엔드포인트는 해당 메서드, 인증 상태 및 위험 점수와 함께 코드와 명세를 종합하여 구축되었습니다.
Production note API 보안 스크린샷에서 AI 트리아지 패널 부분을 잘라내세요.
OWASP API 보안 Top 10에 맞춰 매핑됨
분석 결과는 보안 팀과 감사 담당자가 이미 사용하고 있는 프레임워크를 뒷받침합니다. Xygeni는 OWASP API 보안 전반에 걸쳐 위험을 탐지합니다. 상위 10개(2023):
| OWASP | 위험 | 실제로 의미하는 바 |
|---|---|---|
API1 | 손상된 개체 수준 권한 부여 | 엔드포인트는 다른 사용자 또는 테넌트에 속한 데이터를 반환하거나 수정합니다. |
API2 | 인증되지 않은 엔드포인트 | 인증 절차 없이도 경로에 접근할 수 있습니다. |
API3 | 과도한 데이터 노출 | 응답에는 호출자가 필요로 하거나 봐야 할 것보다 더 많은 필드가 포함되어 있습니다. |
API3 | 대량 할당 | 엔드포인트가 의도하지 않았던 필드를 수락하고 적용합니다. |
API3 / API10 | 응답에 포함된 민감한 데이터 | 개인 식별 정보(PII), 개인정보보호법(PCI) 또는 건강정보(PHI)가 전송되어서는 안 되는 엔드포인트에서 클라이언트로 전달됩니다. |
API4 | 누락된 요금 제한 | 엔드포인트는 악용이나 무차별 대입 공격으로부터 보호되지 않습니다. |
API5 | 기능 수준 권한 부여 오류 | 엔드포인트가 호출자에게 권한이 있는지 확인하지 않고 권한이 필요한 작업을 수행합니다. |
API7 | SSRF | API를 속여 공격자가 원하는 대로 요청을 보내도록 만들 수 있습니다. |
API8 | JWT 구성 오류 | 토큰 유효성 검사, 서명 또는 만료 설정이 잘못되었습니다. |
API8 | CORS 설정 오류 | 교차 출처 규칙은 악용될 수 있을 만큼 충분히 관대합니다. |
API9 | 좀비 및 고아 엔드포인트 | 더 이상 사용되지 않거나 잊혀졌지만 여전히 접근 가능한 경로, 그리고 소유자가 없는 경로 |
의도적으로 누락된 카테고리가 하나 있습니다. API6, 즉 민감한 비즈니스 흐름에 대한 무제한 액세스는 비즈니스 프로세스가 허용해야 하는 범위를 이해해야 하는데, 어떤 정적 분석기도 이를 확실하게 탐지하지 못합니다. 그렇지 않다고 주장하는 업체는 단순히 체크박스 하나만 팔고 있는 셈입니다. 이 부분은 위협 모델링과 침투 테스트 전문가의 몫입니다.
모든 결과가 동일한 것은 아닙니다: 데이터 민감도 및 유해 조합
단순한 목록 형태의 결과 목록은 인증되지 않은 상태 확인 엔드포인트와 고객 기록을 반환하는 인증되지 않은 엔드포인트를 동일하게 취급합니다. 하지만 이 두 가지는 서로 다른 문제이며, 동일한 점수를 부여하는 우선순위 모델은 팀이 해당 목록을 무시하도록 학습시키는 결과를 초래합니다.
Xygeni는 각 엔드포인트가 처리하는 데이터를 분류하여 요청 매개변수와 응답에서 개인 식별 정보(PII), 개인정보보호법(PCI) 및 건강정보(PHI)를 표시하고 이를 엔드포인트의 인증 상태와 연결합니다.
또한 동일한 엔드포인트에서 발생하는 발견 사항들을 상호 연관시켜, 여러 발견 사항이 복합적으로 발생할 경우 심각도를 높입니다. 응답 과정에서 개인 식별 정보(PII)가 유출되는 것 자체만으로도 심각한 발견 사항입니다. 인증이 필요 없는 엔드포인트에서 동일한 PII가 유출될 경우 더욱 심각한 문제로 간주되며, 플랫폼은 이러한 경우를 즉시 심각한 문제로 평가하여 담당자가 수동으로 발견하도록 합니다.
좀비 엔드포인트와 고아 엔드포인트: 코드와 사양 사이의 괴리
Xygeni는 코드와 API 사양을 나란히 읽기 때문에 서로 다른 부분을 찾아냅니다. 이러한 차이는 다음과 같은 세 가지 패턴으로 나타납니다.
- 문서화되지 않은 엔드포인트. 그것들은 코드에 존재하며 사양에 추가된 적이 없습니다.
- 좀비 엔드포인트. 해당 기능들은 더 이상 사용되지 않거나 서비스가 종료된 것으로 표시되어 있지만, 여전히 접속할 수 있습니다.
- 고아 엔드포인트. 현재 팀 선수 중 누구도 그 카드들의 소유권을 갖고 있지 않습니다.
이러한 항목들은 사양 전용 인벤토리에는 나타나지 않습니다. 왜냐하면 사양 자체가 바로 이러한 항목들이 빠져있는 부분이기 때문입니다.
이건 조치를 취할 수 있는 증거이지, 수사 의뢰서가 아닙니다.
모든 발견 사항은 오류를 발생시킨 정확한 핸들러(파일, 클래스, 메서드, 특정 줄)를 가리키며, 문제가 된 코드도 함께 표시됩니다. 또한 각 발견 사항에는 심각도, OWASP API 보안 Top 10 범주, CWE(임상 예제), 엔드포인트의 인증 상태 및 관련 데이터의 민감도 분류가 포함됩니다.
엔드포인트 이름만 알려주는 오류는 개발자가 문제를 해결하기도 전에 코드베이스 전체를 뒤져보게 만듭니다. 하지만 특정 라인의 이름을 알려주는 오류는 개발자를 즉시 수정 위치로 안내합니다.
결과는 JSON, CSV, Markdown 및 SARIF 2.1.0 형식으로 내보내지므로 해당 폴더에 저장됩니다.팀에서 이미 사용하고 있는 도구입니다.
취약점 노출을 유발한 핸들러, 해당 라인 및 코드입니다. 조사할 티켓이 아닙니다.
이 게임이 다른 콘솔이 아닌 특정 플랫폼에만 존재하는 이유는 무엇일까요?
Xygeni는 API 보안을 실행합니다. SAST, SCA, 비밀 보안, IaC 마지막 단일 플랫폼 내에서, 다음을 통해 상호 연관됨 ASPM별도의 도구로 자체적으로 배송하는 대신 login 그리고 자체적인 업무 적체 문제도 있습니다.
이는 정적 분석 결과와 런타임 분석 결과가 동일한 엔드포인트에 대해 서로 다른 질문에 답하기 때문에 중요하며, 두 가지를 함께 사용할 때 더욱 유용합니다. 정적 분석은 엔드포인트가 배포되기 전에 위험성을 알려주고, DAST는 엔드포인트가 실행된 후 실제로 접근 가능하고 악용될 수 있는 부분을 확인해 줍니다.
이를 두 개의 콘솔로 분할하면 상관 관계가 있는 위험이 서로 관련 없는 두 개의 백로그로 분리됩니다. 아무도 이를 조정하지 않으며, 문서화되지 않고 인증되지 않은 엔드포인트는 어느 대기열에도 포함되지 않습니다.
실제 API 공격 표면을 확인하세요. API 보안은 다음과 같은 형태로 제공됩니다. Enterprise Xygeni 플랫폼의 추가 기능으로, 자체 인프라 내의 저장소를 대상으로 스캔이 실행됩니다.
FAQ
어떤 엔드포인트가 민감한 데이터를 처리하는지 알 수 있나요?
예. Xygeni는 엔드포인트 매개변수 및 응답에서 PII, PCI 및 PHI를 표시하고, 해당 분류를 사용하여 실제 노출 정도에 따라 결과를 순위화합니다.
모든 기기에서 작동하나요? pull request?
예. 증분 스캔은 변경된 엔드포인트만 분석하며, 생성된 매니페스트를 통해 후속 DAST 스캔을 동일한 엔드포인트에 집중할 수 있으므로 정적 테스트와 런타임 테스트가 실제로 변경된 항목에 맞춰 진행됩니다.
내 코드가 내 개발 환경을 벗어나나요?
아니요. 스캔은 고객님의 인프라에서 실행됩니다. 결과만 업로드되며, 전송 중 및 저장 시 모두 안전하게 보호됩니다.
API 보안은 어떻게 확보하나요?
API 보안은 다음과 같은 형태로 제공됩니다. Enterprise 추가 기능입니다. PoC를 요청하시면 함께 범위를 정하겠습니다.





