1. WAAP (Web Application and API Protection)

웹 애플리케이션과 API에 대한 보안을 통합적으로 관리 [1][2]

구분 설명
웹 애플리케이션 방화벽
(WAF, Web Application Firewall)
- 웹 공격 대응, 정보 유출 방지, 부정 접근 방지, 웹 위변조 방지 등 웹 애플리케이션 계층에 대한 공격 탐지 및 차단 수행
API 보안 - 웹 애플리케이션 상의 API 통신을 보호하기 위해, 다양한 API 데이터형식의 구문 확인 및 유효성 검사를 하는 등 탐지 및 차단 수행
- API 트래픽 모니터링: API 트래픽을 모니터링하여 비정상적인 활동 탐지
- API 인증 및 권한 관리: API 사용자의 인증과 권한 관리 지원
- API 취약점 관리: API의 알려진 취약점 관리 및 패치 지원
Bot 완화 - Brute force attack, Fingerprinting, Credential stuffing, Scraping 등 웹 애플리케이션을 공격하는 악성 봇을 식별하고 애플리케이션에 액세스하지 못하도록 차단​
DDoS(분산 서비스 거부) 방어 - 애플리케이션 레이어 DoS 방어 기술을 통해 대부분 디도스 공격 방어

 

2. mTLS (Mutual TLS)

서버에 대한 인증(기존 TLS)에 더해 클라이언트에 대한 인증을 추가한 전송 계층 보안프로토콜 [3][4]
> 인증서에는 TLS/SSL 버전 정보, 발급 및 만료 날짜, Cipher Suits, 세션 ID 등이 포함
> 민감한 정보를 제공하는 API 환경에서 유용하며, 제로트러스트 보안 모델을 충족
> 중간자 공격, 스푸핑, 비밀번호 관련 공격, 악성 API 요청에 대응 가능

장점 - 서버와 클라이언트가 상호 인증을 수행하여 TLS 보다 안전
- 데이터 암호화 및 전송 중 무결성 제공
- 인증서 기반 인증을 사용하므로 비밀번호에 대한 의존도를 줄임
- 민감한 데이터와 서비에 대한 클라이언트 접근 통제 강화
단점 - 클라이언트와 서버 모두 인증서를 관리해야 하므로 관리 부담 발생(운영 복잡성, 확장성 문제, 구현 비용 증가 등)
- TLS 대비 느린 속도
- 인증서 유효 기간 문제 또는 손상 등 장애 발생 시 복구 및 장애 처리 복잡

 

[사진 1] mTLS

3. 식별정보 클로킹

API 요청에 포함된 식별정보가 외부에 노출될 경우, 권한을 침해하는 손상된 개체 수준 권한(BOLA) 취약점 발생 가능
> 손상된 객체 수준 권한(Broken Object Level Authorization, BOLA) : 특정 데이터 객체에 액세스하기 위한 사용자 인증을 적절하게 확인하지 못할 때 발생하는 중요한 보안 취약점

 

- 식별정보 암호화 또는 마스킹 처리를 통해 권한 오용 차단
> 안전한 암호화 알고리즘 및 키 길이 사용 [5]
> 공격자가 권한 범위를 초과한 데이터를 조호화지 못하도록 BOLA 방지
> 요청에 포함된 민감 정보의 노출 방지

 

4. API 토큰 인증 및 무결성 검사

- JSON을 사용하는 경우가 많은 API는 주로 JWT(JSON Web Token)를 사용해 사용자의 인증과 권한 관리 [6][7][8]
> JWT의 각 값은 .(dot)으로 구분

JWT 구조
Header - 서명 시 사용하는 키(kid), 사용할 타입(typ), 서명 암호화 알고리즘(alg)의 정보를 저장
Payload - 토큰에서 사용할 정보의 조각들인 Key/Value 형태의 클레임(Claim) 저장
Signature - Header+Payload를 서버의 개인키 및 헤더에서 정의한 알고리즘으로 해시 생성
- 서버는 Signature를 검증하여 위·변조 여부 확인

 

[사진 2] JWT 구조

- JWT 토큰을 검증해 위조·탈취·만료된 토큰 차단
> 손상된 사용자 인증(Broken Authentication) 및 세션 하이재킹 방지

5. API별 허용 임계치 및 메소드 제한

과도한 API 요청은 서버 자원 고갈로 이어져 서비스 거부 공격을 초래할 수 있음
> API 트랜잭션별 허용 임계치 제한과 목적에 맞는 HTTP 메소드 제한이 필요
> 자원 낭비 최소화 및 서비스 안정성 확보

6. JSON 응답 클로킹

- API는 구현 형태에 따라 의도와 다르게 과도한 정보가 제공될 수 있음
> 과도한 데이터 노출(Excessive Data Exposure), 대량 할당(Mass Assignment) 취약점 발생 가능

 

