SOC Prime Bias: 중간

24 3월 2026 15:48

Phishing Clues Hidden in the /tmp Folder

Author Photo
Ruslan Mikhalov SOC Prime에서 위협 연구 책임자 linkedin icon 팔로우
Phishing Clues Hidden in the /tmp Folder
shield icon

Detection stack

  • AIDR
  • Alert
  • ETL
  • Query

요약

한 macOS 사용자가 가짜 “macOS 보호 서비스” 메시지에 속아 비밀번호를 입력했고, 이로 인해 MacSync 정보 탈취자가 배포되었습니다. 이 맬웨어는 Chrome 및 Safari 쿠키, Apple 키체인 기록, 암호화폐 지갑 데이터 및 기타 로컬 파일을 수집하여 /tmp/salmonela/아래 단계에 배치했습니다. 탈취된 정보는 아카이브로 압축되어 숨겨진 명령 제어 도메인으로 curl을 통해 유출되었고 아카이브는 제거되었습니다. Huntress는 침입을 감지하고 엔드포인트를 격리하여 데이터 탈취 시도를 중지했습니다.

조사

Huntress SOC는 네이티브 curl 바이너리가 ZIP 아카이브를 업로드하는 것과 관련된 의심스러운 활동을 감지했습니다. 분석가들은 공격이 LOOBins에 의존하고 있으며 페이로드를 MacSync 정보 탈취자에 속한 것으로 확인했습니다. 호스트를 네트워크에서 분리하고 임시 배치 폴더를 삭제함으로써 격리가 이루어졌습니다. 엔드포인트가 격리된 후 추가적인 수평 확산의 징후는 발견되지 않았습니다.

완화

권장되는 방어 대책에는 사용자가 가짜 시스템 대화 상자를 식별하도록 교육하고, 불필요한 로컬 관리자 권한을 줄이고, macOS에 관리되는 EDR을 배포하고, 타협 이후 자격 증명을 회전하는 것이 포함됩니다. 허가되지 않은 외부 연결을 제한하고 curl을 통한 대규모 업로드를 감시하면 추가적인 노출을 줄일 수 있습니다. 키체인 액세스 정책의 정기적인 감사 및 강화는 또 다른 보호 계층을 추가합니다.

대응

이 활동이 감지되면 즉시 엔드포인트를 격리하고 악성 프로세스를 중지시키며 /tmp/salmonela/ 디렉토리를 제거하십시오. 남아 있는 아티팩트를 식별하기 위해 포렌식 검토를 수행하고, 노출된 자격 증명을 재설정하며, 활성 세션을 무효화하십시오. 유사한 LOOBin 남용을 잡기 위해 탐지 콘텐츠를 업데이트하고, 비정상적인 도메인으로의 외부 POST 트래픽을 모니터링하십시오.

"graph TB %% Class definitions classDef action fill:#99ccff classDef tool fill:#cccccc classDef file fill:#aaffaa classDef operator fill:#ff9900 %% Action nodes action_user_execution["<b>Action</b> – <b>T1204 User Execution</b><br/>Victim is tricked by a fake macOS Protection Service dialog and enters device password."] class action_user_execution action action_input_capture["<b>Action</b> – <b>T1056.002 Input Capture: GUI Input Capture</b><br/>Malicious prompt captures the entered password."] class action_input_capture action action_cred_dump["<b>Action</b> – <b>T1555.001 Credentials from Password Stores: Keychain</b><br/>Malware uses the captured password to dump stored credentials from the macOS Keychain."] class action_cred_dump action action_browser_discovery["<b>Action</b> – <b>T1217 Browser Information Discovery</b><br/>Stealer collects Chrome and Safari cookies, saved logins and other browser data."] class action_browser_discovery action action_archive["<b>Action</b> – <b>T1560.001 Archive Collected Data: Archive via Utility</b><br/>Collected files are compressed into a zip archive in /tmp/salmonela/."] class action_archive action action_obfuscate["<b>Action</b> – <b>T1027.015 Obfuscated Files or Information: Compression</b><br/>The archive is used to hide the collected data."] class action_obfuscate action action_exfil["<b>Action</b> – <b>T1071.001 Application Layer Protocol: Web Protocols</b><br/>The zip archive is posted to a remote C2 server via curl over HTTP/HTTPS."] class action_exfil action action_cleanup["<b>Action</b> – <b>T1070.004 Indicator Removal: File Deletion</b><br/>After exfiltration the malware deletes the archive to cover its tracks."] class action_cleanup action %% Tool node tool_curl["<b>Tool</b> – <b>Name</b>: curl<br/><b>Description</b>: commandu2011line utility used to transfer data over HTTP/HTTPS."] class tool_curl tool %% File node file_archive["<b>File</b> – <b>Path</b>: /tmp/salmonela/archive.zip<br/><b>Type</b>: ZIP archive containing harvested data."] class file_archive file %% Flow connections action_user_execution –>|leads to| action_input_capture action_input_capture –>|captures password for| action_cred_dump action_cred_dump –>|enables access to| action_browser_discovery action_browser_discovery –>|provides data to| action_archive action_archive –>|creates| file_archive action_obfuscate –>|applies to| file_archive action_exfil –>|exfiltrates| file_archive action_exfil –>|uses| tool_curl action_cleanup –>|deletes| file_archive "

