Burp 기능을 이용하여 레이스컨디션(TOCTOU)를 쉽게 점검하는 방법을 알아봅시다.
Background
레이스 컨디션(Race Condition)
이란, 둘 이상의 프로세스나 스레드가 공유 자원에 동시에 접근하여 의도치 않은 동작이 발생하는 현상을 말합니다. 보안에서는 이를 악용해 권한 우회, 데이터 변조, 중복 처리 등을 유발할 수 있습니다.
TOCTOU(Time-of-Check to Time-of-Use)
는 레이스 컨디션의 한 유형으로, 리소스의 상태를 확인(Check)한 시점과 실제 사용(Use)하는 시점 사이의 시간 차이를 노려 취약점을 발생시키는 기법입니다.
1. 점검 방법
Burp Suite Repeater 기능에서는 여러 요청을 그룹화(Group) 할 수 있습니다.
그룹화된 요청은 Send group (parallel)
기능을 사용하여 동시에 전송할 수 있습니다.
📌 Parallel 모드: 요청을 순차적으로 보내는 것이 아니라, 동일 시점에 여러 요청을 병렬로 발송합니다.
예시로, 다음과 같이 서로 다른 파라미터(test1
, test2
, test3
)를 갖는 요청을 동시에 전송합니다.
그 결과, 요청이 순차적으로 도착하지 않고 랜덤한 순서로 처리되는 것을 확인할 수 있습니다.
2. 점검 필요성
동시성 처리를 고려하지 않고 기능을 개발하는 경우, 논리적 취약점이 발생할 수 있습니다.
예를 들어, 예약 기능이 다음과 같이 동작한다고 가정합니다.
- 예약 시도
- 예약 검증
- 예약 완료
이 과정에서, 예약 검증이 끝나기 전에 동일한 예약 요청을 동시에 보내면
시스템이 중복 요청을 구분하지 못해 중복 예약이 발생할 수 있습니다.
3. 점검 포인트
논리적 취약점 테스트
: 결제, 예약, 쿠폰 발급 등 순서와 검증 로직이 중요한 기능Race Condition 검증
: 공유 자원(재고, 포인트, 좌석 등)에서 발생하는 경쟁 조건 점검
취약점 점검 포인트: 콘서트 티켓, 항공권, 한정판 상품 구매 등에서 동시성 취약점 가능성 존재
4. 결론
이미 방어가 되어 있는 로직이더라도 순서와 절차에 따라 레이스컨디션,TOCTOU가 발생하여 취약점이 발생할 수 있습니다.
웹 점검 시 비지니스 로직에 대해서 조금 더 꼼꼼하게 점검을 해야겠습니다. 끝