- 클라이언트 요청의 JSON 응답 필드를 클로킹(비노출) 처리
> 데이터 노출 방지를 위해 JSON 컨텐츠 타입에 대한 제어 기능이 필수적
> JSON 응답에서 불필요한 데이터를 클로킹하여 불필요한 정보 노출 방지

7. JSON 요청 필드 검사

클라이언트 요청 필드를 검사해 정당성 여부 판단
> JSON 요청 필드를 확인해 Injection 방지

참고

[1] https://blog.naver.com/pentamkt/223047110284
[2] https://www.datanet.co.kr/news/articleView.html?idxno=188058
[3] https://www.cloudflare.com/ko-kr/learning/access-management/what-is-mutual-tls/
[4] https://www.cloudflare.com/ko-kr/learning/access-management/what-is-mutual-tls/
[5] https://csrc.nist.gov/pubs/sp/800/131/a/r3/ipd?source=post_page-----a346d0ccaefd--------------------------------
[6] https://puleugo.tistory.com/138
[7] https://blog.bizspring.co.kr/%ED%85%8C%ED%81%AC/jwt-json-web-token-%EA%B5%AC%EC%A1%B0-%EC%82%AC%EC%9A%A9/
[8] https://velog.io/@vamos_eon/JWT%EB%9E%80-%EB%AC%B4%EC%97%87%EC%9D%B8%EA%B0%80-%EA%B7%B8%EB%A6%AC%EA%B3%A0-%EC%96%B4%EB%96%BB%EA%B2%8C-%EC%82%AC%EC%9A%A9%ED%95%98%EB%8A%94%EA%B0%80-%EB%B3%B4%EC%95%883
[9] https://www.boannews.com/media/view.asp?idx=135182&page=1&kind=5

'취약점 > API' 카테고리의 다른 글

API 보안 #1 기본  (1) 2024.09.20

- API(Application Programming Interface)

> 여러 프로그램들과 데이터베이스, 그리고 기능들의 상호 통신 방법을 규정하고 도와주는 매개체

 

API 유형
REST API
(REpresentational State Transfer)
- HTTP로 하이퍼 미디어 콘텐츠를 전송하기 위한 하나의 아키텍처 스타일
- 6가지 원칙: 통일된 인터페이스, 클라이언트-서버 구조, 상태 없음(Stateless), 캐시 가능(Cacheable), 계층화 시스템, 주문형 코드
- 단순하기 때문에 현재 가장 널리 쓰이는 API
- 단일한 표준 REST 구조 없음, 큰 페이로드, 데이터 과다/과소 가져오기 등 단점
- 데이터 지향형
GraphQL API - 데이터 처리 부담을 서버로 옮김으로써 REST QPI의 데이터 과다/과소 가져오기 문제를 해결
- 장점: 정교한 질의 가능, 중첩, 강 타입 적용, 발견성
- 단점: DoS에 취약, 필요 이상의 많은 데이터 노출
- 데이터 지향형
RPC API
(Remote Procedure Call)
- 클라이언트는 Stub 라이브러리를 이용해 네트워크로 전송되며, 서버는 호출 정보를 복원한 후 서버 쪽 Stub에서 프로시저 실행 및 결과 반환
- 특정 작업을 원격으로 실행해야 하는 명령 지향적 응용 프로그램들에서 주로 쓰임
- 동작 지향형
SOAP API
(Simple Object Access Protocol)
- 서비스 지향적인 XML 기반 웹 통신 프로토콜로, 표준화되어 있음
- 뛰어난 확장성
- 복잡한 구현과 큰 데이터 페이로드
WebSocket API - 웹 소켓 통신 프로토콜에 기반한 API

 

