오늘날 세상에서 데이터는 모든 것이며, 이 방대한 양의 데이터를 저장하고 처리하기 위해 모든 사람이 컴퓨팅 장치를 사용하기 시작했습니다. 컴퓨팅 장치에 이 귀중한 데이터를 저장하는 데 사용되는 데이터베이스 서버에는 MySQL, MongoDB, MSSQL 등이 있습니다. 하지만 안타깝게도 모든 사람이 보안에 대해 의식하는 것은 아닙니다. 실제로 이러한 애플리케이션의 약 90%는 root:root, scott:tiger와 같은 자격 증명을 사용합니다. 어떤 경우에는 데이터베이스 서버의 루트 계정에 자격 증명을 사용하지 않는 사람들도 관찰되었습니다.
클라우드 서비스는 기업에서 널리 사용되므로, 공격자는 클라우드 서버에서 봇과 C&C를 실행하여 취약한 기기를 공격하는 데에도 클라우드 서비스를 이용합니다. 많은 클라우드 서비스 제공업체는 1년 무료 클라우드 서비스를 제공하며, 공개 IP를 통해 공격자가 은신하고 인프라를 쉽게 변경할 수 있도록 지원합니다. 예를 들어 Google Cloud, AWS 등이 있습니다.
기업을 공격하려면 공격자는 기업 네트워크의 취약점을 파악해야 합니다. 일반적으로 기업들은 OS 관련 취약점을 모두 패치하지만, 공개 IP에서 MySQL을 실행하는 서버 머신을 사용하는 것으로 나타났습니다. MySQL 서버는 서비스로 실행되므로 시스템 권한으로 실행됩니다. 공격자가 MySQL을 사용하여 네트워크에 접속하면 시스템 권한으로 실행되므로 취약점 없이 감염된 호스트의 모든 항목에 접근할 수 있습니다.

그림 1. 공용 IP의 전 세계 MySQL 서버

그림 2 인도에서 공용 IP로 접근 가능한 MySQL 서버
저희 허니팟 네트워크에서 MySQL 데이터베이스를 대상으로 약 15000건의 공격을 관찰했습니다. 이러한 공격의 대부분은 독일(전체 공격의 34%)에서 발생했으며, 나머지는 미국, 프랑스, 중국, 폴란드, 러시아 등 여러 국가에서 발생했습니다.

