피드로 돌아가기
Dev.toSecurity
원문 읽기
Raw Body 기반 HMAC 검증 및 Timing Attack 방어로 Webhook 무결성 확보
Step-by-Step Webhook Signature Verification for Any Sender
AI 요약
Context
엔드포인트 URL 노출 시 발생하는 위조 이벤트 주입 공격에 대한 방어 체계 필요. 프레임워크의 자동 Deserialization 과정에서 발생하는 데이터 변형으로 인한 Signature 불일치 문제가 주요 병목 지점으로 분석됨.
Technical Solution
- 프레임워크의 JSON 파싱 전 단계에서 Raw Request Body를 Buffer 형태로 직접 획득하여 데이터 무결성 유지
- {timestamp}.{body} 조합의 Signed Payload 구성을 통한 HMAC-SHA256 해시 값 산출 및 검증
- Constant-Time Equality 알고리즘을 적용하여 문자열 비교 시 발생하는 Timing Side Channel 공격 원천 차단
- 수신 시간과 헤더 내 Timestamp 간의 오차를 300초(5분) 이내로 제한하여 Replay Attack 방어
- Case-insensitive Header Lookup 및 Body-reading Middleware 순서 조정을 통한 런타임 검증 실패 방지
실천 포인트
- 프레임워크의 자동 파싱 기능이 Raw Body를 변형하는지 확인하고 `express.raw()` 등 원시 바이트 획득 수단 적용 - `==` 연산자 대신 `hmac.compare_digest` 또는 `timingSafeEqual` 함수를 사용하여 해시 비교 수행 - Replay Attack 방지를 위해 Timestamp 윈도우(예: 5분) 설정 및 유효성 검증 로직 포함 - 로깅 또는 인증 미들웨어가 Body Stream을 미리 소비하여 검증 단계에서 빈 바디가 전달되지 않는지 검토