(120128) #fitalk sql server anti-forensics

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

Upload: insight-forensic

Post on 18-Jan-2017

45 views

Category:

Technology


4 download

TRANSCRIPT

Page 1: (120128) #fitalk   sql server anti-forensics

FORENSICINSIGHT SEMINAR

SQL Server Anti-Forensics

proneer

[email protected]

http://forensic-proof.com

Security is a people problem…

Page 2: (120128) #fitalk   sql server anti-forensics

forensicinsight.org Page 2 / 80

개요

1. SQL Server 포렌식

2. SQL Server 안티포렌식

3. 대응 방안

Page 3: (120128) #fitalk   sql server anti-forensics

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) : 데이터 캐시, 프로시저 캐시

Page 4: (120128) #fitalk   sql server anti-forensics

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

Page 5: (120128) #fitalk   sql server anti-forensics

forensicinsight.org Page 5 / 80

SQL Server Forensics

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

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

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

에러 로그

Page 6: (120128) #fitalk   sql server anti-forensics

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

에러 로그

Page 7: (120128) #fitalk   sql server anti-forensics

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

Page 8: (120128) #fitalk   sql server anti-forensics

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

에러 로그

Page 9: (120128) #fitalk   sql server anti-forensics

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 삭제됨

에러 로그

Page 10: (120128) #fitalk   sql server anti-forensics

forensicinsight.org Page 10 / 80

SQL Server Forensics

로그 파일 시간 정보

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

에러 로그

Page 11: (120128) #fitalk   sql server anti-forensics

forensicinsight.org Page 11 / 80

SQL Server Forensics

로그 파일 설정 확인

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

SELECT ServerProperty(„ErrorLogFileName‟)

• 젂체 로그 파읷 정보 나열

EXEC master.dbo.xp_enumerrorlog

에러 로그

Page 12: (120128) #fitalk   sql server anti-forensics

forensicinsight.org Page 12 / 80

SQL Server Forensics

로그 파일 내용 확인 cont’d

1. 텍스트 편집기로 확읶

에러 로그

Page 13: (120128) #fitalk   sql server anti-forensics

forensicinsight.org Page 13 / 80

SQL Server Forensics

로그 파일 내용 확인 cont’d

2. Management Studio를 이용해 확읶

에러 로그

Page 14: (120128) #fitalk   sql server anti-forensics

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 : 정렬 여부

에러 로그

Page 15: (120128) #fitalk   sql server anti-forensics

forensicinsight.org Page 15 / 80

SQL Server Forensics

로그 파일 내용 확인

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

에러 로그

Page 16: (120128) #fitalk   sql server anti-forensics

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

Page 17: (120128) #fitalk   sql server anti-forensics

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

Page 18: (120128) #fitalk   sql server anti-forensics

forensicinsight.org Page 18 / 80

SQL Server Forensics

윈도우 응용프로그램 로그

로그 파일 내용 확인

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

Page 19: (120128) #fitalk   sql server anti-forensics

forensicinsight.org Page 19 / 80

SQL Server Forensics

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

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

• 약간의 시간차 존재

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

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

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

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

로그의 싞뢰성

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

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

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

Page 20: (120128) #fitalk   sql server anti-forensics

forensicinsight.org Page 20 / 80

SQL Server Forensics

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

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

• 로그읶 실패 정보

• 백업/복구 정보

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

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

• 읷부 DBCC 명령 실행 정보

• 에러 메시지

• … …

Page 21: (120128) #fitalk   sql server anti-forensics

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

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

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

Page 22: (120128) #fitalk   sql server anti-forensics

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

Page 23: (120128) #fitalk   sql server anti-forensics

forensicinsight.org Page 23 / 80

SQL Server Forensics

기본 흔적 로그

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

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

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

위치

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

Page 24: (120128) #fitalk   sql server anti-forensics

forensicinsight.org Page 24 / 80

SQL Server Forensics

기본 흔적 로그

흔적 로그 생성

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

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

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

로그명

• log_#.trc (# = 숫자)

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

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

Page 25: (120128) #fitalk   sql server anti-forensics

forensicinsight.org Page 25 / 80

SQL Server Forensics

기본 흔적 로그

흔적 로그 시간 정보

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

Page 26: (120128) #fitalk   sql server anti-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 : 값

Page 27: (120128) #fitalk   sql server anti-forensics

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 : 기록된 이벤트 수

Page 28: (120128) #fitalk   sql server anti-forensics

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;

Page 29: (120128) #fitalk   sql server anti-forensics

forensicinsight.org Page 29 / 80

SQL Server Forensics

기본 흔적 로그

흔적 로그 내용 확인 cont’d

1. SQL Server Profiler를 이용해 확읶

Page 30: (120128) #fitalk   sql server anti-forensics

forensicinsight.org Page 30 / 80

SQL Server Forensics

기본 흔적 로그

흔적 로그 내용 확인

2. fn_trace_gettable 함수를 이용해 확읶

Page 31: (120128) #fitalk   sql server anti-forensics

