API 보안은 거의 모든 애플리케이션에서 처리해야 하는 가장 중요한 측면 중 하나입니다.
요즘 API는 애플리케이션을 다른 애플리케이션과 통합하는 가장 좋은 방법입니다. API는 애플리케이션에 게이트웨이를 제공하므로 원치 않는 방문자가 들어오지 않도록 API가 충분히 안전해야 합니다.
애플리케이션에 위협이 될 수 있는 몇 가지 API 취약점을 살펴보겠습니다.
목차
일반적인 API 취약점
#1. XSS(교차 사이트 스크립팅)
XSS 공격은 웹 애플리케이션에서 흔히 발생하지만, 들어오는 사용자 데이터가 적절하게 삭제되지 않으면 API를 통해서도 발생할 수 있습니다. 공격자는 서버에서 악성 스크립트를 실행하고 민감한 데이터에 접근할 수 있습니다.
#2. 속도 제한 위반
API의 속도 제한 기능을 위반하면 공격자가 엄청난 수의 요청으로 서버를 공격할 수 있는 기회를 얻을 수 있습니다. 결국 서버가 중단될 수 있으며 고객 기반이 귀하에게 연락하는 데 어려움을 겪을 수 있습니다.
#삼. 부적절한 인증
API가 신뢰할 수 있는 인증 방법을 사용하여 올바르게 구성되지 않으면 제3자가 API를 통해 시스템에 접근할 수 있습니다. 승인은 지정된 시간까지 누가 어떤 API 리소스에 액세스할 수 있는지 정의하기 때문에 중요합니다.
#4. 안전하지 않은 데이터 전송
API 소비자에게 전송되는 데이터는 도중에 암호화되어야 합니다. 그렇지 않은 경우 공격자가 중간자 공격을 사용하여 데이터가 유출될 가능성이 있습니다. 그렇기 때문에 항상 HTTPS와 같은 보안 프로토콜을 사용하여 데이터를 전송하는 것이 좋습니다.
#5. 더 이상 사용되지 않거나 오래된 종속성
API에는 복잡한 작업을 수행하고 일부 복잡한 논리를 오프로드하는 데 사용되는 많은 외부 종속성이 있습니다. 해당 종속성에 취약성이 있는 경우 간접적으로 API도 취약해집니다. 항상 종속성 버전을 업데이트하세요.
이제 API 취약성을 알았으니 API를 보호하기 위한 몇 가지 모범 사례를 살펴보겠습니다.
또한 읽어 보세요: 개발자를 위한 테스트 API에 대한 최고의 Postman 대안
API 보안 – 모범 사례
API 버전 관리
업데이트된 종속성으로 API를 정기적으로 모니터링하고 업데이트하는 것이 중요합니다. 이러한 종속성에는 주요 취약점이 포함될 수 있기 때문입니다. 에 따라 API 패치 버전을 출시하여 API 사용자에게 알릴 수 있습니다. 의미론적 버전 관리.
API를 최신 상태로 유지하는 것은 공격자가 API를 악용하는 것을 방지하기 위한 최소한의 조치입니다.
입증
API 사용자를 인증하는 방법에는 여러 가지가 있습니다. 가장 간단한 방법은 사용자 이름/비밀번호 접근 방식을 사용하는 것이지만 이는 너무 기본적이며 비밀번호의 강도에 따라 달라질 뿐입니다.
또 다른 방법은 API 키를 사용하여 API에 액세스하는 것입니다. 각 API 사용자에게 사용할 수 있는 고유 키를 제공할 수 있습니다.
JWT 인증은 사용자 자격 증명을 디지털 서명된 토큰으로 변환한 다음 사용자에게 보내는 기술입니다. 그런 다음 사용자는 서버가 유효성을 검사할 수 있도록 각 요청에 대해 동일한 토큰을 서버에 다시 보냅니다. JWT에도 만료 시간이 있습니다.
가장 효과적인 솔루션은 OAuth입니다. 기존 로그인 자격 증명을 사용하여 API에 대한 타사 액세스를 허용합니다. 예를 들어, 이미 Google에 로그인한 경우 애플리케이션은 해당 자격 증명을 사용하여 비밀번호 없이 계정에 로그인할 수 있습니다. 귀하의 Google 계정이 비밀번호가 됩니다.
권한 부여
승인은 인증과 다릅니다. 사용자에게 권한을 부여하는 동안 해당 사용자는 이미 API를 사용하도록 인증되었으며, 이는 사용자가 액세스할 수 있는 API 리소스에 불과합니다.
예를 들어 대학 교수는 일괄적으로 모든 학생에게 액세스할 수 있지만 한 명의 학생만 해당 데이터에 액세스할 수 있습니다. 이 경우 학생과 교수는 동일한 시스템에 인증되지만 특정 작업만 수행할 수 있는 권한이 부여됩니다.
API 인증이 제대로 작동하는지 확인하면 리소스에 대한 무단 액세스를 방지할 수 있습니다.
데이터 편집
데이터 편집은 사용자에게 정보를 선택적으로 공개하고 민감한 정보를 보호하는 프로세스입니다. 적절한 승인을 통해 더 나은 데이터 편집이 가능해집니다. GDPR과 같은 데이터 개인 정보 보호 규정도 데이터 편집을 기반으로 합니다. 원치 않는 제3자가 개인 데이터나 민감한 데이터를 엿볼 수 없어야 합니다.
미들웨어나 게이트웨이 관리자를 구현하여 데이터 반응을 구현할 수 있습니다.
암호화
이는 오늘날 세계에서 가장 중요한 보안 점검이 되었습니다. 모든 종류의 민감한 정보를 처리하는 경우 암호화는 필수입니다. 수행할 수 있는 최소한의 암호화는 TLS(전송 계층 보안) 핸드셰이크와 SSL(보안 소켓 계층)을 사용하는 HTTPS 프로토콜을 사용하는 것입니다.
엔드투엔드 암호화는 전송 중인 데이터를 엄격하게 보호하는 또 다른 방법입니다. 공격자가 데이터베이스에 침입하여 데이터에 액세스할 수 있는 경우 데이터베이스에 저장된 데이터도 암호화되어야 합니다.
오류 처리
애플리케이션의 인프라에 대한 정보는 자세한 오류 메시지를 통해 공격자에게 유출될 수 있습니다. 이를 방지하려면 오류 메시지를 일반적으로 유지하고 사용자 정의 오류 처리를 구현하십시오. 오류 세부 정보에 민감한 시스템 정보가 기록되지 않았는지 확인하세요.
입력 검증 및 데이터 위생화
사용자가 입력을 보내기 전까지는 입력을 알 수 없으므로 API를 처리할 때 입력 유효성 검사는 매우 중요합니다.
삭제는 페이로드에서 원치 않는 실행 코드를 제거하는 프로세스입니다. 공격자는 Javascript 스크립트를 입력할 수 있으며 HTML에 전달하기 전에 이를 삭제하지 않으면 스크립트로 실행되어 데이터를 가져옵니다.
부적절한 정리 작업은 XSS(교차 사이트 스크립팅) 공격으로 이어질 수 있습니다.
침입 탐지 시스템
IDS라고도 알려진 침입 감지 시스템은 API로 들어오는 네트워크 트래픽을 모니터링하고 감지하는 데 도움이 됩니다. 트래픽에서 비정상적인 동작을 발견하면 관련 당국에 기록하고 경고할 수 있습니다.
일반적으로 시스템에는 네트워크 기반과 호스트 기반의 두 가지 유형이 있습니다. 네트워크 기반 시스템에서는 시스템이 여러 체크포인트에 분산되어 여러 지점에서 트래픽을 모니터링합니다. 호스트 기반 시스템에서는 단일 호스트에 배포됩니다.
이러한 시스템은 데이터가 방해를 받기 전에 누가 네트워크에 액세스하려고 하는지 판단할 수 있는 좋은 방법입니다.
IP 화이트리스트
IP 화이트리스트는 선택된 IP 주소만 귀하의 API와 네트워크에 액세스하도록 허용하는 방법입니다. 이 기술은 모든 IP를 나열하기에는 너무 복잡하기 때문에 공개 API가 있는 경우 작동하지 않을 수 있습니다.
시스템의 애플리케이션 중 일부만 API에 액세스한다는 것을 알고 있는 경우 유용합니다.
JSON 웹 토큰
JWT는 일반적으로 사용자의 자격 증명에서 생성된 디지털 서명된 토큰을 사용자에게 전송하여 사용자를 인증하는 데 사용됩니다. 이는 사용자의 실제 자격 증명을 숨기기 때문에 작동하며 데이터베이스나 사용자 측에 자격 증명을 저장할 필요도 없습니다.
JWT는 헤더, 페이로드, 서명의 세 가지 섹션으로 나눌 수 있습니다. 페이로드 섹션에는 사용자 자격 증명이 포함되고 헤더에는 사용된 알고리즘과 같은 정보가 포함될 수 있습니다. 서명 섹션은 각 후속 요청에서 서버와 클라이언트에 의해 디지털 서명됩니다.
JWT에는 일반적으로 만료 날짜가 있으며, 그 이후에는 서버에서 새 토큰이 생성된 다음 사용자에게 전송됩니다.
로깅 및 모니터링
API에 대한 트래픽을 모니터링하면 원치 않는 방문자를 사전에 감지하고 식별하는 데 도움이 될 수 있습니다. 각각의 모든 요청을 모니터링할 수 있지만 로그에 민감한 정보가 포함되어 있지 않은지 확인하세요.
속도 제한
API가 속도 제한을 구현하지 않으면 예기치 않은 네트워크 트래픽 유입으로 인해 DDoS 공격에 취약합니다. 공격자는 짧은 시간 내에 엄청난 수의 요청으로 시스템을 가득 채울 수 있으며 결국 서버가 중단될 수 있습니다.
제한 및 속도 제한 API는 API 트래픽 흐름을 제한하여 서비스 거부 공격을 방지합니다.
안전한 종속성
취약점은 API 코드에서만 나타나는 것이 아니라 API에서 사용 중인 타사 종속성의 일부일 수도 있습니다. 그렇기 때문에 종속성을 정기적으로 모니터링 및 검사하고 종속성에 존재할 수 있는 취약점을 검색하는 것이 중요합니다.
취약성을 해결하는 패치 버전으로 업데이트할 수 있는 경우 종속성을 정기적으로 검사하고 업데이트하도록 예약된 작업을 구현할 수 있습니다. 또한 더 안전하고 보안 업데이트를 자주 제공하는 종속성을 선택하세요.
보안 헤더는 API 응답과 함께 반환되어 브라우저에 API 보안 및 작동 방식을 알려야 합니다. 보안을 강화하기 위해 보낼 수 있는 중요한 헤더는 다음과 같습니다.
- Cache-Control: 브라우저에 민감한 정보가 저장되는 것을 방지하려면 no-store로 설정하세요.
- Content-Security-Policy: 프레임 조상 ‘없음’으로 설정하면 iframe에서 API 응답 프레이밍을 방지합니다.
- Content-Type: 이 헤더가 없으면 브라우저가 API 응답 유형을 추측하려고 시도하고 스니핑 공격으로 이어질 수 있으므로 이 헤더가 중요합니다. JSON 응답의 경우 application/json으로 설정할 수 있습니다.
- X-Content-Type-Options: 응답의 MIME 유형을 추측하지 않고 Content-Type 헤더에서만 찾도록 브라우저에 지시하려면 nosniff로 설정합니다.
보안 표준 및 프레임워크
사전 정의된 보안 표준 및 프레임워크를 사용하여 API를 설계하여 API가 최신 보안 고려 사항으로 최신 상태인지 확인하세요.
토큰 만료
Bearer 토큰을 사용하는 경우 사용자 재인증이 필요하므로 토큰 만료 시간이 짧아야 합니다. 이는 좋은 일입니다. JWT에는 일반적으로 액세스 토큰과 새로 고침 토큰이라는 두 가지 토큰이 있습니다. 새로 고침 토큰은 수명이 긴 반면 액세스 토큰은 수명이 짧습니다. 어떤 경우든 토큰에는 만료 시간이 있어야 합니다.
웹 애플리케이션 방화벽
웹 애플리케이션 방화벽이라고도 불리는 WAF는 악성 네트워크 트래픽을 모니터링, 필터링 및 차단하는 게이트웨이입니다. HTTP 프로토콜을 통한 악의적인 공격을 방지하는 가장 좋은 방법인 경우가 많습니다.
API 게이트웨이 사용
API 보안을 쉽게 설정하고 API 경로 및 액세스를 관리하려면 API 게이트웨이를 선택하세요. 또한 API를 모니터링하는 데 사용할 수 있는 모니터링, 로깅 및 분석 도구도 제공합니다.
제로 트러스트
제로 트러스트 전략의 기본 아이디어는 중앙화된 소스를 신뢰하지 않는 것입니다. 보안은 여러 체크포인트에서 계층화되고 구현되어야 합니다.
기본적으로 누구도 신뢰할 수 없습니다. 심지어 API 작업을 하는 개발자도 마찬가지입니다. 보안 위반을 방지하려면 각각의 모든 게이트웨이를 모니터링하고 분석해야 합니다.
이러한 경우에는 자동화가 유용합니다. 자동화된 도구를 사용하여 비정상적이거나 의심스러운 활동을 정기적으로 모니터링하고 차단할 수 있습니다.
최종 단어
API를 안전하게 유지하기 위해 할 수 있는 일은 너무 많습니다. 소프트웨어에는 악용될 수 있는 허점이 항상 존재합니다. 이러한 허점으로 인해 제로데이 취약점이 발생합니다. 따라서 API를 보호하기 위해 할 수 있는 최소한의 일은 API를 최신 보안 표준으로 업데이트하는 것입니다.
최고의 동적 애플리케이션 보안 테스트 도구를 살펴보세요.