웹쉘 파일 추적 가이드

웹쉘 침해 사고 발생 시 웹쉘 파일을 찾을 때 참고할 수 있는 가이드입니다.

1. 콘솔에서 의심 파일을 확인할 수 있는 경우

탐지된 웹쉘 행위와 함께 수집된 웹쉘 의심 파일 목록은 웹쉘 행위가 발생한 시점에 다양한 조건들을 바탕으로 도출해낸 목록입니다.

웹쉘 행위가 발생한 시점에 접근 이력이 존재하는 파일, 파일 생성 시간, 파일 소유자 등 다양한 조건들을 비교하여 가중치를 계산하여 제공합니다.

의심 파일 목록 중 웹쉘 파일이 있을 가능성이 비교적 높기 때문에 우선적으로 확인한다면 빠른 대응이 가능할 수 있습니다.

security-17-191

2.콘솔에서 의심 파일을 확인할 수 없는 경우

고객님의 서버 환경 또는 상황에 따라 콘솔에서 의심 파일 목록을 확인할 수 없는 경우가 있습니다.

이 경우 웹쉘 행위가 탐지된 시간을 참고하여 WAS의 Access Log에서 웹쉘 의심 파일들을 추릴 수 있습니다.

Access Log에서 웹쉘 의심 파일 찾을 때 다음과 같은 조건들을 참고할 수 있습니다.

  • 웹쉘이 탐지된 시점에 접근한 파일들을 웹쉘로 의심해볼 수 있습니다.
  • 접근한 파일의 확장자가 WAS에서 실행 가능한 확장자이나 의도하지 않은 파일일 경우 웹쉘일 가능성이 존재합니다.
  • 업로드될 수 있는 경로에 존재하는 파일에 접근한 이력이 있다면 웹쉘로 의심해볼 수 있습니다.
  • 웹쉘이 실행한 명령어가 URL 쿼리스트링(Query String)에 남아있는 경우 웹쉘로 의심해볼 수 있습니다. 예시 : webshell.php?cmd=cat%20/etc/hosts

3.파일의 확장자가 서버에서 실행할 수 있는 확장자인가?

WAS에서 실행하도록 인식되는 확장자(.php, .jsp 등)일 경우 웹쉘일 가능성이 있습니다.

다만, 서비스에 따라 또는 해커에 의해 일반적으로 WAS에서 실행하지 않는 확장자일 경우에도 설정을 통해 실행되는 경우가 있습니다.
서버 설정을 잘 확인하여 WAS에서 실행하도록 인식되는 확장자를 파악 후 확인해야합니다.

".ppp" 확장자를 php로 인식하도록 설정한 예시

AddType application/x-httpd-php .php .ppp

4.서비스를 위해 개발한 파일인가?

파일 이름을 확인하여 서비스를 위해 개발한 정상 파일인지 확인이 필요합니다.
파일 이름, 생성한 일자 등 참고하여 고객님이 필요에 의해 생성한 정상 파일인지 확인합니다.

고객님이 생성한 파일이 아니라면 웹쉘일 가능성이 있습니다.
다만, 고객님이 생성한 파일이더라도 생성/수정 일자 또는 파일 내용을 확인했을 때 변조된 흔적이 발견된다면 웹쉘일 가능성이 있습니다.

5.파일 소유자

일반적으로 웹쉘은 웹 서비스의 취약점을 통해 업로드 또는 생성되는 경우가 많기 때문에 웹쉘 파일의 소유자는 웹 서비스 실행 권한과 동일한 경우가 많습니다.

예시) httpd 프로세스가 nobody로 실행되고 있는 경우 웹쉘 파일의 소유자는 nobody WAS 프로세스가 apache로 실행되고 있는 경우 웹쉘 파일의 소유자는 apache WAS 프로세스가 root로 실행되고 있는 경우 웹쉘 파일의 소유자는 root

파일의 소유자가 WAS 프로세스 실행 권한과 동일하다면, 웹 서비스에 의해 생성된 파일일 가능성이 있습니다.
이는 고객님이 직접 생성한 파일이 아니라는 가능성이 있기 때문에 웹쉘일 가능성이 있습니다.

6.파일 생성 일자

파일 생성 일자가 웹쉘 행위가 발생한 시기와 가깝다면 웹쉘일 가능성이 있지만 생성 일자가 오래전이더라도 웹쉘일 가능성이 없진 않기 때문에 아래와 같은 경우를 참고하여 확인하실 것을 권고드립니다.

  • 오래전부터 업로드되어 지속적으로 공격해왔으나 최근에 이를 탐지한 경우
  • 오래전 누군가가 업로드하였으나 새로운 공격자가 이를 발견/접근하여 공격에 사용하는 경우

7.파일이 서버 사이드 스크립트로 작성되었는가?

파일 내용이 서버 사이드 스크립트로 작성되었을 경우 웹쉘일 가능성이 존재하며 서버에서 구동중인 WAS에 의해 실행될 수 있는 언어일 경우 가능성이 높아집니다.

파일 내용을 확인할 때에는 의심 파일이 실행되지 않도록 파일 편집기를 통해 확인할 것을 권고드립니다.

해당 파일이 업로드 디렉터리 등 의도하지 않은 경로에 서버 사이드 스크립트로 작성된 파일이 존재할 경우 웹쉘일 가능성이 존재합니다.

8.파일 내용이 웹쉘에서 주로 사용하는 패턴인가?

일반적인 웹쉘의 경우 웹 서비스를 통해 공격자의 명령을 받아 시스템 명령어를 실행하도록 구성되어있습니다.
이 경우 시스템 명령어를 실행할 수 있는 함수들이 사용되기 때문에 해당 함수들이 존재할 경우 웹쉘일 가능성이 존재합니다.

시스템 명령어를 실행할 수 있는 함수 또는 코드 실행 및 난독화 시 사용되는 함수 예시
Runtime.getRuntime().exec()
shell_exec, passthru, system, exec, popen
eval, assert, call_user_func,base64_decode, gzinflate, gzuncompress, gzdecode, str_rot13, ...

다만, 공격자의 명령을 받지 않고 랜섬웨어 등 악의적인 행위를 하는 웹쉘일 경우 시스템 명령어를 실행할 수 있는 함수가 존재하지 않을 수 있습니다.

또한, 공격자는 웹쉘을 분석하기 힘들도록 파일 내용을 난독화하거나 통신을 암호화한 경우가 많이 있습니다. security-17-192

이러한 경우 직접 분석이 어려울 수 있기 때문에 전문가에게 의뢰하거나 위에서 소개한 다양한 방법들을 대응에 참고할 수 있습니다.

웹 서비스를 제공하기 위해 고객이 생성한 파일이 아닌것이 확실하며 웹 서비스에 불필요한 파일이고, 웹쉘로 의심되는 근거가 충분하다고 생각할 경우 웹쉘로 간주하고 대응할 수 있습니다.

※ 웹 서비스를 통해 웹쉘에 접근하여 웹쉘 여부를 확인하는 방법도 있으나, 공격자가 어떤 장치를 해뒀을지 모르기 때문에 권고드리지 않으며 주의가 필요합니다.

예시) 공격자가 아닌 사람이 접근할 경우 분석 및 추적이 어렵도록 웹쉘 파일 삭제 또는 서버 파일/DB 삭제

""에 대한 건이 검색되었습니다.

    ""에 대한 검색 결과가 없습니다.

    처리중...