본문 바로가기

서버보안

웹쉘(webshell)의 위험성과 서버보안S/W(RedCastle SecurOS)를 이용한 차단 방법

관련 포스트 : 웹서버 소스파일 위변조 차단을 위한 SecureOS 적용

웹쉘(web-shell)은 서버를 해킹하는 가장 훌륭한 도구 중에 하나다. 웹서버에 웹쉘을 업로드 하고 웹브라우저를 통해 웹쉘을 호출할 수 있다면 해커는 그 서버를 마음대로 조종할 수 있는 권한을 90%쯤 갖게 된다고 볼 수 있다.

많은 서버관리자와 보안관리자들이 웹쉘이 업로드된 서버를 발견하게 된다면... 눈 앞이 캄캄해질 것이다. 웹쉘이 발견되었는데도 눈앞이 캄캄해지지 않는 관리자라면 둘중하나다. 확실한 웹쉘 실행 차단 대책이 이미 적용되어 있는 훌륭한 관리자이거나 웹쉘이 뭔지도 모르는 초보 관리자 둘 중 하나다. 둘다 아니라면..?? 거기까진 말하고 싶지 않다.

먼저 웹쉘의 동작 과정을 시연 화면을 통해 살펴본다.

이 화면은 웹서버에 업로드된 "초 간단" 웹쉘이다. PHP로 작성된 10줄 남짓의 이 웹쉘은 비록 화면은 인터넷에 떠도는 많은 웹쉘에 비해 단순하지만 그 어떤 IPS나 웹 방화벽에 적발되지 않고 실행가능한 "강력한" 웹쉘일 것이다.


웹쉘이 하는 일은 아주 간단하다. 위의 화면과 같이 입력창을 통해 명령어를 입력받아 웹서버를 통해 실행하고 그 결과의 출력화면을 브라우저에 표시해주는 것이다.

웹쉘이 실행할 수 있는 것은 무척 많다. 그래서 웹쉘이 실행할 수 없는 것을 이야기하는 것이 더 빠를 것이다. 웹쉘이 실행하지 못하는 것은 "웹서버가 실행중인 계정이 실행 권한을 갖고 있지 않은 실행파일 및 스크립트"이다. 그 이외에는 모두 실행이 가능하다.

위의 화면에서와 같이 "cat /etc/hosts" 명령을 입력하고 실행하면 다음과 같이 그 결과가 브라우저에 표시된다.


웹쉘은 단순히 명령어 만을 실행하고 그 결과를 보여주는 것만 가능할까?

아니다. 웹쉘의 활용은 거의 무궁무진하다. telnet으로 서버에 들어간 것과 같이 스크립트를 만들고 실행시키는 것도 가능하다. 다만 웹서버가 구동중인 계정의 권한만을 갖기 때문에 파일을 만들고 실행하기 위해서는 웹서버가 실행중인 계정이 쓰기,실행(w,x)을 갖고 있는 디렉토리를 찾아야 한다. 

하지만 해커들이 누군가? 아무도 알려주지 않아도 해커들은 /tmp와 /var/tmp가 trwxrwxrwx 퍼미션으로 되어 있다는 것을 알고 있다.

다음과 같이 /tmp 디렉토리에 hack.sh 스크립트를 만든다. 첫번째 줄이다.


 다음은 두번째 줄이다.


두줄이 들어간 hack.sh 스크립트의 내용을 확인해보자.


ps와 netstat 두줄이 들어간 hack.sh 스크립트가 생성되어 있다. 서버의 umask 설정에 따라 실행퍼미션이 없을 수 있는데 chmod +x 명령으로 실행퍼미션을 부여해주면 된다. 보안 때문에 반드시 설정해야한다는 umask 설정이 무용지물이 되는 이유다.

이 hack.sh를 실행하면 스크립트에 포함된 두개의 명령이 차례대로 실행된다.


/tmp/hack.sh 스크립트가 실행된 것을 확인할 수 있다.
 
웹쉘은 실행파일은 물론 쉘스크립트, 그리고 Perl 스크립트도 실행이 가능하다. 인터넷을 조금만 검색하면 icmp, udp, tcp의 보안 취약성을 이용한 DOS, DDOS 공력용 Perl스크립트를 비롯한 다양한 공격 도구들을 쉽게 구할 수 있다.
또한 자동 ftp 스크립를 만들어 웹쉘로 작성한 뒤 실행하면 외부의 서버로 ftp 접속을 하여 파일을 다운로드 받는 것도 가능하다.

웹쉘로 못할 것이 없는 것이다.

그렇다면 웹쉘을 차단하는 근본적인 방법은 없는 것일까?? IPS와 웹방화벽은 현실적으로 웹쉘을 효과적으로 차단하지는 못한다. 현실적인 여러가지 이유와 오탐의 위험때문에 패킷스니핑방식의 보안솔루션으로는 웹쉘을 차단하는 것은 불가능하다.

