Deep dive into MS-SQL IR Case : Stored procedure analysis - Response

이 글에서는 MS-SQL 로그 및 시스템 로그의 한계에 대응하기 위한 추가적인 로깅을 통한 추적과 침해사고 예방을 위한 몇 가지 보안 설정에 관해 설명한다. 침해사고 대응 및 예방을 위해 각 방안을 비교하여 시스템에 적절한 설정을 적용하는 것을 권고한다.

이 글을 읽기 전 아랫글을 먼저 읽는 것을 추천한다.

MS-SQL 침해사고 심층 분석 : 동향 및 공격 방식
데이터베이스 관리 시스템에서 중추적인 역할을 하는 MS-SQL 서버는 막대한 정보를 다루고 있다. 그러나 이러한 중요한 시스템에도 보안 취약점이 존재하며 공격 위협에 노출되고 있다. 특히, MS-SQL은 다양한 확장 기능을 제공한다. 이때, 공격에 주로 악용되는 xp_cmdshell과 CLR 저장 프로시저 확장 기능은 보안 문제를 야기할 수 있다. 이에 따라, 공격자들은 이러한 방식을
MS-SQL 침해사고 심층 분석: 시스템 저장 프로시저 분석 - xp_cmdshell
최근 몇 년 동안 사이버 공격은 기업과 개인에게 심각한 위협으로 떠올랐다. 특히, MS-SQL 데이터베이스는 공격자들의 주요 목표가 되었다. 이 글에서는 MS-SQL의 시스템 저장 프로시저를 활용한 침해사고에서 발견된 아티팩트를 분석해, 공격자의 행동을 이해하는 것에 중점을 둔다. 공격자들은 이런 기능을 활용해 파일을 다운로드, 실행, 변경, 삭제 등 다양한 행위를 수행할 수 있다.
MS-SQL 침해사고 심층 분석: 시스템 저장 프로시저 분석 - CLR Shell
이 글에서는 CLR Shell 공격에 대한 로그와 아티팩트 분석으로 공격자의 행동과 관련된 정보를 찾아내는 방법에 대해 다룬다. 이 글을 읽기 전 아래 글을 먼저 읽는 것을 추천한다. MS-SQL 침해사고 심층 분석 : 동향 및 공격 방식데이터베이스 관리 시스템에서 중추적인 역할을 하는 MS-SQL 서버는 막대한 정보를 다루고 있다. 그러나 이러한 중요한 시스템에도

1. 로깅 강화

1. Sysmon을 통한 추적

이번에는 Sysmon을 설치해 MSSQL 서버에 대한 침해사고가 발생했을 때, 기본 상태와 비교해 보안 향상이 되는지 확인해 본다. 혹여 Sysmon을 처음 접하는 사람의 경우 아래 링크를 참고해 Sysmon의 개념에 대해 먼저 이해하길 바란다.

Sysmon 활용 가이드: 개념 및 설치 방법
1. 개요 코로나19 이후, 비대면 원격근무 환경이 확산되면서 보안에 취약할 수 있는 PC, 프린터 등 엔드포인트(EndPoint) 기기를 노린 침해사고가 증가하고 있다. 또한 사이버 공격 도구를 거래하는 플랫폼의 확산으로 공격 도구에 대한 접근성이 높아지면서 침해사고가 더욱 증가할 것으로 보인다. 실제로 과학기술정보통신부에서 발표한 ‘2023년 사이버 보안 위협 전망 보고서’에 따르면
Sysmon 활용 가이드: 이벤트 구성 항목
1. 개요 이전 ‘Sysmon 활용 가이드: 개념 및 설치 방법’에서 Sysmon이 무엇이며 어떻게 설치할 수 있는지 알아봤다. 본 글에서는 Sysmon이 기록하는 이벤트의 구성 항목을 살펴본다. Sysmon은 프로세스 생성을 포함해 총 29개의 이벤트로 구성되어 있으며, 목적에 맞게 이벤트를 활용하면 엔드포인트 보안을 보다 효과적으로 강화할 수 있다. Windows Vista 이상에서는 이벤트가 Microsoft-Windows-Sysmon%

