Suricata sudo /usr/bin/suricata –c /etc/suricata/suricata.yaml –I (이더넷 이름) –init-errors-fatal 명령어로 실행할 수 있다
Suricata 룰에 대한 설정은 sudo vi /etc/suricata/suricata.yaml 명령어로 수정할 수 있다
그리고 Suricata log를 확인하려면 cat /var/log/suricata/fast.log 명령어를 사용한다.

1.LAND Attack
인위적으로 송신지 IP 주소 및 Port를 목적지 (대상 웹서버) IP주소 및 Port와 동일하게 설정하여 트래픽을 전송하는 공격 source IP spoofing이라 한다송신지 IP/Port와 목적지 IP/Port가 동일하기 때문에 네트워크 장비의 부하를 유발하기도 한다최근에는 source IP destination IP IPS 등에서 비교하기 때문에 거의 효과가 없는 공격이다. LAND Attack은 다음 명령어로 공격한다.

hping3 –icmp [피해자IP] –d [data_size] –flood –a [피해자 IP]

어느 정도 시간이 지난 후에 Ctrl+C를 이용해 공격을 종료한다그리고 WireShark로 패킷에 대한 정보를 확인하여 보면 다음과 같은 결과가 나온다.




출발지와 목적지가 피해자 IP로 동일한 것으로 보아 IP가 변조되었다는 것을 확인할 수 있다따라서 다음과 같은 룰을 suricata에 추가하여 준다.

drop tcp any any -> any any (msg:”Land Attack”; sameip; sid:1000056;)

다시 공격을 시작하고 시간이 지난 후에 suricata와 공격 모두 종료하면 suricata에 다음과 같은 결과가 도출된다.




85.84%의 높은 드랍율로 피해를 최소화한 것을 확인할 수 있다.

2.Ping Of Death
Ping of Death는 인터넷 프로토콜 허용 범위인 65,536바이트 이상의 큰 패킷을 고의로 전송하는 서비스 거부(Dos: Denial of Service)공격 이다. 공격자의 식별 위장이 용이하고 인터넷 주소 하나만으로도 공격할 수 있다. 다음과 같은 명령어로 공격할 수 있다.

hping3 -–icmp [피해자IP] –d 65000 –flood

어느 정도 시간이 지난 뒤에 종료하고 이번에도 wireshark에서 패킷을 확인한다





시스템이 눈에 띄게 느려졌다는 것을 확인할 수 있었다패킷에 보면 데이터에 X문자열 (58)을 채워서 보냈다는 것을 확인할 수 있다따라서 다음과 같이 룰을 설정하여 준다.

drop ip any any -> $HOME_NET any (msg:”Ping of Death”; content:”|5858585858|”; threshold: type both, track by_src, count 10, seconds 5; sid:10000002; rev:001;)

룰을 설정하고 suricata를 실행 한 뒤에 다시 공격하고 어느 정도 시간이 지나면 종료한다.






 37.89%의 드랍율로 어느 정도 피해를 최소화하였다이 룰을 사용하지 않았을 때는 드랍율이 0%였다.

3.Nmap 포트 스캐닝
포트 스캐닝은 대상 컴퓨터의 TCP UDP 포트 상태를 알아보는 것으로 공격자가 정보수집을 할때 Target PC에 자주 하는 방법이다포트를 차단하는 것도 좋지만 스캔하는 경우를 탐지하여 관리자가 인식하는 경우도 나쁘지 않다.
Nmap Scan Type의 종류는 다음과 같다




SYN 포트스캔 명령어는 다음과 같다.

Namp –sS [피해자 IP]
위의 명령어로 공격을 하게 되면 공격자는 다음과 같이 열려있는 포트를 확인할 수 있다.






 22/TCP 포트가 오픈되어 있다는 걸 알 수 있게 되었다.
피해자의 wireshark를 확인하여 보면 다음과 같은 결과가 나온다.






SYN스캐닝이 진행된 것을 확인할 수 있다
포트가 열려있으면 SYN+ACK 포트가 닫혀있으면 RST+ACK이 오는 것을 확인할 수 있다다음과 같은 명령어로 탐지할 수 있다.

