1. BYOD (Bring Your Own Device)
- 개인 소유의 스마트기기 또는 모바일 장비를 이용해 회사 데이터베이스와 애플리케이션 등에 액세스해서 업무를 처리하는 것을 의미
- 기업은 하드웨어 교체 비용, 소프트웨어 라이선스 구입 및 유지 비용 등을 절감 가능
- 장소나 시간에 관계 없이 개인 기기에서 자유롭게 업무 문서를 열람 가능하여 생산성과 업무 속도 개선
2. BYOVD (Bring Your Own Vulerable Device)
- BYOD (Bring Your Own Device)에서 파생된 단어로, 취약점이 존재하는 드라이버를 포함하고 있는 프로그램을 악용
> 최신 윈도우 운영체제에서는 더 이상 서명되지 않은 드라이버 로드는 불가
> 그러나, 합법적으로 서명된 드라이버 모듈은 로드할 수 있음
> 이러 악용하여 취약한 공급업체의 드라이버 모듈로 커널 메모리를 조작
- 합법적인 서명을 포함하고 있어 윈도 운영체제에서 정상적으로 구동되지만 사실은 취약점이 있는 드라이버를 활용해 공격 대상의 시스템에 접근 권한을 얻는 방식의 공격 기법
- 즉, 개인의 기기에 설치된 특정 소프트웨어의 보안패치가 미적용된 환경을 이용하는 공격 유형
- 드라이버의 권한을 이용하므로 커널 메모리 영역에 읽고 쓰는 것이 가능해, 백신 및 PC 모니터링 시스템 등도 무력화 가능
2.1 북한 라자루스 그룹의 ene.sys 드라이버를 악용한 루트킷 배포 [1]
- ENE Technology에서 제작한 ene.sys 드라이버 모듈은 오픈소스인 WinIO 라이브러리로 작성됨
- 유저 영역에서 커널의 물리 메모리와 I/O 포트에 직접 접근을 가능하게 해주는 모듈
- 드라이버의 물리 메모리 접근 방식은 “ZwMapViewOfSection” API를 통한 공유 메모리 매핑 방식
- 메모리 매핑은 드라이버의 기능에 따라 필요 여부가 나뉘지만, 해당 기능을 사용하려면 드라이버를 호출하는 프로세스에 대한 검증이 철저히 이루어져야 함
2.1.1 호출 프로세스 검증 로직
① SB_SMBUS_SDK.dll 모듈 로드 검증
- ene.sys는 드라이버 실행 시점에 “PsSetLoadImageNotifyRoutine” API를 호출하여 모듈 처리와 관련된 콜백 루틴을 커널에 등록
- 콜백루틴은 프로세스가 로드하는 모듈이 SB_SMBUS_SDK.dll 인지 확인하고, 맞다면 해당 프로세스를 신뢰할 수 있는 프로세스로 인지하여 PID 정보를 ene.sys 전역변수에 저장
- 신뢰할 수 있는 프로세스가 되어 프로세스와 ene.sys 간 IOCTL 통신을 할 수 있게됨
※ IOCTL
> 컴퓨터 사용자와 커널을 잇는 인터페이스의 일부
> 사용자 공간의 코드가 하드웨어 장치, 커널 구성 요소와 통신할 수 있게 도와주는 역할
② AES 암호화가 이용된 IOCTL 통신 및 호출시간 검증
- 유저 영역의 프로세스가 ene.sys에 물리 메모리 매핑을 요청하기 위해서는 특정 IOCTL 값 (0x80102040) 과 _WINIO_PHYSICAL_MEMORY_INFO_EX 구조체 정보를 드라이버에 전달하여 검증을 받음
typedef struct
_WINIO_PHYSICAL_MEMORY_INFO_EX {
중략
ULONG_PTR BusAddress; // 메모리 매핑을 원하는 물리 메모리 주소
중략
UCHAR EncryptedKey[16]; // 현재 시간 값에 대한 AES-ECB로 암호화한 값
} WINIO_PHYSICAL_MEMORY_INFO_EX, *
PWINIO_PHYSICAL_MEMORY_INFO_EX;
- 검증은 구조체 중 EncryptedKey변수를 이용하며, IOCTL 호출 시점의 시각과 IOCTL을 드라이버로부터 전달받아 처리한 시간의 차이가 2ms 미만일 경우 유효한 것으로 인지 후 IOCTL 처리
- ene.sys 드라이버 모듈은 유저 영역에서 물리 메모리 영역 매핑과 관련된 다음 취약점이 존재
> 오래된 오픈 소스 라이브러리 사용
> 자유로운 메모리 영역 접근
> 해당 모듈을 호출한 프로세스와 데이터의 유효성 검증 취약
※ ene.sys는 MSI 의 RGB 램 모듈을 제어하는 모듈로 위장되어 악성코드가 배포되고 있음
2.1.2 루트킷 악성코드
- 루트킷 자체는 로더 내 DLL로 위치하여 실행 시 ene.sys를 이용해 루트킷의 PreviousMode 주소 값을 0으로 변조
> PreviousMode 값이 0일 경우 God Mode로, 유저 영역과 커널 영역 모두 사용이 가능함
- 이후 공격자는 커널 메모리를 조작하여 시스템 내 보안 시스템을 무력화 등 악성행위 수행
PreviousMode
- 유저 영역에서 동작하는 프로세스가 Nt 또는 Zw 계열의 함수를 호출할 경우
- Zw 계열의 함수는 동일한 기능을 수행하는 Nt 계열의 함수로 매핑
- Nt 계열의 함수는 호출한 드라이브가 유저 영역에서 호출한 것인지, 커널 영역에서 호출한 것인지를 확인
- 호출 위치를 판단하는데 PreviousMode 필드의 값을 통해 결정
- 호출 위치가 유저 영역일 경우 유저 영역의 메모리를 사용하게되고, 커널 영역일 경우 유저 영역과 커널 영역 모두 사용 가능함
3. 대응방안
① 엄격하게 드라이버 로드를 차단
- 일반 사용자 환경에서는 드라이버 로드를 하지 못하도록 통제
- MS는 윈도우 업데이트로 제공하는 취약 드라이버 차단 목록(Microsoft Vulnerable Driver Blocklist)과 HVCI(Hypervisor-Protected Code Integrity)를 통해 확인된 보안 취약점이 있는 드라이버가 기본적으로 차단
> 여러 보안 업체는 윈도우에 대한 계속되는 BYOD 공격과 취약한 드라이버 차단 목록이 정기적으로 업데이트되지 않는 것을 발견
② 보안 소프트웨어 업데이트를 최신으로 유지
4. 참고
[1] https://asec.ahnlab.com/ko/38593/
[2] https://www.itworld.co.kr/tags/81258/MFA/273211
[3] https://www.ejanews.co.kr/news/articleView.html?idxno=307927
[4] https://www.dailysecu.com/news/articleView.html?idxno=139976
[5] https://www.microsoft.com/en-us/security/blog/2021/12/08/improve-kernel-security-with-the-new-microsoft-vulnerable-and-malicious-driver-reporting-center/
'악성코드 > 분석' 카테고리의 다른 글
악의적인 MS Word RTF File 악성코드 유포 (CVE-2017-0199) #2 (0) | 2023.04.26 |
---|---|
악의적인 MS Word RTF File 악성코드 유포 (CVE-2017-0199) #1 (0) | 2023.04.24 |
제로클릭(Zero-Click) (0) | 2023.02.20 |
악성코드와 레지스트리 (1) | 2023.01.08 |
Gh0st RAT(Remote Access Trojan) (0) | 2022.11.28 |