시스템 보안 · 취약점 › G. 내부 확장 · 측면 이동 징후 · 24/50편 (전체 324/450)
학습 단계: 원격 실행·서비스 악용
실습 표기: 이 글의 명령어·출력·로그는 로컬 VMware 테스트 VM(Rocky Linux 9 / Ubuntu 22.04) 기준의 「실습 예시」이며, IP·계정·호스트명은 가상의 값입니다.
데이터베이스는 데이터 저장소를 넘어 명령 실행·파일 쓰기·서버 연결 기능을 가져, 측면 이동에 악용됩니다. 공격자는 탈취한 DB 자격증명(E13)으로 DB에 접속해 DB 서버 OS를 장악하거나, 링크드 서버·페더레이션으로 다른 DB에 확산합니다.
데이터베이스 측면 이동
명령 실행: MySQL UDF·PostgreSQL COPY PROGRAM·MSSQL xp_cmdshell
→ DB 프로세스 권한으로 OS 명령 실행
파일 쓰기: INTO OUTFILE로 웹셸·키 쓰기
링크드 서버: DB → 다른 DB 서버 쿼리·실행
DB 계정 재사용: 공유 DB 계정으로 다수 DB 접근
핵심: DB 기능으로 OS 명령·파일·타 서버 접근
핵심은 "DB가 데이터 조회를 넘어 OS 명령·파일 쓰기·타 서버 연결을 하는가"입니다. DB 프로세스가 셸·파일 작업을 하면 강한 신호입니다.
| DB 악용 | 기능 | 위험 |
|---|---|---|
| OS 명령 실행 | UDF·COPY PROGRAM | 매우 높음 |
| 파일 쓰기 | INTO OUTFILE | 높음(웹셸·키) |
| 링크드 서버 | 타 DB 쿼리·실행 | 높음 |
| DB 계정 재사용 | 다수 DB 접근 | 높음 |
| 정상 쿼리 | 데이터 조회 | 정상 |
# 데이터베이스 측면 이동 탐지 (분석 방법)
# DB 프로세스가 셸·명령 실행(계보)
sudo ausearch -k proc_exec,lateral -i --start recent 2>/dev/null | grep -E 'ppid_comm="(mysqld|postgres|mariadbd)"' | grep -E 'comm="(sh|bash|cp|curl)"' | tail
# DB 로그의 명령 실행·파일 쓰기 쿼리
sudo grep -iE 'COPY .* PROGRAM|INTO OUTFILE|xp_cmdshell|CREATE FUNCTION.*SONAME' /var/log/mysql/*.log /var/lib/pgsql/data/log/*.log 2>/dev/null | tail
$ (DB→셸 계보) (없음)
$ (명령/파일 쿼리) (없음 — 정상 데이터 쿼리만)
DB 프로세스가 셸·명령을 생성하지 않고, OS 명령·파일 쓰기 쿼리가 없는 상태가 정상입니다.
$ (DB→셸 계보)
ppid_comm="postgres" comm="sh" args="sh -c id;curl ... (파이프로 셸 실행)"
$ (명령/파일 쿼리)
COPY cmd_exec FROM PROGRAM 'bash -c ...' (PostgreSQL 명령 실행)
SELECT ... INTO OUTFILE '/var/www/html/shell.php' (웹셸 쓰기)
데이터베이스 측면 이동 분석입니다(가상의 예시).
[탈취 자격증명] DB 접속(E13)
↓ (DB 기능 악용)
COPY FROM PROGRAM 'cmd' → DB 서버 OS 명령 실행
↓ 계보
postgres → sh → curl→셸 (DB 프로세스가 셸 생성)
↓ (발판 생성)
INTO OUTFILE로 웹셸·SSH 키 쓰기 → 추가 확산
= DB → OS 장악 → 측면 이동
| 관찰 | 해석 |
|---|---|
| DB→셸 계보 | OS 명령 실행 |
| COPY PROGRAM | DB 명령 기능 |
| INTO OUTFILE | 파일 쓰기 발판 |
| 링크드 서버 | 타 DB 확산 |
DB 프로세스의 셸 생성·파일 쓰기가 DB 측면 이동의 지표입니다.
<!-- 실습 예시 룰: 적용 전 wazuh-logtest 및 테스트 환경 검증 필요 -->
<group name="local,syssec_g,lateral,">
<rule id="106230" level="14">
<if_sid>106000</if_sid>
<field name="audit.ppid_comm" type="pcre2">^(mysqld|mariadbd|postgres)$</field>
<field name="audit.comm" type="pcre2">^(sh|bash|dash|cp|curl|wget|nc)$</field>
<description>DB 프로세스의 OS 명령 실행(DB 측면 이동·OS 장악)</description>
<mitre><id>T1210</id><id>T1059</id></mitre>
</rule>
</group>
DB 쿼리 로그(COPY PROGRAM·INTO OUTFILE)와 DB 프로세스 계보를 함께 수집합니다. 정상 DB 함수 사용은 예외 처리합니다.
| DB 악용 | 기능 |
|---|---|
| OS 명령 실행 | UDF·COPY PROGRAM |
| 파일 쓰기 | INTO OUTFILE |
| 링크드 서버 | 타 DB 쿼리 |
| DB 계정 재사용 | 다수 DB |
| 면접 포인트 | "DB는 명령 실행·파일 쓰기로 측면 이동 — DB 프로세스의 셸 생성이 신호" |
다음 편 325. 내부 확장·측면 이동 — 웹 애플리케이션 피벗 탐지 에서는 웹 애플리케이션 피벗을 다루는 웹 애플리케이션 피벗 탐지를 다룹니다.
이전 편: 323. 내부 확장·측면 이동 — 컨테이너·오케스트레이션 측면 이동 탐지
📚 시리즈 전체 보기: 시스템 보안 · 취약점