
팩스 서비스와 DLL 하이재킹을 사용하는 바인드 셸
Fax 서비스와 Ualapi.dll 기반 DLL 하이재킹을 사용하는 개념 증명 바인드 셸입니다.
저희 분석 글은 다음에서 확인하세요: https://windows-internals.com/faxing-your-way-to-system/

Ualapi.dll을 빌드하여 c:\windows\system32에 배치합니다.Fax 서비스를 시작하면 DLL이 로드되고 UalStart 내보내기가 호출됩니다. UalStart는 스레드 풀 작업 항목을 큐에 넣고, 이 작업 항목은 RpcSs에 대한 핸들을 열고 SYSTEM 토큰을 찾아 가장한 후, 로컬 엔드포인트 주소에 소켓을 생성하고 포트 9299에 바인딩한 다음, 스레드 풀 I/O 완료 포트를 사용하여 비동기적으로 연결을 기다립니다.nc(at).exe <ip> 9299)를 사용하여 포트 9299의 소켓에 연결한 다음 let me in을 입력하고 ENTER를 누릅니다. 사용자 정의 코드를 작성하는 경우 문자열 let me in\n을 보내야 합니다.DcomLaunch 서비스 하에서 SYSTEM 권한으로 Cmd.exe 프로세스를 시작하고, 입력 및 출력 핸들을 새로 생성된 소켓에 바인딩합니다.SYSTEM으로 실행되며, 단 하나의 API 호출 후에 매우 빠르게 NETWORK SERVICE로 되돌아갑니다. 이는 다양한 스캐너에 적발될 가능성을 줄이는 데 도움이 됩니다.Fax 서비스가 아닌 DcomLaunch 서비스(이미 SYSTEM 서비스임) 하에서 생성하므로 훨씬 자연스러워 보이고 매우 의심스러운 프로세스 트리를 피할 수 있습니다.DcomLaunch 또는 Cmd.exe가 아닌 Fax 서비스에 속하는 것처럼 보이게 하는 Windows 버그를 활용합니다. Fax 서비스를 종료하면 소켓이 System에 속하는 것처럼 보입니다.이것은 바로 사용할 수 있는 탐지 불가능한 악성 무기화 셸이 아닙니다:
80 또는 443과 같은 일반적인 포트를 통해 통신하는 것이 더 효과적일 것입니다.Spooler도 Ualapi.dll을 로드합니다. Fax 서비스가 SERVICE_START_PENDING 상태에 "고착"되어도 시스템은 정상적으로 동작하지만, 이는 Spoolsv.exe에 문제를 일으킵니다.