API Gateway에서 안전한 API 보안

Zeping Bai

November 4, 2022

Technology

서문

2021년 6월, LinkedIn 사용자 데이터의 거의 92%가 보안 제어가 부족한 공개 API를 통해 유출되었습니다. 이 유출된 데이터는 블랙마켓에서 판매되었으며, 7억 명의 사용자 이름, 개인 데이터, 이메일 주소, 전화번호 및 기타 세부 정보를 포함하고 있었습니다. LinkedIn은 이 사건을 불법적인 접근이 아닌 공개 데이터 크롤링으로 간주하지만, 이는 API 보안 조치의 중요성을 강조하는 사례로 남아 있습니다.

애플리케이션이 서비스를 제공하기 위한 외부 인터페이스인 API는 지속적으로 외부 트래픽에 노출되어 있으며, 서비스 거부, 주입, 알려진 취약점을 이용한 공격을 시도하는 적대적인 공격자들을 만납니다. 예를 들어, 공격자들은 2020년 12월에 log4j 2 결함을 이용해 API에 대한 미구성 공격을 수행했습니다. 따라서 이러한 악의적인 공격자들을 차단하기 위해 API의 보안 능력을 강화하는 것이 필요합니다. 그러나 API를 보호하기 위한 조치를 취하기 전에, 먼저 API가 무엇인지 이해해 보겠습니다.

API란 무엇인가?

전통적인 API(Application Programming Interface)는 소프트웨어의 정적 또는 동적 링크 라이브러리를 통해 그 기능을 호출하는 것을 의미합니다. 개발자는 운영 체제가 제공하는 TCP/IP와 같은 API 호출을 기반으로 기존 소프트웨어가 제공하는 기능을 재사용할 수 있습니다.

소프트웨어 시스템과 네트워크의 진화와 함께, 이제 "API"라는 용어는 네트워크를 통해 접근하는 시스템 인터페이스를 의미합니다. 클라이언트는 HTTP와 같은 프로토콜을 사용하여 이러한 인터페이스를 호출하여, 예를 들어 날씨 API를 통해 날씨 정보를 조회하는 등의 클라이언트 기능을 수행합니다.

원래의 의미에서 API는 소프트웨어 시스템이 다른 서비스에 제공하는 채널을 의미하며, 다양한 하위 시스템 간의 상호 운용을 위한 규격을 정의합니다. 예를 들어, 인증 서비스는 사용자 로그인, 등록 및 사용자 정보 획득을 위한 인터페이스를 제공합니다. 다른 서비스는 이러한 호출 인터페이스를 사용하여 사용자 인증 기능을 완료할 수 있습니다. 마찬가지로, API를 통해 하위 시스템은 전체 애플리케이션의 작업을 수행하기 위해 협력할 수 있습니다.

API 보안이란 무엇인가?

API에 대한 개요를 살펴본 후, 이제 API 보안에 대해 소개하겠습니다. API 보안은 세 가지 주요 관점을 포함합니다:

정보 보안 (InfoSec): 정보의 관점에서, 정보가 생성, 전송, 저장 및 파기되는 전체 생명 주기 동안 보호받고 있는지 확인합니다.

네트워크 보안 (NetSec): 네트워크의 관점에서, 네트워크를 통해 전송되는 데이터가 도청되거나 변조되지 않았는지, 그리고 권한이 없는 개인이 네트워크에 접근하지 못하도록 합니다.

애플리케이션 보안 (AppSec): 애플리케이션 시스템의 관점에서, 개발된 애플리케이션이 악의적인 공격을 방어할 수 있는지 확인합니다.

API 보안은 이 세 가지 측면의 교집합이며, 이는 API 보안을 잘 수행하려면 이 세 가지 측면이 모두 필수적임을 의미합니다.

image.png

일반적인 API 보안 공격

OWASP(Open Web Application Security Project)는 일반적인 API 보안 문제 10가지를 발표했습니다 OWASP API Security Project | OWASP Foundation.

이 목록에는 다음과 같은 문제가 포함됩니다:

Broken Object Level Authorization: 사용자가 접근 권한이 없는 데이터 객체에 접근합니다.

Broken User Authentication: 인증 서비스 구현 오류로 인해 사용자가 인증 메커니즘을 우회하여 API에 불법적으로 접근할 수 있습니다.

