보안동향

최신 보안정보를 신속하게 전해드립니다.

[분석보고서] MSSQL Server 를 대상으로 한 공격 이벤트 로그

2022-07-18

1. 개요

2022년 5월 18일경, Microsoft는 MSSQL Server를 대상으로 하는 무차별 대입 공격에 대해 언급했다. 이전부터 공격자들은MSSQL Server를 대상으로 수많은 공격을 시도하였으며, 최근 공격에는 LOLbin(living-off-the-land) 도구 등을 사용하여 공격 흔적을 남기지 않는 방식으로 공격을 수행하고 있다. 또한, MSSQL Server를 표적으로 Cobalt Strike Beacon, RAT 배포를 위해 공격하는 행위가 발생하고 있다. 본 문서는 MSSQL Server 침투 테스트 및 공격 흔적 분석을 통해 분석가들이 활용할 수 있는 아티팩트에 대해 살펴보았다. 침투 테스트를 진행하기 위해 구축한 환경에 대한 정보는 [표1]과 같다.

 

[표 1] 침투 테스트 환경

 

2. 상세 분석

 2.1 계정 정보 탈취

   1) 침투 테스트 진행

공격자가 MSSQL Server 에 접근하기 위해서 데이터베이스 서버가 외부에 열려있는 페이지가 있는지 확인 및 포트 스캔을 수행한다. MSSQL Server 는 Default 설정으로 TCP 1433, UDP 1434 포트를 사용한다. nmap 을 통해 포트 스캔을 수행한 결과, 1433 포트가 열려있는 것을 확인할 수 있다.

 

[그림 1] PortScan 수행 (nmap)

 

MSSQL Server 가 어떤 포트를 사용하는지 확인되면 해당 서버를 대상으로 무차별대입 공격을 수행하여 Credential 정보를 탈취하여 서버로 접근한다. SQL Server 에서 제공하는 로그인 인증 방식은 [그림 2]와 같으며 각 인증별 특징은 아래와 같다.

 

    - Windows 인증 : Windows 사용자 계정을 통해 인증하며 이미 인증된 Windows 사용자는 추가 자격 증명을 제시하지 않아도 된다.
    - SQL 서버 인증: 사용자 계정 및 패스워드를 데이터베이스 내 저장하며 Windows 계정과는 별도의 인증 방식이다.

 

[그림 2] Windows Server 인증 방식

 

무차별 대입 공격을 수행하는 도구는 nmap, hydra, medusa 등 다양한 도구들이 있으며 본 케이스에서는 hydra 를 통해 credential 정보를 획득했다. 무차별 대입 공격은 패스워드가 복잡할수록 시간이 오래 걸리기 때문에 정보를 획득할 가능성이 낮아진다. 다만, 단순한 패스워드는 공격자에 의해 쉽게 탈취되는 경우도 있으며 ERP 서비스를 사용할 경우 공격자는 비교적 취약한 Default 계정을 대상으로 공격하여 서버에 침투하는 경우도 있다.

 

[그림 3] 무차별 대입 공격을 통한 credential 정보 탈취 (hydra)

 

   2) 로그 분석

무차별 대입 공격에 대한 이력은 크게 두 가지 경로에서 확인할 수 있다.

 

    - Windows Event Log
    - MSSQL Server Error Log

 

이벤트 로그를 먼저 살펴보면 MSSQL Server 를 대상으로 수행한 로그인 실패 이벤트는 “Application.evtx” EventID 18456 번에서 확인할 수 있다. 아래 그림을 참고하면 로그인에 실패했을 때 확인할 수 있는 실패 원인이 다른 것을 확인할 수 있는데 [그림 4]는 MSSQL Server 내 유효하지 않는 계정을 대상으로 로그인 시도를 할 경우 확인되는 이벤트이며 [그림 5]는 계정은 유효하나 해당 계정에 대한 패스워드가 일치하지 않을 경우 확인할 수 있는 이벤트이다. 이를 활용하여 공격자가 실제 유효한 계정을 대상으로 공격했는지를 파악할 수 있다.

 


[그림 4] 유효하지 않는 계정 대상 무차별 대입 공격 이벤트 (Application.evtx)

 


[그림 5] 유효한 계정 대상 무차별 대입 공격 이벤트 (Application.evtx)

 

