PHP eval(gzinflate(base64_decode(..))) hack - 이 문제가 다시 발생하지 않도록 방지하는 방법은 무엇입니까?

PHP eval(gzinflate(base64_decode(..))) hack - 이 문제가 다시 발생하지 않도록 방지하는 방법은 무엇입니까?

최근 웹사이트가 해킹당했는데, index.php 파일에 다음과 같은 일부 PHP 코드가 삽입되었습니다.

eval (gzinflate(base64_decode('s127ezsS/...bA236UA1')));

코드로 인해 다른 PHP 파일(cnfg.php)이 포함되어 일부 의약품 관련 스팸이 표시되었습니다(단, googlebot 등에게만 표시됨). 우리가 해당 소프트웨어를 실행하고 있지 않다는 점을 제외하면 이는 워드프레스의 제약 해킹처럼 보입니다. 해당 코드는 삭제되었으나 앞으로는 이런 일이 발생하지 않도록 하고자 합니다.

나는 이것이 매우 광범위한 문제이고 책임이 있을 수 있는 무수히 많은 보안 허점이 있을 수 있다는 것을 알고 있지만 과거에 그러한 문제를 경험한 사람이 있을 경우를 대비하여 이것을 게시하겠다고 생각했습니다.

이러한 PHP 파일을 업로드할 수 있는 잠재적인 보안 허점은 무엇입니까? 그리고 앞으로 이런 일이 발생하지 않도록 하려면 어떻게 해야 할까요?

건배

답변1

그게 어떻게 거기까지 왔는지 알아내야 해.

  • 공격자가 sftp/scp를 통해 파일 시스템에 접근할 수 있었습니까?
    • 이런 일이 발생하면 원격 액세스 방법을 잠가야 합니다.
  • 공격자가 일부 업로더 스크립트를 사용했습니까? 아니면 파일 수정을 허용하는 기존 스크립트의 일부 버그를 사용했습니까?
    • 스크립트를 수정하고 웹 서버 프로세스가 이를 변경할 수 없도록 스크립트 및 웹 콘텐츠에 대한 권한을 변경합니다. 웹 서버는 어딘가의 데이터 디렉토리에 있는 파일을 수정하는 것으로 제한되어야 합니다. 일반적으로 스크립트와 파일은 웹 서버에서 소유하거나 쓸 수 없어야 합니다.
  • 스크립트가 귀하가 설치한 일부 악성 소프트웨어의 일부로 제공되었습니까?
    • 나는 WordPress 템플릿의 일부로 포함된 것과 같은 것을 보았습니다. 의심하지 않는 사용자가 임의의 사이트에서 템플릿을 다운로드했습니다. 이러한 템플릿에는 외부 웹 서버에서 코드를 실행하는 기능이 포함되어 있습니다. 이는 잘못된 권한 설정과 결합되어 공격자가 다른 사항을 수정할 수 있게 했습니다.

답변2

단지 경고일 뿐입니다.

FileZilla를 FTP 클라이언트로 사용하는 경우 Filezilla 일반 텍스트 파일에서 FTP 자격 증명을 가져오고 해당 정보를 사용하여 해당 악성 코드(#b58b6f# 유형의 코드로 표시됨)를 삽입하는 악성 코드가 있습니다. "gzinflate(base64_decode)" 명령을 사용하면 파일이 공격/손상될 수 있습니다.

%APPDATA%/Roaming/Filezilla 폴더를 확인하세요. 거기에 있는 XML 파일 중 하나에는 일반 텍스트로 된 모든 FTP 웹 사이트 자격 증명(사용자/비밀번호/등)이 있습니다! 그리고 FileZilla 사람들은 이러한 명백한 보안 허점을 고치는 것을 거부합니다.

내 권장 사항: 컴퓨터에서 FileZilla를 삭제하세요(그리고 APPDATA 폴더의 폴더를 수동으로 삭제해야 합니다).

보안 FTP 클라이언트가 필요한 경우 마스터 비밀번호를 설정할 수 있고 모든 사이트 자격 증명이 암호화되는 WinSCP(www .winscp .net )를 사용하십시오.

경고만 할게요....릭...J

답변3

이것이 어떻게 침입할 수 있는지에 대한 가능성은 무궁무진합니다. 이를 제한하는 데 도움이 되는 정보 중 하나는 귀하가 보유한 호스팅 유형(공유, 전용, 가상)과 호스트가 누구인지입니다. 일부 잠재적 진입점은 다음과 같습니다.

  • 관리자 계정 침해
  • 타협당신의ftp/ssh/web console/etc 계정을 공급자와 연결하세요. 암호화되지 않은 프로토콜(예: FTP)을 통해 비밀번호를 보내는 경우 해당 작업을 중지하세요.
  • 타협당신의자체 로컬 개발 머신
  • Apache 또는 해당 모듈과 같은 서버의 모든 서버 소프트웨어에 대한 취약점입니다.
  • 귀하의 사이트에 있는 PHP의 애플리케이션 수준 취약성:

    • 타사 소프트웨어를 사용하고 있습니까? 그렇다면 모두 최신 상태입니까?
    • 사이트에 상당한 양의 프로그래밍을 작성했습니까? 그렇다면 구멍을 뚫을 수 있는 방법은 수백만 가지가 있습니다. 사용자 입력(REQUEST/GET/POST/COOKIES/FILES)에서 발생한 데이터를 다루는 모든 메소드를 확인하세요. 파일 업로드를 허용하는 경우 해당 파일을 필터링하지 않고 웹에서 볼 수 있는 디렉터리에 저장합니까? 그렇다면 누군가가 .php 스크립트를 업로드한 다음 보기만 하면 됩니다. include/require 문은 다음과 같은 템플릿 솔루션을 사용하는 경우 특히 인기 있는 대상입니다.

    <?php include $_GET['page'] . '.php'; ?>

재발을 방지하는 방법은 무엇입니까?

  • 호스트의 보안을 절대적으로 신뢰하는지 확인하십시오. 그들에게 전화를 걸어 보안 정책, 취약점이 드러났을 때 서비스를 얼마나 빨리 패치하는지 등을 살펴보세요.
  • 저렴한 공유 호스팅을 건너뛰고 전용 또는 가상 전용 호스팅에 비용을 지불하세요. 서버를 사용하는 사람이 적다는 것은 공격할 벡터가 적다는 것을 의미합니다.
  • 자신의 타사 애플리케이션/라이브러리를 최신 상태로 유지하십시오. 메일링 리스트, RSS 피드 또는 모든 항목에 올라 릴리스에 대한 최신 정보를 얻으세요.
  • 자신의 코드를 감사하십시오. 이에 대한 경험이 충분하지 않다면 이에 대한 대가를 지불할 수 있는 사람을 찾으십시오.
  • git 또는 Subversion과 같은 버전 제어를 통해 사이트를 유지하세요. 프로덕션 디렉터리를 작업 복사본으로 유지하여 코드 베이스의 변경 사항을 쉽게 감지할 수 있습니다(그러나 .git 및 .svn 디렉터리와 같은 메타데이터에 대한 액세스는 차단해야 합니다).

답변4

시도해 볼 수도 있습니다.http://www.hardened-php.net/suhosin/무엇보다도 eval()을 비활성화했을 수 있습니다. cnfg.php가 원격으로 호스팅된 경우 cnfg.php도 포함되지 않을 수 있습니다.

가능하다면 웹 서버가 실행 중인 사용자에게 PHP 파일에 대한 쓰기 액세스 권한을 부여하지 마십시오.

관련 정보