시나리오
Snort를 이용한 SSH 접근 검출
시나리오 개요
Snort를 이용해서 관리자 외에 SSH Server에 접근하려는 패킷을 검출해보도록 하자.
시나리오 사용 툴
- FreeSSHd
- Putty
- Snort
시나리오 망 구성도
IP 구성도
- IDS_CentOS : 192.168.10.30
- WIN_XP_SSH : 192.168.10.20
- BackTrack : 192.168.20.20
- Administrator : 172.168.10.10
- SW1 : 172.168.10.1
- SW2 : 192.168.20.1
- SW3 : 192.168.10.1
- Serial : 10.10.10.0 대역대 사용
시나리오 순서 설명
-
WIN_XP_SSH를 SSH를 이용하여 관리하려는 관리자가 존재한다. 이 관리자는 IDS를 설치 한 후 자신외에 접근하려는 자가 있는지 지속적인 검출을 해보려 한다. 먼저 WIN_XP를 SSH Server로 구성을 해보자. 본인은 FreeSSHD를 사용하여 WIN_XP를 SSH Sever로 구성을 하였다.
- 관리자는 SSH 패킷을 유발 시킨 후 어떤 방식으로 Rule를 설정할지를 결정해야 한다. 정상적인 관리자에서의 접속으로 SSH 패킷을 유발 시킨 후 어떤 식으로 Rule을 구성해야 할지 결정해보자.
일반적으로 SSH는 암호화된 프로토콜 방식을 제공한다. 이때 평문으로 전송되는 패킷은 오로지 SSH Version을 결정하는 패킷이다. 위 처럼 TCP Stream으로 SSH 접속 시도를 보면 SSH-2.0의 버전으로 하자는 Server와 Client간의 패킷을 볼 수 있다. 그러면 우리는 이 부분에서 SSH Version에 상관없이 SSH 접근만을 검출하기 위해서 SSH라는 문자열을 이용하여 Rule을 정하면 될 것이다.
- Snort를 이용하여 Rule을 작성
-
본인은 alert tcp 192.168.10.20(SSH_Sever) -> !172.168.10.10(관리자) any (msg:"SSH Detect"; content:"|535348|"; sid:10000011;)로 작성하였다. 즉 SSH Server가 관리자가 아닌 누군가에게 보내려는 패킷중에 SSH라는 문자열을 가진 패킷이 발생하면 검출하겠다는 것이다. 여기서 Version을 결정할때의 SSH는 항상 대문자로 전달되기 때문에 nocase 옵션을 제외 시켰다.
-
결과 확인
위처럼 정상적으로 다른 누군가 (BackTrack)가 접속하는 것을 볼 수 있다. 본인이 설정한 msg인 SSH Detect가 뜨는 것을 볼 수 있는 것이다. Wireshark로 패킷을 분석해보도록 하자.
-
Wireshark로 패킷 덤프 분석
정상적으로 Server에서 Client에게 보내는 패킷 중 SSH Version을 결정하는 패킷을 검출 한 것을 볼 수 있다.
====================================================================================================
시나리오
Snort를 이용한 SSH & Telnet & FTP Brute Force 공격 탐지
시나리오 개요
Snort의 Rule을 이용하여 SSH & Telnet & FTP로의 Brute Force 공격을 탐지해보도록 하자.
시나리오 사용 툴
- Snort
- FreeSSHD, Telnet서버 , Filezila 서버
- Hydra 7.2
시나리오 망 구성도
IP 구성도
- IDS_CentOS : 192.168.10.30
- WIN_XP_SSH : 192.168.10.20
- BackTrack : 192.168.20.20
- Administrator : 172.168.10.10
- SW1 : 172.168.10.1
- SW2 : 192.168.20.1
- SW3 : 192.168.10.1
- Serial : 10.10.10.0 대역대 사용
서브 시나리오 No.1
Snort를 이용한 SSH Brute Force 탐지
시나리오 순서 설명
-
SSH 관리자는 WIN_XP에서 FreeSSHD를 이용하여 SSH Server를 설치하여서 운용하고 있다. 이때 공격자인 BackTrack은 BruteForce 공격을 수행하는데 관리자는 이처럼 BruteForce 공격을 탐지하기 위해 Snort에 Rule을 추가 한다.
-
Snort Rule 형식
관리자는 Snort Rule에 alert tcp 192.168.10.20 22 -> !172.168.10.10 any (msg:"SSH Brute Detect"; content:"|535348|"; threshold:type both, track by_src, count 10, seconds 20; sid:10000012;) 와 같이 추가를 하였다. 즉 SSH 서버에서 22번 포트를 이용하여 관리자 PC가 아닌 PC에 SSH라는 문자열이 20초당 10번 발생하면 경고를 띄운다는 뜻이 된다. 즉 단 시간내에 여러번의 결과를 대입하는 Brute Force 공격을 탐지하기 위함이다. 여기서 threshold의 type은 여러가지 있지만 both는 둘다 라는 뜻이고 track by_src는 소스에서 즉 보내는 쪽에서의, 패킷이라는 뜻이 된다. 그리고 count는 10번 seconds는 20초가 된다. 즉 20초 동안 10번의 카운트를 하겠다는 것이다.
-
결과 확인
위처럼 alert가 출력 되는 것을 볼 수 있다. 2개 밖에 안뜨는 이유는 20초당 10번째 발생하는 패킷만을 잡기 때문이다. Wireshark로 분석해보도록 하자.
-
Wireshark로 패킷 덤프 분석
이처럼 SSH에 접속할 때 뜨는 SSH Version을 정하는 패킷을 볼 수 있다. 이 패킷들은 20초동안 10번째 발생한 패킷이기 때문에 각각 0초와 19초에 발생한 것을 볼 수 있다. 사실 정상적인 사용자가 비밀번호를 모른다 하더라도 20초내에 아이디와 비밀번호를 10번 입력하는 것은 불가능한 일이기 때문에 Brute Force 공격이라는 것을 알 수 있다.
서브 시나리오 No.2
Snort를 이용한 Telnet Brute Force 탐지
시나리오 순서 설명
-
Telnet 관리자는 WIN_XP에 Telnet 서버를 설치 한 후 운용하러 한다. 이때 관리자는 동일한 망에 Snort를 설치 후 Telnet Brute Force 공격을 탐지하려 한다. Snort에 알맞은 Rule을 설정해보도록 하자.
-
Snort Rule 형식
관리자는 alert tcp 192.168.10.20 23 -> !172.168.10.10 any (msg:"Telnet Brute Detect"; content:"Microsoft"; nocase; threshold:type both, track by_src, count 10, seconds 20; sid:10000013;)로 설정하였다. 즉 서버에서 23번 포트로 관리자가 아닌 PC로 데이터를 보낼때 이때 Telnet 접속 시에 나타나는 문자열인 Microsoft가 20초에 10번동안 발생하게 되면 경고를 나타내도록 하였다.
-
결과 확인
위처럼 20초당 Microsoft가 10번 발생하게 되면 경고를 울리게 하였다. 현재 공격자는 Hydra를 이용하여 지속적인 BruteForce공격을 수행하는 중이다. 그러면 정확한 분석을 위해 Wireshark로 분석해보도록 하자.
-
Wireshark로 패킷 덤프 분석
위처럼 처음 Telnet에 접속할때 뜨는 문자열을 볼 수 있다. Telnet은 3번이상 로그인에 실패하면 접근을 해제시키는데 Brute Force 공격은 이처럼 접근을 해제하고 다시 접근하는 과정을 반복하기 때문에 Brute Force 공격인지 알 수 있는 것이다.
서브 시나리오 No.3
Snort를 이용한 FTP Brute Force 탐지
시나리오 순서 설명
-
FTP 관리자는 WIN_XP에 FTP Server를 설치 운용하러 한다. 이때 관리자는 FTP Brute Force 공격을 탐지하기 위해 Snort을 운용하는데 이에 알맞은 Rule을 추가해보도록 하자.
-
Snort Rule 형식
alert tcp 192.168.10.20 21 -> !172.168.10.10 any (msg:"FTP Brute Detect"; content:"530 Login or password incorrect"; threshold:type both, track by_src, count 10, seconds 20; sid:10000014;) 이처럼 설정하였다. 즉 Telnet Server에서 관리자 PC가 아닌 다른 PC에게 21번 포트로 FTP에서 로그인에 실패하였을 때 출력하는 530 Login or password incorrect 문자열을 20초동안 10번 보내면 결과를 출력하도록 했다.
-
결과 확인
위처럼 결과를 확인할 수 있다. 즉 현 상태에서 공격자는 Hydra를 이용하여 지속적인 FTP Brute Force공격을 수행하는데 이때 로그인 실패 하였을때 뜨는 문자열을 검출하도록 Rule을 설정하여 20초동안 10번째 입력되는 패킷을 검출하도록 한 것이다. 정확한 분석을 위해 Wireshark로 패킷을 분석해보도록 하자.
-
Wireshark로 패킷 덤프 분석
이처럼 로그인에 실패하였을때 보내는 패킷이 20초동안 10개 넘게 발생하여 검출이 되는 것을 볼 수 있다. 위에 설명하였듯이 정상적인 사용자라면 20초 동안 10번의 아이디와 비밀번호 입력은 불가능하지만 Brute Force 공격은 빠른 대입을 수행하기 때문에 검출이 가능 한 것이다.
===================================================================================
시나리오 No.2
Snort를 이용한 Admin 페이지 접근 탐지
시나리오 개념
Snort를 이용하여 admin 페이지에 접근하려는 시도를 탐지해보자.
시나리오 사용 툴
- BackTrack에서의 Apache
- Snort
시나리오 망 구성도
- IDS_CentOS : 192.168.10.30
- BackTrack_Webserver : 192.168.10.20
-
WIN_XP_Att : 192.168.20.20
즉, 이번에는 BackTrack이 피해자의 WebServer가 되어서 WIN_XP의 공격자가 관리페이지로 접근하려는 것을 탐지 해보려한다.
시나리오 순서 설명
-
WebServer 관리자는 자신 외에 관리페이지로 접근하려는 시도를 탐지하려 한다. 이에 알맞은 Snort Rule을 설정하도록 하자.
-
Snort Rule 형식
alert tcp !192.168.10.20 any -> 192.168.10.20 80 (msg:"HTTP Admin Attack"; content:"admin.html"; nocase; sid:10000015;) 관리자는 이처럼 설정을 하였다. 즉 관리자가 아닌 어떤 PC가 어느 포트로든 Web Server의 80번 포트로 요청하는 패킷중에 관리 페이지의 네임인 admin.html이 포함되어 있으면 검출 하겠다 라는 뜻이 된다. 공격자에 입장이 되어서 Web Server의 admin.html페이지로 접근을 시도해보자.
-
결과 확인
위처럼 관리자가 아닌 PC에서 접근하려는 시도를 탐지 하는 것을 볼 수 있다. Wireshark로 패킷을 분석해보도록 하자.
-
Wireshark로 패킷 덤프 분석
위의 패킷을 보면 관리자(192.168.10.20)이 아닌 다른 PC(192.168.20.20)이 관리자만이 접근해야 할 admin.html페이지를 요청하는 것을 볼 수 있다. 이와 같은 패킷을 탐지함으로써 관리페이지로의 접근을 탐지할 수 있는 것이다.
출처 : http://god2zuzu.blog.me/70168951403
(해당 사이트로 이동 후 그림을 꼭 참조 할 것)
'Security > Snort' 카테고리의 다른 글
Snort 2.9.1 설치 방법 (0) | 2014.03.31 |
---|---|
Snort 설정 구성표 및 Telnet 패킷 검출 (1) | 2014.03.31 |
Snort를 이용한 Port Scanning & Reverse Shell 탐지 (0) | 2014.03.31 |
Snort를 이용한 DOS 형태의 공격 탐지 (0) | 2014.03.31 |
Snort 시그네처의 구조 (0) | 2014.03.19 |
댓글