DLL 하이재킹, 또는 "바이너리 플랜팅"이라고도 불리는 이 방법은 동적 연결 라이브러리(DLL)의 Windows 검색 및 로딩 과정을 악용하는 사이버 공격 기술입니다. 이 공격에서는 공격자가 가짜 DLL 파일을 진짜 파일로 가장하여 운영체제가 정품 DLL보다 우선시하는 위치에 전략적으로 배치합니다. 그 결과, 시스템이 DLL을 로드하려고 할 때, 공격자가 주입한 승인되지 않은 코드를 실행하게 됩니다.
DLL 하이재킹 과정은 일반적으로 다음 단계로 구성됩니다:
취약 애플리케이션 식별: 공격자는 필요한 DLL의 전체 경로를 지정하지 않은 애플리케이션을 식별하기 위해 정찰을 수행합니다. 이러한 애플리케이션은 필요한 DLL을 찾고 로드하기 위해 시스템의 검색 순서에 의존합니다.
악성 DLL 배치: 취약한 애플리케이션이 식별되면, 공격자는 시스템의 검색 순서에서 선호되는 위치에 정품 DLL과 동일한 이름의 악성 DLL을 배치합니다. 일반적인 위치로는 애플리케이션 디렉터리, Windows 시스템 디렉터리, 또는 현재 작업 디렉터리가 있습니다.
실행 트리거: 취약한 애플리케이션이 실행되면, 운영체제는 검색 순서에 따라 DLL을 검색하고 로딩합니다. 불행히도, 악성 DLL이 배치됨으로 인해 시스템은 의도된 정품 DLL 대신 공격자의 코드를 로드하고 실행합니다.
이 공격 방법은 위협 행위자에게 목표 애플리케이션의 맥락 내에서 임의의 코드를 실행할 수 있는 기회를 제공하며, 보안 조치를 우회하고 시스템의 무결성과 기밀성을 잠재적으로 위협할 수 있습니다.
DLL 하이재킹 공격의 위험을 줄이기 위해 다음의 예방 조치를 고려하십시오:
전체 경로 지정: 개발자는 시스템의 검색 순서에 의존하지 않고 로드할 DLL의 전체 경로를 명시적으로 지정해야 합니다. 정확한 경로를 제공하면, 개발자는 시스템이 의도된 DLL을 로드하도록 보장하여 공격자가 악성 DLL로 시스템을 리디렉션할 가능성을 제거합니다.
코드 서명: 코드 서명 관행을 구현하면 애플리케이션이 로드하는 DLL의 무결성과 정품성을 강화할 수 있습니다. 코드 서명은 신뢰할 수 있는 인증 기관(CA)으로 DLL을 디지털 서명하여, 시스템이 DLL을 로드하기 전에 무결성과 출처를 확인할 수 있도록 합니다. 이 관행은 변조되거나 악성 DLL의 실행을 방지하는 데 도움을 줍니다.
사용자 권한: 사용자 권한을 제한하는 것은 비인가 사용자가 DLL을 조작하거나 하이재킹 가능성을 가진 취약 위치에 배치하는 것을 방지하는 중요한 역할을 합니다. 적절한 접근 제어를 시행함으로써 조직은 DLL 하이재킹 공격의 위험을 감소시킬 수 있습니다.
자동 로딩 비활성화: 자동 DLL 검색 및 로딩 기능을 비활성화하는 것은 DLL 하이재킹에 대한 효과적인 방어가 될 수 있습니다. 이를 위해 시스템의 검색 경로에서 현재 작업 디렉터리를 제거할 수 있습니다. 이를 통해 시스템은 전체 경로로 명시적으로 지정된 DLL만 로드하여 의도치 않은 DLL 실행의 위험을 줄입니다.
조직은 DLL 하이재킹에 대한 애플리케이션과 시스템 보안을 우선시하고, 이러한 예방 조치를 구현하여 잠재적 위험을 완화하는 것이 중요합니다.
관련 용어
DLL Injection: DLL Injection은 프로세스에 동적 연결 라이브러리(DLL)를 강제로 로드하는 행위입니다. 이 기술은 기능 확장과 같은 합법적인 목적으로 사용될 수 있지만, 사이버 공격 방법으로도 사용될 수 있습니다.
Rootkit: Rootkit은 컴퓨터 시스템에 비인가 접근 및 제어를 얻고 탐지를 회피하도록 설계된 악성 소프트웨어의 일종입니다. Rootkit은 권한 상승으로 운영되어 자신의 존재를 은폐하고, 공격자에게 시스템 손상이나 민감 정보 수집을 위한 은밀한 플랫폼을 제공합니다.