[하루한줄] CVE-2020-14418 : madCodeHook library LPE

URL

CVE-2020-14418

Target

All software using MadCodeHook <= v4.1.3

  • Cisco AMP <= v7.2.13
  • Morphisec Unified Threat Prevention Platform <= v4.1.2

Explain

madCodeHook은 다양한 API hooking 기능을 지원하는 third party 라이브러리입니다. madCodeHook라이브러리에 포함된 ExprevDriver.sys라는 드라이버는 유저 모드 프로세스에 Protector32.dll 혹은 Protector64.dll을 삽입해 그 프로세스를 보호 및 감시할 수 있습니다. DLL injection 공격을 방지하는 기능과 프로세스 모니터링 기능을 제공하므로 몇몇 보안 제품에서 madCodeHook 라이브러리를 사용합니다.

아이러니하게도 DLL injection을 방지하기 위해 사용되는 ExprevDriver.sys 드라이버에 path redirection을 이용한 toctou 취약점이 존재하고, 해커는 이를 악용해 DLL injection을 할 수 있습니다.

  1. 실제 Protector64.dll이 존재하는 디렉터리를 가리키는 juction을 생성합니다.

    “mklink /J C:\users\<username>\Desktop\exprev C:\Program Files\Cisco\AMP\exprev”
  2. ExprevDriver.sys에 IOCTL을 넘겨줍니다.

    “C:\users\<username>\Desktop\exprev\Protector64.dll”

    IOCTL을 사용해 ExprevDriver.sys가 삽입할 DLL의 경로와 대상 프로세스를 지정할 수 있습니다. ExprevDriver.sys는 DLL을 삽입하기 전에 DLL의 전자서명을 검증하는 단계를 거치는데, IOCTL로 설정된 경로를 사용합니다. Protector64.dll의 경로를 1번에서 만들어 둔 juction으로 설정해줍니다.

  3. 디렉터리 juction을 삭제하고 가짜 Protector64.dll을 생성합니다.

    DLL의 전자서명 검증 이후 juction을 삭제하고 2번 단계에서 지정해준 경로에 Protector64.dll라는 이름의 악성 DLL을 생성합니다.