Steel Train

← 뒤로가기

250528 웹쉘 악성코드 분석 1-2

파일명 : fixed_truckit.tar( FIXED_TRUCKIT, passwd.bak, phpp ), help.php, top_title.php

분석환경 : Ubuntu 18.04

분석도구 : Strace

 

대상A 피해서버에 fixed_truckit.tar 탐지하여 분석하였으며, 대상B 피해서버에 help.php, top_title.php 탐지 및 분석

1.  fixed_truckit.tar 분석

1-1. FIXED_TRUCKIT 동적 분석 테스트

- 명령어 실행 ( starce -f -o trace1.log ./FIXED_TRUCKIT )

- 자기 파일 경로를 읽는 시도 확인

# readlink(“/proc/self/exe”) -> “/root/Downloads/FIXED_TRUCKIT”

- 본 파일 열기 및 읽기 시도

# open(“/root/Downloads/FIXED_TRUCKIT”), pread64(...)

 

- 랜덤 데이터 생성 시도

# getrandom(...)

 

- 원격 접속 시도

# socket(AF_INET, SOCK_STREAM), connect(...) -> 154.44.31.242.:80 (연결시도)

 

1-2. phpp 동적 분석 테스트

- 명령어 실행 ( strace -f -o trace2.log ./phpp )

- 디렉토리 및 파일 생성 시도

# mkdir(“GCONV_PATH=. ”, 0777, mkdir(“.pkexec”, 0777, creat(“GCONV_PATH=./.pkexec”, 0777, open(“.pkexec/gconv-modules”, write(...) -> “module UTF-8// PKEXEC// pkexec 2” )

 

- 본 파일 복사 시도 및 실패 오류 확인

# symlink(“/root/Downloads/phpp”, “.pkexec/pkexec.so”, write(“Failed to copy file: file exists

 

1-3 대상A FIXED_TRUCKIT, phpp 파일 분석 결과

- FIXED_TRUCKIT : 백도어형 C2 통신을 준비하여 'xxx.xxx.xxx.xxx' IP 주소로 접속시도하였으며, 자기 복제 또는 통신 기반 제어 목적으로 보인다. 실제 명령 수신 및 쉘 획득 가능성이 존재

- phpp : 'CVE-2021-4034, aka "PwnKit"' pkexec 취약점에 해당되는 glibc의 GCONV 모듈 경로를 조작하여 루트 권한 상승을 시도하는 공격으로 판단

 

2.  help.php, top_title.php 분석

2-1. help.php 코드 분석

- 암호화 함수명 : encode()

 

- 패스워드 변수 : $_POST['aaa']

- 암호화 방식 : XOR ( 대칭키 : 47bce5c74f589f48 )

- 세션 저장 키 : $_SESSION['loadz83D']

- 복호화 키 : "47bce5c74f589f48"

- 실행 : @eval($payload) (암호 해제 후 실행)

 

2-2. top_title.php 코드 분석

- base64 디코딩 필요

 

2-3. 대상B help.php, top_title.php 파일 분석결과

- help.php : 코드는 악성 PHP 웹쉘로 판단된다. 공격자가 base64로 인코딩된 암호화 페이로드를 'POST['aaa']로 전달하면 내부에서 디코딩 후 eval()로 실행되며, 페이로드 내용이 getBasicsInfo를 포함하면 세션 변수에 저장되어 지속적인 명령 실행이 가능하다.

- top_title.php : 파일은 악성 PHP 웹쉘을 base64로 인코딩해 위장한 파일이다. 'help.php'와 동일한 코드 구조를 가지고 있으며, XOR + base64 + eval() 기법으로 명령을 원격 실행하며, 마찬가지로 공격자가 페이로드를 POST['aaa']로 전달하면, 해독후 서버에서 eval()로 실행된다.

 

2-4. Godzilla 테스트

( 깃허브 :  https://github.com/BeichenDream/Godzilla )

- 해당 .php 파일 구조는 중국산 웹셸 백도어 유포 및 관리 프로그램인 "Godzilla"와 매우 높은 유사성을 보이는 것으로 확인. 

- 파일구조 : PHP, JSP, ASPX, ASP 등 다양한 서버에 대응

- 암호화 기법 : XOR, AES, Base64, 세션 저장

- 연결 방식 : 클라이언트(패널)가 웹셸에 암호화된 페이로드를 전송하고 실행 결과를 수신

 

2-4-1. 페이로드 생성 및 업로드

- 사진과 같이 생성된 php파일을 관련 또는 URL상 경로에 두고 3번째 사진과 같이 설정하면 제어 가능.

 

대응 방법

1. 웹셸 업로드 차단

- 피해서버의 파일 업로드 정책을 강화한다.

- 확장자 검증 시 Content-Type 및 매직넘버 검사까지 수행

- 업로드 디렉토리는 반드시 웹 실행이 불가능한 경로로 지정

# <Directory "/var/www/upload"> php_admin_flag engine off </Directory>

 

2. 웹서버 보안 설정 강화

- disable_functions : eval, exec, system, passthru, shell_exec, base64_decode 등

- open_basedir : 웹 루트 외 경로 접근 제한

- expose_php : Off

- display_errors : Off ( 에러로 경로 노출 방지 )

# 보통 /etc/php/8.1/apache2/php.ini 에서 또는 CLI용 설정에서 적용

 

3. WAF 룰 추가

- POST 파라미터명 : pass, aaa, payload, cmd, key, getBasicsInfo

- 문자열 : base64_decode, eval(, GCONV_PATH, run(, $_POST, xor

- Content_Length가 200~800바이트인 POST + 반복적인 응답 패턴

 

4. 정작 탐지 - 웹셸 스캐닝 도구

- LMD ( Linux Malware Detect ) : 웹셸 탐지에 최적화된 스캐너

- YARA : Godzilla 웹셸 패턴에 맞는 룰 작성 가능

# rule godzilla_php_webshell

{

            strings:

                       $a = /eval\s*\(\s*base64_decode/

                       $b = "getBasicsInfo"

                       $c = "run("

                       $d = /preg_replace\(.*base\*64\*_deco\*de/

           condition:

                       all of ($a, $b, $c) or $d

}

 

5. 네트워크 차단 및 탐지

- POST 요청만으로 통신하기 때문에 -> 비정상 POST 트래픽 집중 감시

- WAF 또는 IDS에서 "지속적 POST 요청 + 일정한 Response 길이" 패턴 감지

 

6. 행위 기반 탐지 강화

- access.log : POST + 작인 Payload 반복, 응답 길이 고정

- error.log : eval/exec 관련 에러 흔적

- auth.log : Apache/PHP 권한 변경, 웹 서버 UID로 이상한 행동

 

7. 권한 상승 대응 ( CVE-2021-4034/PwnKit )

- gconv 기반의 루트 권한 상승 페이로드도 사용하는 경우가 있음. 그러므로 아래 방법으로 조치를 통해 취약점 패치

# sudo apt update + sudo apt upgrade policykit-1 

또는

sudo apt install policykit-1=0.105-26ubuntu1.1