본문 바로가기

Education/[AWS] Cloud Hacking

[AWS] Chapter4. 서버&서버리스 진단 - 3

 4. NoSQL Injection

 01. 개요

 NoSQL 개요
- 유연한 수평확장(Scale-Out)
- 빠른 레이턴시
- 유연한 스키마
- 조인(join)이 불가하여 복잡한 로직 수행 시 성능 감소

DynamDB 개요
- AWS 클라우드 기반 NoSQL 솔루션
- INSERT, UPDATES, DELETES, QUERY 및 SCAN 작업 포함 CRUD 지원
- 데이터 검색을 위해 쿼리 및 스캔 사용
- 스캔 함수는 전체 테이블 스캔 후 ScanFilters를 기반으로 결과 리턴

 

02. 시나리오

DynamoDB 구성
-> 테이블
-> 기본키(Partition Key) - 무결성 보장
-> 데이터 타입 - S(String), N(Number), B(Binary), SET, Bool, Null, L(List), M(Map)
-> 아이템 - 저장될 데이터 값
-> 인덱스 - 쿼리 성능 향상 도구

취약성 발생 원인
- 사용자 입력 값 검증 미흡
  -> 사용자의 입력 값이 필터, 스캔 구문에 직접 실행 가능
  -> 데이터 타입, 특수문자에 대한 검증 미흡

위협
- 사용자 정보 테이블 공격 시 사용자 민감 정보 유출

 

03. 진단 방법

PartiQL
AWS DynamoDB에 대한 SQL 호환 쿼리 언어

더보기

SELECT expression [, ...]
FROM table[.index]
[ WHERE condition ] [ [ORDER BY key [DESC|ASC], ...]

- 호환 언어를 사용하는 경우, 기존 SQL injection 진단 방법과 동일하게 진단 수행

NoSQL 사용여부 확인
-> 검색 및 쿼리 기능에 비교 연산자("EQ", "GT" 등) 사용 여부 확인
-> 요청 및 응답 데이터가 json 형식으로 전송

NoSQL Injection 진단 방법

구 분 내 용
설 명 검증되지 않는 사용자 입력 값이 NoSQL 쿼리 실행에 영향을 주어 개발자가 의도하지 않는 기능 실행
판단 기준 개발자가 의도하지 않은 명령어를 실행, 중요 정보 획득 가능
영 향 데이터베이스 내 중요 정보 탈취 가능

 

04. 실습

DynamoDB SQL Injection

- 사용자가 브라우저에서 파라미터 입력 후 Lambda로 전달
- Lambda는 파라미터를 이용하여 NoSQL 쿼리문 생성 및 실행

DynamoDB 비교연산자(참고)
- 기본 파라미터를 이용한 조건 작성

질의문에 조건절 추가하여 쿼리 

DynamoDB SQL Injection
- 파라미터가 그대로 쿼리문에 질의되는 것을 확인

-> 비교연산자 선택 항목은 속성 변경 못하도록 비활성화 되어있음
-> 검색 키워드 "*" 입력하여 검색
-> 버프로 인터셉트, 비교 연산자를 EQ에서 GT로 변경하여 전송
-> 테이블 내 모든 데이터 출력

 

05. 보안대책

비교연산자를 이용한 테이블 조회
- 기존 파라미터를 이용해 질의 조건을 작성하는 경우 
  질의를 위한 필수 사용자 입력 값을 제외한 값은 변조가 불가능하도록 서버측 코드에 명시

표현식을 이용한 테이블 조회
- 사용자 입력 값 검증 및 필터링 수행
  -> 파라미터 내 "*", " " 문자에 대한 필터링 처리
  -> 사용자 입력 값 바인딩하여 쿼리로 실행되지 않도록 함