‘Ghost Gateway’를 포착: GFSHELL 다형성 회피

발행: (2026년 1월 10일 오전 06:39 GMT+9)
5 분 소요
원문: Dev.to

Source: Dev.to

개요

1,000대가 넘는 서버가 운영되는 환경을 정기적으로 보안 감사하던 중, Companion Sentinel은 여러 주요 보안 업체들의 탐지를 피한 활성 GFSHELL (Gateway Framework Shell) 감염을 발견했습니다. 이 악성코드는 정교한 다형성 회피 기법을 사용해 세 가지 산업 표준 스캐너를 우회했습니다.

악성코드 구성 요소

감염은 두 개의 구별되는 PHP 파일로 이루어졌습니다:

  • 쉘 생성기check.php
  • 다형성 게이트웨이gateway.php

check.php – 탐지 스크립트

공격자는 먼저 “탐지(Probe)” 스크립트를 배포해 서버의 보안 구성을 식별했습니다. 스크립트는 다음과 같은 검사를 수행했습니다:

  1. php.inidisable_functions 지시자를 감사함.
  2. 고위험 실행 싱크(proc_open, shell_exec, system)의 가용성을 확인함.
  3. getallheaders()가 정상 동작하는지 테스트해 무음(out‑of‑band) 통신을 가능하게 함.

gateway.php – 다형성 백도어

환경 데이터를 수집한 뒤, 생성기는 맞춤형 15줄 백도어를 만들었습니다. 표준 GET/POST 파라미터에 의존하는 대신, authorization-bearer 라는 사용자 정의 HTTP 헤더를 청취했습니다. 실행은 In‑Call Comment Injection이라는 기법을 통해 이루어졌으며, 이는 휴리스틱 정규식 서명을 깨뜨리기 위해 설계되었습니다.

주석 블록(/**auth**//**array**/)은 많은 정적 스캐너가 찾는 문자열 shell_exec(을 중단시켜, 코드가 서명 기반 탐지를 우회하면서도 유효한 PHP로 유지됩니다.

회피 기법

전통적인 보안 도구는 종종 다음과 같은 패턴을 검색합니다:

shell_exec\s*\(

함수 이름과 여는 괄호 사이에 주석을 삽입함으로써 공격자는 문자열의 연속성을 깨뜨렸습니다. PHP 인터프리터에게는 주석이 무시되지만, 순진한 스캐너에게는 인식되지 못한 토큰처럼 보여 탐지를 회피합니다.

탐지 방법 – 재귀적 휴리스틱 스캐너

Companion Sentinel의 polymorphic_web 센서는 실행 함수와 여는 괄호 사이에 삽입된 주석 블록을 특별히 찾는 재귀적 휴리스틱 스캐너를 사용합니다.

작동 원리

  • 오탐이 전혀 없음 – 정상 코드가 함수 호출 내부에 주석을 삽입하는 경우는 드뭅니다.
  • 파일 이름이나 해시가 아니라 악성코드 DNA (회피 패턴 자체)를 목표로 함으로써 백도어를 즉시 식별합니다.

행동 피드 – 2차 확인

Companion Sentinel의 XDR 엔진은 여러 행동 지표를 연관시켰습니다:

지표설명
shell_history_wipe감사 로그를 지우기 위해 history -c 실행 시도를 탐지함.
crontab_persistence지속성을 위해 /etc/crontab에 무단 수정이 이루어진 것을 포착함.
react2shell_rce웹 런타임(Node.js/PHP)이 비정상적인 자식 프로세스(Bash)를 생성하려 시도함을 확인함.

이러한 신호들은 구문적 이상 현상 외에 침입을 뒷받침하는 증거를 제공했습니다.

결론

GFSHELL 사건은 현대 인프라가 단순한 경계 방어를 넘어 행동 및 구문 이상을 모두 탐지할 수 있는 고신뢰 감사가 필요함을 보여줍니다. Companion Sentinel은 알려진 파일을 차단하는 대신 회피 기법을 식별함으로써 위협을 중화했으며, 현재 시스템은 99 % 검증된 상태로 전 세계 생산 자산을 보호하고 있습니다.

Back to Blog

관련 글

더 보기 »

안녕, 뉴비 여기요.

안녕! 나는 다시 S.T.E.M. 분야로 돌아가고 있어. 에너지 시스템, 과학, 기술, 공학, 그리고 수학을 배우는 것을 즐겨. 내가 진행하고 있는 프로젝트 중 하나는...