forensicinsight.org Page 31 / 80

SQL Server Forensics

기본 흔적 로그

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

• 실패핚 로그읶 시도

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

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

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

• 오브젝트 생성/삭제

• BACKUP, RESTORE 구문 관련 정보

• DBCC 명령 흔적

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

• … …

Page 32: (120128) #fitalk   sql server anti-forensics

forensicinsight.org Page 32 / 80

SQL Server Forensics

기본 흔적 로그

한계

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

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

INSERT, UPDATE, DELETE, SELECT, COMMIT, ROLLBACK

Page 33: (120128) #fitalk   sql server anti-forensics

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

Page 34: (120128) #fitalk   sql server anti-forensics

forensicinsight.org Page 34 / 80

SQL Server Forensics

트랜잭션 로그

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

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

• Simple Recovery*

• Full Recovery*

• Bulk-logged Recovery

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

Page 35: (120128) #fitalk   sql server anti-forensics

forensicinsight.org Page 35 / 80

SQL Server Forensics

트랜잭션 로그

복구 모델 cont’d

• 단순 복구 (Simple Recovery)

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

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

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

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

• 젂체 복구 (Full Recovery)

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

실패 시점으로 복구 가능

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

Page 36: (120128) #fitalk   sql server anti-forensics

forensicinsight.org Page 36 / 80

SQL Server Forensics

트랜잭션 로그

복구 모델

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

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

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

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

대량 작업 시 성능 향상

Page 37: (120128) #fitalk   sql server anti-forensics

forensicinsight.org Page 37 / 80

SQL Server Forensics

트랜잭션 로그

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

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

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

• master : 단순 복구

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

• msdb : 단순 복구

• tempdb : 단순 복구

Page 38: (120128) #fitalk   sql server anti-forensics

forensicinsight.org Page 38 / 80

SQL Server Forensics

트랜잭션 로그

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

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

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

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

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

Page 39: (120128) #fitalk   sql server anti-forensics

forensicinsight.org Page 39 / 80

SQL Server Forensics

트랜잭션 로그

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

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

• SELECT * FROM databasename.sys.sysfiles

Page 40: (120128) #fitalk   sql server anti-forensics

forensicinsight.org Page 40 / 80

SQL Server Forensics

트랜잭션 로그

트랜잭션 로그 관리

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

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

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

• 단순 복구

CHECKPOINT 이후에 자동적으로 수행

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

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

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

Page 41: (120128) #fitalk   sql server anti-forensics

forensicinsight.org Page 41 / 80

SQL Server Forensics

트랜잭션 로그

트랜잭션 로그 관리

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

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

• DBCC SHRINKFILE (log_name | id, size)

Page 42: (120128) #fitalk   sql server anti-forensics

forensicinsight.org Page 42 / 80

SQL Server Forensics

트랜잭션 로그

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

1. fn_dblog (@StartingLSN, @EndingLSN)

SELECT * FROM ::fn_dblog (null, null)

Page 43: (120128) #fitalk   sql server anti-forensics

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)

Page 44: (120128) #fitalk   sql server anti-forensics

forensicinsight.org Page 44 / 80

SQL Server Forensics

트랜잭션 로그

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

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

DBCC LOG (master, 4)

Page 46: (120128) #fitalk   sql server anti-forensics

forensicinsight.org Page 46 / 80

SQL Server Forensics

트랜잭션 로그

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

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

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

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

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

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

• 롤백 정보

• 트랜잭션 SID

Page 47: (120128) #fitalk   sql server anti-forensics

forensicinsight.org Page 47 / 80

SQL Server Forensics

트랜잭션 로그

한계

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

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

• SELECT 구문 사용 정보

Page 48: (120128) #fitalk   sql server anti-forensics

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

Page 49: (120128) #fitalk   sql server anti-forensics

forensicinsight.org Page 49 / 80

SQL Server Forensics

데이터 파일

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

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

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

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

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

• 삭제된 데이터 복구

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

Page 50: (120128) #fitalk   sql server anti-forensics

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

Page 51: (120128) #fitalk   sql server anti-forensics

forensicinsight.org Page 51 / 80

SQL Server Forensics

메모리

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

• 데이터 캐시 (data cache)

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

• 프로시저 캐시 (procedure cache)

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

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

페이지 아웃된 데이터

Page 52: (120128) #fitalk   sql server anti-forensics

forensicinsight.org Page 52 / 80

SQL Server Forensics

메모리

데이터 캐시 내용 확인

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

Page 53: (120128) #fitalk   sql server anti-forensics

forensicinsight.org Page 53 / 80

SQL Server Forensics

메모리

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

• 가상 주소 얻어오기

SELECT * FROM sys.dm_os_virtual_address_dump

Page 54: (120128) #fitalk   sql server anti-forensics

forensicinsight.org Page 54 / 80

SQL Server Forensics

메모리

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

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

DBCC BYTES (starting_addrerss, bytes)

Page 55: (120128) #fitalk   sql server anti-forensics

