시스템 보안 · 취약점 › E. 중요 정보 접근 로그 분석 · 23/50편 (전체 223/450)
학습 단계: DB·대량 데이터 접근 이상
실습 표기: 이 글의 명령어·출력·로그는 로컬 VMware 테스트 VM(Rocky Linux 9 / Ubuntu 22.04) 기준의 「실습 예시」이며, IP·계정·호스트명은 가상의 값입니다.
DB 파일 직접 접근(E19)이 엔진 우회라면, 여기서는 DB 엔진을 통한 접근을 쿼리·감사 로그로 분석합니다. 탈취한 자격증명으로 정상 쿼리처럼 접속해 대량 조회·민감 테이블 접근하는 패턴을 봅니다.
DB 쿼리 로그 분석 포인트
general_log(MySQL)·pg audit: 모든 쿼리 기록
대량 SELECT: SELECT * FROM users (전체 조회)
민감 테이블: users, payments, cards (E24)
비정상 접속: 새 IP·계정·시간대
SELECT INTO OUTFILE: 쿼리로 파일 추출(E19 연계)
OS 감사(E영역) + DB 로그 결합 → 완전한 접근 가시성
OS 레벨 접근 감사만으로는 DB 내부 쿼리를 못 봅니다. DB 쿼리 로그를 함께 수집해야 엔진 경유 접근이 보입니다.
| 쿼리 로그 신호 | 의미 | 위험 |
|---|---|---|
대량 SELECT * | 전체 조회 | 높음 |
| 민감 테이블 조회 | 개인정보·결제 | 높음 |
INTO OUTFILE | 파일 추출 | 매우 높음 |
| 새 IP·계정 접속 | 탈취 자격증명 | 높음 |
| 앱 정상 쿼리 | 업무 | 정상 |
# DB 쿼리 로그 분석 (분석 방법)
# MySQL general/audit log에서 대량 SELECT·민감 테이블(분석용)
sudo grep -iE 'SELECT .* FROM (users|payments|cards|accounts)' /var/log/mysql/*.log 2>/dev/null | tail
# INTO OUTFILE(쿼리 파일 추출)
sudo grep -i 'INTO OUTFILE\|INTO DUMPFILE' /var/log/mysql/*.log 2>/dev/null
# 비정상 접속 IP(앱 서버 외)
sudo grep -iE 'Connect.*@' /var/log/mysql/*.log 2>/dev/null | grep -vE '127.0.0.1|앱서버IP' | tail
$ (민감 테이블 조회) 앱 서버 IP의 정상 범위 쿼리만
$ (INTO OUTFILE) (없음)
$ (비정상 접속) (없음 — 앱 서버에서만 접속)
쿼리가 앱 서버에서의 정상 범위 조회에 그치고, INTO OUTFILE·외부 IP 접속이 없는 상태가 정상입니다.
$ (민감 테이블 조회)
Query SELECT * FROM users (전체 사용자 조회)
$ (INTO OUTFILE)
Query SELECT * FROM cards INTO OUTFILE '/tmp/c.csv'
$ (비정상 접속)
Connect app@192.0.2.88 (앱 서버 아닌 IP)
SELECT * FROM users 전체 조회 + cards INTO OUTFILE 파일 추출DB 쿼리 접근 분석 흐름입니다(가상의 예시).
[접속] app@192.0.2.88 (비앱 IP, 탈취 자격증명)
↓
[조회] SELECT * FROM users, payments (대량·민감 테이블)
↓
[추출] SELECT ... INTO OUTFILE '/tmp/c.csv' (파일화)
↓
[유출] /tmp/c.csv 외부 전송(E32)
| 단계 | 쿼리 로그 |
|---|---|
| 접속 | 비정상 IP |
| 조회 | SELECT * 민감테이블 |
| 추출 | INTO OUTFILE |
| 유출 | 파일 전송 |
DB 쿼리 로그 + OS 파일 감사를 결합하면 엔진 경유·우회 접근을 모두 봅니다.
<!-- 실습 예시 룰: 적용 전 wazuh-logtest 및 테스트 환경 검증 필요 -->
<group name="local,syssec_e,data_access,">
<!-- DB 로그 파서 전제: 대량 조회·파일 추출 쿼리 -->
<rule id="104220" level="12">
<decoded_as>mysql_log</decoded_as>
<field name="query" type="pcre2">(SELECT\s+\*\s+FROM\s+(users|payments|cards|accounts))|INTO\s+(OUTFILE|DUMPFILE)</field>
<description>DB 대량 조회·파일 추출 쿼리(엔진 경유 유출)</description>
<mitre><id>T1005</id></mitre>
</rule>
</group>
DB general/audit log를 Wazuh/ELK로 수집해야 쿼리 탐지가 가능합니다. 로그 활성화는 성능을 고려해 설정합니다.
| 쿼리 신호 | 위험 |
|---|---|
| SELECT * 대량 | 전체 조회 |
| 민감 테이블 | 개인정보·결제 |
| INTO OUTFILE | 파일 추출 |
| 비정상 IP 접속 | 탈취 자격증명 |
| 면접 포인트 | "DB 엔진 경유 접근은 쿼리 로그로만 — OS 감사(파일)와 결합해 완전 가시성" |
다음 편 224. 중요 정보 접근 — 민감 테이블·컬럼 접근 탐지 에서는 민감 테이블·컬럼 접근을 다루는 민감 테이블·컬럼 접근 탐지를 다룹니다.
이전 편: 222. 중요 정보 접근 — 민감 디렉터리 스캔성 접근 탐지
📚 시리즈 전체 보기: 시스템 보안 · 취약점