두 저장 프로시저를 통한 공격을 Sysmon을 이용해 확인한 결과는 다음과 같다. 운영체제에 따라 Sysmon의 로그가 달라지지 않기 때문에, 이번에는 Windows Server 2016만을 대상으로 분석을 진행했다.

[그림 1] 명령 실행 시점 Sysmon 이벤트 로그 (Microsoft-Windows-Sysmon/Operational.evtx (EventID: 1))

확인 결과, 로그인 이력과 같은 특정 애플리케이션에 대한 이력은 확인할 수 없었지만, Sysmon은 기본적으로 프로세스 생성 이벤트를 추적하기 때문에, 부모 프로세스가 MSSQL이거나 비정상적인 CommandLine을 추적하면 공격자의 행동을 추적할 수 있을 것으로 판단된다.

2. SQL Server Profiler를 통한 추적

SQL Server Profiler - SQL Server Profiler
SQL Server Profiler의 기능을 살펴봅니다. 이 도구를 사용하여 추적을 만들고 추적 결과를 분석 및 재생하면 문제 해결에 도움을 받을 수 있습니다.

SQL Server Profiler는 SQL Server Management Studio의 일부로 제공되는 추적 도구다. 이 도구는 데이터베이스에서 실행되는 쿼리, 저장 프로시저, 트리거 등의 SQL 구문을 추적하고 기록해 분석하는 데 도움을 준다. 그러나, SQL Server Profiler는 기본적으로 모든 로그를 추적해 저장하므로, 서버의 성능 및 용량에 대한 보장이 없는 경우 서버 운영에 문제를 일으킬 수 있다. 따라서, 필요한 이벤트만 추적하도록 설정하기 위해 적절한 감사 설정을 사용해야 한다. 아래에는 로그인 및 저장 프로시저 사용을 추적할 수 있는 SQL Server Profiler 설정 방법을 제시한다.

1. SQL Server Profiler를 실행한다.

2. File - New Trace로 서버에 접속해 새로운 추적을 생성한다.

[그림 2] SQL Server Profiler 연결 방법

3. "이벤트 선택" 탭으로 이동해 "Security Audit > Audit Login/Logout" 및 "TSQL > SQL:BatchCompleted"를 선택하고 Column을 적절히 설정한다.

[그림 3] SQL Server Profiler 설정

4. "Run"을 눌러 추적을 시작한다.

[그림 4] SQL Server Profiler를 통한 xp_cmdshell 추척 예시

다만, 위 방법은 모든 SQL 쿼리를 추적하게 되므로 서버의 성능에 따라 관리되어야 한다. 따라서, Filters로 특정 SQL 쿼리만 추적하도록 설정할 수 있다.

[그림 5] SQL Server Profiler - xp_cmdshell 필터링 예시

그러나, xp_cmdshell처럼 프로시저 명이 고정되어 있지 않고 공격자가 임의의 저장 프로시저를 생성하는 CLR Shell은 필터 추적에 어려움이 있을 수 있다.

3. Extended Events를 통한 추적

XEvents 개요 - SQL Server, Azure SQL 데이터베이스 및 Azure SQL Managed Instance - SQL Server
확장 이벤트 아키텍처를 사용하면 SQL Server, Azure SQL 데이터베이스 및 Azure SQL Managed Instance 성능 문제를 식별하고 해결하는 데 필요한 데이터를 수집할 수 있습니다. SQL Server 확장 이벤트 아키텍처는 구성 가능하고 확장성이 있습니다.

Extended Events는 SQL Server 2008부터 도입된 성능 모니터링 시스템으로, 동작에 대한 상세한 정보를 제공한다. 다양한 이벤트를 지원하며, 원하는 이벤트만으로 세션을 구성해 추적할 수 있다. 따라서, 로그인 및 저장 프로시저만을 추적하도록 세션을 생성해 위협 모니터링을 수시로 수행하는 것을 권장한다. 다음은 Extended Events로 로그인 및 저장 프로시저를 추적할 수 있는 설정 방안이다.

  1. SQL Server Management Studio(SSMS)로 SQL Server에 연결한다.

2. "관리" 메뉴를 확장하고 "확장 이벤트"를 클릭한다.

