웹셀(webshell)을 찾아보자.
조아라는 계속해서 악성코드 삽입 되있고 매일 들리는 그누보드 커뮤니티에는 일주일에 몇번씩 iframe을 이용한 악성코드 삽입 관련 문의글이 올라오네요.
하지만 정작 검색엔진에서 웹페이지 변조에 대해 검색을 해봐도 제대로 된 해결법이 안나와서 실제로 해결했던 방법을 포스팅해봅니다.

리눅스 사용자를 기준으로
SQL 인젝션과 XSS공격은 당해보지도 않았고 잘 알지도 못하니 이쪽은 제외합니다.


웹페이지를 변조하는 방법은 보통 두가지입니다.
직접 FTP로 들어와서 수정하는 방법과 웹셀로 수정하는 방법.
FTP로 직접 수정하는건 대처법이 많이 나와 있습니다만 요즘은 웹셀로 인한 피해가 늘어나는 것 같습니다.

일반적인 알려진 웹페이지 변조 방법의 원인은
FTP에 접속하는 PC에 심어진 스파이웨어로 FTP접속 정보를 빼가서 직접 FTP에 접속한 뒤 수정을 하는 수법입니다.
이방법은 백신으로 자주 검사를 하고 FTP접속 패스워드를 바꾸면 해결 할 수 있었습니다.

하지만 요즘은 그렇게 호락호락 하지 않습니다.
한번 뚤리면 그뒤로 지속적으로 공격을 하기 위해서 웹셀 프로그램을 올려둡니다.
그런데 올려놔도 참 교묘하게 올려두기 때문에 찾기가 쉽지 않습니다.
default.php, main.php처럼 딱 봐선 원래있던 파일인지 새로 올라온 파일인지 알아보기가 힘들거든요.

FTP만이 아니라 게시판의 취약점으로 웹셀을 올리기도 합니다.
첨부파일을 올릴 수 있는 게시판이나 회원아이콘을 올리는 기능을 이용해서 말이죠.
보통 첨부파일이 이미지파일이나 EXE, MP3등만 올릴 수 있고 PHP,HTML, ASP, JS 파일들은 막아놓지만 구버전의 게시판일 경우 확장자만 바꿔도 웹셀이 올라가기도 합니다.


그럼 이제 웹셀파일을 찾아볼까요.

# find /home/계정명/ -name *.php | xargs grep ‘패턴’
패턴 - system, exec, passthru, escapeshellcmd, pcntl_exec, shell_exec

ssh상에서 find 명령어로 웹셀에서 자주 사용하는 패턴을 검색해봅니다.

phpMyAdmin 폴더내에서 검색 되는건 거의 무시하셔도 됩니다.
하지만 첨부파일이 저장되는 디렉토리 내에서 수상한 파일이 검색 됬다? 100%입니다.

find명령어를 사용 할 수 없는 웹호스팅 사용자는 호스팅업체에 해당 명령어로 검색 해달라고 요청하시면 됩니다.


아니면 사이트를 통째로 tar로 압축 후 다운 받아서 내컴퓨터상에서 확인을 해봅니다.
울트라에디트의 [Find In Files], 아크로에디트의 [파일에서 찾기] 기능으로 특정 폴더내의 파일들 중 특정 단어를 검색하는 기능으로 패턴을 검색해봅니다.


웹셀을 찾으셨나요?
아래는 제가 발견한 웹셀프로그램입니다.
phpspy라는 중국산 프로그램이네요.



ftp에 접속을 안해도 브라우저상에서 파일의 수정, 삭제, 다운로드, 업로드, 권한수정등 ftp의 기본적인 기능을 전부 사용 할 수 있습니다.
여기에서 끝나면 다행인데.
자신의 계정만이 아닌 상위 디렉토리, 다른 계정도 조작이 가능합니다. 서버 설정파일까지도 말이죠.
(서버 설정에 따라 상위 디렉토리는 접근 안되기도 합니다)
자신의 계정에는 웹셀이 전혀 없는데 해킹을 당한다면 다른 계정의 웹셀로 자신의 계정이 해킹 당할 가능성도 있다는겁니다.


