웹페이지 변조와 웹서버 해킹의 주범인 웹쉘(webshell)의 사례와 분석 (ASP 웹쉘)

Posted by taeho Tae-Ho
2014.10.28 10:19 서버보안

해킹 공격 중에 DOS(혹은 DDOS) 다음으로 많이 발생하는(어쩌면 반대일 수도) 공격이 바로 웹쉘을 통한 웹서버 공격입니다. 해커들이 웹서버를 공격할 때 가장 즐겨 사용하는 공격도구이자 취약점이 바로 웹쉘입니다.


웹쉘은 Unix/Linux는 물론 Windows 서버까지 운영체제를 가리지 않고 존재합니다. 또한 JSP, ASP 등 웹서버에서 구동되는 언어 또한 가라지 않고 다양한 웹쉘이 존재합니다. 게다가 파일탐색기, 파일업로드, 파일의 생성/수정/삭제는 물론 서버 내의 명령어 실행까지 가능한 토탈패키지 형태의 웹쉘도 존재하고 기존의 운영중인 웹페이지의 소스에 한 두줄을 추가(변조)하여 해커가 원하는 한 가지 기능만 수행하도록 하는 탐지가 거의 불가능한 웹쉘도 존재합니다.


하지만 웹쉘의 공통적인 기능은 "웹서버 대몬 서비스를 통해 서버내에서 명령(명령어 혹은 파일수정 등)을 실행한다"는 것입니다.



윈도 서버에서 동작하는 웹쉘을 하나 선정하여 살펴보도록 하겠습니다.


아래 화면은 해커에 의해 업로드 된 웹쉘을 웹브라우저에서 호출한 화면입니다.



이 웹쉘은 SQL인젝션, 파일업로드, 리버스텔넷, 탐색기 기능을 갖춘 토탈패키지형 웹쉘입니다. 물론 꽤나 오래된 웹쉘이라 일부 기능은 테스트한 윈도2008 서버에서는 동작하지 않는 기능도 있습니다만... 해커가 필요로 하는 명령어 실행 기능은 매우 잘 동작합니다.



웹쉘을 통해 서버의 IP 및 네트워크 정보를 확인하기 위해 ipconfig 명령을 실행한 화면입니다. 

웹쉘을 통해 서버내의 명령을 실행하는 것은 앞의 포스트에서 여러차례 언급했 듯 서버보안SW인 RedCastle을 통해 완벽하게 차단할 수 있습니다.


 (관련 글 목록 보기)   /  웹쉘을 통한 웹페이지 변조 및 차단 방안 보러가기


이 웹쉘이 어떻게 동작하는지는 위반로그(차단로그)를 확인하면 알 수 있습니다.



웹쉘이 RedCastle의 정책에 의해 차단되면 "Execute violation" 위반이 발생합니다. 누군가가 cmd.exe를 실행한 것입니다.

아랫부분의 주체정보의 프로세스를 보면 "w3wp.exe"가 주체이고 객체정보의 프로세스는 "cmd.exe"인 것을 알 수 있습니다. 즉 w3wp.exe(IIS웹서버 대몬)가 cmd.exe를 실행한 것입니다. 아마도 이 웹쉘은 아래 화면처럼 cmd.exe에게 ipconfig.exe를 실행하도록 할 것입니다.



대부분의 웹쉘은 위 화면과 같이 cmd.exe 명령어 뒤에 /C와 같은 옵션을 주고 최종적으로 실행할 명령어를 포함하는 명령문을 만들어 웹서버(w3wp.exe)를 통해 실행합니다. 때문에 IIS 웹서버 대몬인 w3wp.exe가 cmd.exe를 읽거나 실행하지 못하도록 하면 웹서버에 업로드 된 웹쉘이 운영체제의 명령어를 실행하는 것을 완벽하게 차단할 수 있습니다.


이 웹쉘의 소스를 살펴보면 아래와 같이 cmd.exe에 실행할 명령을 조합하여 전달하는 것을 알 수 있습니다.


DIM prompt

prompt = Server.mappath(".")

Set CMD=Server.CreateObject("Wscript.Shell")

Set FP=Server.CreateObject("Scripting.FileSystemObject")


IF command <> "" Then

Tempfile=prompt & "\" & FP.GetTempName()

On Error Resume Next

Call CMD.Run ("cmd.exe /c " & command &" > " & Tempfile & " 2> " & Tempfile & "err", 0, True)


이 웹쉘에서는 CMD라는 wscript 객체를 만들고 run이라는 메소드를 이용해 실행할 명령을 전달하였지만 이외에도 웹서버 대몬을 통해 명령어를 실행하는 방법은 매우 다양하기 때문에 네트워크 수준에서 HTTP 프로토콜을 통해 웹브라우저와 웹서버간에 오가는 웹쉘의 트래픽을 분석하여 차단하는 것은 현실적으로 거의 불가능합니다.


그렇기 때문에 웹쉘을 효과적으로 차단하기 위해서는 서버내에서 웹서버 대몬이 운영체제의 영역에 접근하는 것을 차단하는 것이 가장 확실한 방법입니다.



신고
이 댓글을 비밀 댓글로
  1. 너무 전문적이라 머라 댓글을 남기기가 힘들군요. ^^
    어쨋거나 효과적인 차단 방법은 운영체제에 접근하지 못하게 하는게 중요하군요!
    • ㅎㅎ 그냥 패쑤~~하셔도 됩니다~~~
      근데..코딩하신다면 이정도는... ^^
  2. 해킹공격 중에 웹셀을 통한
    웹서버 공격이 많다는 사실을
    알게되었습니다.^^
    즐거운 목요일 보내세요!
    • 2016.08.18 17:48
    비밀댓글입니다
    • 1. 1번 질문에서 'w3wp.exe가 cmd.exe를 읽거나 실행하지 못하도록' 이 의미하는 바는 RedCastle SecureOS를 이용해 파일과 명령에 대한 접근통제를 수행해야 한다는 의미입니다. Windows에도 방화벽 뿐만 아니라 Unix의 File Permission 처럼 파일에 대해 접근 권한을 부여하는 보안기능이 지원됩니다. 하지만 Windows의 파일 접근권한으로는 완벽하게 통제하기가 현재로서는 불가능합니다. 우회적으로 Windows의 시스템 명령어 수행 시 "관리자 권한"이 필요한 것을 보셨겠죠. 해당 기능이 우회적으로 w3wp.exe가 cmd를 실행하여 시스템 설정을 건드리지 못하도록 하는 것입니다만. 일단 서버가 해킹되어 뚫리면 해커들은 운영체제 취약점을 이용해 관리자 권한을 얻기 때문에 큰 효과는 없다고 보여집니다.

      2. Windows는 운영체제의 근본적인 권한 분리 미흡으로 인해 서버에 생성되는 관리자 계정은 대부분 Administrators 그룹에 소속시키는 것이 일반적입니다. 그럼에도 불구하고 계정을 식별하여 특정 관리자 계정에서만 cmd.exe를 실행할 수 있도록 통제할 수는 있습니다. Windows의 파일에 대한 접근 통제 권한 설정 기능을 이용하면 됩니다. 하지만 서버가 한두대가 아닌 경우가 많고 특수 권한에 대한 접근통제 권한을 주기적으로 검토하여야 하기 때문에 개별 서버의 보안기능을 이용해 해당 통제를 수행하는 것은 현실적으로 어렵습니다.
    • 2016.08.19 10:15
    비밀댓글입니다