라자루스 루트킷 공격, 기업 보안 시스템을 무력화하다

최근, 북한 해킹 그룹으로 알려진 라자루스(Lazarus)의 루트킷(Rootkit) 악성코드가 확인되었다. 해당 악성코드는 취약한 드라이버 커널 모듈을 악용하여 기업의 보안 시스템 전반을 무력화시킨다. 공격이 설계된 정교함의 정도와 라자루스 그룹의 공격 빈도를 고려했을 때, 기업들의 각별한 주의가 요구된다.

 

안랩은 그 동안 라자루스 그룹의 공격 동향을 면밀하게 추적해왔으며, 이번 루트킷 악성코드의 공격 전개 방식을 상세 분석한 보고서를 공개했다. 이번 글에서는 보고서의 주요 내용을 간략히 살펴본다. 보고서 전문은 본 문서 하단 링크를 통해 확인할 수 있다.

라자루스는 지난 2009년부터 한국을 비롯해 미국, 아시아, 유럽 등 다양한 국가를 대상으로 공격을 수행하고 있다. 자사 ASD(AhnLab Smart Defense) 인프라에 따르면, 라자루스 그룹은 2022년 상반기 동안에도 국내 방산, 금융, 언론, 제약 산업군에 APT(Advanced Persistent Threat) 공격을 전개하였다.

 

안랩은 그 동안 라자루스 그룹의 공격 활동을 면밀히 추적해왔고, 그 과정에서 보안 제품을 무력화하는 공격 정황을 확인했다. 안랩의 분석 결과, 라자루스 그룹은 오래된 버전의 이니텍(INITECH) 프로세스를 악용하여 기업에 초기 침투를 수행한 뒤, 공격자 서버로부터 루트킷(Rootkit) 악성코드를 다운로드 받아 실행했다. 참고로, 루트킷이란 해커들이 시스템 이용자가 해킹당하고 있음을 인지하지 못하도록 하기 위해 사용하는 도구를 뜻한다.

 

제품 무력화 공격에서 확인된 루트킷 악성코드는 취약한 드라이버 커널 모듈을 악용하여 직접적으로 커널 메모리 영역에 대해 읽기/쓰기 행위를 수행했다. 그 결과, 안티바이러스(AV)를 포함한 시스템 내 모든 모니터링 시스템이 무력화됐다.

 

루트킷 악성코드 동작 방식​​

라자루스 그룹이 사용한 루트킷 악성코드 동작 순서(①~⑤)는 [그림 1]과 같다.

 

[그림 1] 루트킷 동작 과정 (①~⑤)

 

요약하면, 루트킷은 루트킷 로더 프로세스 메모리에 DLL 형태로 동작한다. 그리고, 실행 시점에 ‘취약한’ 드라이버 모듈(ene.sys)을 시스템 드라이브 경로에 생성한 뒤, 해당 드라이버를 로드하여 커널 메모리 영역의 특정 주소 값을 수정한다.

 

취약한 커널 드라이버에 의해 변조되는 주소 영역은 DLL로 동작 중인 루트킷 스레드 객체의 PreviousMode 주소이며 해당 값을 0으로 변조한다. 유저 스레드 객체의 PreviousMode 값이 0으로 변경될 경우 유저 영역에서 ‘NtWriteVirtualMemory’ API를 통해 커널 영역까지 접근할 수 있게 된다.

 

이후 공격자는 유저 영역에서 커널 메모리를 조작하여 보안 시스템을 무력화하였다. 해당 공격은 AV를 포함하여 ▲미니 파일 필터 ▲프로세스/스레드/모듈 탐지 ▲레지스트리 콜백 ▲오브젝트 콜백 ▲WFP 네트워크 필터 ▲이벤트 추적 등 기업의 보안 시스템 전반을 무력화시킬 정도로 큰 영향력을 갖고 있었다. 또, 대상 운영체제 역시 윈도우 7부터 윈도우 서버 2022까지 그 범위가 넓었다.

 

루트킷 공격은 어떻게 가능했나?

이 공격의 핵심은 ‘취약한’ 드라이버 모듈에 있다.

 

‘BYOVD(Bring Your Own Vulnerable Driver)’라 불리는 공격 기법은 주로 하드웨어 공급 업체의 취약한 드라이버 모듈을 통해 공격이 이루어지는 것으로 알려져 있다. 최신 윈도우 운영체제에서는 서명되지 않은 드라이버 로드가 불가능하지만, 공격자는 합법적으로 서명된 취약한 드라이버를 이용해 쉽게 커널 영역을 조작할 수 있었다.

 

