OWASP API Security Top 10 (2023) 소개 및 조치 방안

2024. 11. 6. 00:07 보안 이야기/취약점

API(Application Programming Interface)는 현대 애플리케이션에서 필수적인 요소로, 다양한 서비스 및 시스템 간의 통신을 가능하게 합니다. 그러나 API는 잘못된 설계나 보안 설정으로 인해 주요한 보안 취약점이 될 수 있습니다. 이 포스팅에서는 OWASP API Security Top 10 (2023) 목록과 그에 따른 취약점의 이유, 발견 방법, 그리고 대응 방안을 설명하겠습니다.

 

1. API1: Broken Object Level Authorization (객체 수준 권한 부여의 결함)

  • 취약한 이유: API는 종종 사용자에게 특정 객체에 접근할 수 있는 권한을 부여하는데, 제대로 된 권한 검사를 수행하지 않는 경우, 공격자가 다른 사용자의 데이터에 접근할 수 있습니다.
  • 발견 방법:
    • 권한 없이 접근 가능한 엔드포인트를 수동으로 확인하거나 권한 없는 사용자가 요청을 보냈을 때 응답이 반환되는지 확인합니다.
    • 커맨드라인 예시: Postman이나 curl을 사용하여 인증 토큰 없이 특정 엔드포인트에 접근해 보세요.
    curl -X GET "https://api.example.com/resource/1" -H "Authorization: Bearer invalid_token"
  • 조치 방안: 각 요청마다 사용자의 권한을 철저히 검증하여 해당 사용자만 특정 객체에 접근할 수 있도록 설정합니다.

2. API2: Broken Authentication (취약한 인증)

  • 취약한 이유: 인증 절차가 충분히 견고하지 않으면 공격자가 사용자 계정을 탈취할 수 있습니다.
  • 발견 방법:
    • 잘못된 인증 토큰 사용, 비밀번호 공격 등을 통해 인증 메커니즘의 취약성을 확인합니다.
    • 커맨드라인 예시: Hydra와 같은 도구를 사용하여 비밀번호 대입 공격을 수행합니다.
    hydra -l admin -P passwords.txt https://api.example.com/login http-post-form "username=^USER^&password=^PASS^:Invalid credentials"
  • 조치 방안: 강력한 암호 정책, 2단계 인증(2FA), 그리고 토큰 만료 시간을 짧게 설정하여 보안을 강화합니다.

3. API3: Broken Object Property Level Authorization (객체 속성 수준 권한 부여의 결함)

  • 취약한 이유: 객체의 특정 속성에 대한 잘못된 접근 제어로 인해, 공격자가 비공개 정보를 변경하거나 접근할 수 있습니다.
  • 발견 방법:
    • 객체의 개별 속성에 대해 인증 없이 접근 가능한지 수동으로 확인합니다.
    • 커맨드라인 예시: curl을 사용하여 보호된 객체 속성에 접근합니다.
    curl -X PATCH "https://api.example.com/resource/1" -d '{"role":"admin"}' -H "Content-Type: application/json"
  • 조치 방안: 각 속성마다 명확한 권한 정책을 정의하고 적용하여 불필요한 정보 노출을 방지합니다.

4. API4: Unrestricted Resource Consumption (자원 소비 제한 없음)

  • 취약한 이유: 자원 및 요청 속도를 제한하지 않으면 공격자가 API에 무차별 공격을 가하거나 서비스 거부 공격(DoS)을 유발할 수 있습니다.
  • 발견 방법:
    • 자동화 도구를 사용하여 다수의 요청을 빠르게 전송해보고 서비스의 성능을 확인합니다.
    • 커맨드라인 예시: ab(ApacheBench) 도구를 사용하여 다량의 요청을 보냅니다.
    ab -n 1000 -c 100 https://api.example.com/resource
  • 조치 방안: Rate Limiting을 설정하고 자원 사용에 대한 제한을 명확히 하여 악성 요청을 방지합니다.

5. API5: Broken Function Level Authorization (기능 수준 권한 부여의 결함)

  • 취약한 이유: 특정 API 엔드포인트에 잘못된 권한으로 접근하면, 일반 사용자가 관리자 기능을 실행할 수 있습니다.
  • 발견 방법:
    • 권한을 낮춘 사용자가 높은 권한의 API 엔드포인트에 접근할 때 이를 수동으로 확인합니다.
    • 커맨드라인 예시: 관리자 권한이 필요한 엔드포인트에 낮은 권한의 토큰을 사용해 접근합니다.
    curl -X POST "https://api.example.com/admin/action" -H "Authorization: Bearer low_privilege_token"
  • 조치 방안: 각 엔드포인트에서 접근 권한을 철저히 검증하고 역할 기반의 접근 제어(Role-Based Access Control, RBAC)를 적용합니다.

6. API6: Unrestricted Access to Sensitive Business Flows (민감한 비즈니스 흐름에 대한 무제한 접근)

  • 취약한 이유: 민감한 비즈니스 로직에 대한 접근이 충분히 통제되지 않으면, 중요한 비즈니스 기능이 노출될 수 있습니다.
  • 발견 방법:
    • 민감한 흐름에 대한 테스트를 통해 접근 제어가 제대로 적용되어 있는지 확인합니다.
    • 커맨드라인 예시: 민감한 작업 흐름을 비인가된 사용자가 시도합니다.
    curl -X POST "https://api.example.com/transaction/process" -H "Authorization: Bearer guest_token"
  • 조치 방안: 민감한 비즈니스 흐름에 접근할 수 있는 권한을 제한하고, 권한이 없는 사용자의 접근을 차단합니다.

7. API7: Security Misconfiguration (보안 설정 오류)

  • 취약한 이유: 잘못된 보안 설정은 API에 의도치 않은 접근을 허용할 수 있습니다.
  • 발견 방법:
    • 보안 설정을 수동으로 검토하거나, 자동화된 도구로 구성 오류를 확인합니다.
    • 커맨드라인 예시: Nikto 도구를 사용하여 서버 설정 오류를 점검합니다.
    nikto -h https://api.example.com
  • 조치 방안: 보안 설정을 정기적으로 검토하고, 필요하지 않은 서비스나 기능은 비활성화합니다.

8. API8: Injection (인젝션)

  • 취약한 이유: 인젝션 취약점은 SQL, NoSQL, Command 인젝션 등으로 이어져 시스템에 악의적인 명령이 실행될 수 있습니다.
  • 발견 방법:
    • 다양한 입력 필드를 통해 인젝션 공격을 시도하여 응답을 분석합니다.
    • 커맨드라인 예시: sqlmap 도구를 사용하여 SQL 인젝션 취약점을 탐지합니다.
    sqlmap -u "https://api.example.com/resource?id=1" --batch
  • 조치 방안: 모든 입력 값을 철저히 검증하고, 매개변수화된 쿼리와 같은 안전한 코딩 방식을 사용합니다.

9. API9: Improper Assets Management (잘못된 자산 관리)

  • 취약한 이유: 오래된 또는 잘못 관리된 API 엔드포인트가 여전히 노출되어 있으면 공격의 표적이 될 수 있습니다.
  • 발견 방법:
    • API 인벤토리를 작성하고, 테스트 및 프로덕션 환경에 존재하는 모든 API를 검토합니다.
    • 커맨드라인 예시: nmap을 사용하여 공개된 엔드포인트를 탐색합니다.
    nmap -p 80,443 --script http-enum example.com
  • 조치 방안: 최신 API 인벤토리를 유지하고 사용하지 않는 엔드포인트는 즉시 폐기합니다.

10. API10: Insufficient Logging & Monitoring (불충분한 로깅 및 모니터링)

  • 취약한 이유: API 사용 내역을 제대로 기록하지 않으면 보안 사고가 발생했을 때 이를 탐지하고 대응하기 어렵습니다.
  • 발견 방법:
    • 로그가 제대로 기록되고 있는지, 보안 관련 이벤트가 모니터링 되고 있는지 점검합니다.
    • 커맨드라인 예시: Splunk나 ELK Stack을 통해 로그 데이터를 검토합니다.
  • 조치 방안: 모든 API 요청과 보안 이벤트를 충분히 로깅하고, 이를 실시간으로 모니터링하여 이상 징후를 탐지할 수 있도록 합니다.

결론

API는 외부와의 연결 지점인 만큼 보안에 각별히 주의해야 합니다. OWASP API Security Top 10 (2023)은 가장 흔히 발생하는 API 취약점을 명확히 하여 개발자와 보안 팀이 이를 인지하고 대응할 수 있도록 돕습니다. 각 항목별로 해당 취약점을 발견하고 방어하는 방법을 숙지하고, 정기적으로 API 보안을 점검하는 것이 중요합니다.

API 보안을 철저히 준비하여 안전한 서비스를 유지하세요!