그림 3 MySQL 공격자 위치
공격자는 주로 두 가지 접근 방식을 사용하는 것으로 나타났습니다. #1. 데이터베이스 서버에 침입하여 기존 테이블을 삭제하고 새로 생성된 테이블에 랜섬 노트를 BLOB 형태로 삽입합니다. #2. 두 번째 공격 방식은 MySQL을 Linux 또는 Windows 시스템에 침입하는 입구로 사용하여 피해자 호스트에 백도어, 마이너 또는 랜섬웨어를 설치하는 것입니다. 이를 위해 MySQL의 COM 호환성 기능을 활용합니다.
관찰에 따르면 공격자는 scott:tiger, root와 같은 기본 자격 증명을 사용하여 MySQL에 인증하거나 10000개의 잘 알려진 비밀번호를 시도합니다. 또한 SQL 쿼리를 실행하기 위해 웹 애플리케이션에 SQL 주입을 사용합니다. 어떤 경우에는 웹셸을 사용하는 것을 발견했습니다. 또한 MySQL 서버 2012.X에 심각한 인증 우회 취약점(CVE-2122-5.1)이 하나 있는데, 공격자는 자격 증명 없이 서버에 액세스합니다. 이제 공격자가 MySQL 데이터베이스에 액세스하면 무엇이든 할 수 있습니다. 데이터를 조작하거나 삭제하거나 훔칠 수 있습니다. 그러나 MySQL은 CreateProcess 또는 UrlToDownloadFile과 같은 Windows API 함수를 이해하지 못합니다. 이를 위해 공격자는 MySQL의 사용자 정의 함수라는 하나의 솔루션을 사용합니다. 사용자는 MySQL에서 사용할 수 있는 사용자 정의 함수를 작성할 수 있으며, 기본적으로 MySQL에는 avg, sum 등의 사전 빌드 함수가 있습니다.
경우에 따라 공격자는 MySQL의 숨겨진 데이터베이스(즉, "MySQL")를 사용하여 BLOB 유형의 열 하나를 가진 테이블 하나를 생성합니다. 그런 다음 16진수 형식의 DLL 하나를 삽입합니다. dumpfile 함수를 사용하여 MySQL 테이블을 원하는 위치의 물리적 파일로 덤프할 수 있습니다. 따라서 공격자는 트리거 또는 선택 쿼리를 사용하여 이 DLL을 MySQL의 플러그인 폴더에 물리적 파일로 덤프합니다. 이 DLL에는 사용자 정의 함수에 대한 정의가 포함되어 있으므로, 공격자는 MySQL에서 자신의 사용자 정의 함수를 사용할 수 있습니다.
일반적으로 URL에서 파일을 다운로드하고 감염된 서버에서 실행하는 함수를 사용합니다. mysqld.exe에 의해 실행되는 모든 애플리케이션은 시스템 권한으로 실행됩니다. 탐지를 피하고 파일 없는 악성코드 공격을 실행하는 데 사용될 수 있습니다. 다음 쿼리를 사용하여 dll 파일을 16진수 형식의 BLOB으로 삽입한 후 "into DUMPFILE"을 사용하여 덤프합니다.
yongger3에 값("0x4D ")을 삽입합니다.
'yongger3에서 DUMPFILE “',@@plugin_dir,'\\udf33.dll”로 데이터를 선택합니다.
또한, MySQL 테이블에 삽입하지 않고도 select 문을 사용하여 pe 파일을 직접 삭제할 수 있습니다.

그림 4. 공격자가 실행한 MySQL 명령.
공격자의 사용자 정의 dll에 정의된 함수 목록:
- 킬프로세스
- 프로세스뷰
- 회사 소개
- 백쉘
- 커맨드셸
- 다운
- open3389
- 다시 읽다
- 등록 쓰기
- 폐쇄
- 껍질
- cmdshelv
- 엑스피디엘3
MySQL의 dll에서 위의 사용자 정의 함수를 사용하려면 공격자는 먼저 MySQL에서 다음과 같은 쿼리를 사용하여 해당 함수를 만들어야 합니다.
함수 생성 cmdshell은 문자열 SONAME 'xsa.dll'을 반환합니다.
cmdshell은 터미널과 같은 명령을 실행하는 데 사용되는 사용자 정의 함수입니다. xsa.dll은 공격자가 사용자 정의 함수 정의를 포함하는 플러그인 폴더에 설치한 dll입니다. Linux 시스템의 경우, 공격자는 dll 대신 .so 파일을 사용합니다.
이 기능을 실행하기 위해 공격자는 다음과 같은 선택 쿼리를 사용합니다.
cmdshell("cmd.exe cmd/c net user xiaoshage xiaoshage1 /add&net localgroup administrators xiaoshage /add")을 선택하세요.
위 쿼리에서 공격자는 cmdshell 함수를 사용하여 net 명령으로 cmd.exe를 실행했습니다. 이 명령은 xiaoshage 사용자를 생성하고 관리자 그룹에 추가합니다. 대부분의 경우 MySQL은 도메인 관리자 서버에 설치되어 있으므로 이 계정을 도메인 관리자 그룹에 추가하면 네트워크의 모든 머신에 액세스할 수 있습니다. 또한 공격자는 open3389 함수를 정의했는데, 여기서 3389는 RDP 액세스에 사용되는 TCP 포트 3389를 의미합니다. MySQL에서 공격자는 다음 레지스트리를 추가하여 RDP 서비스를 활성화합니다.
“SYSTEM\\CurrentControlSet\\Control\\터미널 서버\\Wds\\rdpwd\\Tds\\tcp”
키:“포트 번호” 값:”0xd3d”(3389)
흥미롭게도, 공격자는 MySQL을 사용하여 시스템에서 여러 서비스와 바이러스 백신 프로그램을 종료했습니다. 그림 2에서 볼 수 있듯이, 공격자는 cmd.exe와 taskkill을 cmdshell 함수와 함께 실행했습니다. 또한, 프로그램 이름을 입력받는 Killprocess 함수를 사용하여 CreateToolhelp32Snapshot, Process32Next, Process32First 함수와 함께 TerminateProcess 함수를 실행할 수도 있습니다.
공격자는 MySQL을 사용하여 피해자 PC에서 다음 프로세스를 종료했습니다.
| QQPCTray.exe | NPFMntor.exe | 세이프독 가드 센터.exe |
| ksafe.exe | rstray.exe | UpdaterUI.exe |
| UIHost.exe | 360sd.exe | AVP.EXE |
| 360트레이.exe | avfwsvc.exe | 360rp.exe |

