연구자: 명지대학교 정보통신공학과 4학년 이종윤

발표했던 자료

DBREACH_-압축-사이드-채널을-이용한-데이터베이스-공격.pdf

공격코드 시연.pptx

직접 docker 환경으로 구성해본 실습환경

https://github.com/jongcoding/compression-side

K_of_N

개요: 코드는 압축 사이드채널 취약점을 이용하여 secret(비밀)과 attacker-controlled guess(추측) 간의 중복 정도에 따른 압축 효과를 측정하고, 여러 후보(총 n개 중 k개를 선택하는 k-of-n 전략)를 통해 정답을 추론하는 실험 코드

핵심 아이디어: **“비밀과 guess가 겹치면 압축률이 높아져 전체 데이터 크기가 줄어든다”**는 점을 이용하는 것

기본 공격 실습 환경 구축

docker.compose.yml

version: '3.8'

services:
  mariadb:
    image: mariadb:10.3.29
    container_name: mariadb_container
    restart: unless-stopped
    environment:
      - MARIADB_ROOT_PASSWORD=your_root_password     # 루트 계정 비밀번호
      - MARIADB_DATABASE=flask_db                    # 자동 생성할 DB
      - MARIADB_USER=flask_user                      # 자동 생성할 사용자
      - MARIADB_PASSWORD=flask_pass                  # 자동 생성할 사용자의 비밀번호
    volumes:
      # 1) my.cnf (압축/암호화 설정 포함)
      - ./mariadb/my.cnf:/etc/mysql/my.cnf
      # 2) DB 데이터 영구 저장 볼륨
      - mariadb_data:/var/lib/mysql
      # 3) File Key Management 키 파일 (읽기 전용 권장)
      - ./mariadb/encryption/keyfile:/etc/mysql/encryption/keyfile:ro
    ports:
      - "3307:3306"

  mongo:
    image: mongo:6.0
    container_name: mongo_container
    restart: unless-stopped
    environment:
      - MONGO_INITDB_ROOT_USERNAME=mongo_root
      - MONGO_INITDB_ROOT_PASSWORD=mongo_root_password
    volumes:
      - mongo_data:/data/db
    ports:
      - "27017:27017"

  flask:
    build:
      context: ./flask
      dockerfile: Dockerfile
    container_name: flask_container
    restart: unless-stopped
    depends_on:
      - mariadb
      - mongo
    ports:
      - "5000:5000"
    environment:
      # Flask 앱에서 DB 연결 시 참고할 환경변수
      - DB_HOST=mariadb_container
      - DB_USER=flask_user
      - DB_PASSWORD=flask_pass
      - DB_NAME=flask_db

      - MONGO_HOST=mongo_container
      - MONGO_USER=mongo_root
      - MONGO_PASS=mongo_root_password

volumes:
  mariadb_data:
  mongo_data:

my.cnf

[mysqld]
user                    = mysql
pid-file                = /run/mysqld/mysqld.pid
socket                  = /run/mysqld/mysqld.sock
datadir                 = /var/lib/mysql
tmpdir                  = /tmp
bind-address            = 0.0.0.0
log_error               = /var/log/mysql/error.log

# 문자셋 (현재 ascii, 필요시 utf8mb4로 변경 가능)
character-set-server    = ascii
collation-server        = ascii_general_ci

# InnoDB 압축 설정
innodb_file_per_table       = 1
innodb_file_format          = Barracuda
innodb_default_row_format   = dynamica
innodb_compression_algorithm= zlib    # zlib, lz4, snappy 등
innodb_compression_default  = ON
innodb_compression_level    = 6

# InnoDB 암호화
innodb_encrypt_tables       = ON
innodb_encrypt_log          = ON

# 임시 테이블 암호화
encrypt_tmp_disk_tables     = ON
encrypt_tmp_files           = ON
# encrypt_tmp_sort_files=ON <-- 10.3 버전에서 미지원이므로 제거

# Aria 테이블 암호화
aria_encrypt_tables         = ON

# file_key_management 플러그인 (키 파일 경로 예시)
plugin_load_add = file_key_management
loose_file_key_management_filename = /etc/mysql/encryption/keyfile
loose_file_key_management_encryption_algorithm = AES_CTR

# (추가로 필요한 플러그인)
plugin_load_add = ha_archive
plugin_load_add = ha_rocksdb

[mariadb]
[mariadb-10.3]

  1. 전체 시스템 구조