forensicinsight.org Page 55 / 80

SQL Server Forensics

메모리

프로시저 캐시

• SELECT * FROM sys.syscacheobjects

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

Page 56: (120128) #fitalk   sql server anti-forensics

forensicinsight.org Page 56 / 80

SQL Server Forensics

메모리

추가적인 메모리 분석

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

• 페이지 파읷 분석

Page 57: (120128) #fitalk   sql server anti-forensics

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

Page 58: (120128) #fitalk   sql server anti-forensics

forensicinsight.org Page 58 / 80

SQL Server Anti-Forensics

공격 목적

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

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

안티포렌식

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

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

SQL Server 위협

Page 59: (120128) #fitalk   sql server anti-forensics

forensicinsight.org Page 59 / 80

SQL Server Anti-Forensics

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

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

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

• 접근 제어 취약점 이용

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

• DBA에게 사회 공학 공격

SQL Server 위협

Page 60: (120128) #fitalk   sql server anti-forensics

forensicinsight.org Page 60 / 80

SQL Server Anti-Forensics

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

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

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

xp_cmdshell은 기본 비홗성화

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

SQL Server 보안성

Page 61: (120128) #fitalk   sql server anti-forensics

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

Page 62: (120128) #fitalk   sql server anti-forensics

forensicinsight.org Page 62 / 80

SQL Server Anti-Forensics

에러 로깅 우회 방법

• 에러 로그 삭제

• 에러 로깅 비홗성화

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

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

에러 로깅 우회

Page 63: (120128) #fitalk   sql server anti-forensics

forensicinsight.org Page 63 / 80

SQL Server Anti-Forensics

메모리 패칭 cont’d

1. xp_cmdshell 이용

메모리 패칭 코드 실행

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

에러 로깅 메모리 패칭

Page 64: (120128) #fitalk   sql server anti-forensics

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

에러 로깅 메모리 패칭

Page 65: (120128) #fitalk   sql server anti-forensics

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의 수정으로 로깅 방지 가능)

에러 로깅 메모리 패칭

Page 66: (120128) #fitalk   sql server anti-forensics

forensicinsight.org Page 66 / 80

SQL Server Anti-Forensics

에러 로깅에 사용하는 API

• SQL Server 에러 로그

Ntdll.dll의 NTWriteFile()

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

Advapi32.dll의 ReportEventW()

에러 로깅 API 후킹

Page 67: (120128) #fitalk   sql server anti-forensics

forensicinsight.org Page 67 / 80

SQL Server Anti-Forensics

메모리 패칭

• xp_cmdshell은 기본 비홗성화

• 확장 저장 프로시저 사용

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

API 후킹

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

에러 로깅 우회의 흔적

Page 68: (120128) #fitalk   sql server anti-forensics

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

Page 69: (120128) #fitalk   sql server anti-forensics

forensicinsight.org Page 69 / 80

SQL Server Anti-Forensics

기본 흔적 로깅 비홗성화

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

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

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

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

기본 흔적 로깅 우회

Page 70: (120128) #fitalk   sql server anti-forensics

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

Page 71: (120128) #fitalk   sql server anti-forensics

forensicinsight.org Page 71 / 80

SQL Server Anti-Forensics

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

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

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

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

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

• master 파읷에 프로시저 등록

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

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

Page 72: (120128) #fitalk   sql server anti-forensics

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)

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

Page 73: (120128) #fitalk   sql server anti-forensics

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

Page 74: (120128) #fitalk   sql server anti-forensics

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

Page 75: (120128) #fitalk   sql server anti-forensics

forensicinsight.org Page 75 / 80

SQL Server Anti-Forensics

프로시저 캐시 흔적 제거

• DBCC FREESYSTEMCACHE ( „ALL‟ )

데이터 캐시 흔적 제거

• CHECKPOINT

• DBCC DROPCLEANBUFFERS

저장 프로시저 캐시 제거

• DBCC FLUSHPROCINDB ( id )

SQL Server 메모리 흔적 제거

Page 76: (120128) #fitalk   sql server anti-forensics

forensicinsight.org Page 76 / 80

Countermeasures

Page 77: (120128) #fitalk   sql server anti-forensics

forensicinsight.org Page 77 / 80

대응 방안

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

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

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

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

• SETUSER

• EXECUTE AS

메모리에 백도어 삽입

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

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

다양한 공격

Page 78: (120128) #fitalk   sql server anti-forensics

forensicinsight.org Page 78 / 80

대응 방안

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

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

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

4. 공격 작업 수행

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

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

• 흔적 삭제

• 기본 흔적 로그 홗성화

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

가상 공격 시나리오

Page 79: (120128) #fitalk   sql server anti-forensics

forensicinsight.org Page 79 / 80

대응 방안

데이터베이스 모니터링

• DBA 홗동 모니터링

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

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

패스워드 정책 강화

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

그렇다면 방법은?

Page 80: (120128) #fitalk   sql server anti-forensics

forensicinsight.org Page 80 / 80

질문 및 답변