그림 5 MySQL 원격 명령 실행
그림 5에서는 MySQL의 네트워크 트래픽을 확인할 수 있으며, 프로세스를 종료하고 서비스를 쿼리하는 쿼리를 직접 확인할 수 있습니다. 또한, 실행된 각 명령에 대한 응답을 수신하여 공격자에게 표시합니다.
Shut 함수는 PC 종료 및 재시작에 대한 정의를 제공합니다. 이러한 모든 함수는 MySQL 환경에서 실행되므로 피해자 입장에서는 mysqld.exe가 프로세스를 실행하거나 종료하고 레지스트리를 추가하는 것과 같습니다.
Linux MySQL의 경우 사용자 정의 함수는 다음과 같습니다.
- 시스템 평가
- sys_exec
- sys_get
- 시스템_세트

그림 6 다운로더 함수 정의

그림 7 HFS 서버
우리는 MySQL을 소스로 사용하여 배포된 다양한 악성코드를 관찰했습니다. 여기에는 virut, backdoor, miner가 포함됩니다. 또한 NewCore RAT 샘플도 받았습니다. APT-27 즉 고블린판다 공격은 다음에서 호스팅되었습니다. 43.242.75.228 hfs 서버MySQL을 초기 벡터로 사용합니다.
MySQL 공격 중 하나에 대한 랜섬웨어 메모:
{
손실된 데이터베이스를 복구하고 유출을 방지하려면 0.1 비트코인을 보내주세요.
(BTC)를 저희 주소 's7iHwdafANy4ThJc*&******'로 보내주시고, IP 주소 또는 웹 이름과 결제 증빙 자료를 이메일로 보내주세요. 저희가 귀하의 데이터를 보유하고 있는지 확실하지 않으시면 저희에게 연락주시면 증빙 자료를 보내드리겠습니다. 귀하의 데이터베이스는 저희 서버에 다운로드 및 백업됩니다. 향후 10일 이내에 결제가 이루어지지 않을 경우, 귀하의 데이터베이스를 공개하거나 다른 용도로 사용할 것입니다.
}
공격자는 데이터베이스를 삭제한 후 랜섬 노트를 삽입하고 몸값을 요구합니다. ibdata1, 로그 파일, .bak 및 .frm 파일이 있는 경우 피해자는 데이터 복구를 시도할 수 있습니다. 하지만 이러한 유형의 공격에서는 공격자가 데이터베이스를 읽거나 백업하지 않으므로 몸값을 지불한 후 데이터베이스를 복구할 방법이 없으므로 몸값을 지불하지 않는 것이 좋습니다. 악성 데이터베이스 삭제 활동과 정상 데이터베이스 삭제 활동을 구분할 수 없기 때문에 백신 프로그램으로 이 공격을 차단하기는 어렵습니다.
미래의 공격:
앞으로 공격자는 MySQL 테이블에 C# 코드를 저장한 다음, 1시간마다 피해자의 컴퓨터에서 csc.exe를 실행하는 트리거를 생성하여 물리적 복사 없이 메모리에서 이 C# 코드를 컴파일할 것으로 예상합니다.
따라서 악성코드의 물리적 복사본이 존재하지 않고 클라이언트 측에서 컴파일되므로 시그니처 기반 접근 방식으로는 이 파일을 탐지하기 어렵습니다. 또한, 이러한 코드를 실제 유틸리티인 regasm.exe에 삽입할 수 있습니다. 현재 Hawkeye는 CVE-2017-11882, CVE-2017-01999, CVE-2017-8570 취약점을 이용하여 물리적 복사본 없이 실행되지만, 앞으로는 MySQL을 소스 코드로 사용할 수 있게 되어 피해자 입장에서는 mysqld.exe가 csc.exe를 실행하고, csc.exe가 regasm.exe를 실행하는 것과 같은 상황이 발생할 수 있습니다.
현재 MySQL 공격은 몸값을 요구하거나 피해자를 침투하는 데 사용되며, IoT 기능을 갖춘 백도어를 유포하는 Virut 감염 프로그램을 유포하는 것으로 알려져 있습니다. 이러한 공격은 탐지가 어렵고, 공격자는 MySQL을 활용하여 탐지되지 않은 상태에서 컴퓨터를 감염시킬 수 있습니다.
해결 방법 :
Seqrite UTM 제품이 있습니다. 이 제품에는 다음이 포함됩니다. IDS / IPS 네트워크 수준에서 작동하는 엔진입니다. 즉, 공격자가 원격 위치에서 MySQL에 연결하여 악성 쿼리를 실행하려고 하면 네트워크에서 먼저 UTM 장치가 트래픽을 수신합니다. 이러한 장치에는 방화벽, 브라우저 보호 기능, IDS/IPS 엔진이 포함되어 있습니다. Seqrite UTM 제품의 IDS/IPS 엔진을 사용하여 악성 MySQL 쿼리를 탐지합니다. 이를 통해 해당 통신을 차단하고 사용자를 MySQL 공격으로부터 보호합니다.
마찬가지로, UTM 사물인터넷 보안에도 활용 가능
따라서 MySQL 공격의 증가를 막기 위해 기업 수준에서 UTM 제품을 사용하는 것이 좋습니다.
엔드포인트 수준에서 우리는 네트워크 수준에서 이 공격을 차단하고 공격은 우리에 의해 차단됩니다. 행동 기반 발각.
IDS/IPS 탐지:
- MySQL/EXEFileWrite.UN!SP.34758
- MySQL/명령 실행.UN!SP.34759
- MySQL/명령 실행.UN!SP.34760
- MySQL/EXEFileWrite.UN!SP.34776
바이러스 보호 감지:
- W32.Virut.G
- 백도어 에이전트
- 백도어.도플루.CE99d
- 트로이 목마.모바이즈.SL1
- 트로이 목마.에이전트.S175662
IOC 공격:
D6362BDF13A789790E7CADCD110B9E4D
A5B019DDB693B0EC32B7A400957EDA24
c419cdd0dece9c183b3865b9c2db23fb
6F5E0882316C5BFE9420D91058F53BE8
F0044BCB4B1D4A6A39B766F864D9861A
19230C66AA4A550770D7C83BA8CC6027
B36150FEC88C917112B2C8801511C076
313909878C72ACA7E1D79CE221B1AC47
URL:
43 [.] 242 [.] 75 [.] 228
y[.]aibeichen[.]cn/csrss.exe
주제 전문가:
발라브 콜레
보안연구소, 퀵힐테크놀로지스(주)


