웹(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. 평소에 없던 코드가 생겼을 경우 반드시 해당 파일을 검사하시길 바랍니다.
다운로드
guest
26 Comments
Inline Feedbacks
View all comments
Word
Word

좋은 프로그램이네요.

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

Matthew
Matthew

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

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

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

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

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

Matthew
Matthew
Reply to  오길호

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

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

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

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

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

Matthew
Matthew
Reply to  오길호

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

Matthew
Matthew
Reply to  오길호

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

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

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

맞나요?

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

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

Success!!!! ㅎㅎㅎㅎ

작동 잘 됩니다.

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

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

Word
Word
Reply to  Matthew

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

Matthew
Matthew
Reply to  Word

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

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

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

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

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

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

Word
Word
Reply to  Matthew

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

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

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

diana ak
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

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

skypass
skypass

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

김민수
김민수
Reply to  오길호

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

sh y
sh y

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

sh y
sh y
Reply to  오길호

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

sh y
sh y
Reply to  오길호

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

sh y
sh y
Reply to  오길호

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

sh y
sh y
Reply to  오길호

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