Alert tcp [피해자 광대역 라우터] any-> [피해자ip] any (msg:”SYN Scan Checkk”; flags:S threshold:type both, track by_src, count 5, seconds 10; sid:1000051;)






다음과 같이 192.168.129.130에서 공격한 것을 탐지했다
나머지 포트 스캔 공격도 비슷한 룰로 flags 부분을 수정하여 탐지할 수 있다.

4.SYN Flood 공격
SYN Flooding 공격이란 TCP 세션이 연결될 때의 취약성을 이용한 서버 공격이다접속을 요청하는 SYN 패킷을 지속적으로 보내어 대상 서버에 연결 테이블을 가득 차게 만든다결국 공격자는 피해자를 응답에 대해 전혀 수신하지 못하는 상태로 만든다다음 명령어로 공격할 수 있다공격을 할 때는 DDOS공격처럼 rand IP로 보내는 설정을 추가한다 .

hping3 –syn –S [피해자IP] --flood –rand-source
공격한 후 wireshark를 확인하면 다음과 같은 결과가 도출된다.



SYN Flood Attack이 랜덤한 IP 0번 포트에 공격해 온 것을 확인할 수 있다. Flag S이므로 반복적으로 오는 SYN패킷을 막아주어야 한다목적지는 피해자 IP로 같으므로 track by_dst 옵션을 사용한다따라서 다음과 같은 룰을 사용한다.

Drop tcp any any -> $HOME_NET any (flags : S; msg:”Syn Flood Attack!”; threshold: type both, track by_dst, count 3, seconds 1; sid:10000003;rev:001;)
룰을 저장하고 다시 공격해본다.





35%의 드랍율로 피해를 최소화하였다공격할 때마다 1%~35%까지의 랜덤한 드랍율을 보인다.



※본 연구는 지극히 주관적인 연구이고 결과와 과정이 정확하지 않을 수 있습니다.


1.IDS의 기능(Suricata)
NIDS는 외부로부터 불법적인 접근이나 해커의 공격으로부터 내부 네트워크를 방어하기 위해 내부 네트워크와 외부 네트워크 사이의 통로를 설치하여 두 네트워크 간의 traffic을 제어하기 위한 목적으로 구성된 시스템 혹은 시스템들의 네트워크라고 말할 수 있다외부 네트워크에서 내부 네트워크로 접근하기 traffic 중 적법하다고 인증된 traffic만 통과시킴으로써 외부의 침입으로부터 다음과 같이 내부 네트워크를 안전하게 보호한다.

l  내부의 취약한 네트워크 구성요소를 보호
l  외부로부터 내부로의 불법적인 행동에 대한 내부망의 보호

NIDS는 관리자가 사전에 설정한 통제 정책에 따라 내 / 외부 간 네트워크 traffic을 제어한다이를 통해 방화벽의 가장 중요한 기능인 외부 네트워크로부터의 내부 네트워크 보호를 수행한다.
NIDS의 통제 요소인 차단정책 설정 주요 요소로는 <그림 1>에서 보는 바와 같이 수신 측 IP주소’, ‘수신 측 포트 번호와 송신 측 IP주소’, ‘송신 측 포트 번호가 있으며지금까지 언급한 NIDS의 주요기능은 다음과 같이 정리할 수 있다.

l  외부의 칩입으로부터 내부 네트워크 보호
l  비인가 된 서비스 접속 허용 및 차단
l  내 외부 간 네트워크 사용자 통제
l  내 외부 간 네트워크 traffic 감시

아래 표는 일반적인 NIDS의 기능을 표로 나타낸 것이다.

기능
패킷 기반 및
세션기반 분석
시그니쳐 및
이상 징후
비정상 행위  /
비정상 트래픽
IP 차단
Port  차단
IDS
탐지
탐지
탐지
가능
가능

2.차단로그를 활용한 공격 정보 해석
NIDS(Suricata)에서는 Rule이 필요하다. Suricata의 룰은 Rule Header 부분과 Rule Option 부분으로 나누어져 있다. Rule Heade r부분은 어떠한 패킷인지근원지가 어디인지탐지에 따른 행동을 정의할 수 있다. Rule Header의 첫 부분에 오는 것이 Rule Action으로 주어진 조건에 맞는 패킷을 찾았을 때 어떠한 행동을 취할 것인지를 정해준다