하지만 서버보안S/W인 RedCastle을 이용하여 아주 간단한 두개의 정책만 추가해주면 웹쉘의 실행을 완벽하게 차단할 수 있다.

RedCastle이 제공하는 파일접근통제정책에 다음과 같은 정책을 추가해주면 된다.

1. 운영체제의 모든 명령어들을 웹서버 (httpd 및 java 등)을 통해 실행하지 못하도록 한다.
2. /tmp 및 /var/tmp 디렉토리에서 웹서버가 스크립트 및 실행파일을 실행하지 못하도록 한다.
3. 웹서버의 업로드 경로에서 아무도 실행권한을 사용하지 못하도록 한다.

RedCastle SecureOS를 통한 정책의 추가는 아주~~쉽고 그 효과는 100% 확실하다.


  • 질문좀요.. 2010.03.28 13:17 신고 댓글주소 수정/삭제 댓글쓰기

    레드캐슬 저건 어디서 구할수있나요?

  • 저 웹쉘 소스 좀 알 수 있을까요 ㅠㅠ

    mizzzzzz@naver,com 으로 보내주시면 진짜 감사하겠습니다 ㅜㅠㅜ

  • proxyolism 2010.08.16 00:21 신고 댓글주소 수정/삭제 댓글쓰기

    퍼갈께요 ^^ 웹해킹공부하고있는데 자료 찾고있었습니다 ㅎㅎ 도움많이됬어요.

  • colroni 2010.08.24 19:10 신고 댓글주소 수정/삭제 댓글쓰기

    웹쉘을 막을려고 하는데 어떻게 설정을 해야하고 웹쉘파일을 찾는 방법도 알려주시면 감사하겠습니다.
    급합니다. colroni@naver.com

    • 주인장 2010.08.25 07:30 신고 댓글주소 수정/삭제

      서버보안 S/W가 없는 상태에서 웹쉘의 실행을 차단하는 것은 현실적으로 불가능합니다. IPS나 웹방화벽에서 알려진 웹쉘의 패턴을 인식하여 차단하는 것은 가능할지 모르지만 작정하고 덤비는 해커들이 알려진 웹쉘을 그저 사용만 할 가능성은 별로 없습니다.
      서버보안 S/W 없이 웹쉘을 막기 위해서는 "웹쉘의 업로드"를 차단하는 것이 가장 좋은 방법입니다. 어느 경로에 웹쉘이 생성되는 지를 확인하시고 웹 소스를 분석하여 어떤 취약성을 이용하여 웹쉘을 업로드 하는지를 빨리 찾아내는 것이 좋습니다. 찾아내셨다면 그 취약성을 제거하도록 웹 소스를 수정하셔야 합니다.

  • colroni 2010.08.25 10:37 신고 댓글주소 수정/삭제 댓글쓰기

    발단은 특정페이지 맨 끝단에 자바스크립트가 삽입이 되어있었습니다.
    그래서 ftp log를 살펴보아도 딱히 어떤 파일을 업로드한 흔적이 없습니다.
    어떻게 이런일이 가능한지..이게 자바스크립트 해킹인가요?
    막을 수 있는 방법이 없을까요?

    • 주인장 2010.08.25 21:23 신고 댓글주소 수정/삭제

      FTP 이외에도 여러가지 방법으로 홈페이지를 변조할 수 있습니다. 그리고 웹 소스와 플래시, 어도비 모듈 등을 사용하는 웹사이트에 존재하는 모든 취약성을 제거하는 것도 결코 만만한 작업은 아닙니다. 개발자가 취약성을 한개도 없이 웹사이트를 만드는 것은 거의 불가능한 현실이니까요.
      SQL인젝션, PHP인젝션 취약성 제거 그리고 웹서버의 설정, 계정 비밀번호 변경 등 원론적인 대책밖에는 없는 것이 현실입니다.
      SecureOS를 도입하지 않는다면 개발자와 관리자의 노력에 의존해 해커와 싸우는 방법 밖에는 없습니다.

  • 제 서버에서 돌려보니 웹쉘이 업로드는 되고
    클릭을 하니깐 다운로드를 하라고 뜨는데 이런경우는 공격이안되는건가요?

  • Antares 2012.12.31 12:28 신고 댓글주소 수정/삭제 댓글쓰기

    어떻게 올리셨는지..서버는 어떤 서버인지 자세한 정보를 모르니 정확한 답변은 어렵지만..
    웹쉘 파일의 확장자를 뭘로하셨는지..그리고 "클릭"을 어떤 환경에서 하신건지에 따라 가능할 수도 불가능할 수도 있습니다.