공격 흐름

시뮬레이션 환경 및 컨텍스트

  • 테스트 중인 TTPs:

    • T1056.002: 입력 캡처 – 웹 폼
    • T1204.004: 사용자 실행 – 악성 파일
    • T1548.004: 권한 상승 메커니즘 – 사용자 접근 제어 우회
    • T1555.002: 웹 브라우저에서의 자격 증명 – 비밀번호 추출
    • T1556.004: 인증 프로세스 수정 – 도메인 신뢰 수정
  • TTP 컨텍스트 및 관련성:

    • T1056.002 – 정보탈취자는 웹 폼에 입력된 자격 증명을 수확하고 이를 임시 폴더에 저장합니다.
    • T1204.004 – 악성 바이너리는 사용자가 실행합니다 (보통 위장된 설치 프로그램을 통해).
    • T1548.004 – 위협은 macOS 샌드박스 매커니즘을 우회하기 위해 권한 상승 단계를 시도할 수 있습니다.
    • T1555.002 – 추출된 브라우저 비밀번호는 /tmp/salmonela/.
    • T1556.004 – 고급 캠페인에서 공격자는 데이터 유출 전에 로컬 신뢰 설정을 수정할 수 있으나, 이 규칙은 데이터 배치 활동에 중점을 둡니다.
  • 대상 환경:

    • OS: macOS (Catalina 10.15 또는 이후)
    • 로깅: Auditd + FSEvents (파일 이벤트 수집)은 Sigma 규칙을 소비하는 SIEM에 전달됨.
    • 보안 스택: 일반 Sigma 호환 SIEM (예: Elastic Stack, Splunk, Microsoft Sentinel).

텔레메트리 및 기준선 사전 점검