l  Alert – 경고를 알린 후 로그 발생
l  Log – 로그만 발생
l  Pass – 패킷을 무시하고 그대로 보냄
l  Dynamic - Active룰에 의해서 활성화 되기 전까지 대기그전까지는 로그발생
l  Drop – 패킷을 Drop시키고 로그발생
l  Sdrop – 패킷을 Drop 시키지만 로그는 발생하지 않음
 
 

Rule Header
Rule option
Action
Protocool
IP address
Port
->
IP address
Port
(option)


Rule Action 다음 칸에는 Protocool에 관한 정보가 들어간다. Suricata에서는 TCP, UDP, ICMP가 들어간다그 뒤에는 발신자의 IP Address와 Port가 들어가게 된다. IP Address xxx.xxx.xxx.xxx/CIDR block 형식으로 쓰인다또한 IP Address의 부정을  ‘!’으로 나타내어 표현할 수 있다다중 IP Address를 적용하고자 할 때는 ‘[‘ , ‘]’ 안에서 ‘,’로 구분할 수 있다. Port의 범위를 지정할 때에도 ‘:’를 이용하여 범위를 지정할 수 있다
Rule option 부분은 탐지의 핵심 부분으로 ‘:’로 분리되어 표현할 수 있다주요 옵션으로는

l  Msg  - alert를 발생하거나 log를 출력
l  Content – 페이로드 내부 검색 문자열 지정
l  Dsize – 페킷의 페이로드 크기를 지정
l  Offset – 지정한 문자열의 검색 개시위치를 지정
l  Depth – 패턴 매칭을 실시할 페이로드의 깊이를 지정
l  Nocase – 텍스트 데이터 패턴 매칭 시 대소문자 구별을 하지 않음
l  Flags – 플래그의 첫 글자를 따서 지정






예를 들어,
alert tcp any any -> 192.168.1.0/24 80 <content: “admin” : msg:”Admin alert! ‘:> 라고 하였을 때 패킷에서 문자열 admin이 검출된다면 Admin alert! 라는 메시지가 alert 된다.
Rule Body Option에는 대표적으로 Threshold가 있다. Threshold는 동일한 특정 패킷이 관리자가 설정한 시간 안에 일정 수가 발견되면 경고 알림을 출력해주는 옵션이다

threshold:type [limit,threshold,both], track [by_src, by_dst], count [몇 초], 
seconds [횟수]
limit : count 동안횟수 번째 트래픽까지 탐지
threshold : 횟수마다 계속 탐지
both : count 동안 횟수만큼 트래픽이 탐지될 시 1번만 탐지
by_src : 출발지 패킷만 해당
by_dst : 도착지 패킷만 해당 
ex) alert icmp 172.16.10.10 any -> any any (msg:"icmp ping test"; threshold:type both, track by_src, count 10, seconds 20;  sid:1000001;)
=>172.16.10.10으로부터 ICMP 패킷이 20초 동안 10번발생되는 경우에 1번씩 경고메시지 출력

3.Suricata와 Snort
 Suricata Open source 기반의 IDS/IPS이다. Open source 기반의 IDS/IPS라고 하면 Snort가 대표적이다. 1998년에 나온 Snort는 오랜 시간 동안 Open source였기 때문에 많은 피드백으로 기능이 추가되고 오류가 많이 수정되었다하지만 시간이 지나면서 인터넷의 발달과 스마트폰에 발달로 인해 트래픽 양이 급격히 증가하면서 대용량 트래픽을 실시간으로 처리할 수 있는 기능이 중요해졌다. Snort는 단일 스레드만 지원해서 대용량 트래픽을 실시간으로 처리하기에는 힘든 환경이 되었다. Suricata Snort의 단점을 개선하고 장점은 수용하였다.

l  멀티 코어(Multicore)/멀티 스레드(Multi-threading) 완벽 지원
l  Snort 룰 완벽 호환 (기존 시스템에서 사용 중인 snort 시그니처 사용 가능)
l  하드웨어 밴더의 개발 지원으로 하드웨어 가속 지원 (GPU 가속)
l  스크립터 언어(lua)로 시그니처 작성 가능
l  Snort의 대부분 기능 모두 지원


+ Recent posts