Excessive Data Exposure: 사용자가 접근해서는 안 되는 과도한 민감한 데이터를 얻을 수 있도록 허용합니다.

Lack of Resources & Rate Limiting: 고객 요구를 충족시키기 위해 필요한 리소스의 수와 현실적인 요청 볼륨에 대한 제한이 부족합니다.

Broken Function Level Authorization: 사용자가 접근 권한이 없는 기능 API에 접근합니다.

Mass Assignment: 잘못 개발된 인터페이스를 통해 사용자가 권한이 없는 데이터를 실수로 변경합니다.

Security Misconfiguration: API에 대한 보안 조치가 잘못 구성되었습니다.

Injection: 신뢰할 수 없는 데이터 입력이 SQL, 명령 주입, 예상치 못한 명령 실행 또는 데이터 접근을 유발합니다.

Improper Assets Management: 테스트 환경을 위한 API 또는 이전의 잘못된 오프라인 API 버전과 같은 API 리소스를 부적절하게 관리합니다.

Insufficient Logging & Monitoring: API 접근에 대한 로깅 및 모니터링 도구가 부족하여 보안 이상을 감지하기 어렵습니다.

API 보안과 관련된 일반적인 문제를 인지한 후, API를 보호하기 위해 무엇을 구현해야 할까요?

API를 보호하는 방법

API를 보호하는 측면에서도 세 가지 관점에서 조치를 취할 수 있습니다:

InfoSec: 법적 정책 및 보안 요구 사항에 따라 정보의 기밀 시스템을 구축하여 개인 정보가 노출되지 않도록 합니다.

NetSec: 데이터 전송의 암호화 및 검증이 필요합니다.

AppSec: 애플리케이션의 보안을 강화해야 합니다.

다음은 API 보안을 위한 몇 가지 추가적인 실천 방법입니다.

지속적인 암호화: 전체 흐름 TLS 설정을 통해 관리되지 않는 네트워크로 인한 데이터 도청 및 데이터 변조 상황을 방지할 수 있습니다. 또한, mTLS를 활성화하여 클라이언트 측의 정확성을 검증하여 권한이 없는 접근을 방지할 수 있습니다.

토큰 사용 시 주의: JWT를 사용할 때는 클라이언트가 이를 디코딩할 수 있으므로, 잘못 사용될 경우 기밀 정보가 노출될 수 있으므로 주의가 필요합니다. 또한, 특정 로그인 세션을 취소할 때는 복잡한 취소 절차로 인해 어려움을 겪을 수 있습니다.

더 작은 권한 세분화: API 및 데이터 접근에 최소한의 권한을 할당하여 권한이 없는 접근 가능성을 방지합니다.

입력 검증: 클라이언트의 입력 값을 신뢰하지 마십시오. 클라이언트의 입력 값이 보안 요구 사항을 충족하는지 검증해야 합니다.

속도 제한: API 접근 속도를 제한합니다. 이 조치는 시스템이 한 번에 처리할 수 없는 요청으로 과부하가 걸리는 서비스 거부 공격을 방지합니다.

로깅 및 모니터링: 시스템에 적절한 로깅 및 모니터링 메커니즘을 설계하면 보안 이벤트를 신속하게 식별하고 적절한 조치를 취할 수 있습니다. 또한, 정보 보안 이벤트 후에 시간을 거슬러 올라가 영향을 받은 시스템과 데이터를 식별하고 잠재적인 데이터 유출의 범위를 결정할 수 있습니다.

위에서 언급한 조치들은 애플리케이션 시스템을 개별 구성 요소를 처리하여 변경해야 하므로 비용이 많이 들 뿐만 아니라 추가 문제를 일으킬 가능성이 높습니다.

애플리케이션 서비스를 위협하지 않고 보안 조치를 어떻게 구현할 수 있을까요?

API 게이트웨이

API 게이트웨이는 시스템 변환 외부에서 새로운 경로를 제공하며, 이는 변환 비용을 크게 줄이고 중앙 집중화된 통합 인그레스 트래픽 관리를 제공합니다. 또한, API 게이트웨이는 풍부한 보안 기능을 제공하여 권한이 없는 접근을 차단하고 기록할 수 있게 합니다.

Apache APISIX를 예로 들어, 다음 섹션에서는 API를 보호하기 위한 몇 가지 API 게이트웨이 적용 시나리오를 설명합니다.

암호화 (TLS/mTLS)

