AI Store에서 AI코딩으로 만들어진 앱을 만나보세요!
지금 바로 방문하기

NoSQL 주입 공격 이해 및 방어 방법

카테고리

프로그래밍/소프트웨어 개발

서브카테고리

인프라/DevOps/보안

대상자

  • 대상: 웹 개발자, 보안 엔지니어, DevOps 엔지니어
  • 난이도: 중급(보안 취약점 분석 및 방어 전략 이해 필요)

핵심 요약

  • NoSQL 주입 공격은 사용자 입력이 검증되지 않은 채 NoSQL 쿼리에 삽입될 때 발생하며, 인증 우회, 데이터 조작 등의 위협을 유발합니다.
  • MongoDB는 주요 NoSQL 데이터베이스로, $eq, $ne, $regex 등 특수 연산자 사용이 공격 유발 요인입니다.
  • 방어 전략:
  • 사용자 입력 검증 및 정제
  • 파라미터화된 쿼리 사용
  • 서버측 JavaScript 비활성화(--noscripting, security.javascriptEnabled: false)

섹션별 세부 요약

1. NoSQL 데이터베이스 개요

  • NoSQL 특징: 유연한 스키마, 대규모 데이터 처리, JSON/BSON 기반 저장(예: MongoDB)
  • 주요 유형:
  • 문서 기반: MongoDB
  • 키-값 저장소: Redis
  • 그래프 기반: ArangoDB
  • 시간 시리즈: InfluxDB

2. NoSQL 주입 공격의 위협

  • 공격 방식:
  • 인증 우회, 데이터 읽기/수정, 스크립트 실행, 관리자 권한 획득
  • 예시 공격 코드:

```json

{"username": "admin", "password": {"$regex": ".*", "$options": "i"}}

```

  • 차별점:
  • SQL과 달리 JSON 형식 사용, 스키마 유연성으로 인해 공격이 더 쉬움

3. 취약점 식별 방법

  • 테스트 대상: 로그인 폼, 검색창, HTTP 헤더, 쿠키
  • 테스트 방법:
  • 특수 문자(', ", \, {, }) 및 MongoDB 연산자($eq, $in) 삽입
  • 보안 도구: NoSQLMap 사용

4. 방어 전략

  • 입력 검증:
  • 정규 표현식 적용, 불필요한 특수 문자 제거
  • 쿼리 파라미터화:
  • ORM 라이브러리(예: Mongoose) 사용, 쿼리 빌더 활용
  • 접근 제어:
  • 최소 권한 원칙 적용, 불필요한 액세스 제한
  • MongoDB 보안 설정:
  • --noscripting 플래그 사용, security.javascriptEnabled: false 설정

결론

  • NoSQL 주입 방어는 입력 검증, 파라미터화, 보안 설정 조합으로 효과적입니다.
  • MongoDB 기반 애플리케이션$regex 등 연산자 사용 시 특별한 주의가 필요하며, NoSQLMap과 같은 도구를 활용해 취약점을 정기적으로 점검해야 합니다.