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