API 데이터 형식
XML
(eXtensible Markup Language)
- 자료형(데이터 타입)과 독립적
- 내용과 표현을 분리하도록 설계
- 확장성
- 복잡성과 큰 용량 문제로  많이 쓰이지는 않음
JSON
(JavaScript Object Notation)
- 데이터는 키-값 쌍들로 표현
- 키는 항상 문자열이므로 큰따옴표로 감싸야 하며, 값은 정수, 부울형, 문자열 또는 널 값
YAML
(YAML Ain't Markup Language)
- JSON의 불편함(주석 지원 X, 유연하지 않은 문법 등)을 해소하기 위해 만들어짐
OAS
(Open API Specification-명세)
- API의 행동을 정의하기 위한, 사람이 읽기 쉬운 표준 규격으로, 개방형 표준
- OAS에 따라 API를 정의할 때는 YAML, JSON 모두 사용가능
- OAS 정의서부터 만든 후 API 개발 및 운영을 진행하는 방식을 설계 우선 접근 방식

 

- API는 데이터 접속의 표준화 및 편의성, 자동화와 확장성 등 많은 장점을 제공

- 그러나, API는 공격자에게도 인기가 많음

타 시스템과의 상호 연결을 위해 공용 네트워크에 노출된 경우가 많아 공격자 발견 및 접근에 용이

개발 및 통합을 위해 문서화가 잘 되어있어 공격자가 API 작동 방식을 파악하는데 용이

스크립트나 전용 도구를 이용해서 손쉽게 공격을 자동화할 수 있음

API핵심 데이터 자산에 대한 접근을 제공하기 위한 것으로, 공격자의 관심을 끌 수 있는 데이터

⑤ 기존 보안 도구들은 API 보안에 적합하지 않음

 

- OWASP 2019 API Top 10을 공개 후 2023년 목록을 갱신 [1]

OWASP API Security Top10 2023
API1:2023 - Broken Object Level Authorization - API는 개체 식별자를 처리하는 엔드포인트를 노출시키는 경향이 있어 개체 수준 액세스 제어 문제의 광범위한 공격 표면 생성
- 사용자의 ID를 사용하여 데이터 소스에 액세스하는 모든 기능에서 객체 권한 수준을 확인해야 함
API2:2023 - Broken Authentication - 인증 메커니즘은 종종 잘못 구현되어 공격자가 인증 토큰을 훼손하거나 구현 결함을 악용하여 일시적 또는 영구적으로 다른 사용자의 ID를 탈취할 수 있음
- 클라이언트/사용자를 식별하는 시스템의 기능을 훼손하면 전반적인 API 보안이 손상됨
API3:2023 - Broken Object Property Level Authorization - API3:2019 과도한 데이터 노출 및 API6:2019 대량 할당을 결합
- 근본 원인인 개체 속성 수준에서 권한 부여 유효성 검사가 부족하거나 부적절한 취약점
- 이에 따라 권한 없는 사람이 정보를 노출하거나 조작할 수 있음
API4:2023 - Unrestricted Resource Consumption - API 요청을 충족하려면 네트워크 대역폭, CPU, 메모리 및 스토리지와 같은 리소스가 필요
- 이메일/SMS/전화 통화 또는 생체 인식 유효성 검사와 같은 기타 리소스는 API 통합을 통해 서비스 공급자가 사용할 수 있으며 요청량에 따라 비용이 빌생
- 이에 따른 서비스 거부 또는 운영 비용이 증가 가능
API5:2023 - Broken Function Level Authorization - 계층, 그룹 및 역할이 다르고 관리 기능과 일반 기능이 명확하지 않은 복잡한 액세스 제어 정책은 권한 부여 문제가 될 수 있음
- 이를 악용해 다른 사용자의 리소스 및/또는 관리 기능에 액세스할 수 있음
API6:2023 - Unrestricted Access to Sensitive Business Flows - 취약한 API는 기능이 자동화된 방식으로 과도하게 사용되면 비즈니스 흐름을 노출
API7:2023 - Server Side Request Forgery - SSRF 결함은 API가 사용자 제공 URI의 유효성을 검사하지 않고 원격 리소스를 가져올 때 발생할 수 있음
- 이를 통해 방화벽이나 VPN으로 보호될 때에도 응용 프로그램이 예기치 않은 대상으로 제작된 요청을 보낼 수 있음
API8:2023 - Security Misconfiguration - API와 이를 지원하는 시스템은 API를 보다 사용자 정의할 수 있도록 하기 위한 복잡한 구성을 포함
- 잘못된 구성을 하여 다양한 유형의 공격 표면을 노출할 수 있음
API9:2023 - Improper Inventory Management - API는 기존 웹 애플리케이션보다 더 많은 엔드포인트를 노출하고 있어 적절한 명세가 업데이트 되어야 함
- 더 이상 사용되지 않는 API 버전 및 노출된 디버그 엔드포인트가 생기지 않도록 문서가 관리 및 갱신되어야 함
API10:2023 - Unsafe Consumption of APIs - 개발자는 사용자 입력보다 서드 파티 API에서 받은 데이터를 더 신뢰하는 경향이 있으므로 더 취약한 보안 표준이 적용될 수 있음

 

- API 보안 목표

> 오용(Misuse), 남용(Abuse)에 대한 고려-자동화된 스크립팅, 봇, 스크래핑 등-정상적인 사용자 활동과 구별이 어려움

> 데이터거버넌스: 통일적인 API 보안 전략에서 꼭 고려할 사항

> 양성 보안 모델: 허용 목록에 미리 등록해둔 정상적 행위자만 API 백엔드에 접근 가능

> 위험 기반 방법론: 위험도 분석에 기반한 API 보안 우선순위 결정

> 접근제어: API에 접근하는 것이 누구인지 확인하는 인증과 누가 API에 접근할 수 있는지를 결정하는 권한 부여

'취약점 > API' 카테고리의 다른 글

API 보안 기술  (0) 2024.12.19

+ Recent posts