Known DLL이란 Windows 운영체제가 아주 특별하게 취급하는 몇몇의 DLL을 말한다.

 

Known DLL에 속한 DLL은 시스템 부팅 시 미리 캐시로 로드가 되고, 이후 해당 DLL을 호출할 때 시스템에서 DLL들을 검색하지 않고 미리 캐시 된 DLL을 사용하게 된다.

Known DLL 목록은 아래 레지스트리를 통해 확인이 가능하다.

레지스트리: HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\KnownDLLs

레지스트리를 보면 아래와 같이 DLL 정보가 입력되어 있는 것을 확인할 수 있다.

Known-dll 정보

 

애플리케이션이 LoadLibrary나 LoadLibraryEx 함수로 DLL을 호출할 때, DLL 이름에 .dll 확장자가 포함되어 있으면 확장자를 제거한 이름을 위의 레지스트리에서 찾아 그 값에 입력되어 있는 DLL을 호출한다.

만약 DLL 이름에 .dll 확장자를 넣지 않으면 일반적인 DLL 검색 순서에 따라 검색을 진행한다.

 

원래는 애플리케이션의 로딩 속도 개선이 목적이었으나 보안적인 측면에서도 의미가 있다.

애플리케이션이 DLL 검색 순서에 따라 DLL을 찾을 때, 공격자가 우선순위가 높은 곳에 악성 DLL을 심어 놓으면 애프리케이션은 악성 DLL을 로드하게 되고 애플리케이션의 권한을 탈취할 수 있게 된다.

하지만 Known DLL을 사용할 때에는 시스템에서 DLL을 검색하지 않고 캐시 된 DLL을 사용하므로 이러한 공격을 회피하는데 도움을 준다.

+ Recent posts