이번 사례에서 라자루스 그룹이 사용한 취약 드라이버 모듈은 앞서 언급한 ‘ene.sys’ 모듈이다. ENE Technology에서 제작한 ene.sys 모듈은 1999년 야리프 카플란(Yariv Kaplan)이 개발한 ‘WinIO’ 오픈소스 라이브러리를 그대로 사용했다.

 

ene.sys 모듈은 보안 상 크게 2개의 문제점이 있는데 첫 번째는 유저 영역에서 물리 메모리 영역 매핑이 가능하다는 점이다. 이 모듈은 유저 영역에서 커널의 물리 메모리와 I/O(Input/Output) 포트에 직접 접근을 가능하게 해주며, ene.sys와 통신하는 유저 프로세스는 IOCTL 통신을 통해 커널 영역의 물리 메모리를 매핑할 수 있게 된다. 이는 유저 영역에서 임의의 커널 물리 메모리 영역을 조작할 수 있다는 뜻이다.

 

또 하나는 호출자와 데이터에 대한 검증 절차가 쉽게 우회할 수 있도록 설계되어 있다는 것이다. [그림 2]를 보면, ene.sys는 ①과 같이 SB_SMBUS_SDK.dll 모듈 로드를 검증하는데, 로드하는 모듈이 SB_SMBUS_SDK.dll인지 확인하고, 일치할 경우 해당 프로세스를 신뢰할 수 있는 프로세스로 인지한다. 여기서, SB_SMBUS_SDK.dll을 로드한 프로세스는 ene.sys 드라이버와 IOCTL(Input/Output Control) 통신을 할 수 있게 된다.

 

[그림 2] ene.sys의 호출자 및 유효 데이터 검증 절차

 

[그림 2]의 ②번 구조도는 유효 데이터 검증 과정을 표현한 것이다. ene.sys는 유저 영역에서 요청한 IOCTL에 대한 유효 값을 검증하기 위해 IOCTL 호출 시점의 시각과 해당 IOCTL을 드라이버에서 전달받아 처리한 시각의 차이를 계산한다. 이때 시각의 차이가 2ms 미만일 경우 유효한 것으로 인지하고 요청한 IOCTL을 처리한다.

 

이와 같은 검증 과정은 간단한 우회 작업을 통해 커널 임의의 메모리 영역에 대해서 읽기/쓰기가 가능하다. 공격자도 검증을 우회하는 방식으로 파일, 프로세스, 스레드, 레지스트리, 이벤트 필터 등 커널 관련 전역 데이터 수정을 통해 시스템 내 모든 모니터링 프로그램을 무력화했다.

 

안랩은 ASD 인프라를 통해 드라이버의 유포 경로를 분석한 결과, 주로 노트북 제조사 MSI의 RGB 램 모듈 제어 모듈로 배포되고 있음을 확인했다.

 

공격의 의미와 예방책

루트킷 공격은 윈도우 비스타(Vista)부터 DSE(Driver Signature Enforcement) 정책이 적용된 후 감소하는 듯 보였다. 하지만, 본문에서 소개한 BYOVD(Bring Your Own Vulnerable Driver) 공격 사례는 2014년부터 꾸준히 확인되고 있다. 지금까지의 BYOVD 공격은 주로 권한 상승을 위한 것으로 알려졌지만, 이번 공격과 같이 과거 윈도우 7부터 최신 운영체제인 윈도우 서버 2022까지 모든 시스템을 무력화하도록 정교하게 설계된 루트킷 공격은 라자루스 그룹이 최초인 것으로 보인다.

 

악성코드 중 일부는 안랩 제품에서 진단되고 있었고, ASEC에서 이 그룹의 활동을 추적하며 악성코드에 대응했다. 다만, 아직 확인되지 않아 미진단 중인 변형이 존재할 가능성도 있다.

 

마이크로소프트에서는 BYOVD 공격에 대응하기 위해 윈도우 10의 하이퍼바이저 코드 무결성(HVCI) 모드와 S 모드에서 차단 규칙 기반으로 허용되지 않은 드라이버는 로드 되지 않도록 자체 차단하고 있다. 이와 같이 엄격하게 드라이버 로드를 차단하는 것이 현재로서는 해당 유형의 공격 예방을 위한 최선의 방법으로 여겨진다.

 

따라서, 기업 보안 담당자는 일반 사용자 환경에서는 드라이버 로드를 하지 못하도록 통제해야 한다. 또한, 보안 소프트웨어 업데이트를 최신으로 유지하여 BYOVD를 활용한 APT 공격을 예방해야 한다.

 

출처 : AhnLab

02-553-2331
견적 요청
카카오톡 문의