3. "새 세션 마법사"를 클릭해 새 세션을 생성한다.

[그림 6] Extended Events 세션 생성 방법

4. 세션 이름을 입력하고, 필요한 경우 세션 옵션을 구성한다.

5. 이벤트 라이브러리에서 이벤트를 추가한다. 로그인 및 저장 프로시저 명령 추적에 관한 이벤트는 다음과 같다.

이벤트 설명
sqlserver.login 로그인 성공 및 실패하였을 때 발생
sqlserver.sql_statement_completed SQL문이 완료될 때마다 발생
sqlserver.sp_statement_completed 저장 프로시저 내의 개별 SQL 문이 완료되었을 때 발생
sqlserver.module_start CLR 모듈(즉, CLR 저장 프로시저, 함수 또는 트리거)이 시작될 때 발생
sqlserver.module_end CLR 모듈(즉, CLR 저장 프로시저, 함수 또는 트리거)이 완료될 때 발생
sqlserver.assembly_load CLR Assembly가 로드될때 발생

6. 전역 필드 캡처에서 주요 정보만 선택한다. 아래는 추적에 필요한 일부 필드들에 대한 정보이다. 이외 필요한 필드를 추가해 설정을 완료한다.

필드 명 설명
session_id 이벤트가 발생한 세션의 ID를 표시
sql_text 이벤트와 관련된 SQL 명령 텍스트를 표시
username 이벤트를 발생시킨 사용자의 이름을 표시
client_app_name 이벤트를 발생시킨 클라이언트 응용 프로그램의 이름을 표시
client_hostname 이벤트를 발생시킨 클라이언트 호스트의 이름을 표시
database_name 이벤트가 발생한 데이터베이스의 이름을 표시
start_time 이벤트가 시작된 시간을 표시

7. 세션 데이터 스토리지를 지정해 로그 파일을 저장하도록 설정한다. 이때, 롤 오버 기능을 사용해 로그가 순환될 수 있도록 설정하며 저장소의 성능에 따라 적절히 관리해야 한다.

[그림 7] Extended Events - 세션 데이터 스토리지 지정

8. 이벤트 세션을 생성한다.

이렇게 최종적으로 이벤트 세션을 생성해 추적하는 경우, 아래 그림처럼 실행된 SQL 구문을 확인할 수 있다.

[그림 8] Extended Events - 이벤트 예시

2. 서버 보안 강화

2.1. 외부접속 보안 강화

MS-SQL 서버는 ERP 및 다양한 업무용 솔루션 설치 과정에서 함께 설치되는 경우도 많다. 이렇게 설치되는 경우, 기본 포트로 설정되어 외부에 서비스가 노출될 수 있다. 서비스가 인터넷에 노출될 경우, 공격자의 무차별 대입 공격(Brute-Force Attack), 사전 공격(Dictionary Attack)을 통해 비밀번호가 탈취될 가능성이 높다.

따라서, 아래와 같은 보안 조치를 통해 MS-SQL 및 서버 자체에 대한 보안을 강화해 위협을 방지해야한다.

2.1.1. 접근 제어 정책 적용

부득이 하게 서비스를 외부에 오픈해야할 경우, 인가된 IP만 접근할 수 있도록 접근제어 정책을 설정하여 불필요한 외부 접근을 차단해야한다.

2.1.2. 기본 포트 변경

기본 포트는 스캐닝등에 의해 쉽게 공격 대상이 될 가능성이 높으므로 포트 번호를 변경하여 사용해야한다.

* 기본 포트
MS-SQL: 1433 / RDP: 3389

2.1.3. VPN 사용

외부에서의 접근이 필요한 경우, VPN을 통해 접근해야한다.

2.1.4. 이중 인증 적용

VPN 및 RDP의 경우, OTP와 같은 이중 인증 방식을 적용하여 계정이 탈취되더라도 비인가자의 접근을 차단할 수 있도록 설정해야한다.

2.2. 계정 보안 강화

2.2.1. 기본 관리자 비밀번호 변경