그런데 과연 웹셀 파일을 하나만 올려놨을까요?
또 다른 곳에 장난을 치지는 않았을까요?

확인을 해봅시다.

# cat /usr/local/apache/logs/access_log | grep main.php
cat명령어로 엑세스로그에서 웹셀파일에 접근한 기록을 찾습니다.

58.180.70.177 - - [26/Aug/2009:02:14:01 +0900] "POST /data/file/main.php HTTP/1.1" 200 80376
해킹한 녀석의 아이피가 나왔네요.(근데 대부분 사설 아이피라서 신고해도 거의 못찾음ㅠㅠ)

# cat /usr/local/apache/logs/access_log | grep 58.180.70.177
다시 한번 cat명령어로 녀석이 어떤 파일에 접근했는지 확인해봅시다.

58.180.70.177 - - [26/Aug/2009:02:14:01 +0900] "POST /data/file/main.php HTTP/1.1" 200 80376
58.180.70.177 - - [26/Aug/2009:14:18:36 +0900] "POST /castle/log/default.php HTTP/1.1" 200 24320
58.180.70.177 - - [26/Aug/2009:02:13:01 +0900] "POST /data/file/gif.jpg.jpg.php.uxame

줄줄이 다 나옵니다.

좀 더 확실하게 찾으시려면 한국인터넷진흥원에서 배포중인 WHISTL을 신청해서 확인해봅니다.
평일 기준으로 신청서 보낸 바로 다음날에 메일로 프로그램이 오더군요.
http://toolbox.krcert.or.kr/MMVF/MMVFView_V.aspx?MENU_CODE=6&PAGE_NUMBER=15

변조 된 파일을 다 복구하고 웹셀도 다 찾았으면 이제 다시 재발 하지 않게 조치를 합니다.



일반적으로 알려진 대처법인 백신으로 PC검사. 어도비 리더, 플래시 업데이트는 기본으로 해줘야겠죠?
FTP는 SFTP로만 접속합시다. 그리고 FTP에 비밀번호 저장은 하면 안됩니다.

서버 설정이 가능하신분은 21번 포트의 해외접속 차단 및 21,22번 포트를 자신의 컴퓨터에서만 접속이 가능하게 하시면 타인이 FTP에 접속 하는걸 방지 할 수 있습니다.
아에 포트번호를 바꾸면 더 안전하겠죠.

게시판을 최신으로 패치. 대부분의 게시판의 최신버전은 파일 업로드 시 이미지 파일이 맞는지 체크를 합니다.

파일이 업로드 폴더에서는 PHP,HTML파일이 실행되지 않게 하기
http://www.phpschool.com/gnuboard4/bbs/board.php?bo_table=qna_install&wr_id=94239
httpd 설정에서 특정폴더에서는 웹셀이 올라와도 실행이 안되게 합시다.


그 외에도 한국인터넷진흥원에서 배포하는 캐슬을 설치하고 주기적인 FTP비번 변경 및 영문, 숫자, 특수문자 조합으로 비번을 만듭시다.

서버호스팅은 커널 업데이트, 웹방화벽, clamav 같은 바이러스 프로그램 설치등 할게 많습니다.


대충 이정도면 어느정도 해결은 될겁니다.
이걸로도 해결이 안된다면 그땐 서버보안업체에 의뢰하는 정도 밖에 없겠네요.





<Directory /디렉토리>
  ..
  ..
  php_admin_flag engine off
</Directory>

<DirectoryMatch "^/.*/data/">
    AddType application/x-httpd-php3-source .phps .php .ph .php3 .cgi .sh .pl .html .htm .shtml .vbs .ins
    AddType application/x-httpd-php-source .phps .php .ph .php3 .cgi .sh .pl .html .htm .shtml .vbs .ins
    <Files ~ ".*.ph$">
      Order allow,deny
      Deny from all
    </Files>
</DirectoryMatch>