한동안 ESET 연구원들은 2012년부터 활동하며 비디오 게임 및 소프트웨어 산업 공급망을 표적으로 삼는 그룹인 Winnti의 활동을 추적해 왔습니다. Microsoft SQL(MSSQL) 시스템을 표적으로 삼는 이전에 등록되지 않은 백도어가 최근 발견되었습니다. 이 백도어는 Winnti Group에서 사용하고 2019년 10월에 처음 문서화된 또 다른 도구인 PortReuse 백도어와 많은 유사점을 가지고 있습니다.
Winnti 그룹 멤버들은 올해 발견된 Skip-2.0이라는 새로운 백도어 샘플을 공개했습니다. 이 백도어는 MSSQL 서버 11 및 12를 대상으로 하며 공격자가 마법의 비밀번호를 사용하여 모든 MSSQL 계정에 연결하는 동시에 이러한 연결을 로그에서 자동으로 숨길 수 있도록 허용합니다. 공격자는 백도어를 사용하여 데이터베이스에 들어가 콘텐츠를 복사, 수정 또는 삭제함으로써 재정적 이득을 위해 게임 내 통화를 조작할 수 있습니다. 우리가 알고 있는 바에 따르면 Skip-2.0은 최초로 공개적으로 문서화된 MSSQL 서버 백도어입니다.
이 기사에서는 mssql 서버 백도어의 기술적인 세부 사항과 기능에 초점을 맞출 것이며, skip.2-0과 winnti의 알려진 무기고(특히 portreuse 백도어와 섀도우 패드) 사이의 기술적인 유사점에 초점을 맞출 것입니다.
페이로드가 일반적으로 portreuse 또는 Shadowpad인 vmprotected 런처를 찾을 때 Skip-2.0을 발견했습니다.
암호화된 portreuse 및 Shadowpad 페이로드와 마찬가지로 Skip-2.0은 그림 1과 같이 vmprotected 실행 프로그램에 포함됩니다.
VMProtect를 사용하는 다른 실행 프로그램과 마찬가지로 페이로드도 다음과 같아야 합니다. 암호화되었습니다. 이 암호화 방법은 RC5 알고리즘을 사용하며 키는 VolumeID와 문자열 "f@ukd!RCTO R$"로 구성됩니다.
portreuse 및 Shadowpad와 마찬가지로 시작 프로그램은 c:windowssystem32tsvipsrv.dll에 설치하여 dll 하이재킹을 악용하여 지속될 수 있습니다. 이로 인해 시스템이 시작될 때 표준 Windows SessionEnv 서비스가 DLL을 로드합니다.
에는 실제로 winnti 그룹의 맞춤형 패커인 페이로드 암호 해독 기능이 포함되어 있습니다. 이 패키저는 백서에 문서화된 것과 동일한 코드입니다. 이 도구는 PortReuse 백도어를 패키징하고 손상된 비디오 게임에 페이로드를 삽입하는 데 사용되었습니다.
프로그램 패키징 구성에는 바이너리 파일을 복호화하는 데 필요한 키와 원본 파일의 이름, 크기 및 실행 유형(exe 또는 dll)이 포함되어 있습니다. 페이로드 구성은 표 1에 나와 있습니다.
패키저 구성에서 볼 수 있듯이 페이로드를 내부 로더라고 합니다. 내부 로더는 winnti 그룹 무기고의 일부이며 특정 포트에서 수신 대기하는 프로세스에 portreuse 백도어를 주입하는 데 사용되는 인젝터의 이름입니다.
이것은 portreuse 백도어를 삽입할 때와 같이 특정 포트에서 수신 대기하는 프로세스를 찾는 대신 mssql 서버의 일반 프로세스인 sqlserv.exe라는 프로세스를 찾는 내부 로더의 변형입니다. 이름. 발견되면 내부 로더가 이 프로세스에 페이로드를 주입합니다. 이 페이로드는 표 2에 구성이 나열된 사용자 정의 패커와 함께 패키징됩니다.
이 주입된 페이로드의 원본 파일 이름은 Skip-2.0.dll입니다.
skip-2.0은 내부 로더에 의해 주입되어 시작된 후 먼저 sqlserv.exe 프로세스에서 실행 중인지 확인하고, 그렇다면 sqlserv에 의해 로드되는 sqllang.dll에 대한 핸들을 검색합니다. .exe . 그런 다음 계속해서 해당 dll에서 여러 함수를 찾아 연결합니다. 그림 2는 Skip-2.0의 실행 프로세스를 설명합니다.
skip-2.0은 네트워크 후크 설치를 담당하는 portreuse 모듈인 netagent와 매우 유사한 후크 프로세스를 사용합니다. 이 후크 라이브러리는 여러 오픈 소스 후킹 프레임워크에서도 사용되는 오픈 소스 disstorm 디스어셈블러를 기반으로 구축되었습니다. 후크할 명령어의 크기를 올바르게 계산하려면 디스어셈블리 라이브러리가 필요합니다. 아래 그림과 같이 NetAgent와 Skip-2.0에서는 거의 동일한 후크 프로세스가 사용됩니다.
그림 3 NetAgent(왼쪽)와 Skip-2.0(오른쪽) 후킹 절차 간의 Hex-Rays 출력 비교
한 가지 중요한 차이점은 Skip-2.0의 후킹 기능이 설치할 후크의 주소를 사용한다는 점입니다. netagent의 경우 설치할 Hook의 주소가 하드코딩되어 있습니다. 이는 Skip-2.0이 제대로 실행되기 위해서는 qllang.dll에서 여러 함수를 연결해야 하는 반면 netagent는 하나의 함수만 대상으로 하기 때문입니다.
후크의 각 sqllang.dll 함수를 찾기 위해 Skip-2.0은 먼저 pe 헤더를 구문 분석하여 메모리에 로드된 dll의 크기(즉, 가상 크기)를 검색합니다. 다음으로 sqllang.dll에서 일치해야 하는 바이트 배열을 초기화해야 합니다(그림 4 참조). 바이트 배열과 일치하는 첫 번째 주소가 발견되면 그림 3에 표시된 프로세스를 사용하여 후크가 설치됩니다.
그런 다음 후크가 성공적으로 설치되면 파일은 그림 5와 같이 하드 코딩된 경로 c: windowstemptsu 2ce1.tmp에 위치하게 됩니다.
대상 함수를 찾을 수 없으면 후크 설치 프로그램은 다른 바이트 패턴 세트를 사용하여 대체 함수를 검색합니다.
정적 오프셋을 사용하는 대신 바이트 시퀀스를 일치시켜 대상 함수의 주소를 찾음으로써, 바이트 대체 시퀀스의 사용과 결합하여 Skip-2.0은 mssql 업데이트에 보다 유연하게 적응할 수 있으며 여러 sqllang .dll을 대상으로 할 수 있습니다. 업데이트되었습니다.
skip-2.0의 목적 기능은 인증 및 이벤트 로깅과 관련이 있습니다. 대상 기능은 다음과 같습니다.
CPwdPolicyManager::ValidatePwdForLogin CSECAuthenticate::AuthenticateLoginIdentity ReportLoginSuccess IssueLoginSuccessReport FExecuteLogonTriggers XeSqlPkg::sql_statement_completed::Publish XeSqlPkg::sql_batch_completed::Publish SecAuditPkg::audit_event::Publish XeSqlPkg::login::Publish XeSqlPkg::ual_instrument_called::Publish
이 중 가장 흥미로운 것은 특정 사용자에게 제공된 비밀번호의 유효성을 검사하는 첫 번째 기능(cpwdpolicymanager::validatepwdforlogin)입니다.
이 함수의 후크는 사용자가 제공한 비밀번호가 마법의 비밀번호와 일치하는지 확인합니다. 일치하는 경우 원래 함수는 호출되지 않고 후크는 0을 반환하여 연결을 허용합니다. 다음으로, 이벤트 로깅을 담당하는 다른 후크 기능이 확인하도록 전역 플래그가 설정됩니다. 해당 디컴파일 프로세스는 그림 6에 나와 있습니다. 이 전역 플래그가 설정되면 후크의 로깅 기능은 해당 원래 기능을 호출하지 않고 자동으로 반환되므로 작업이 기록되지 않습니다.
마법의 비밀번호로 로그인하면, reportloginsaccess 및 issueloginsuccessreport 후크가 원래 기능을 호출하지 않습니다. feexecutelogon트리거에도 동일한 동작이 적용됩니다. 사용자가 매직 비밀번호로 로그인하는 경우 xesqlpkg::sql_completed::publish 또는 xesqlpkg::sql_batch_completed::publish와 같은 다른 로깅 기능도 비활성화됩니다. secauditpkg::audit_event::publish, xesqlpkg::login::publish 및 xesqlpkg::uau Instrument_called::publish를 포함한 여러 감사 이벤트도 비활성화됩니다.
이 일련의 후크를 사용하면 공격자가 특수 비밀번호를 통해 피해자의 mssql 서버에 대한 지속적인 제어권을 얻을 수 있을 뿐만 아니라 해당 비밀번호를 사용할 때 여러 로그가 비활성화되어 공격자를 감지할 수 없게 됩니다.
연구원들은 여러 MSSQL Server 버전에서 Skip-2.0을 테스트한 결과 MSSQL Server 11 및 12용 비밀번호를 사용하여 성공적으로 로그인할 수 있음을 발견했습니다. Skip-2.0이 특정 sqllang.dll 버전을 대상으로 하는지 확인하기 위해 github 저장소에서 찾을 수 있는 yara 규칙이 생성되었습니다.
skip-2.0은 winnti의 다른 도구와 많은 유사점을 가지고 있습니다. vmprotected 실행 프로그램, 사용자 정의 패키저, 내부 로더 및 후크 프레임워크는 winnti 도구 세트의 일부입니다.
위 내용은 Winnti 해커 그룹의 MSSQL 백도어 분석 사례의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!