ERP와 같이 업무용 솔루션과 함께 MS-SQL이 설치되는 경우, 솔루션이 사용하는 데이터베이스 관리자 계정의 초기 비밀번호를 공격자가 유추하기 어렵게 변경해야하며, 일정 주기에 따라 변경하여 사용해야한다.

2.2.2. sa 계정 비활성화

sa(System Administrator)계정은 MS-SQL에서 최상위 관리자 계정으로, 모든 데이터베이스 및 서버 수준의 작업을 수행할 수 있다. 따라서, 부득이하게 해당 계정을 사용해야하는 경우에는 비밀번호를 복잡하게 변경하고 사용해야하며, 이외에는 해당 계정을 비활성화해야한다.

2.2.3. 주기적인 계정 권한 점검

서버 관리를 위해 다수의 계정을 운영해야한다면, 계정마다 필요한 권한을 정확히 파악하여 부여할 필요가 있다. 다수의 계정이 관리자 권한을 가지고 있다면 하나의 계정이 탈취될 경우, 서버 전체의 보안이 위협받을 수 있다. 따라서, 각 계정에 부여된 권한을 주기적으로 점검하고, 불필요한 권한은 즉시 제거해야 한다.

또한, 사용하지 않는 계정은 비활성화하거나 삭제하는 것이 좋다. 이를 통해 불필요한 접근 포인트를 최소화하고, 서버의 보안을 강화할 수 있다. 주기적인 권한 점검은 서버의 안정성을 유지하고, 잠재적인 위협으로부터 보호하는 데 중요한 역할을 한다.

2.3. 데이터베이스 운영 서버 보안 강화

2.3.1. 운영체제 업데이트 및 업그레이드

지원이 종료된 운영체제의 경우, 보안 업데이트가 지속적으로 수행되지 않는다. 취약점이 발견될 경우, 공격자는 이를 악용해 공격을 수행할 수 있다. 따라서, 지원이 종료된 운영체제를 사용하는 경우에는 충분한 검토를 거쳐 보안 업데이트가 지원되는 운영체제를 사용하는 것을 권고한다.

2.3.2. 안티-바이러스 솔루션 설치 및 랜섬웨어 보호 기능 활성화

안티-바이러스 솔루션을 설치하여 서버로 유입되는 악성 파일들을 사전에 차단하고, 랜섬웨어 차단 폴더 등의 랜섬웨어 보호 기능을 활용하여 랜섬웨어를 방지할 수 있다.

[그림 9] Windows Defender - 랜섬웨어 방지 기능

3. 결론

MS-SQL 데이터베이스에서 시스템 저장 프로시저를 활용한 공격 분석을 진행하였다. 이 분석에서는 xp_cmdshell과 CLR Shell을 사용한 공격을 중점적으로 살펴보았으며, 로그인 이력, 저장 프로시저 활성화 이력, 명령 실행 이력 등을 추적할 수 있음을 확인하였다.

그러나, 이러한 추적이 완벽하지 않은 경우도 있었다. 모든 이력이 로그에 기록되지 않는 경우, 또는 기록된다 해도 세부적인 정보를 제공하지 않는 경우가 상당히 많았다. 이에 따라, 공격자의 행동을 완전히 추적하는 것이 어려웠다.

이러한 문제에 대응하기 위해, 여러 Windows 아티팩트와의 연관 분석이 필요함을 확인할 수 있었다. 또한, Sysmon이나 SQL Server Profiler와 같은 도구를 활용하여 SQL Server나 Windows 시스템에서 발생하는 이벤트를 주기적으로 모니터링하여 애플리케이션 및 시스템 로깅의 한계를 극복할 수 있다.

이러한 과정을 통해, 기존의 로깅 방법만으로는 충분하지 않을 수 있음을 인지하였고, 침해사고 대응 및 예방을 위해 시스템에 적절한 추가 설정을 적용하길 바란다.

You've successfully subscribed to PLAINBIT
Great! Next, complete checkout to get full access to all premium content.
Error! Could not sign up. invalid link.
Welcome back! You've successfully signed in.
Error! Could not sign in. Please try again.
Success! Your account is fully activated, you now have access to all content.
Error! Stripe checkout failed.
Success! Your billing info is updated.
Error! Billing info update failed.