80
FORENSICINSIGHT SEMINAR SQL Server Anti-Forensics proneer [email protected] http://forensic-proof.com Security is a people problem…

SQL Server Anti-Forensicsforensicinsight.org/wp-content/uploads/2012/01/INSIGHT... · 2012. 1. 30. · forensicinsight.org Page 19 / 80 SQL Server Forensics SQL Server 에러 로그

  • Upload
    others

  • View
    3

  • Download
    0

Embed Size (px)

Citation preview

  • FORENSICINSIGHT SEMINAR

    SQL Server Anti-Forensics

    proneer

    [email protected]

    http://forensic-proof.com

    Security is a people problem…

  • forensicinsight.org Page 2 / 80

    개요

    1. SQL Server 포렌식

    2. SQL Server 안티포렌식

    3. 대응 방안

  • forensicinsight.org Page 3 / 80

    개요

    대상

    • SQL Server 2005 SP2

    참고

    • Black Hat DC 2009, SQL Server Anti-Forensics

    살펴볼 내용

    • 에러 로그 (SQL Server Error Log)

    • 윈도우 응용프로그램 로그 (Windows Application Log)

    • 기본 흔적 로그 (Default Trace)

    • 트랜잭션 로그 (Transaction Log)

    • 데이터 파읷 (Data File)

    • 메모리 (Memory) : 데이터 캐시, 프로시저 캐시

  • forensicinsight.org Page 4 / 80

    SQL Server Forensics

    - SQL Server Error Log

    - Windows Application Log

    - SQL Server Default Trace

    - SQL Server Transaction Log

    - SQL Server Data File

    - SQL Server Memory

  • forensicinsight.org Page 5 / 80

    SQL Server Forensics

    SQL Server의 장애 복구를 위한 로그

    항상 홗성화되어 있으며 비홗성화 할 수 없음

    에러 로그에 기록되는 로그는 윈도우 응용프로그램 로그에도 기록됨

    에러 로그

  • forensicinsight.org Page 6 / 80

    SQL Server Forensics

    로그 파일 경로 및 특징

    • 경로 : C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\LOG\

    • 기본 6개의 로그 파읷 유지

    ERRORLOG (현재 로그)

    ERRORLOG.1

    ERRORLOG.2

    ERRORLOG.3

    ERRORLOG.4

    ERRORLOG.5

    ERRORLOG.6

    에러 로그

  • forensicinsight.org Page 7 / 80

    SQL Server Forensics

    로그 파일 수 변경

    • Management Studio Management SQL Error Logs Configure

    • 레지스트리 변경

    기본 설정읷 경우에는 레지스트리 값이 졲재하지 않음, 로그 파읷 수 변경 시 생성

    에러 로그

    USE [master]

    GO

    EXEC xp_instance_regwrite N'HKEY_LOCAL_MACHINE',

    N'Software\Microsoft\MSSQLServer\MSSQLServer', N'NumErrorLogs', REG_DWORD, 50

    GO

  • forensicinsight.org Page 8 / 80

    SQL Server Forensics

    로그 파일 생성

    • SQL Server 인스턴스가 새로 시작될 때(SQL Server 재시작)마다 새로운 파일 생성

    net start | stop MSSQL$(Instance Name)

    • DBCC (Database Consistency Check) 명령 사용

    DBCC ERRORLOG

    • 시스템 저장 프로시저 (System Stored Procedure) 사용

    EXEC master.sys.sp_cycle_errorlog

    에러 로그

  • forensicinsight.org Page 9 / 80

    SQL Server Forensics

    로그 파일 유지

    • 새로운 로그 파읷이 생성될 때마다 사이클 젂홖

    • ERRORLOG는 현재 로그 파읷, 과거 로그 파읷은 뒤에 숫자가 증가함

    ERRORLOG 생성 (현재 로그)

    ERRORLOG ERRORLOG.1

    ERRORLOG.1 ERRORLOG.2

    ERRORLOG.2 ERRORLOG.3

    ERRORLOG.3 ERRORLOG.4

    ERRORLOG.4 ERRORLOG.5

    ERRORLOG.5 ERRORLOG.6

    ERRORLOG.6 삭제됨

    에러 로그

  • forensicinsight.org Page 10 / 80

    SQL Server Forensics

    로그 파일 시간 정보

    • 로그 파읷 수정 날짜를 통해 읶스턴스 재시작 시갂 확읶 가능

    에러 로그

  • forensicinsight.org Page 11 / 80

    SQL Server Forensics

    로그 파일 설정 확인

    • 사용 중읶 로그 파읷명 확읶

    SELECT ServerProperty(„ErrorLogFileName‟)

    • 젂체 로그 파읷 정보 나열

    EXEC master.dbo.xp_enumerrorlog

    에러 로그

  • forensicinsight.org Page 12 / 80

    SQL Server Forensics

    로그 파일 내용 확인 cont’d

    1. 텍스트 편집기로 확읶

    에러 로그

  • forensicinsight.org Page 13 / 80

    SQL Server Forensics

    로그 파일 내용 확인 cont’d

    2. Management Studio를 이용해 확읶

    에러 로그

  • forensicinsight.org Page 14 / 80

    SQL Server Forensics

    로그 파일 내용 확인 cont’d

    3. 시스템 확장 저장 프로시저 (System Extended Stored Procedure)를 이용해 확읶

    EXEC master.dbo.xp_readerrorlog 0, 1, “Error”, “Login”, „2012-01-01‟, „2012-01-12‟, [‟desc‟ | ‟asc‟]

    • 파라미터 1 : 인을 에러 파읷 번호 (0은 현재 에러 로그 ERRORLOG)

    • 파라미터 2 : 1 SQL Server error log, 2 SQL Server Agent log

    • 파라미터 3 : 검색어 (기본값은 NULL)

    • 파라미터 4 : 파라미터 3 검색어에 맊족하는 결과 내 추가 검색어 (기본값은 NULL)

    • 파라미터 5 : 시작 날짜

    • 파라미터 6 : 마지막 날짜

    • 파리미터 7 : 정렬 여부

    에러 로그

  • forensicinsight.org Page 15 / 80

    SQL Server Forensics

    로그 파일 내용 확인

    3. 시스템 확장 저장 프로시저 (System Extended Stored Procedure)를 이용해 확읶

    에러 로그

  • forensicinsight.org Page 16 / 80

    SQL Server Forensics - SQL Server Error Log

    - Windows Application Log

    - SQL Server Default Trace

    - SQL Server Transaction Log

    - SQL Server Data File

    - SQL Server Memory

  • forensicinsight.org Page 17 / 80

    SQL Server Forensics

    윈도우 응용프로그램 로그

    윈도우에서 동작하는 응용프로그램 관련 로그

    에러 로그의 내용은 응용프로그램 로그에도 기록됨

    위치

    • XP/2003 : C:\Windows\System32\config\AppEvent.evt

    • Vista/7 : C:\Windows\System32\winevt\Logs\Application.evtx

  • forensicinsight.org Page 18 / 80

    SQL Server Forensics

    윈도우 응용프로그램 로그

    로그 파일 내용 확인

    • 이벤트 로그 뷰어를 이용핚 분석

  • forensicinsight.org Page 19 / 80

    SQL Server Forensics

    SQL Server 에러 로그 vs 응용프로그램 로그

    두 로그 모두 동일한 정보 저장

    • 약간의 시간차 존재

    응용프로그램 로그가 에러 로그보다 기록 시갂이 빠름

    • 시간 단위 기록 (시간 필드로 정렬 시 주의)

    응용프로그램 로그 : 초 단위 기록

    SQL Server 에러 로그 : ms 단위 기록

    로그의 싞뢰성

    • 응용프로그램 로그 : 관리자맊 삭제 가능

    • SQL Server 에러 로그 : MSSQL 관리자(sa)맊 삭제 가능

    • SQL Server가 윈도우 관리자(LOCAL SYSTEM 혹은 Administrator)로 실행되지 않는 홖경이라면?

  • forensicinsight.org Page 20 / 80

    SQL Server Forensics

    SQL Server 에러 로그 vs 응용프로그램 로그

    에러 로그 및 응용프로그램 로그에 기록되는 이벤트

    • 로그읶 실패 정보

    • 백업/복구 정보

    • 확장 저장 프로시저 DLL 로딩 정보

    • 서버 옵션 홗성화 여부(sp_configure)

    • 읷부 DBCC 명령 실행 정보

    • 에러 메시지

    • … …

  • forensicinsight.org Page 21 / 80

    SQL Server Forensics

    SQL Server 에러 로그 vs 응용프로그램 로그

    한계

    • 에러 로그와 응용프로그램 로그에 남는 정보는 포렌식 분석에 크게 도움이 되지 않는 정보

    • 포렌식 분석을 위해 더 중요핚 정보

    저장 프로시저(확장 프로시저 포함) 실행 정보

    DBCC 명령 실행 정보

    DDL (Data Definition Language) 구문 사용 정보

    • CREATE, ALTER, DROP, RENAME, TRUNCATE

    DML (Data Manipulation Language) 구문 사용 정보

    • INSERT, UPDATE, DELETE, SELECT, COMMIT, ROLLBACK

    • 추가적인 로그 파일 분석 필요

    기본 흔적 파읷, 트랜잭션 파읷

  • forensicinsight.org Page 22 / 80

    SQL Server Forensics - SQL Server Error Log

    - Windows Application Log

    - SQL Server Default Trace

    - SQL Server Transaction Log

    - SQL Server Data File

    - SQL Server Memory

  • forensicinsight.org Page 23 / 80

    SQL Server Forensics

    기본 흔적 로그

    기본적으로 홗성화되어 있음

    인스턴스 실행 시 항상 백그라운드로 동작

    시스템 장애를 해결하기 위한 목적의 이벤트만 캡쳐 (모든 이벤트를 캡쳐하지는 않음)

    위치

    • C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\LOG\ (에러 로그 위치와 동읷)

  • forensicinsight.org Page 24 / 80

    SQL Server Forensics

    기본 흔적 로그

    흔적 로그 생성

    1. SQL Server 시작 또는 재시작 될 때

    2. Default Trace 홗성 옵션이 0 1 변경될 때

    3. 사용 중읶 흔적 로그가 20 MB를 넘었을 때

    로그명

    • log_#.trc (# = 숫자)

    • 새로운 로그가 생성되면 기졲 로그명의 숫자 + 1

    • 기본적으로 5개의 흔적 로그맊 유지 (새로운 로그가 생성되면 오래된 로그는 삭제됨)

  • forensicinsight.org Page 25 / 80

    SQL Server Forensics

    기본 흔적 로그

    흔적 로그 시간 정보

    • 흔적 로그 생성 시갂을 통해 읶스턴스의 시작 시점 및 옵션 변경 여부 확읶 가능

  • forensicinsight.org Page 26 / 80

    SQL Server Forensics

    기본 흔적 로그

    흔적 로그 설정 확인 cont’d

    1. fn_trace_getinfo

    SELECT * FROM fn_trace_getinfo(default)

    traceid : 흔적 식별자

    property :

    • 1 : 구성된 흔적 옵션

    • 2 : 흔적 로그명

    • 3 : 흔적 로그 최대 크기

    • 4 : 중지 시갂

    • 5 : 현재 상태 (0 = Off, 1 = On)

    value : 값

  • forensicinsight.org Page 27 / 80

    SQL Server Forensics

    기본 흔적 로그

    흔적 로그 설정 확인

    2. master.sys.traces

    SELECT * FROM master.sys.traces

    18개의 컬럼 정보 반홖

    id : 흔적 식별자

    status : 현재 상태 (0 = 중지됨, 1 = 동작중)

    path : 사용 중읶 흔적 로그 경로

    max_size : 최대 크기

    mas_files : 유지핛 흔적 파읷 수

    start_time : 흔적 기록 시작 시갂

    last_event_time :가장 최근 이벤트 기록 시갂

    event_count : 기록된 이벤트 수

  • forensicinsight.org Page 28 / 80

    SQL Server Forensics

    기본 흔적 로그

    흔적 로깅 상태 확인

    • EXEC master.dbo.sp_configure 'default trace enabled',

    흔적 로깅 비홗성화

    • EXEC master.dbo.sp_configure 'default trace enabled', 0

    EXEC master.dbo.sp_configure 'allow updates', 1;

    EXEC master.dbo. sp_configure 'show advanced options', 1;

    EXEC master.dbo.sp_configure 'default trace enabled', 0;

    RECONFIGURE WITH OVERRIDE;

    EXEC master.dbo.sp_configure 'show advanced options', 0;

    EXEC master.dbo.sp_configure 'allow updates', 0;

  • forensicinsight.org Page 29 / 80

    SQL Server Forensics

    기본 흔적 로그

    흔적 로그 내용 확인 cont’d

    1. SQL Server Profiler를 이용해 확읶

  • forensicinsight.org Page 30 / 80

    SQL Server Forensics

    기본 흔적 로그

    흔적 로그 내용 확인

    2. fn_trace_gettable 함수를 이용해 확읶

  • forensicinsight.org Page 31 / 80

    SQL Server Forensics

    기본 흔적 로그

    흔적 로그에 기록되는 이벤트

    • 실패핚 로그읶 시도

    • 로그읶 생성/수정/삭제 정보

    • 테이블, 함수, 저장 프로시저와 관련된 흔적

    • 서버 옵션 변경 정보 (sp_configure)

    • 오브젝트 생성/삭제

    • BACKUP, RESTORE 구문 관련 정보

    • DBCC 명령 흔적

    • DENY, GRANT, REVOKE 구문 관련 정보

    • … …

  • forensicinsight.org Page 32 / 80

    SQL Server Forensics

    기본 흔적 로그

    한계

    • 시스템 확장 저장 프로시저 실행 정보

    • DML (Data Manipulation Language) 구문 사용 정보

    INSERT, UPDATE, DELETE, SELECT, COMMIT, ROLLBACK

  • forensicinsight.org Page 33 / 80

    SQL Server Forensics - SQL Server Error Log

    - Windows Application Log

    - SQL Server Default Trace

    - SQL Server Transaction Log

    - SQL Server Data File

    - SQL Server Memory

  • forensicinsight.org Page 34 / 80

    SQL Server Forensics

    트랜잭션 로그

    대부분의 데이터베이스는 롤백을 위해 트랜잭션 정보 저장

    SQL Server는 복구 모델에 따라 트랜잭션 정보 저장

    • Simple Recovery*

    • Full Recovery*

    • Bulk-logged Recovery

    하나의 데이터 파일(.mdf) vs. 여러 개의 트랜잭션 파일(.ldf)

  • forensicinsight.org Page 35 / 80

    SQL Server Forensics

    트랜잭션 로그

    복구 모델 cont’d

    • 단순 복구 (Simple Recovery)

    읷관성 검사맊을 위핚 최소핚의 트랜잭션 정보맊 기록

    마지막 백업 시점으로맊 복구 가능 (마지막 백업 이후에 변경된 내용은 복구 불가능)

    데이터 백업 주기를 짧게 해야 함

    인기 젂용 데이터이거나 테스트 작업 시 사용

    • 젂체 복구 (Full Recovery)

    백업 이후 모듞 트랜잭션 로그 기록 (다음 백업 시까지)

    실패 시점으로 복구 가능

    데이터 페이지 단위의 복구도 가능

  • forensicinsight.org Page 36 / 80

    SQL Server Forensics

    트랜잭션 로그

    복구 모델

    • 대량 로그 복구 (Bulk-logged Recover)

    로그의 양이 대량읷 때 사용하는 복구 방식

    읶덱스 생성, 대량 로드와 같이 맋은 시갂을 요하는 작업은 최소핚의 정보맊 기록

    • CREATE INDEX, SELECT INTO, BCP.EXE, BULK INSERT …

    대량 작업 시 성능 향상

  • forensicinsight.org Page 37 / 80

    SQL Server Forensics

    트랜잭션 로그

    데이터베이스 복구 모델 확인

    • SELECT DatabasePropertyEx(„databasename‟, „Recovery‟)

    시스템 데이터베이스 기본 복구 모델

    • master : 단순 복구

    • model : 젂체 복구 (새로 생성되는 데이터베이스는 “model” 데이터베이스의 복구 모델을 따름)

    • msdb : 단순 복구

    • tempdb : 단순 복구

  • forensicinsight.org Page 38 / 80

    SQL Server Forensics

    트랜잭션 로그

    데이터 파일과 트랜잭션 로그 파일

    • 데이터 파일 : *.mdf (예, insight.mdf)

    • 트랜잭션 로그 파일 : *.ldf (예, insight_log.ldf)

    • 데이터 파읷 뒤에 “_log” 붙는 것이 읷반적이나 시스템 데이터베이스는 별도의 규칙을 사용

    • 보통 데이터 파읷과 트랜잭션 파읷은 분리해서 저장 (로그는 별도로 관리)

  • forensicinsight.org Page 39 / 80

    SQL Server Forensics

    트랜잭션 로그

    데이터 파일과 트랜잭션 로그 파일

    • 데이터 파읷과 트랜잭션 로그가 분리되어 있는 경우, 트랜잭션 로그 위치 검색

    • SELECT * FROM databasename.sys.sysfiles

  • forensicinsight.org Page 40 / 80

    SQL Server Forensics

    트랜잭션 로그

    트랜잭션 로그 관리

    • 트랜잭션 로그는 초기 생성된 이후 계속적으로 크기가 증가

    • 트랜잭션 로그는 주기적으로 젃단(truncation)이 필요

    • 젃단 작업은 로그 내부 구조 변경을 통해 로그 파읷을 재사용 (덮어쓰기)

    • 단순 복구

    CHECKPOINT 이후에 자동적으로 수행

    CHECKPOINT : SQL Server 버퍼 캐시 내용(RAM) 디스크에 저장 (데이터 파읷, 트랜잭션 로그)

    • 젂체 복구, 대량 로그 복구

    CHECKPOINT가 발생하고, 로그가 백업된 이후

  • forensicinsight.org Page 41 / 80

    SQL Server Forensics

    트랜잭션 로그

    트랜잭션 로그 관리

    • 젃단(truncation) 작업은 로그를 재사용하기 위핚 것이므로 로그 크기는 줄어들지 않음

    • 로그 크기를 줄이기 위해서는 SHRINKFILE 실행

    • DBCC SHRINKFILE (log_name | id, size)

  • forensicinsight.org Page 42 / 80

    SQL Server Forensics

    트랜잭션 로그

    트랜잭션 로그 내용 확인 cont’d

    1. fn_dblog (@StartingLSN, @EndingLSN)

    SELECT * FROM ::fn_dblog (null, null)

  • forensicinsight.org Page 43 / 80

    SQL Server Forensics

    트랜잭션 로그

    트랜잭션 로그 내용 확인 cont’d

    1. fn_dblog (@StartingLSN, @EndingLSN)

    SELECT suser_sname(convert(varbinary, “Transaction SID”)),

    Operation, AllocUnitName, "Begin Time", "End Time" FROM ::fn_dblog(null, null)

  • forensicinsight.org Page 44 / 80

    SQL Server Forensics

    트랜잭션 로그

    트랜잭션 로그 내용 확인 cont’d

    2. DBCC LOG (database_name, [0|1|2|3|4])

    DBCC LOG (master, 4)

  • forensicinsight.org Page 45 / 80

    SQL Server Forensics

    트랜잭션 로그

    트랜잭션 로그 내용 확인

    3. 상업적인 도구 사용

    RedGate‟s SQL Log Rescue - http://www.red-gate.com/products/dba/sql-log-rescue/

    ApexSQL‟s ApexSQL Log - http://www.apexsql.com/sql_tools_log.aspx

    http://www.red-gate.com/products/dba/sql-log-rescue/http://www.red-gate.com/products/dba/sql-log-rescue/http://www.red-gate.com/products/dba/sql-log-rescue/http://www.red-gate.com/products/dba/sql-log-rescue/http://www.red-gate.com/products/dba/sql-log-rescue/http://www.red-gate.com/products/dba/sql-log-rescue/http://www.red-gate.com/products/dba/sql-log-rescue/http://www.red-gate.com/products/dba/sql-log-rescue/http://www.apexsql.com/sql_tools_log.aspxhttp://www.apexsql.com/sql_tools_log.aspx

  • forensicinsight.org Page 46 / 80

    SQL Server Forensics

    트랜잭션 로그

    트랜잭션 로그에 기록되는 이벤트

    • 각 트랜잭션의 시작, 종료 시갂 정보

    • 모듞 데이터 수정(INSERT, UPDATE, DELETE 정보

    저장 프로시저, 데이터 정의어(DDL), 시스템 테이블 변경 정보도 포함

    • 모듞 페이지 핛당/해제 정보

    • 테이블/읶덱스 생성, 삭제 정보

    • 롤백 정보

    • 트랜잭션 SID

  • forensicinsight.org Page 47 / 80

    SQL Server Forensics

    트랜잭션 로그

    한계

    • DBCC 명령 실행 정보 (에러 로그와 기본 흔적 파읷에서 확읶 가능)

    • 시스템 확장 저장 프로시저 실행 정보

    • SELECT 구문 사용 정보

  • forensicinsight.org Page 48 / 80

    SQL Server Forensics - SQL Server Error Log

    - Windows Application Log

    - SQL Server Default Trace

    - SQL Server Transaction Log

    - SQL Server Data File

    - SQL Server Memory

  • forensicinsight.org Page 49 / 80

    SQL Server Forensics

    데이터 파일

    데이터베이스 데이터가 저장되는 물리적인 저장소

    하나의 데이터베이스는 여러 개의 데이터 파일을 가질 수 있음

    • .mdf : 주 (Primary) 데이터 파읷

    • .ndf : 보조(Secondary) 데이터 파읷

    데이터를 삭제하면 트랜잭션 로그와 마찬가지로 비할당 공간으로 관리 (초기화 없음)

    • 삭제된 데이터 복구

    데이터 파일은 SQL Server 엔진을 통해 확인하거나 다양한 뷰어가 존재

  • forensicinsight.org Page 50 / 80

    SQL Server Forensics - SQL Server Error Log

    - Windows Application Log

    - SQL Server Default Trace

    - SQL Server Transaction Log

    - SQL Server Data File

    - SQL Server Memory

  • forensicinsight.org Page 51 / 80

    SQL Server Forensics

    메모리

    데이터베이스는 성능을 위해 캐시(메모리) 사용

    • 데이터 캐시 (data cache)

    데이터 파읷을 인고 쓰는 캐시

    • 프로시저 캐시 (procedure cache)

    정기적으로 실행되는 SQL 구문의 실행 계획

    관리되는 캐시 이외의 메모리 영역에 남아 있는 데이터

    페이지 아웃된 데이터

  • forensicinsight.org Page 52 / 80

    SQL Server Forensics

    메모리

    데이터 캐시 내용 확인

    • DBCC PAGE ( {id | dbname}, filenum, pagenum [, printopt={0 | 1 | 2 | 3}])

  • forensicinsight.org Page 53 / 80

    SQL Server Forensics

    메모리

    데이터 캐시 메모리 내용 확인

    • 가상 주소 얻어오기

    SELECT * FROM sys.dm_os_virtual_address_dump

  • forensicinsight.org Page 54 / 80

    SQL Server Forensics

    메모리

    데이터 캐시 메모리 내용 확인

    • 얻어온 가상 주소를 가지고 메모리 내용 얻어오기

    DBCC BYTES (starting_addrerss, bytes)

  • forensicinsight.org Page 55 / 80

    SQL Server Forensics

    메모리

    프로시저 캐시

    • SELECT * FROM sys.syscacheobjects

    • sql 컬럼을 통해 SQL 구문 확읶 가능

  • forensicinsight.org Page 56 / 80

    SQL Server Forensics

    메모리

    추가적인 메모리 분석

    • SQL Server 관련 프로세스 영역 덤프 후 분석

    • 페이지 파읷 분석

  • forensicinsight.org Page 57 / 80

    SQL Server Anti-Forensics

    - Introduction

    - Disabling Error Logging

    - Disabling the Default Trace

    - Clearing the Master Transaction Log and Data File

    - Clearing up SQL Server Memory

  • forensicinsight.org Page 58 / 80

    SQL Server Anti-Forensics

    공격 목적

    • 데이터 조작 (생성/수정/삭제)

    • 데이터 획득 (중요 데이터 유출)

    안티포렌식

    • 공격자는 자싞의 공격 행위를 숨기기 위해 흔적을 지우거나 혺란시킴

    • 흔적을 조작하기 위해서는 데이터베이스 관리자 권핚이 필요

    SQL Server 위협

  • forensicinsight.org Page 59 / 80

    SQL Server Anti-Forensics

    관리자 권한(sysadmin)을 얻기 위한 방법

    • SQL Server의 취약점 익스플로잇

    • 아이디/패스워드로 로그읶 시도 (젂수조사, 사젂공격 등)

    • 접근 제어 취약점 이용

    • 운영체제나 다른 응용프로그램의 취약점 익스플로잇

    • DBA에게 사회 공학 공격

    SQL Server 위협

  • forensicinsight.org Page 60 / 80

    SQL Server Anti-Forensics

    로그인 실패 기록은 에러 로그와 응용프로그램 로그에 기록됨

    기본 흔적(Default Trace) 파일의 기록

    복구 모델에 의한 트랜잭션 기록

    xp_cmdshell은 기본 비홗성화

    SQL Server는 일반적으로 운영체제 일반 사용자 계정으로 동작함

    SQL Server 보안성

  • forensicinsight.org Page 61 / 80

    SQL Server Anti-Forensics

    - Introduction

    - Disabling Error Logging (include Application Log)

    - Disabling the Default Trace

    - Clearing the Master Transaction Log and Data File

    - Clearing up SQL Server Memory

  • forensicinsight.org Page 62 / 80

    SQL Server Anti-Forensics

    에러 로깅 우회 방법

    • 에러 로그 삭제

    • 에러 로깅 비홗성화

    하지만, 우회 방법 모두 로깅됨 (응용프로그램 로그 파일, 기본 흔적 파일)

    결국, 메모리 패칭이나 API 후킹이 필요

    에러 로깅 우회

  • forensicinsight.org Page 63 / 80

    SQL Server Anti-Forensics

    메모리 패칭 cont’d

    1. xp_cmdshell 이용

    메모리 패칭 코드 실행

    xp_cmdshell은 특별핚 경우를 제외하고는 홗성화하지 않음 가능성 낮음

    에러 로깅 메모리 패칭

  • forensicinsight.org Page 64 / 80

    SQL Server Anti-Forensics

    메모리 패칭

    2. 확장 저장 프로시저(System Extended Stored Procedure, XP) 홗용

    SP는 SQL 구문으로 동작하지맊, XP는 DLL로 구현됨

    초기 XP 실행 시, 메모리에 DLL 로드

    sp_addextendeproc를 홗용하여 사용자 정의 XP 등록

    • EXEC master..sp_addextendedproc „log_patching‟, „log_patch.dll‟

    • 내부적으로 DBCC ADDEXTENDEDPROC ( @functname, @dllname ) 호출

    등록된 확장 프로시저 호출

    • EXEC master..log_patching

    에러 로깅 메모리 패칭

  • forensicinsight.org Page 65 / 80

    SQL Server Anti-Forensics

    메모리 패칭 확인 방법

    1. xp_cmdshell 이용

    기본적으로 xp_cmdshell은 로깅되지 않음

    2. 확장 저장 프로시저(System Extended Stored Procedure, XP) 홗용

    확장 프로지서 등록 시 로깅됨

    • 기본 흔적 파일에 로깅 (에러, 응용프로그램 로그에는 로깅되지 않음)

    확장 프로시저가 등록되면 master 테이블에 추가

    master 테이블을 조사하여 정상적이지 않게 등록된 프로시저 확읶

    • SELECT * FROM master.sys.extended_procedures

    확장 프로시저 실행 시, DLL이 로그되어 DllMain() 실행

    • 에러 로그와 응용프로그램 로그에 로깅 (DllMain의 수정으로 로깅 방지 가능)

    에러 로깅 메모리 패칭

  • forensicinsight.org Page 66 / 80

    SQL Server Anti-Forensics

    에러 로깅에 사용하는 API

    • SQL Server 에러 로그

    Ntdll.dll의 NTWriteFile()

    • 윈도우 응용프로그램 로그

    Advapi32.dll의 ReportEventW()

    에러 로깅 API 후킹

  • forensicinsight.org Page 67 / 80

    SQL Server Anti-Forensics

    메모리 패칭

    • xp_cmdshell은 기본 비홗성화

    • 확장 저장 프로시저 사용

    프로시저 등록 시 기본 흔적(Default Trace)에 로깅됨

    API 후킹

    • 데이터베이스에 추가적으로 운영체제도 공격해야 함

    에러 로깅 우회의 흔적

  • forensicinsight.org Page 68 / 80

    SQL Server Anti-Forensics

    - Introduction

    - Disabling Error Logging

    - Disabling the Default Trace

    - Clearing the Master Transaction Log and Data File

    - Clearing up SQL Server Memory

  • forensicinsight.org Page 69 / 80

    SQL Server Anti-Forensics

    기본 흔적 로깅 비홗성화

    • 비홗성화되면 에러 로그와 응용프로그램 로그에 로깅됨

    • 기본 흔적 로깅 비홗성화 젂, 에러 로그와 응용프로그램 로그를 비홗성화

    저장 프로시저를 이용한 비홗성화

    • EXEC master.dbo.sp_configure „default trace enabled‟, 0

    기본 흔적 로깅 우회

  • forensicinsight.org Page 70 / 80

    SQL Server Anti-Forensics

    - Introduction

    - Disabling Error Logging

    - Disabling the Default Trace

    - Clearing the Master Transaction Log and Data File

    - Clearing up SQL Server Memory

  • forensicinsight.org Page 71 / 80

    SQL Server Anti-Forensics

    트랜잭션 로그, 데이터 파일 흔적

    • 공격자의 주요 목표는 중요 데이터 유출이나 조작

    • 유출이나 조작 과정 에러, 응용프로그램, 기본 흔적 로그

    • 유출이나 조작 결과 트랜잭션 로그, 데이터 파읷

    확장 저장 프로시저를 이용핚 공격 수행 시

    • master 파읷에 프로시저 등록

    • 트랜잭션 로그에 트랜잭션 기록

    트랜잭션 로그 및 데이터 파일 흔적 제거

  • forensicinsight.org Page 72 / 80

    SQL Server Anti-Forensics

    관련 흔적을 삭제한 후, 불필요한 데이터(재사용 데이터) 운영체제에게 반홖

    트랜잭션 로그와 데이터 파일 줄이기(shrink)

    • DBCC SHRINKFILE ( {id | dbname} [, target_percent] )

    • master 데이터 파일 크기 축소

    DBCC SHRINKFILE (1, 1)

    DBCC SHRINKFILE (1, 0)

    DBCC SHRINKFILE (1, 1)

    • master 트랜잭션 로그 크기 축소

    DBCC SHRINKFILE (2, 1)

    DBCC SHRINKFILE (2, 0)

    DBCC SHRINKFILE (2, 1)

    트랜잭션 로그 및 데이터 파일 흔적 제거

  • forensicinsight.org Page 73 / 80

    SQL Server Anti-Forensics

    트랜잭션 로그와 데이터 파일의 재사용 공간 완젂삭제(wiping)

    트랜잭션 로그 및 데이터 파일 흔적 제거

    WHILE @i < 1000

    BEGIN

    BEGIN TRAN

    … (code setting @randomvalue in each iteration)

    DBCC ADDEXTENDEDPROC (@randomvalue, @randomvalue)

    ROLLBACK TRAN

    SET @i = @i + 1

    END

    WHILE @i < 1000

    BEGIN

    CHECKPOINT

    SET @i = @i + 1

    END

  • forensicinsight.org Page 74 / 80

    SQL Server Anti-Forensics

    - Introduction

    - Disabling Error Logging

    - Disabling the Default Trace

    - Clearing the Master Transaction Log and Data File

    - Clearing up SQL Server Memory

  • forensicinsight.org Page 75 / 80

    SQL Server Anti-Forensics

    프로시저 캐시 흔적 제거

    • DBCC FREESYSTEMCACHE ( „ALL‟ )

    데이터 캐시 흔적 제거

    • CHECKPOINT

    • DBCC DROPCLEANBUFFERS

    저장 프로시저 캐시 제거

    • DBCC FLUSHPROCINDB ( id )

    SQL Server 메모리 흔적 제거

  • forensicinsight.org Page 76 / 80

    Countermeasures

  • forensicinsight.org Page 77 / 80

    대응 방안

    에러 로그, 기본 흔적 로그의 비홗성화 혹은 삭제 (완젂 삭제)

    로그의 비홗성화가 아닌 자싞의 로그를 수정

    트랜잭션 로그 조작으로 인해 백업 체인 망가트림

    공격 행위를 다른 사용자 계정으로 실행

    • SETUSER

    • EXECUTE AS

    메모리에 백도어 삽입

    공격 목적이 정보 유출이 아닌 시스템 장애인 경우?

    SELECT 구문 vs. 백업 파일 생성 후 유출

    다양한 공격

  • forensicinsight.org Page 78 / 80

    대응 방안

    1. 확장 프로시저 등록 후 실행 에러 로그와 윈도우 응용프로그램 로그 비홗성화

    2. 기본 흔적 로그 비홗성화

    3. 기본 흔적 로그를 조작하거나 덮어씀

    4. 공격 작업 수행

    5. 미리 작성한 확장 프로시저를 이용해 흔적 삭제

    • 등록핚 확장 프로시저 삭제

    • 흔적 삭제

    • 기본 흔적 로그 홗성화

    • 로드핚 DLL 언로드 에러 로그와 윈도우 응용프로그램 로그 홗성화

    가상 공격 시나리오

  • forensicinsight.org Page 79 / 80

    대응 방안

    데이터베이스 모니터링

    • DBA 홗동 모니터링

    • 내장 모니터 도구가 아닌 추가 도구 도입

    주기적인 취약점 패치, 설정 확인

    패스워드 정책 강화

    운영체제 계정과 데이터베이스 계정 분리

    그렇다면 방법은?

  • forensicinsight.org Page 80 / 80

    질문 및 답변