기본적으로 MSSQL 관련 이벤트로그는 Default 설정인 경우에는 로그인 실패에 대한 이벤트만 로깅하도록 설정되어있다. 다만, “MSSQL Server 보안 설정” 부분에서 로그인 감사에 대한 로깅 방식을 변경해주면 [그림 7]과 같이 EventID 18454 번에서 어떤 계정을 통해 로그인을 성공했는지 확인할 수 있다.

 

[그림 6] MSSQL 로그인 감사 설정

 


[그림 7] MSSQL 로그인 성공 이벤트 (application.evtx)

 

이벤트로그는 보통 공격자가 침투 이후 삭제하는 경우 및 로깅 최대 크기 초과로 인해 공격 시점에 이벤트를 확인할 수 없는 경우가 많다. 따라서, 이벤트로그 외에도 MSSQL 에서 로깅 하는 로그를 수집 및 확인하여 로그인 시도 이력을 볼 수 있다. 다만, 랜섬웨어 감염으로 인해 사고가 발생한 경우에는 로그 파일도 암호화가 되어 로그를 확인하기 어려운 경우가 많다.

 

[그림 8] MSSQL 기본 경로


MSSQL 기본 경로 내 Log 폴더가 존재하는데 해당 경로에서 두 가지 유형의 로그파일을 확인하면 로그인 시도 이력 및 프로시저 활성 이력을 확인할 수 있다. 추가로 Trace Log 를 활용하면 기존 이벤트 로그에서는 확인할 수 없었던 어떤 계정을 통해 프로시저를 활성화했는지 확인할 수 있다.

 

    - Error Log : SQL Server 의 장애 복구를 위한 로그
    - Trace Log : 시스템 장애를 해결하기 위한 목적의 이벤트 로깅

 

[그림 9] Error Log (MSSQL)

 

[그림 10] trc Log (MSSQL)

   3) 기타 계정 정보 탈취

MSSQL Server 를 대상으로 한 공격은 위에서 설명한 것과 같이 외부에서 무차별 대입 공격을 통해 Credential 정보를 탈취하는 경우도 있으나 인프라 내 다른 PC 가 악성코드에 감염되었을 경우, 내부에서 무차별 대입 공격이 발생할 수 있다. 본 문서에서는 botnet 및 암호화폐 채굴 목적으로 사용되는 악성코드인 “lemonduck ”에서 제공하는 Credential 정보를 탈취 기능을 간략하게 설명하였다.


[표 2] malware hash


“lemonduck” 악성코드는 python 으로 컴파일이 되어있다. 따라서, decompile 작업을 수행하면 실제 악성 행위를 수행하는 python 소스 코드를 확인할 수 있다. 원본 소스 코드를 확인해보면 [그림 11]과 같이 1433 포트를 스캔하는 기능이 있으며 “muser 와 password”의 리스트 값들로 실제 MSSQL 서버에 connection 시도를 하는 것으로 확인된다.

 

[그림 11] MSSQL 포트 스캔 기능 (remonduck malware)

 

[그림 12] 무차별 대입 공격을 위한 계정, 패스워드 목록 (remonduck malware)

 

또한, 계정정보가 일치할 경우, MSSQL Server 에 connection 후 “xp_cmdshell”을 활성화하여 추가적인 공격행위를 수행하는 것으로 확인된다. 따라서, 무차별 대입 공격 시도가 있었을 때 외부에서 접근한 것인지, 내부에서 접근한 것인지 확인 해야하며 추가적인 공격 행위들도 파악해야한다.

 

[그림 13] xp_cmdshell 활성화 (remonduck malware)

 

 2.2 공격 수행

   1) xp_cmdshell

“xp_cmdshell"은 MSSQL 에서 Windows Command 명령을 수행할 수 있는 프로시저다. Default 로 활성화 되어있지는 않으나 특정 서비스 동작에 필요하여 활성화 되어 있거나,공격자가 Credential 정보를 획득한 계정이 “sysadmin”권한을 가지고 있을 경우에는 SQL Query 를 통해 활성화하여 공격에 활용할 수 있다. MSSQL 에서 보안상의 이유로 인해 “xp_cmdshell”과 같은 고급 옵션을 활성화하기 위해서는 “sp_configure”를 통해 advanced options 을 활성화해야 한다. 해당 옵션을 활성화하게 되면 아래와 같이 “Application.evtx”에서 EventID 15457 번을 보면 확인할 수 있다.

 

    - 0 : 구성 옵션 비활성화

    - 1 : 구성 옵션 활성화

 

