Skip to content
KitploitKITPLOIT
도구블로그
제출
도구블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
DB_Audit_Research — 자가 무력화 감사: 낮은 권한의 PostgreSQL 역할이 트리거 기반 감사자를 가역적으로 눈멀게 하고 귀속을 오염시키는 것을 보여주는 재현 가능한 랩(PG14/16) 및 방어 기법. 합성 데이터 사용, CVE-2018-1058 프리미티브 인용. | Kitploit
도구/GitHubGitHub/mthamil107/db_audit_research
Defensive ToolsExploitationPapers & ResearchMisconfigurationDatabase SecurityAdversarial AttackLabs & Practice
GitHubmthamil107/db_audit_research

DB_Audit_Research

자가 무력화 감사: 낮은 권한의 PostgreSQL 역할이 트리거 기반 감사자를 가역적으로 눈멀게 하고 귀속을 오염시키는 것을 보여주는 재현 가능한 랩(PG14/16) 및 방어 기법. 합성 데이터 사용, CVE-2018-1058 프리미티브 인용.

저장소 보기
15시간 59분 전아직 검토되지 않음

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

Self-Defeating Audits — 재현 가능한 랩

DOI  라이선스: MIT(코드) / CC BY 4.0(문서)

방어 보안 연구로, 저권한, 주입 전용(injection-only) 데이터베이스 역할이 표준 PostgreSQL에서 트리거 기반 감사자를 가역적으로 실명화시키고 귀속(attribution)을 오염시킬 수 있는지, 그리고 어떤 방어가 실제로 이를 막는지 테스트합니다. 모든 것은 일회용 로컬 Docker 컨테이너에서 전적으로 합성된 데이터(RFC 5737 문서용 IP, 가상의 신원)로 실행됩니다. 실제 시스템, 자격 증명, 데이터는 일절 관여하지 않습니다.

랩 개요는 self-defeating-audits-lab.md에서 확인하세요.

수행 내용

널리 복사된 PostgreSQL 위키 "감사 트리거" 희생자를 구축한 다음, PostgreSQL 14와 16 전반에 걸쳐 실현 가능성 매트릭스를 셀 단위로 실행하며, 대역 외(out of band)로 각 공격 벡터가 실제로 쓰기가 감사되지 않게 막는지, 잔여물 없이 가역적인지, 어떤 방어가 이를 무력화하는지 측정합니다.

실행 방법

root@kitploit:~
cd scripts
./00_up.sh 16          # bring up postgres:16-alpine on localhost:55432
./run_matrix.sh 16     # run every matrix cell + defenses -> ../results/RESULTS_pg16.md
docker rm -f sda_pg16  # free the port between versions
./00_up.sh 14
./run_matrix.sh 14     # -> ../results/RESULTS_pg14.md
./teardown.sh          # remove all lab containers

Docker가 필요합니다. -alpine 이미지를 사용합니다(기능적으로 동일한 엔진).

크로스 엔진(MySQL 계열 + SQL Server)

이 연구는 두 엔진 계열에서도 재현됩니다. MySQL 계열(MariaDB, DEFINER 트리거 모델)은 scripts/mysql/에 있습니다:

root@kitploit:~
cd scripts/mysql
./00_up.sh 10.11 && ./run_matrix_mysql.sh 10.11   # -> results/RESULTS_mariadb_10.11.md
docker rm -f sda_maria_10_11 && ./00_up.sh 10.6 && ./run_matrix_mysql.sh 10.6

SQL Server(소유권 체인 모델)는 scripts/mssql/에 있습니다 — 호스트 sqlcmd를 통해 로컬 LocalDB 인스턴스에서 실행됩니다(Docker 불필요, 저권한 공격자는 EXECUTE AS USER 가장으로 모델링):

root@kitploit:~
cd scripts/mssql
./run_matrix_mssql.sh        # -> results/RESULTS_mssql.md ; then ./teardown.sh

재현 가능성 주의(SQL Server). Docker 엔진과 달리 세 번째 엔진인 SQL Server는 호스트 의존성이 있습니다. 로컬 SQL Server LocalDB 인스턴스에서 sqlcmd로 실행되며(run_matrix_mssql.sh에 경로가 하드코딩됨), 따라서 Windows 전용이고 이미지 다이제스트로 고정할 수 없습니다. 저권한 공격자는 EXECUTE AS USER 가장으로 모델링됩니다(LocalDB는 Windows 인증만 지원). 엔진 동작 발견 사항(DISABLE의 무잔여, DDL 가드가 DISABLE을 놓침)은 세션 유형과 무관하며 실제 로그인에도 적용됩니다. 객체 권한 발견 사항은 가장을 통해 충실히 강제됩니다. 세 엔진 중 이식성이 가장 낮다는 점을 정직하게 밝혀 둡니다.

핵심 크로스 엔진 결과: search_path 섀도 클래스(1A/1B)는 MySQL과 SQL Server 어느 쪽으로도 이전되지 않지만(search_path 없음), 트리거 교체, 휴면 우회, 귀속 오염은 이전됩니다. MySQL의 DEFINER 권한 바인딩은 실명화를 더 탐지하기 쉽게 만듭니다. SQL Server는 PostgreSQL과 마찬가지로 바이트 단위 완벽한 복원을 허용하며, 자체 DDL 방어가 놓치는 무잔여 DISABLE TRIGGER 프리미티브를 추가로 제공합니다. 세 엔진 전체 비교는 FINDINGS.md에 있습니다.

구성

핵심 결과

  • 1A 새 스키마에 섀도우를 심는 것은 — 셋업 단계에서 실패(새 역할은 CREATE SCHEMA를 할 수 없음)하며, "pg_catalog가 이기기" 때문이 아닙니다. 이미 쓰기 가능한 public에 심는 것은 실제로 섀도우가 됩니다: 1S(동일 시그니처, 스키마 순서)와 1T(정확한 오버로드가 pg_catalog가 앞에 있어도 내장 함수를 능가 — 타입 특이성만 격리) 모두 실명화합니다(페이로드 null 처리).
  • 1B 정확한 복합 타입 row_to_json 오버로드 — public이 쓰기 가능하고 트리거 search_path가 고정되지 않은 경우 감사자를 실명화합니다. 표준 PostgreSQL ≤14에서는 도달 가능하며, 15+에서는 오설정 시에만 가능합니다. search_path를 고정하면 모든 곳에서 이를 무력화합니다.
  • 1C 앱 소유 감사 함수 교체 — 실명화하며, 깨끗한 객체 차이(object-diff)로 복원 가능(소스 그대로 재생) — 그러나 쓰기-대-감사 카나리와 DDL 이벤트 트리거는 여전히 이를 잡아냅니다.
  • GUC 게이트 휴면과 데이터베이스 내 귀속 오염은 모두 (오설정이라는) 전제 조건에서 작동합니다. 위조된 감사 행은 감사 테이블만으로는 구분할 수 없습니다.
  • 엔진 수준 로깅(pgaudit/log_statement) + 해시 체인 싱크가 이 집합을 닫는 방어입니다.

책임 있는 공개(Responsible Disclosure) 입장

익명화/합성 데이터를 사용한 로컬 랩의 표준 PostgreSQL에서 재현했습니다. 공격 SQL은 여기서 구축한 랩 스키마로 한정됩니다. 이는 무기화된 페이로드가 아닌 실현 가능성/방어 연구입니다. 기반 프리미티브는 이미 공개되어 있습니다(CVE-2018-1058, SECURITY DEFINER search_path 승격). 기여는 *구성(composition)*과 방어 평가에 있습니다. 실제 시스템은 식별되지 않습니다.

도구 다운로드
경로설명
scripts/00_up.sh버전 고정 일회용 컨테이너(PostgreSQL)
scripts/mysql/MySQL 계열(MariaDB) 희생자, 공격, 방어 및 오케스트레이터
scripts/mssql/SQL Server(LocalDB) 희생자, 공격, 방어 및 오케스트레이터
results/RESULTS_mariadb_*.mdMySQL 계열 실현 가능성 + 방어 매트릭스
results/RESULTS_mssql.mdSQL Server 실현 가능성 + 방어 매트릭스
scripts/10_victim.sql위키 패턴 감사 희생자(SECURITY DEFINER 트리거), 노브: pub_create, pin_path, app_owns
scripts/20_attacks.sql모든 공격 벡터(1A/1B/1C, GUC 휴면, 귀속 오염), 셀당 \if-가드 하나
scripts/30_defenses.sqlDDL 이벤트 트리거 가드 + 해시 체인 추가 전용 싱크
scripts/40_snapshot.sqlRQ2 객체 차이용 카탈로그 스냅샷
scripts/run_matrix.sh오케스트레이터: 각 셀 구축, 측정, results/RESULTS_pg<VER>.md 작성
scripts/teardown.sh컨테이너 제거
results/RESULTS_pg14.md, results/RESULTS_pg16.md버전별로 채워진 실현 가능성 + 방어 매트릭스
results/_evidence_pg*.log, results/_snap_1C_*.txt원시 명령/출력 증거
FINDINGS.md알기 쉬운 문체의 RQ1–RQ5 판정, 방어×공격 매트릭스, 참신성 포지셔닝, 초록