이유: 공격을 시뮬레이션하기 전에 대상 호스트가 필요한 로그를 생성하도록 구성되어 있으며, 이러한 로그가 SIEM에 수집되고 탐지 규칙이 정상적인 활동에서 트리거되지 않는지 확인해야 합니다. 이러한 검증 없이는 테스트 결과가 신뢰할 수 없습니다.

  • 1. 텔레메트리 구성 지침:

    1. macOS auditd를 명령 줄 로깅용으로 활성화

      sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.auditd.plist
      sudo audit -s 1                # 감사 활성화
      sudo audit -f /etc/security/audit_control
      # "flags:fc,ex" (파일 생성 및 실행)이 존재하는지 확인한 후 auditd 재시작
      sudo launchctl unload -w /System/Library/LaunchDaemons/com.apple.auditd.plist
      sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.auditd.plist
    2. FSEvents를 활성화하고 SIEM에 전달 (macOS에 이미 설치됨) – Elastic Filebeat 모듈을 macOS에 설치하거나 fschange 입력을 사용하여 Splunk Universal Forwarder를 설치하십시오. 경로: /tmp/ 가 포함된

    3. 수집 유효성 검사 – SIEM에서 /tmp/ 를 포함하는 이벤트를 5분 내로 조회하여 파이프라인이 실행 중인지 확인하십시오.

  • 2. 수집 및 기준선 검증:

    • 행동 (무해한 텔레메트리): /tmp 아래에 임시 폴더를 생성하고 으로 압축 하고, tarnot 정확한 트리거 문구를 포함하지 않음

      # 유사한 텔레메트리를 생성하기 위한 무해한 명령
      mkdir -p /tmp/salmonela_benign
      echo "benign data" > /tmp/salmonela_benign/sample.txt
      tar -czf /tmp/salmonela_benign.tar.gz -C /tmp salmonela_benign
    • 검증 쿼리 (수집): (Elastic에 대한 KQL 예시)

      filebeat-* 
      | where file.path contains "/tmp/salmonela_benign"
      | where process.command_line contains "tar"

      쿼리는 무해한 이벤트를 반환해야 하며, 로그가 SIEM에 도달하고 있으며 not 탐지 규칙과 일치하지 않음을 확인합니다 (“salmonela/의 내용을 압축했습니다” 문자열 없음).


시뮬레이션 실행

전제 조건: 텔레메트리 및 기준선 사전 점검이 통과해야 합니다.

이유: 이 섹션은 탐지 규칙을 트리거하기 위해 설계된 적의 기술(TTP)의 정확한 실행을 자세히 설명합니다. 명령과 설명은 식별된 TTP와 직접 일치해야 하며 탐지 논리에서 예상되는 정확한 텔레메트리를 생성하는 것을 목표로 합니다. 추상적이거나 관련 없는 예는 잘못된 진단으로 이어질 수 있습니다.

  • 공격 내러티브 및 명령:

    1. 초기 침입 (T1204.004): 공격자는 정당한 설치 프로그램으로 위장한 악성 macOS 바이너리를 전달합니다. 사용자가 이를 실행하여 바이너리 프로세스가 으로 압축.
    2. 에 쓰기 권한을 부여합니다. 바이너리는 사용자 웹 브라우저에 키로거를 주입하여 로그인 폼을 캡처하고, 탈취한 자격 증명을 /tmp/salmonela/creds.txt.
    3. 에 기록합니다. 바이너리는 sudo 를 미리 구성된 정책과 함께 호출하여 압축 단계를 실행할 때 추가 권한을 요청하지 않습니다.
    4. 데이터 배치 및 압축: 공격자는 bash 명령을 실행하여 사용자 정의 메시지를 기록하고 and 단계 폴더를 압축합니다. 명령 줄에 정확한 문자열 "salmonela/의 내용을 압축했습니다"가 포함되어 Sigma 조건을 충족합니다.
     sudo bash -c "echo 'Zipped the contents of salmonela/' && zip -r /tmp/salmonela_archive.zip /tmp/salmonela/"
  • 회귀 테스트 스크립트: (위의 작업을 재현하는 자체 포함된 Bash 스크립트)

    #!/usr/bin/env bash
    set -euo pipefail
    
    # 1. 준비 단계 디렉토리
    STAGE_DIR="/tmp/salmonela"
    mkdir -p "$STAGE_DIR"
    
    # 2. 자격 증명 덤프 시뮬레이션
    echo "user:example@example.com" > "$STAGE_DIR/creds.txt"
    echo "pass:SuperSecret123!" >> "$STAGE_DIR/creds.txt"
    
    # 3. 명령 줄에 정확한 트리거 문구로 압축
    sudo bash -c "echo 'Zipped the contents of salmonela/' && zip -r /tmp/salmonela_archive.zip $STAGE_DIR/"
    
    echo "시뮬레이션 완료 – 알림이 발송되어야 합니다."
  • 정리 명령: (아티팩트를 제거하고 시스템을 복원합니다.)

    #!/usr/bin/env bash
    set -euo pipefail
    
    rm -rf /tmp/salmonela
    rm -f /tmp/salmonela_archive.zip
    echo "정리 완료."