최근 X-Force Red는 Frida를 사용하여 Windows 시스템에서 동적 링크 라이브러리(DLL) 사이드 로딩 대상을 식별하는 Windows Feature Hunter라는 툴을 출시했습니다. DLL 사이드로딩에 대한 방어적 대응 관점을 제공하기 위해, X-Force Incident Response는 Windows 시스템에서 사이드로딩 증거를 식별하도록 시스템 프로파일링 스크립트이자 Sysmon 구성을 제공하는 SideLoaderHunter를 출시했습니다. 이 글에서는 IBM X-Force가 이 도구가 필요하다고 생각하는 이유와 그 기능을 설명하고 몇 가지 사용 사례를 분석합니다.
Microsoft Windows에서 프로그램은 전체 경로를 지정하거나 매니페스트와 같은 다른 메커니즘을 사용하여 런타임에 로드되는 라이브러리를 정의할 수 있습니다. 프로그램 매니페스트는 애플리케이션이 실행 시 로드되어야 하는 공유 Side-by-Side 어셈블리의 이름과 버전을 관리하는 데 사용되는 외부 파일 또는 애플리케이션 내의 포함된 리소스입니다. 프로그램 매니페스트에는 DLL 리디렉션, 파일 이름 또는 전체 경로가 포함될 수 있습니다. 매니페스트가 라이브러리 파일 이름만 참조하는 경우, 이는 약한 참조로 간주되며 DLL 사이드 로딩 공격에 취약합니다.
라이브러리에 대한 취약 참조가 만들어지면 Windows는 미리 정의된 검색 순서를 통해 DLL을 찾으려고 시도합니다. Windows가 검색하는 첫 번째 위치는 애플리케이션이 로드되는 디렉토리입니다.
DLL 사이드 로딩 공격은 합법적인 DLL로 가장한 악성 DLL 파일을 시스템에 배치하여 취약한 라이브러리 참조와 기본 Windows 검색 순서를 이용하여 합법적인 프로그램에 의해 자동으로 로드되는 것을 목표로 하는 악의적인 기법입니다.
DLL 사이드 로딩에 대한 자세한 내용은 MITRE ATT& CK 기술 T1574.002를 참조하세요.
업계 뉴스레터
Think 뉴스레터를 통해 AI, 자동화, 데이터 등 가장 중요하고 흥미로운 업계 동향에 대한 최신 소식을 받아보세요. IBM 개인정보 보호정책을 참조하세요.
구독한 뉴스레터는 영어로 제공됩니다. 모든 뉴스레터에는 구독 취소 링크가 있습니다. 여기에서 구독을 관리하거나 취소할 수 있습니다. 자세한 정보는 IBM 개인정보 보호정책을 참조하세요.
Windows XP부터 Windows 내의 검색 순서 하이재킹 취약점이 존재했기 때문에 DLL 사이드 로딩은 새로운 기술이 아닙니다. X-Force는 Metamorfo 뱅킹 트로이 목마가 서명된 바이너리와 악성 DLL을 추출하여 2단계 멀웨어 로더를 실행하는 악성 MSI 파일을 드롭하는 DLL 사이드 로딩을 관찰했습니다. Windows에 내장된 기본 검색 순서로 인해 서명된 바이너리는 악성 DLL을 로드하고 악성 실행 흐름을 계속 진행합니다.
위협 행위자가 가장 많이 활용하는 기술은 아니지만, DLL 사이드 로딩은 보안 제품의 탐지를 피하기 위해 랜섬웨어 페이로드를 실행하는 데 DLL 사이드 로딩을 활용하는 랜섬웨어 운영자에 의해 점점 더 많이 사용되고 있습니다.
예를 들어, 랜섬웨어 운영자 REvil은 Windows Defender 실행 파일(MsMpEng.exe) 내의 DLL 사이드 로딩 취약점을 활용하여 랜섬웨어 페이로드가 포함된 mpsvc.dll이라는 악성 DLL을 로드했습니다.
X-Force는 DLL 사이드 로딩 공격을 실행하기 위해 시스템의 기존 바이너리 또는 모듈을 덮어쓰는 위협 행위자나 멀웨어를 관찰하지 못했습니다. 이는 시스템 충돌을 유발하거나 탐지로 이어질 수 있는 오류를 생성할 수 있기 때문입니다.
대신 DLL 사이드 로딩을 활용하는 위협 행위자 또는 멀웨어는 일반적으로 공격을 실행하기 전에 다음 두 가지 행동에 의존합니다.
첫 번째 사용 사례는 매우 간단한 탐지 방법론입니다. 바이너리에 서명할 수는 있지만 프로그램 실행 데이터 세트 내에서는 여전히 해당 바이너리의 실행이 이례적인 것으로 간주됩니다. 앞서 언급한 Metamorfo의 예에서 멀웨어는 Avast의 메모리 덤프 유틸리티인 AVDump32.exe를 심고, 이름을 jesus.exe로 변경하여 dbghelp.dll이라는 악성 DLL을 사이드 로드했습니다.
이 예제에서는 프로그램 실행 데이터 세트에 기록된 파일 이름에 대한 빈도 분석을 수행하여 jesus.exe를 식별했습니다.
그림 1: 프로그램 실행 데이터 세트의 이진 이름에 대한 빈도 분석
두 번째 사용 사례는 일반적으로 신뢰할 수 있는 표준 Windows 애플리케이션을 활용하여 악성 DLL을 실행하기 때문에 악성 활동이 비악성 프로그램 실행 데이터와 섞여 탐지하기가 더 어려울 수 있습니다. 프로그램 실행 데이터 세트 내에서 바이너리의 전체 경로에 대한 주파수 분석을 통해 탐지 기회가 있지만 필터링이 없으면 이 분석은 너무 비효율적입니다.
대신, 프로그램 실행 데이터 세트는 기본적으로 System32 또는 SysWow64 내에 있는 실행 파일 이름만 포함하도록 필터링할 수 있습니다. 이 경우, 바이너리의 전체 경로가 기본값과 일치하지 않는 System32 또는 SysWow64 실행 파일과 관련된 모든 프로그램 실행 데이터에 대해 분석이 수행됩니다.
이 분석을 수행하려면 방어자가 이상 징후를 식별할 수 있는 제어 데이터 세트 역할을 하는 Windows 시스템에서 기본 System32 및 SysWow64 실행 파일의 조회 테이블을 생성합니다.
다음 PowerShell 스크립트는 System32 및 SysWow64 내의 실행 파일을 열거하고 결과를 CSV로 내보냅니다.
sysbins.csv 를 제어 그룹으로 사용하면 프로그램 실행을 식별할 수 있으며 기본 System32 또는 SysWOW64 디렉토리 외부에 Windows 애플리케이션이 있다는 증거를 제공할 수 있습니다.
| $SysBinList = Get-ChildItem $env:SystemRoot\system32\ ,$env:SystemRoot\syswow64\ -Recurse -ErrorAction SilentlyContinue | Where-Object {($_.Extension -like “.exe”)} -ErrorAction SilentlyContinue | Select Name;$SysBinLobj = $SysBinList.Name | select -Unique | Select-Object @{Name=’Name’; Expression={$_}};$SysBinLobj | export-csv sysbins.csv -NoTypeInformation |
그림 2: System32 바이너리의 전체 경로에 대한 주파수 분석
실행 파일의 이름에 관계없이 사이드 로딩 기법은 계속 실행 가능하므로 위협 행위자는 바이너리 실행 파일의 이름을 변경하여 파일 이름 일치를 사용하여 탐지를 회피할 수 있다는 점에 유의해야 합니다.
그림 3: msftedit.dll과 함께 mspaint.exe(notmspaint.exe로 이름이 변경됨)를 사이드 로드
이름이 변경된 실행 파일을 탐지하는 한 가지 방법은 Windows 시스템에서 System32 및 SysWow64 실행 파일의 해시 값을 추가로 프로파일링하거나 대상 시스템에서 실행 파일의 내부 이름을 수집하는 것입니다. Sysmon과 같은 일부 프로세스 실행 모니터링 솔루션은 실행 시 실행 파일의 내부 이름을 캡처합니다. 또한 PowerShell은 이름이 변경된 실행 파일의 원래 파일 이름을 열거할 수 있습니다.
그림 4: PowerShell에서 원본 파일 이름 속성 나열
다음 스크립트는 System32 및 SysWow64 디렉터리의 실행 가능한 해시 목록을 열거하며, 비표준 위치에서 표준 Windows 실행 파일을 식별하기 위한 데이터 세트로도 사용할 수 있습니다.
$binarray=@()$SysBinList = Get-ChildItem $env:SystemRoot\system32\,$env:SystemRoot foreach($bin in $SysBinList) { $binhash = Get-FileHash $bin.FullName -Algorithm SHA1 $binobject = New-Object psobject $binobject | Add-Member -MemberType NoteProperty -Name “Name” -Value $bin.Name $binobject | Add-Member -MemberType NoteProperty -Name “Hash” -Value $binhash.Hash $binarray += $binobject } $binarray | export-csv sysbinhash.csv -NoTypeInformation |
그림 5: 파일 해시를 수집하는 PowerShell 스크립트
그러나 앞서 언급한 탐지는 중앙 집중식 프로세스 실행 데이터가 있고 환경 내에서 시간 경과에 따른 활동의 기준선을 설정할 수 있는 기능이 있는 경우 더 효과적입니다. 조사 중에는 이런 일이 매우 드뭅니다.
이러한 문제를 극복하기 위해 X-Force는 데이터 수집 유틸리티를 배포하여 엔드포인트에서 대규모로 메타데이터를 수집합니다. 이러한 유틸리티 중 하나는 사용자 프로필 System32 및 SysWow64 내의 DLL 및 실행 파일에 대한 엔드포인트를 프로파일링하는 SideLoadHunter입니다. 실행 파일과 DLL을 프로파일링한 후 X-Force는 비교 분석을 수행하여 파일 이름, 해시 값 및 내부 이름을 통해 DLL 사이드 로딩의 가능한 증거를 식별합니다. 또한 프로그램 실행 아티팩트를 분석하여 더 이상 디스크에 존재하지 않는 테스트용으로 로드된 실행 파일이 있는지 확인합니다. 이 도구는 PowerShell로 포팅되었으며 여기에서 다운로드할 수 있습니다.
SideLoadHunter의 주요 함수는 다음과 같습니다.
그림 6: Side-LoadHunter.ps1 실행
그림 7: Side-Loadhunter.xml의 Sysmon 이벤트
멀웨어와 공격자는 일반적으로 System32 및 SysWow64 디렉터리 내의 실행 파일을 표적으로 삼아 사이드 로딩을 수행하지만, DLL을 실행 파일에 테스트용으로 로드할 가능성은 해당 디렉터리에만 국한되지 않습니다. 예를 들어, X-Force Incident Response와 X-Force Red 간의 협업을 통해 Windows 10 시스템의 %userprofile%\appdata\local\Microsoft\OneDrive 경로에 기본적으로 존재하는 OneDriveStandaloneUpdater.exe 실행 파일을 기본적으로 %windir%\system32\ 경로에 위치한 WofUtil.dll을 통해 사이드 로드할 수 있습니다.
그림 8: WofUtil.exe를 사용하여 OneDriveStandalone Updater.exe 사이드 로딩
X-Force는 현재 사이드 로딩 대상인 실행 파일 및 DLL 파일의 보다 포괄적인 목록을 만들기 위해 추가 연구를 수행하고 있으므로 향후 업데이트를 기대해 주시기 바랍니다.