‘Ghost Gateway’를 포착: GFSHELL 다형성 회피
Source: Dev.to
개요
1,000대가 넘는 서버가 운영되는 환경을 정기적으로 보안 감사하던 중, Companion Sentinel은 여러 주요 보안 업체들의 탐지를 피한 활성 GFSHELL (Gateway Framework Shell) 감염을 발견했습니다. 이 악성코드는 정교한 다형성 회피 기법을 사용해 세 가지 산업 표준 스캐너를 우회했습니다.
악성코드 구성 요소
감염은 두 개의 구별되는 PHP 파일로 이루어졌습니다:
- 쉘 생성기 –
check.php - 다형성 게이트웨이 –
gateway.php
check.php – 탐지 스크립트
공격자는 먼저 “탐지(Probe)” 스크립트를 배포해 서버의 보안 구성을 식별했습니다. 스크립트는 다음과 같은 검사를 수행했습니다:
php.ini의disable_functions지시자를 감사함.- 고위험 실행 싱크(
proc_open,shell_exec,system)의 가용성을 확인함. 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 % 검증된 상태로 전 세계 생산 자산을 보호하고 있습니다.