반응형
📌 목차
- BOLA(Broken Object Level Authorization)란?
- BOLA 공격의 원리
- 주요 공격 기법
- 보안 위협과 실제 사례
- 방어 방법 및 대응 방안
🔍 BOLA(Broken Object Level Authorization)란?
BOLA(Broken Object Level Authorization, 객체 수준 권한 부여 취약점)은
사용자가 자신의 데이터만 접근해야 함에도 불구하고 다른 사용자의 데이터를 조회, 수정, 삭제할 수 있는 보안 취약점이다.
API가 사용자 인증만 확인하고, 개별 객체에 대한 접근 권한을 제대로 검증하지 않는 경우 발생한다.
이 취약점은 OWASP API Security Top 10에서 1위로 선정될 만큼 심각한 보안 이슈로 평가받고 있다.
⚙️ BOLA 공격의 원리
BOLA 취약점은 주로 REST API, GraphQL API에서 발생하며,
URL의 매개변수나 요청 본문에 있는 사용자 ID 값을 변경하는 방식으로 공격이 이루어진다.
✅ 취약한 API 요청 예제
GET /api/user/12345/profile
Authorization: Bearer token123
🚨 공격자가 사용자 ID를 변경하면?
GET /api/user/67890/profile
Authorization: Bearer token123
✔️ 만약 서버가 67890에 대한 접근을 차단하지 않으면,
✔️ 공격자는 다른 사용자의 개인정보를 불법적으로 조회 가능
🚨 주요 BOLA 공격 기법
1️⃣ ID 변경을 통한 불법 접근
📌 공격 방식
- 요청 URL 또는 본문에서 다른 사용자 ID를 입력하여 타인의 데이터를 조회
✅ 공격 예시
PUT /api/orders/123/status
{
"status": "shipped"
}
🚨 결과:
- ID 123을 456으로 변경하면 다른 사용자의 주문 정보를 변경 가능
2️⃣ GraphQL API를 이용한 공격
📌 공격 방식
- GraphQL API에서 사용자 ID를 변경하여 인증을 우회
✅ 공격 예제
query {
user(id: "67890") {
email
phone
address
}
}
🚨 결과:
- 서버가 id: "67890"을 검증하지 않으면, 공격자는 타인의 정보를 열람 가능
3️⃣ POST/PUT 요청을 통한 데이터 조작
📌 공격 방식
- 자신의 계정 정보 대신 다른 사용자의 계정 정보를 요청 본문에 포함하여 제출
✅ 공격 예제
POST /api/transfer
{
"from": "12345",
"to": "67890",
"amount": 5000
}
🚨 결과:
- 공격자가 다른 사용자의 계정에서 돈을 송금하도록 조작 가능
⚠️ 보안 위협과 실제 사례
✅ 보안 위협
- 🛡️ 개인정보 유출: 공격자가 타인의 이메일, 주소, 전화번호 등을 조회 가능
- 🎭 데이터 변조: 사용자의 결제 정보, 주문 내역 등을 조작 가능
- 🚀 계정 탈취: 비밀번호 변경 API에 대한 BOLA 취약점을 이용해 다른 계정 탈취 가능
- 💣 서비스 악용: 사용자의 포인트, 쿠폰, 크레딧 등을 무단 사용 가능
✅ 실제 발생 사례
- 2021년 Facebook API BOLA 취약점 발견
- 사용자 ID를 변경하여 타인의 계정 정보를 열람할 수 있는 취약점 보고됨
- 2022년 우버(Uber) API에서 BOLA 취약점 발견
- 사용자가 자신의 API 토큰을 이용해 다른 사용자의 택시 기록을 확인 가능
🔐 방어 방법 및 대응 방안
✅ 1. 개별 객체에 대한 접근 권한 검증
- 요청된 리소스가 현재 로그인된 사용자에게 적절한지 검증
- 예제 (Node.js Express)
app.get("/api/user/:id/profile", (req, res) => {
if (req.user.id !== req.params.id) {
return res.status(403).json({ error: "Unauthorized access" });
}
// 정상 처리
});
✅ 2. 사용자 인증과 권한 검증 적용
- 사용자의 역할(Role)을 확인하여 접근 가능한 데이터만 제공
- 예제 (Django REST Framework)
class UserProfileView(APIView):
def get(self, request, user_id):
if request.user.id != user_id:
return Response({"error": "Unauthorized"}, status=403)
return Response({"email": request.user.email})
✅ 3. 서버 측에서 ID를 추출하여 사용 (클라이언트 입력 사용 금지)
- 사용자가 직접 ID를 입력하지 않도록 하고, 서버에서 로그인된 사용자의 ID를 가져와 처리
- 예제 (Express + JWT)
app.get("/api/user/profile", authMiddleware, (req, res) => {
const userId = req.user.id; // 토큰에서 ID 추출
const userProfile = getUserProfile(userId);
res.json(userProfile);
});
✅ 4. API 로그 및 모니터링 강화
- API 요청에서 비정상적인 ID 변경 탐지
- 예제 (AWS CloudWatch 설정)
{
"MetricName": "Unauthorized API Access",
"Threshold": 5,
"Period": 60,
"EvaluationPeriods": 1,
"AlarmActions": ["arn:aws:sns:us-east-1:123456789:SecurityAlerts"]
}
✅ 5. 보안 테스트 및 취약점 점검 수행
- Burp Suite, OWASP ZAP 등의 도구를 활용하여 BOLA 취약점 점검
✅ 6. 웹 애플리케이션 방화벽(WAF) 적용
- 비정상적인 객체 요청 패턴을 차단하여 BOLA 공격 예방
📌 해시태그
#BOLA #API보안 #웹보안 #데이터유출 #OWASP #인증취약점 #정보보안 #BrokenAuth
반응형
'보안' 카테고리의 다른 글
🚨 WebSockets 공격: 인증되지 않은 연결을 악용한 보안 취약점 🔓 (0) | 2025.02.20 |
---|---|
🚨 Mass Assignment 공격: 숨겨진 필드를 조작하여 관리자 권한 탈취 🔓 (0) | 2025.02.20 |
🚨 GraphQL 공격: Introspection 쿼리를 이용한 내부 데이터 구조 유출 🔍 (0) | 2025.02.20 |
🚨 CORS Misconfiguration Exploitation: 취약한 CORS 설정을 악용한 데이터 탈취 공격 🔓 (1) | 2025.02.20 |
🛑 Host Header Injection: 서버 측 요청 위조(SSRF) 및 보안 우회 공격 🚨 (0) | 2025.02.19 |