MySQL 서버를 향한 집요한 공격, 최신 위협 트렌드는?
안랩은 최근까지도 MySQL 서버가 지속적으로 공격 대상이 되고 있음을 확인했다. 공격자는 외부에 노출된 불특정 다수의 시스템을 노리는 것으로 추정되며, 이로 인해 국내 일부 시스템에서도 악성코드 감염 피해가 발생하고 있다. 이번 공격에는 주로 Gh0stRAT 변종이 사용됐으며, 과거에는 AsyncRAT, Ddostf DDoS Bot 과 같은 악성코드가 활용된 사례도 보고됐다.
최근에는 XWorm, HpLoader, 그리고 Zoho ManageEngine과 같은 정상 원격 제어 툴까지 공격에 이용되고 있으며, 특히 그동안 많은 랜섬웨어 공격자들이 사용해온 Zoho Assist가 아닌 ManageEngine 제품군이 공격 수단으로 악용된 점은 주목할 만하다. 공격자들이 MySQL 서버를 침해하는 과정에서 어떤 악성코드를 사용하고, 어떤 방식으로 침투하는지, 그리고 이에 어떻게 대응할 수 있는지 살펴보자.
1. MySQL 서버 공격
MySQL은 대표적인 데이터베이스 서버로, 기업이나 사용자 환경에서 대량의 데이터를 관리한다. 일반적으로 윈도우 환경에서는 데이터베이스 서비스를 위해 주로 MS-SQL을 설치하며, 리눅스 환경에서는 MySQL, PostgreSQL 등의 데이터베이스 서비스가 사용된다. 하지만 MySQL은 윈도우 환경도 지원하며, 따라서 윈도우 환경에 설치되는 경우도 간혹 있다. 이에 따라 윈도우 환경에서 동작 중인 MySQL 서버를 대상으로 하는 공격도 꾸준히 확인되고 있다
공격자들은 MS-SQL 서버 대상 공격과 유사하게 스캐닝을 통해 MySQL 서버가 사용하는 3306/TCP 포트가 공개된 공격 대상을 찾고, 무차별 대입 공격이나 사전 공격을 수행한다. 부적절하게 계정 정보를 관리하는 시스템에 대해서는 관리자 계정의 자격 증명 정보를 확보할 수 있으며, 감염 대상 시스템에 대한 제어 권한을 탈취해 추가 페이로드를 설치할 수 있다.
텍스트, 스크린샷, 번호, 폰트이(가) 표시된 사진 AI 생성 콘텐츠는 정확하지 않을 수 있습니다.
[그림 1] MySQL 서버 프로세스에 의한 악성코드 설치 로그
2. UDF 악성코드
UDF(User Defined Function)는 사용자가 원하는 기능을 동적 연결 라이브러리(Dynamic Link Library, DLL)에 구현한 것으로, 공격자는 악의적인 명령이 포함된 DLL을 감염 대상 시스템에 업로드한 후 MySQL 서버에 로드시킨다. 이후 정의한 명령을 실행하는 방식으로 감염 대상 시스템에 악성 명령을 전달할 수 있는데, 이는 MS-SQL 서버의 CLR SqlShell과 유사하다.
실제 공격 대상 시스템의 감염 로그를 보면 감염 대상 시스템에는 악성코드 외에도 악성 UDF DLL이 함께 설치되는 것이 확인된다. 여기서, 공격자는 UDF 악성코드를 부적절하게 관리되고 있는 MySQL 서버를 공격하기 위한 툴로 사용하고 있다는 것을 알 수 있다.
가장 단순한 형태의 UDF 악성코드는 인자로 전달받은 명령을 실행하는 기능만 존재하지만, 일부 변종의 경우 [그림 2]와 같이 인자로 전달받은 URL에서 파일을 다운로드하고 실행하는 기능을 지원하기도 한다. 이외에도 UDF DLL 자체가 Stager처럼 C&C 서버로부터 전달받은 페이로드를 메모리 상에서 실행하는 유형도 있다. 해당 유형은 C&C 서버에 연결한 이후 “mylogin”을 전송한다. 다만, 현재 C&C 서버에 접속이 안되는 관계로, 어떤 악성코드가 동작하는지는 알 수 없다.
텍스트, 스크린샷, 폰트, 웹 페이지이(가) 표시된 사진 AI 생성 콘텐츠는 정확하지 않을 수 있습니다.
[그림 2] 다양한 기능을 담당하는 UDF 악성코드들
3. Gh0stRAT
MySQL 서버를 대상으로 한 공격 사례에서 확인된 악성코드의 대부분은 UDF와 Gh0stRAT 변종이었다. 그런데 이번 사례에서는 주로 MS-SQL 서버 공격에 사용되는 Gh0stCringe와 HiddenGh0st 악성코드까지 함께 발견됐다.
최근 공격에 사용된 Gh0stRAT 변종은 내부적으로 UACMe의 특정 명령을 추출해 제작한 권한 상승 툴을 포함하고 있으며, 스크린을 캡처해 다음 경로에 저장한다.
스크린샷 저장 경로: %ALLUSERSPROFILE%\quickScreenShot\[Date]\[Date+Time].jpg
텍스트, 스크린샷, 폰트, 번호이(가) 표시된 사진 AI 생성 콘텐츠는 정확하지 않을 수 있습니다.
[그림 3] Gh0st RAT 클래스 이름
4. XWorm
2022년 처음 발견된 XWorm은 RAT 계열의 악성코드로, 초기에는 ‘서비스형 악성코드(Malware as a Service, MaaS)’ 형태로 유통됐다. 이후 보안이 해제된(Cracked) 버전이 공개된 이후, 많은 공격자들이 이를 자유롭게 활용하기 시작했다. 실제로 ASEC 블로그에서는 웹하드에서 성인 게임을 위장해 악성코드를 유포한 사례나 국세청 위장 및 해외 유명 배송업체 사칭 등 피싱 메일을 통해 전파된 다양한 공격 사례들을 소개한 바 있다.
XWorm은 파일, 프로세스 작업, 명령 실행과 같은 원격 제어 기능들을 지원한다. 이외에도 자격 증명 정보 수집, DDoS 공격, USB를 통한 전파, 암호 화폐 지갑 주소에 대한 클립보드 하이재킹(Hijacking) 등 다양한 기능을 제공한다.
텍스트, 스크린샷, 번호, 폰트이(가) 표시된 사진 AI 생성 콘텐츠는 정확하지 않을 수 있습니다.
[그림 4] 공격에 사용된 XWorm의 설정 데이터
5. HpLoader
또 다른 공격에서는 UDF 라이브러리가 설치된 이후 다운로더(Downloader)가 설치됐다. 어떤 페이로드를 다운로드하는지는 알 수 없지만, 동일한 유형이 과거 Gh0stRAT을 다운로드한 정황이 존재한다. 해당 유형은 2023년 5월 최초로 확인된 이후 현재까지도 사용되고 있으며, C&C 서버와 최초 통신 시 “hp_socket” 문자열을 전송한다.
텍스트, 스크린샷, 폰트, 번호이(가) 표시된 사진 AI 생성 콘텐츠는 정확하지 않을 수 있습니다.
[그림 5] 공격에 사용된 HpLoader
6. Zoho ManageEngine
최근 공격자들은 보안 제품에 의한 탐지를 우회하기 위해 상용 원격 제어 툴을 악용하고 있으며, 이를 통해 별도의 악성코드를 설치하지 않고도 감염된 시스템을 원격으로 제어할 수 있다.
대표적으로 Zoho사의 ‘Zoho Assist’는 랜섬웨어 및 APT 공격자들이 자주 사용하는 원격 제어 수단 중 하나다. 이번에 확인된 공격에서는 Zoho Assist가 아닌 ‘ManageEndpoint’ 제품이 악용된 점이 주목된다.
공격자는 MySQL 서버를 통해 드로퍼를 설치했으며, 해당 드로퍼는 내부에 UEMS(Unified Endpoint Management System) 에이전트(Agent) 설치 파일과 설치 스크립트를 포함하고 있다. 해당 파일들은 각각 “C:\PerfLogs\Install.bat”, “C:\PerfLogs\Server_Agent.exe” 경로에 저장되며, 이후 스크립트를 통해 에이전트가 Silent 모드로 감염 대상 시스템에 설치된다.
Zoho 클라우드를 활용하는 Zoho Assist와 달리, 공격자는 UEMS는 제품을 온프레미스(On-premise) 방식으로 설치하는 것으로 추정된다. 실제 UEMS 에이전트 설치 과정에서 확인되는 원격 제어 서버의 주소는 MySQL 서버가 드로퍼를 다운로드하는 주소 “hxxp://star.zcnet[.]net:7766/Server.exe”와 동일하다.
[그림 6] Zoho ManageEngine UEMS Agent의 서버 주소
즉, 공격자는 자체 관리 서버를 구성한 뒤 에이전트를 감염 대상 시스템에 유포하고, 이를 통해 감염 대상 시스템이 공격자 서버와 연결되도록 설정해 시스템 제어 권한을 탈취한 것이다.
7. 결론
이처럼 윈도우 환경에 설치된 MySQL 서버를 대상으로 공격을 벌이는 사례가 지속적으로 확인되고 있다. 공격자들을 감염 대상 시스템 제어 권한을 탈취하기 위해 UDF 악성코드뿐만 아니라 Gh0stRAT, XWorm, HpLoader, Zoho ManageEngine 등 다양한 악성코드를 설치하고 정상 소프트웨어를 악용하고 있다.
관리자는 반드시 필요한 경우가 아니라면 외부에 MySQL 포트를 외부에 노출하지 않아야 하며, 보안 장비를 활용해 접근 가능한 IP를 제한해야 한다. 또한, 계정 및 비밀번호 정책을 강화하고, MySQL 서버에 부여된 권한을 최소화해 불필요한 권한 노출을 방지해야 한다.
마지막으로 MySQL 및 OS를 최신 버전으로 유지해 이미 알려진 취약점을 악용한 공격으로부터 시스템을 보호해야 한다.
출처 : AhnLab