보안공부/snort 공부

4. [snort] 파일 업로드 공격에 대한 snort 규칙 예시

ssjune 2024. 11. 3. 23:38

 

자체 제작한 사이트에 대한 웹 공격을 스노트 규칙을 통해 탐지방법을 작성하였다.

 

1. 파일 업로드

 

게시글 등록 시 첨부파일을 통해 웹 쉘을 등록시켜봤다.

참고로 웹 쉘은

<?php
	echo system($_GET['cmd']);
?>

위와 같은 구조의 매우 단순한 프로그램이다.

 

 

그 후, 게시글 상세에서 첨부파일의 다운로드 경로를 확인한다.

(이건 내가 만든 사이트라 이렇게 경로를 찾았지만, 타 사이트는 이렇게도 볼 수 있고 첨부파일의 링크 주소를 통해 알 수도 있다.)

버프스위트를 통해 확인했을 때, 웹쉘이 동작하는 것을 확인할 수 있었다.

 

웹쉘을 업로드 했을 때 tcpdump로 패킷을 캡쳐하고 와이어샤크로 확인하면 다음과 같다.

 

파일명이 .php로 끝나는 것을 이용해 스노트 규칙을 만들면 되겠다고 생각했다.

alert tcp any any -> any 80 (msg:"Invalid File Detection [php]"; sid:1000201; rev:1; content:".php"; nocase;)

실제로 위와 같은 규칙을 작성하였다.

 

그러나 규칙을 확인해보면 패킷이 3번 탐지된다.

그래서 pcap 파일을 보며 생각해보니 웹쉘 파일 탐지뿐만 아니라 게시글 페이지를 요청할 때 php 파일, 업로드된 파일명을 청하면서 3번 캡쳐된 듯 싶었다.

 


 

이걸 좀 더 다듬고 싶어서 http_method로 POST 방식에 대해서만 탐지해볼까 했는데 역시 http_*가 되지 않았다.

그래서 좀 더 테스트 하다가 snort.conf 로 실행을 하면 http_method가 된다는 사실을 알아냈다.

아마 내가 snort 설정에 대한 지식이 아직 부족해서 놓친건가 싶었다.

 

snort.conf를 수정하기는 꺼려져서 my_snort.conf로 복사한 후 local.rules 만 include 하고 나머지 include *.rules 는 모두 지웠다.

 

alert tcp any any -> any 80 (msg:"Invalid File Detection2 [php]"; sid:1000202; rev:1; content:"POST"; http_method; content:".php"; nocase;)

위가 좀 더 수정한 규칙이다.

POST 방식에 대해서만 .php 파일을 가진 패킷을 탐지한다.

 

 

이번에도 2번 탐지되었는데, 웹쉘 올리는 패킷과 게시글 페이지로 넘어갈 때 POST 방식으로 php 파일을 요청하는데 그래서 탐지되었나 싶다.

반응형