객체 수준 권한 부여(BOLA)는 공격자가 요청에서 객체 ID를 조작하여 접근 권한이 없는 리소스에 접근할 수 있게 하는 접근 제어 취약점입니다. 이 취약점은 API에서 자주 발생하며, 서버가 클라이언트가 보낸 객체 ID에 의존하여 사용자가 어떤 객체에 접근할 수 있는지를 결정할 때 적절한 권한 검사를 수행하지 않는 경우가 많습니다.
온라인 뱅킹 앱을 상상해 봅시다. 사용자가 자신의 계좌 정보를 조회할 수 있도록 합니다. 사용자는 다음과 같이 자신의 계좌를 조회할 수 있습니다: GET /account/12345. 하지만 만약 앱이 사용자가 해당 계좌를 볼 수 있는지 확인하지 않는다면 문제가 발생할 수 있습니다. 악의적인 사용자가 요청을 변경하여 다른 사람의 계좌를 보려고 할 수도 있습니다. 예를 들어, 그들은 GET /account/67890를 시도할 수 있습니다. 은행 앱은 각 사용자가 자신의 계좌 정보만 볼 수 있도록 보장해야 하며, 그렇지 않으면 정보 유출로 이어질 수 있습니다.
최신 OWASP Top 10에서, 접근 제어 결함은 2017년의 다섯 번째 자리에서 2021년에는 첫 번째 자리에 올라, 가장 중요한 웹 애플리케이션 보안 위험이 되었습니다. 이 취약점은 사용자가 의도한 권한을 넘어 행동을 수행할 수 있게 하여, 무단 정보 공개, 수정 또는 데이터 파괴로 이어질 수 있습니다.
BOLA 취약점으로 인해 발생할 수 있는 문제는 다음과 같습니다:
BOLA 취약점의 발생 원인은 다음과 같습니다:
요약하면, 포괄적인 사용자 인증 및 매개변수 암호화의 부족은 일부 사용자가 허점을 악용하고 임의로 접근 권한을 수정할 수 있게 합니다. 아래 다이어그램은 사용자 A가 리소스 A에만 접근할 수 있음을 보여줍니다. 프로그램의 인증이 불완전할 경우, 사용자는 API를 구성하여 리소스 B에 접근할 수 있어 리소스 B에 접근하고 심지어 수정할 수 있게 됩니다.
BOLA 취약점을 예방하기 위한 몇 가지 주요 조치가 있습니다. 이러한 예방 조치를 구현함으로써 BOLA 취약점의 위험을 크게 줄이고 API를 무단 접근 및 작업으로부터 보호할 수 있습니다.
No. | 예방 조치 | 설명 |
---|---|---|
1 | 객체 수준 권한 검사 구현 | 각 API 엔드포인트에서 사용자가 특정 객체에 대해 작업할 권한이 있는지를 확인합니다. |
2 | 무작위 및 예측 불가능한 ID 사용 | 연속 정수나 쉽게 추측 가능한 ID 사용을 피하여 공격자가 리소스 식별자를 예측하거나 조작할 가능성을 줄입니다. |
3 | 자동 API 생성 제한 | API 엔드포인트를 자동으로 생성하는 도구 사용을 피하여, 각 엔드포인트가 접근 제어 모델을 준수하도록 합니다. |
4 | API 엔드포인트 추적 및 관리 | 정기적인 보안 감사 및 침투 테스트를 수행하여 잠재적인 보안 취약점을 식별하고 수정합니다. |
5 | API 게이트웨이 사용 | 모든 API 요청의 단일 진입점으로 API 게이트웨이를 설치하여 보안 정책을 적용합니다. |
6 | 강력한 인증 및 권한 부여 구현 | OAuth 2.0, JWT 등과 같은 산업 표준 인증 프로토콜을 사용하고 역할 기반 접근 제어를 구현합니다. |
7 | 웹 애플리케이션 방화벽(WAF) 사용 | WAF는 일반 웹 애플리케이션 공격으로부터 기업 API에 추가적인 보호층을 제공합니다. |
8 | 데이터 검증 | 서버에서 수락하는 모든 콘텐츠를 필터링하고 XML 또는 JSON 스키마를 사용하여 매개변수를 검증합니다. |
9 | 요청 속도 제한 | 사용자 또는 IP 주소가 일정 시간 내에 수행할 수 있는 요청 수를 제한하여 무차별 대입 및 DoS 공격을 방지합니다. |
10 | 보안 테스트 | 정기적으로 API 보안 테스트를 수행하여 침투 테스트, 주입 테스트 및 사용자 인증 테스트를 통해 취약점을 식별하고 해결합니다. |
11 | 모니터링 및 패치 | API에서 비정상적인 네트워크 활동을 정기적으로 모니터링하고 최신 보안 패치, 버그 수정 및 새로운 기능으로 API를 업데이트합니다. |
12 | 민감한 데이터 암호화 | SSL/TLS 암호화 프로토콜을 사용하여 API와 클라이언트 애플리케이션 간의 통신을 보호하고 저장된 민감한 데이터를 암호화합니다. |
13 | 접근 제어 목록(ACL) | 특정 리소스에 대한 사용자 접근을 제어하기 위해 ACL을 사용합니다. |
14 | 최소 권한 원칙 | 사용자가 작업을 완료하는 데 필요한 최소한의 권한만 갖도록 하여 과도한 권한을 피합니다. |
15 | 교육 및 훈련 | 개발자에게 보안 인식 교육을 제공하여 API를 안전하게 설계하고 구현하는 방법을 이해하도록 합니다. |
BOLA는 민감한 데이터 유출 또는 무단 작업으로 이어질 수 있는 일반적인 보안 결함입니다. 애플리케이션을 설계하고 구축할 때 개발자는 이와 같은 문제가 발생하지 않도록 모든 객체에 대한 접근을 적절히 제어해야 합니다. 우리는 개발 및 테스트 과정에서 이러한 문제를 해결하고 예방하는 데 더 많은 노력을 기울여야 합니다. 또 다른 옵션은 이러한 우려 사항을 해결하기 위해 강력한 서드파티 솔루션을 선택하는 것입니다.
Tencent EdgeOne는 다양한 위협을 효과적으로 차단하여 강력한 웹 공격 보호를 제공합니다. 광범위한 공격 서명 데이터베이스를 통해 웹 공격, 익스플로잇, 트로이 목마, 백도어 및 기타 보안 문제의 위험을 줄일 수 있습니다. 현재 무료 체험판을 출시했으며, 더 많은 정보가 필요하시면 등록하시거나 문의해 주시기 바랍니다.
Q1: BOLA는 IDOR와 어떤 관계가 있나요?
A1: BOLA는 IDOR(불안전 직접 객체 참조)와 밀접한 관련이 있습니다. 두 개념 모두 권한 검사가 불충분하여 공격자가 다른 사용자의 객체에 접근하거나 조작할 수 있는 동일한 유형의 취약점을 가리킵니다.
Q2: 왜 BOLA가 중요한 보안 위험으로 간주되나요?
A2: BOLA는 OWASP API Top 10 목록에서 1위에 랭크되어 있습니다. API에서 가장 널리 퍼진 취약점 중 하나로, 민감한 데이터 노출 및 사용자 정보에 대한 무단 접근을 가능하게 할 수 있습니다.
Q3: BOLA 취약점 악용의 예를 제공할 수 있나요?
A3: Peloton 보안 사건은 BOLA 악용의 예입니다. 공격자는 불충분한 객체 수준 권한 부여로 인해 다른 사용자의 개인 정보를 포함한 모든 데이터에 접근할 수 있었습니다.
Q4: 개발자는 BOLA 취약점을 어떻게 예방할 수 있나요?
A4: BOLA 취약점을 예방하기 위해 개발자는 적절한 객체 수준 권한 검사 구현을 해야 합니다. 여기에는 각 객체 접근 요청에 대한 사용자 권한을 검증하고 사용자가 볼 수 있는 객체에 대해서만 접근할 수 있도록 보장하는 것이 포함됩니다.