웹(PHP) 해킹, 위험코드 점검 프로그램

웹(PHP) 해킹, 위험코드 점검 프로그램

서버 해킹을 통해 악성 PHP 가 설치되었는지 모니터링 및 위험성이 있는 코드가 있는지 손쉽게 확인하기 위해 만들었습니다.

  1. 해당 코드를 서버계정에 작성하여 올립니다.
    <?
    /**
    * Name: Kilho's PHP Diagnosis
    * Author: Kilho Oh (prince@kilho.net)
    * Author URI: http://kilho.net/
    */
    class TDiagnosis
    {
    public $dir;public function __construct()
    {
    $this->dir = $_SERVER['DOCUMENT_ROOT'].'/';
    }private function SeekFile($dir, &$files)
    {
    $hnd = opendir($dir);
    while (false !== ($entry = readdir($hnd)))
    {
    if(in_array($entry, array('.', '..'))) continue;if(is_dir($dir.$entry) && !in_array($entry, array('.', '..')))
    {
    $this->SeekFile($dir.$entry.'/', $files);
    }else{
    if(!in_array(substr($entry, strrpos($entry, '.')+1), array('php', 'inc', 'html', 'htm', 'php3'))) continue;$file = $dir.$entry;
    if(!in_array($file, $files)) $files[] = $file;
    }
    }
    closedir($hnd);
    }private function Diagnosis($files)
    {
    $suspicion = array();
    $loop = 0;
    do {
    $file = $files[$loop];
    $loop++;if($file == $_SERVER['SCRIPT_FILENAME']) continue;$data = file_get_contents($file);
    $data = preg_replace('//*(.*?)*//is', '', $data);
    $data = preg_replace('///*(.*)n/', '', $data);if(preg_match('/(^|s|?php3|[?])(eval|system|exec)s*(/i', $data))
    $suspicion[] = $file;
    } while ($loop < count($files));return $suspicion;
    }public function Run()
    {
    $files = array();
    $this->SeekFile($_SERVER['DOCUMENT_ROOT'].'/', $files);
    return $this->Diagnosis($files);
    }
    }/**
    * Main
    */
    $diagnosis = new TDiagnosis;$result['host'] = $_SERVER['HTTP_HOST'];
    $result['suspicion'] = $diagnosis->run();
    
    
    echo json_encode($result);
    ?>
    
  2. 아래 다운로드 버튼을 클릭하셔서 모니터링 프로그램을 다운받습니다.
  3. 다운받은 프로그램을 실행시킨 후 URL(s) 에 (1)에서 작성한 URL 을 입력합니다.
  4. Diagnose 를 클릭하시면 아래와 같이 의심되는 파일명을 알려줍니다.
  5. 평소에 없던 코드가 생겼을 경우 반드시 해당 파일을 검사하시길 바랍니다.
다운로드