API에 대해 TLS를 활성화하여 HTTPS 접근을 제공할 뿐만 아니라, mTLS를 활성화하여 클라이언트의 신원을 검증할 수도 있습니다. 당연히, 내부 네트워크를 통해 이동하는 트래픽의 보안을 보장하기 위해 업스트림 서비스에 대해 TLS/mTLS를 활성화할 수도 있습니다. 필요한 기능을 활성화하려면 mTLS 매뉴얼을 참조할 수 있습니다.

신원 검증

모든 연결을 암호화할 수 있지만, 이는 API의 보안을 보장하지 않습니다. 따라서 실제 비즈니스 환경에서는 인증과 관련된 구성 요소를 포함해야 합니다. 이 문제를 해결하기 위해 APISIX는 외부 인증 서비스와 쉽게 인터페이스할 수 있거나 게이트웨이를 통해 직접 인증할 수 있는 다양한 플러그인을 제공합니다. 이러한 플러그인은 Basic Auth, Key Auth, JWT Auth, Forward Auth와 같은 간단한 것부터 LDAP, OpenID Connect, Open Policy Agent와 같은 더 복잡한 것까지 다양합니다.

속도 제한

리소스 부족 및 속도 제한은 두 가지 일반적인 공격입니다. 이러한 상황을 위해 게이트웨이는 일반적으로 속도 제한과 관련된 플러그인을 포함합니다; Apache APISIX도 마찬가지입니다. APISIX는 limit-count, limit-req, limit-conn 세 가지 플러그인을 제공하여 API 요청 속도, 요청 측정 및 연결 제한 기능을 제공합니다. 이를 통해 API 접근 압력을 효과적으로 제어하고 시스템이 처리할 수 없는 요청으로 과부하가 걸리는 것을 방지할 수 있습니다.

보안 제한

APISIX는 CORS 및 CSRF 플러그인을 제공하여 API에 대한 크로스 도메인 및 크로스 사이트 요청 위조 보호를 제공하여 보안 능력을 더욱 강화합니다. 또한, IP, UA, Referer, URI를 차단할 수 있는 제한 플러그인을 제공하여 대부분의 API 공격을 방어할 수 있습니다.

입력 검증

APISIX는 request-validation 플러그인을 제공하여 API 제공자가 jsonschema를 통해 사용자 입력을 검증할 수 있게 합니다. 구조화된 데이터 및 검증 규칙 설명 언어는 데이터 검증에 잘 사용될 수 있습니다.

관찰 가능성

위에 나열된 방법들은 모두 API를 보호하는 방법입니다. 그러나 완전히 안전한 시스템은 없습니다. 시스템이 공격을 받으면 공격의 원인을 신속하게 파악하고 공격으로 인한 추가 피해를 방지해야 합니다. 따라서 APISIX는 Kafka, Clickhouse, Google Cloud, Splunk 등과 같은 다양한 목적지로 로그를 전송할 수 있는 다양한 로깅 플러그인을 제공합니다.

또한, APISIX는 Skywalking, OpenTelemetry 및 기타 추적 프로그램과의 연결을 통해 링크 추적 기능을 제공합니다.

또한, APISIX는 Prometheus 플러그인을 제공하여 API 요청과 관련된 메트릭을 계산하고 Prometheus 모니터링 서비스로 내보내어 성능 문제를 식별하고 시스템 서비스 중단을 방지하는 데 도움을 줍니다.

시스템을 충분히 관찰 가능하게 만들어 잠재적인 보안 사건을 적시에 식별할 수 있습니다.

프로그래밍 능력

마지막으로, APISIX는 serverless 플러그인을 제공하여 0-day 취약점을 해결할 수 있게 합니다. 이를 통해 요청이 들어올 때 Lua 코드를 사용하여 일부 로직을 수행할 수 있습니다. 이 기능을 활용하여 0-day 취약점이 발생할 때 일시적으로 차단할 수 있습니다.

결론

API 보안은 서비스 제공자에게 필수적이므로 개발자는 이를 최신 상태로 유지하기 위해 노력해야 합니다. 이 글은 Apache APISIX를 예로 들어 API 게이트웨이가 다양한 애플리케이션 환경에서 어떻게 사용될 수 있는지 보여주며, 이는 시스템 수정과는 다른 새로운 전략으로 개발자가 보안 문제의 비용을 줄이는 데 도움을 줍니다.

Tags: