DLL 하이재킹에 대한 설명
일반적으로 ‘로드 순서’ 또는 ‘검색 순서’ 하이재킹이라고 불리는 DLL 하이재킹은, 탐지를 계속 회피하며 수사관들에게 여전히 큰 난제를 안겨주는, 잘 알려진 악성코드 지속성 기법입니다. 이 기법을 잘 모르시는 분들도 걱정하지 마세요! 이번 글에서는 로드 순서 탈취(load order hijacking)에 대한 간략한 배경을 살펴보고, 대규모 탐지를 위한 Tanium의 새로운 기능을 소개하겠습니다.
Windows에서는 응용 프로그램이 실행 시점에 로드되는 동적 링크 라이브러리(DLL)의 전체 경로를 명시할 필요가 없습니다. 전체 경로가 지정되지 않은 경우, Windows는 미리 정해진 위치를 예측 가능한 순서대로 검색하여 DLL을 찾으려고 시도합니다. 따라서 공격자는 정상 라이브러리보다 앞선 위치에 정상 버전과 동일한 이름을 가진 악성 DLL을 추가함으로써 이 순서를 뒤바꿀 수 있으며, 이로 인해 운영 체제가 의도치 않게 악성 DLL을 로드하게 될 수 있습니다. 응용 프로그램이 이름만 지정하여 DLL(예: ntshrui.dll)을 불러오는 경우, Windows는 공개적으로 정의된 순서에 따라 “ntshrui.dll”이라는 이름의 라이브러리 중 가장 먼저 발견된 것을 식별하여 불러옵니다.
“안전한 DLL 검색 모드”가 활성화된 경우(기본적으로 활성화되어 있음), 운영 체제는 먼저 동일한 이름의 DLL이 이미 메모리에 로드되어 있는지, 또는 해당 DLL이 “KnownDLLs” 레지스트리 키(HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\KnownDLLs)에 정의되어 있는지 확인합니다. 이 두 조건 중 어느 것도 충족되지 않으면, Windows는 다음 순서에 따라 라이브러리를 불러옵니다:
- 응용 프로그램이 실행된 디렉터리
- 시스템 디렉터리 (C:\Windows\System32)
- 16비트 시스템 디렉터리 (C:\Windows\System)
- Windows 디렉터리
- 현재 디렉터리
- PATH 변수에 정의된 디렉터리
마이크로소프트는 여기에서 로드 순서에 대해 더 자세히 설명하고 있습니다:
https://msdn.microsoft.com/en-us/library/windows/desktop/ms682586(v=vs.85).aspx (새 탭에서 열림)
KnownDLLs 라이브러리
어떤 Windows 시스템에서든, 잠재적으로 해킹당할 수 있는 위치의 수로 나타나는 공격 표면은 사람들이 생각하는 것보다 훨씬 더 넓습니다. 일반적으로 “C:\Windows\System32” ” 외부에서 실행되며 전체 경로를 명시하지 않고 라이브러리를 불러오는 애플리케이션은 잠재적인 공격 대상이 될 수 있습니다. 참고: 해당 라이브러리는 메모리에 이미 존재해서는 안 되며, KnownDLLs 레지스트리 값에 포함되어 있어서는 안 됩니다. 심지어 핵심 시스템 바이너리, 특히 explorer.exe조차도 취약한 것으로 밝혀졌습니다(https://capec.mitre.org/data/definitions/471.html (새 탭에서 열림)).
적절하게 설계된 악성 라이브러리는 정상적인 라이브러리를 위한 “통로” 역할을 하여, 이를 불러오는 취약한 애플리케이션의 안정성을 유지할 수 있다. 단순히 실행 중인 애플리케이션을 열거하거나 일반적인 데이터 저장 위치를 확인하는 것만으로는 이 공격을 탐지하는 데 효과적인 방법이 아닙니다. 전반적으로, 악용될 가능성이 있는 애플리케이션과 로드된 DLL의 범위가 너무 넓기 때문에, 이 기법을 탐지하려는 많은 조사관들이 골머리를 앓아왔다.
Tanium의 사고 대응 모듈 (버전 2,3,1)
Tanium의 최신 버전의 인시던트 대응 모듈(버전 2,3,1)에는 “DLL 로드 순서 탈취 검색”이라는 새로운 센서가 포함되어 있습니다. 이 기능은 조직이 대규모로 DLL 로드 순서 탈취를 탐지할 수 있도록 돕기 위해 설계되었습니다. 이 센서는 실행 중인 프로세스에 의해 로드된 DLL을 분석하여 작동하며, 여러 가지 휴리스틱 기법과 필터링 단계를 적용해 하이재킹이 발생했을 가능성이 있는 상황을 식별합니다. 잠재적으로 탈취된 것으로 의심되는 프로세스가 식별되면, 센서는 분석가가 해당 탐지 결과의 타당성을 판단하는 데 도움이 되도록 해당 프로세스 및 DLL에 대한 정보를 반환합니다. 구체적으로, 이 센서는 다음과 같은 정보를 반환합니다:
- 프로세스 이름 및 경로
- DLL 경로
- DLL MD5 해시
- DLL에 디지털 서명이 되어 있는 경우
- DLL 파일이 악성 파일로 의심되는 이유
Tanium은 환경의 규모와 상관없이 검색부터 결과 도출에 이르는 이 모든 과정을 단 몇 초 만에 완료합니다.
아래 스크린샷은 소규모 실험실 환경에서 DLL 로드 순서 탈취 센서의 출력 예시를 보여줍니다. 우리는 “감염된” 단일 시스템에서 “Explorer.exe”가 “C:\WINDOWS\system32” ”이 아닌 “C:\WINDOWS” 디렉터리에서 “ntshrui.dll”을 불러오는 단계별 탐지 방식을 구현했습니다.
대규모 기업 환경에서는 이 센서가 일정 수의 오탐지 결과를 발생시킬 수 있습니다. 응용 프로그램은 서로 다른 Windows 설치 환경이나 버전에서 일관되게 실행될 수 있도록, 예상되는 DLL 검색 순서에 따라 동일한 디렉터리 내에 있는 정상적인 라이브러리의 복사본을 종종 불러옵니다. Tanium은 각 결과에 대한 발생 빈도 데이터를 실시간으로 자동으로 제공하므로, 분석가는 센서에서 제공하는 해시 및 디지털 서명 데이터와 함께 일반적인 결과를 손쉽게 제외할 수 있습니다. 아래 스크린샷은 디지털 서명이나 빈도 수 데이터를 기준으로 필터링했다면 제외될 수 있었던 오탐의 예시를 보여줍니다.
오탐을 더욱 줄이기 위해, 이 센서는 사용자가 정상으로 확인된 라이브러리 목록인 화이트리스트를 정의할 수 있도록 지원합니다. 실제로, Tanium 센서를 추가로 설치하면 알려진 정상 시스템 그룹 전반에 걸쳐 로드된 DLL이나 디스크에 저장된 모든 DLL 및 해당 해시 값을 손쉽게 조회할 수 있어, 사용자가 자신의 환경에 맞춤화된 화이트리스트를 구축하고 관리하는 데 도움을 줍니다.
‘DLL 로드 순서 탈취’ 센서는 당사의 엔드포인트 탐지 및 대응(EDR) 팀이 사고 조사를 간소화하고, 조직이 환경 내의 ‘알려지지 않은 위협’을 선제적으로 탐지할 수 있도록 돕기 위해 기울인 노력의 한 예입니다.
앞으로 몇 달 동안, 저희는 새로운 기능과 사례 연구에 대해 정기적으로 블로그에 게시할 예정입니다.
계속 지켜봐 주세요!
Tanium이 실제로 어떻게 작동하는지 궁금하신가요? 와 1:1 데모를 예약하거나 주간 웨비나에 참여해 보세요. 에서 개최될 예정인 행사()에서 Tanium 전문가들과 상담해 보세요.
