NCP

[NCP] 행위 기반 실시간 웹쉘 탐지, WebShell Behavior Detector(WBD)

안녕하세요. ManVSCloud 김수현입니다.

오늘은 네이버 클라우드의 WebShell Behavior Detector 서비스에 대해 알아보는 포스팅입니다.


WebShell Behavior Detector(WBD)의 탄생

: WebShell Behavior Detector, 이름 그대로 웹쉘을 행동 기반으로 탐지하는 서비스입니다.
웹쉘에 대한 수단으로 나오게 되었죠.

※ Web Shell 이란?

• 서버 사이드 스크립트 코드 (PHP, JSP, ASP 등)
• 웹 사이트에서 Shell의 기능을 사용할 수 있게 하여 시스템을 악의적으로 컨트롤 할 수 있도록 제작된 코드

※ WBD의 주요 기능

• Agent 방식
• 행위 기반 실시간 탐지
• Only Linux
• Apache, Tomcat, Nginx 지원
• 가상화 플랫폼 환경 미지원
• 알림 기능
• Console에서 파일 격리 및 복구
• 웹쉘 의심 행위 정보 및 이력 관리
• 예외 규칙 설정

Agent 방식이라 서버 내에 Agent를 설치만하면 서버에서 더 이상 해줄 것이 없습니다.
또한 패턴 기반이 아닌 행위 기반 탐지라 난독화나 암호화 그리고 최신 패턴에도 강력하게 대응할 수 있습니다.

(해당 서비스는 kubernetes 및 Docker와 같은 가상 환경에서는 사용할 수 없습니다.)


How?

※ Agent 설치 & 탐지 대상 서버 추가

서버에서 아래 3개의 명령만 입력하시면 더 해줄 것이 없습니다. 매우 간단!

• wget https://wbd.ncloud.com:18088/agent/wbd_installer.sh -O wbd_installer.sh
• chmod a+x wbd_installer.sh
• ./wbd_installer.sh

이후 네이버 클라우드 콘솔에서 탐지할 서버만 선택해주면 됩니다.


Hands On Lab

WebShell Behavior Detector가 잘 작동할까?

한 번 테스트를 해봅시다. 먼저 DocumentRoot에 웹쉘 파일을 하나 생성하였습니다. (ws.php)

<?php

echo 'Enter a Command:<br>';
echo '<form action="">';
echo '<input type=text name="cmd">';
echo '<input type="submit">';
echo '</form>';

if(isset($_GET['cmd'])){
        system($_GET['cmd']);
}

?>

간단하게 폼을 만들고 system 명령어를 실행하는 함수가 포함된 소스입니다.

그리고 웹 브라우저에서 생성한 php 파일로 접속해봅시다.
ex) https://www.example.com/ws.php

cat 명령어를 이용하여 웹 사이트에서 /etc/passwd 파일을 출력하면 아래와 같이 출력되는 것을 알 수 있습니다.

WebShell Behavior Detector를 사용한다면 이런 상황에서 어떻게 사용할 수 있을까?

먼저 E-mail이나 문자로 웹쉘이 탐지되자마자 등록한 수신자에게 알림을 해줍니다.

웹쉘이 탐지됐습니다!! (E-mail로는 더 자세하게 안내됩니다.)

그럼 이제 콘솔에서 확인해봅시다.

어느 서버에서 웹쉘 파일을 이용하여 어떤 명령어가 사용됐는지 의심 파일과 의심 IP 등을 알려줍니다.

웹쉘, 웹에서 시스템 명령어를 실행할 수 있습니다.
그런데 개발자가 이를 의도적으로 사용하는 경우도 봤습니다.

그렇기때문에 [예외 처리]를 할 수 있는 예외 처리 기능도 있습니다.
그리고 [파일 격리/복구]도 할 수 있습니다.

어떤 용도로 사용되는지 제대로 확인되지 않고 무작정 파일을 격리하면 서비스 장애로 이어질 수 있습니다.

의심 파일은 말 그대로 의심이 되니 “이 파일이 정상적인 게 맞는지 확인해봐.”라고 알려주는 것입니다.

그리고 의심 IP의 경우에는 추가적으로 확인해야할 사항이 있는데 웹 서버 상단에 Load Balancer를 사용하고 있다면 IP가 LB의 IP인 사설 IP로 찍히게 됩니다.

의심 IP는 웹 로그를 보고 판단하는 것 같더라구요?
제가 테스트 해본 결과 사설 IP로 나오는 부분은 nginx나 apache, 즉 사용하는 웹 서버에서 X-Forwarded-For(XFF) 설정을 해주면 됩니다.

XXF 설정 후 웹쉘 탐지 테스트를 추가적으로 진행하였고 다시 의심 IP를 확인해보니 LB의 IP가 아닌 웹쉘을 실행한 공인 IP로 체크되는 것이 확인됐습니다.


Personal Comments

웹쉘 탐지 기능은 서버 호스팅을 하던 때에 KISA의 WHISTL을 많이 사용해봐서 웹쉘이 뭔지, 어떤 취약점을 통해서 웹쉘이 사용되는지 알고 있었기때문에 접근하기 쉬운 서비스였습니다.

크게 WebShell Behavior Detector에는 어떤 기능이 있나 정도만 살펴보면 됐던…
사실 돈 있으면 WebShell Behavior Detector 대신 IPS 쓰면 그만이긴 합니다.

전체적인 기능이나 서비스 면에서 직접 사용 해본 후기로는 좋은 상품이라고 생각합니다.
기능도 다양하고 알림도 상당히 빨랐습니다. 무엇보다 사용자가 편하게 사용할 수 있다는 점이 컸습니다.

긴 글 읽어주셔서 감사합니다.


Previous Post Next Post

You Might Also Like

No Comments

Leave a Reply