대부분의 사례에서 공격자는 기존 옵션 활성화 여부와 상관없이 “show advanced options 및 xp_cmdshell” 옵션을 활성화하고 공격을 수행하는 특징이 있는 것으로 확인되었으나 사고 조사를 진행할 때는 기존에 활성화되었는지, 공격자에 의해 활성화되었는지, 특정 서비스에 의해 활성화가 되었는지를 확인하여 최초 접근 시점과 연관 지어 행위를 분석해야 한다.

 


[그림 14] advanced options 활성 이벤트 (Application.evtx)

 

[그림 15] xp_cmdshell 활성 이벤트 (Application.evtx)

 

공격자는 xp_cmdshell 을 활성화한 이후 공격에 활용하기 위해 추가로 로컬 계정을 생성하는 경우가 많다. xp_cmdshell 을 통해 계정을 생성했을 때는 기존 관리자 권한으로 생성한 [그림 17]과는 다르게 계정 생성 주체가 “SYSTEM”인 것을 확인할 수 있다. 이와 같이 공격자는 xp_cmdshell 을 통해 다양한 행위를 할 수 있기 때문에 공격자가 접근한 시점 이후 발생한 이벤트 및 주체, 생성된 파일 및 파일 소유자 등을 추가적으로 분석에 활용하는 것이 중요하다.

 

[그림 16] xp_cmdshell 을 통한 계정 생성 (security.evtx)

 

[그림 17] 관리자 권한으로 계정 생성 (security.evtx)

   2) Sqlps

Sqlps 는 SQL Server Powershell 구성 요소를 활용하여 Powershell 명령 및 스크립트를 실행할 수 있는 유틸리티 도구다. 최근 Microsoft 에서 확인한 정보를 보면 공격자는 sqlps 를 활용하여 MSSQL Server 서비스 권한을 변경을 시도한다고 한다. 또한, 프로시저를 통해 계정을 생성한 후 sysadmin 권한을 부여하여 서버를 장악할 수 있다. Sqlps 도구는 powershell Script block 내용을 로깅을 하는 기능을 우회할 수 있기 때문에 Powershell 관련 이벤트로그에서는 스크립트 내용을 확인할 수 없다.

 

[그림 18] Microsoft – SQL Service 권한 변경 스크립트

 

[그림 19] Microsoft – sqlps 를 활용한 계정 생성

 

다만, 위에서 언급한 trace.log 의 로깅 내역을 확인하면 계정 생성할 때 활용하는 “SQLCMD”에 대한 이력이 남아있기 때문에 분석에 활용할 수 있다.

 

[그림 20] SQLCMD 이력 확인 (trace.log)

 

3. 대응 방안

   1) MSSQL Server 접근 제어

방화벽 등 보안 장비를 통해 인가된 IP 만 MSSQL 서버에 접근할 수 있도록 설정해야한다. 또한, 데이터베이스 서버 목적이 ERP 서버인 경우 웹을 통해 외부에 오픈되어 있는 경우도 많기 때문에 사내망에서만 접근할 수 있도록 설정하는 것을 권고한다.

   2) 기본 서비스 포트 변경

기본적으로 MSSQL 은 TCP 1433 번 포트를 사용한다. 해당 포트가 외부에 오픈 되어있는 경우 쉽게 공격 대상이 될 수 있기 때문에 기본 서비스 포트를 변경하여 사용하는 것이 좋다.


[그림 21] MSSQL 포트 변경

 

   3) 계정 관리

MSSQL Server 를 대상으로 한 공격은 대부분 취약한 계정을 대상으로 공격을 수행한다. 따라서, 아래 항목들을 체크해보는 것을 권고한다.


    - MSSQL Server 계정 패스워드를 복잡하게 변경하여 사용
    - 외부에서 개발자 및 유지보수 업체에서 접근하는 계정이 있는지 확인 후 패스워드 및 권한 확인 (사용하지 않을 경우에는 삭제)
    - sa 계정이 활성화되어 있는지 확인하고 사용하지 않을 경우 비활성화 (사용할 경우에는 패스워드를 복잡하게 설정하거나 계정명을 변경해서 사용하는 것을 권고)
    - 계정별로 목적에 따라 최소한의 권한만 부여해서 사용

4. 참고 자료

    - https://www.slideshare.net/F-INSIGHT/120128-fitalk-sql-server-antiforensics 
    - https://www.bleepingcomputer.com/news/security/microsoft-warns-of-brute-forceattacks-targeting-mssql-servers/
    - https://docs.microsoft.com/ko-kr/sql/tools/sqlps-utility?view=sql-server-ver16

보안관제센터 MIR Team

 

목록