Comments (26)

  • Word

    좋은 프로그램이네요.

    저는 최근 랜섬웨어 사건을 보면서 백업을 자주하고 있습니다. 그리고 조금 무거운 보안 플러그인도 하나 설치해놓았는데 얼마나 효과가 있을지 모르겠습니다.

    2017년 7월 13일 at 1:16 오후
  • Matthew

    며칠전에 이 프로그램 보고 이거 워드프레스 플러그인화 (option 없는 그냥 설치만 하면 작동되는 간단한 플러그인 형태) 로 만들면 참 좋겠다는 생각을 했습니다.

    지금 조선일보 IT 잡지 (정확한 이름이 지금 생각나지 않네요) 에서 워드프레스글을 하나 써달라고 해서 그 글도 쓰고 있는데, 플러그인화 해주시면 플러그인으로 소개해도 좋을 것 같구요. ㅎㅎㅎ

    이번에 6주동안 개발자분들을 상대로 워드프레스 튜토리얼을 진행했었는데, front-end 를 잘하는 젊은 친구가 하나 있어서 그 친구하고 Kilho 님 하고 스타트업 하나 하시면 MVP 는 어렵지 않게 하나 뽑을 수 있겠다는 생각이 들었었습니다. MVP 나오면 펀딩은 제가 받고 (물론 저한테도 지분 나눠 주시고) ㅋㅋㅋㅋㅋ

    제가 생각하는 MVP 는 Kilho 님의 utility 들을 하나로 packaging 해서 …….

    아,… 제 아이디어는, 혹시 관심있으시면 이메일로 드리겠습니다. ㅎㅎㅎ

    2017년 7월 12일 at 11:25 오후
    • 오길호

      댓글 보고 뚝딱 해보았습니다 ^^
      http://kilho.net/archives/wordpress/1670

      아. 그리고, 아이디어가 궁금하네요 ^^ 조만간 여쭤보겠습니다 😉

      2017년 7월 13일 at 6:46 오전
      • Matthew

        localhost 와 실서버 두군데서 테스트 해봤는데, 소스파일을 보면 이 프로그램이 실행되면 kh_scan.dat 라는 파일이 생성되어야 하고, 아마 그 파일의 data 를 윈도우 프로그램으로 보내지는 형태 같은데….

        저는 kh_scan.dat 라는 파일이 생성되지 않고 있습니다.

        플러그인 과 그냥 php 파일 둘다 테스트 해보았습니다.

        제 localhost 와 실서버 모두 Nginx 입니다. 오류나는게 이거랑 상관이 있는건지는, 제가 back-end 쪽이 아니라서 잘 모르겠습니다. ^^;;

        아, 다운로드 페이지 jQuery 스크립트 오류나고 있습니다. ㅎㅎ

        2017년 7월 13일 at 7:32 오전
        • 오길호

          감사합니다 ^^ jQuery 오류부분은 수정하였습니다.
          그리고 kh_scan.dat 생성을 plugins/kh-scan 폴더에 저장하려고 했는데 권한문제로 실패되었던거였네요. (테스트 서버가 윈도우라서 생성이 되었던거였네요 ㅠㅠ)
          생성파일은 /wp-content/uploads/kh-scan 에 위치하도록 했습니다.

          새로 다운받아보시면 됩니다 ^^

          2017년 7월 13일 at 8:21 오전
      • Matthew

        아, 혹시 Nginx 때문이 아니라 제가 사용하는 php 버전이 7.14 라서 그런건 아닌지… 100% 근거없는 추측일 뿐 입니다.

        2017년 7월 13일 at 7:59 오전
      • Matthew

        앗? 본문에서 설명하신 내용과 실제 코드 작동과 차이가 있네요?

        다시 소스파일을 보니 플러그인은 관리자 이메일로 스캔 결과를 보내게 되어있는 것 같습니다.

        wp_mail(get_bloginfo('admin_email'), $title, $content);

        맞나요?

        그리고 이메일 지금 확인해 보니….

        Kilho 님 플러그인이 이메일을 제대로 발송한 것 같습니다.

        Success!!!! ㅎㅎㅎㅎ

        작동 잘 됩니다.

        Kilho 님 플러그인 소개글도 하나 쓰고, 조선일보 IT 잡지 글에도 이 플러그인을 언급하겠습니다.

        좋은 플러그인 개발해 주시고 공유해 주셔서 감사합니다. ^^

        2017년 7월 13일 at 8:09 오전
        • 오길호

          네 ^^ 해당 플러그인은 윈도우 어플리케이션을 사용하지 않고, 발견시 관리자 메일로 정보를 알려줍니다.

          2017년 7월 13일 at 8:24 오전
        • 오길호

          워드프레스 자체의 cron 기능을 이용하고 최종 정리해서 올렸습니다 ^^

          http://kilho.net/archives/wordpress/1670

          2017년 7월 13일 at 8:12 오후
    • Word

      혹시 IT조선의 마이크로소프트웨어 아닌가요?

      2017년 7월 13일 at 1:12 오후
      • Matthew

        네. 지금 확인해보니 맞습니다.

        그런데 생전 처음 들어보는데라… IT조선 이란데가… ㅎㅎㅎㅎ

        무슨 잡지회사인지도 잘 모르겠고….

        몇명 보지도 않는 잡지 같아서 글쓰기가 싫고 있습니다.

        반쯤 써놓긴 했는데…. ㅋㅋㅋ

        블로그 글쓰는건 좋은데, 이런 글은 참 쓰기가 싫으네요.

        2017년 7월 13일 at 1:41 오후
        • Word

          우리나라의 거의 모든 잡지가 구독자 수가 얼마 안 되는 것으로 알고 있습니다.

          우리나라 사람들이 책 자체를 잘 안 봅니다.ㅎㅎ

          요즘도 그런지 모르겠는데 예전에는 일본 전철 안에서 일본인들이 책 읽는 것을 뉴스에서 다루고 그랬거든요. 그만큼 우리나라 사람들이 책을 안 읽는데 인터넷이 발달하면서 책을 더 안 읽는다는…

          2017년 7월 13일 at 3:12 오후
  • diana ak

    Warning: preg_replace(): Unknown modifier ‘*’ in /html/php.php on line 33

    Warning: preg_replace(): Unknown modifier ‘/’ in /html/php.php on line 34

    Warning: preg_match(): Compilation failed: nothing to repeat at offset 5 in /html/php.php on line 34

    오류가나는데요..확인부탁드립니다.

    2017년 7월 12일 at 10:17 오전
  • skypass

    제가 컴퓨터 초보라서 1번에 코드를 서버계정에 올리라는 걸 어떻게 하는지 잘 모르겠습니다.

    2017년 5월 17일 at 11:20 오후
    • 오길호

      메모장이나 기타 에디터에 해당 내용을 복사, 붙여넣기 하신 후 파일로 저장하시면 됩니다.

      2017년 5월 20일 at 3:50 오후
      • 김민수

        1번에.. 코드가 어떤건지..ㅠㅠㅠㅠ 저도 잘 모르겠어서..ㅠㅠ 부탁드릴게요..ㅠ 메일로라도 가능하시다면.. alstn0228@naver.com 죄송해요 ㅠ

        2017년 5월 26일 at 7:31 오전
        • 오길호

          제가 메일을 보냈는지 모르겠네요 ^^; 나야나 랜섬웨어로 서버 복구 과정에서 댓글을 확인을 제대로 못했군요.

          2017년 7월 12일 at 1:11 오후
  • sh y

    다운받고 압축푸니
    v3에서 Malware/Gen.Generic.C1094687
    감지했다고 삭제합니다.

    2017년 3월 26일 at 10:50 오전
    • 오길호

      v3 가 오진하고 있네요. 워낙 오진이 심한 백신이라 ㅎㅎ 첨부파일에 델파이 소스도 포함했듯이 문제가 될만한 부분이 없습니다. 감사합니다 ^^

      2017년 3월 26일 at 1:11 오후
      • sh y

        아…v3가 오진이심한가요??
        그럼 뭘로바꿔야할까요?

        2017년 3월 26일 at 9:03 오후
        • 오길호

          윈도우10에 기본으로 내장된 Windows Defender 만 사용하셔도 충분합니다. ^^

          2017년 3월 27일 at 8:31 오전
          • sh y

            아직 윈도우10업글을 안했습니다
            윈도우7이 쓰기편해서요
            그리고 다른게 궁금한게있는데요
            K클리너로 강제종료시키는 프로그램 임의로 지정할 수는 없는거죠?
            앱체크라는 랜섬웨이프로그램을 사용하고 있는데
            그것도 같이 종료되서요

            2017년 3월 28일 at 11:54 오전
          • 오길호

            noclean.txt 에 앱체크 파일명을 입력하시면 종료하지 않습니다.
            그리고 윈도우7에도 디펜더가 설치되어 있습니다. ^^

            2017년 3월 28일 at 1:10 오후
          • sh y

            종료는 되지 않는데요
            앱체크에서 실시간 보호 는 꺼지네요
            이건어쩔수없는거죠?

            2017년 3월 30일 at 11:53 오전
          • 오길호

            실시간 보호에 관련된 프로그램도 종료된 것으로 예상됩니다.
            종료된 프로세서중 관련된게 없는지 확인 한번 부탁드리겠습니다 ^^

            2017년 3월 31일 at 12:30 오후
          • sh y

            아하~~해결했습니다 감사합니다~~~~

            2017년 4월 2일 at 3:03 오후

답글 남기기

이메일 주소는 공개되지 않습니다. (* 질문, 건의사항 등은 "질문게시판"을 이용해주세요)