I can do it!!

He can do! She can do! why cannot me? i can do it!

개발/보안

[T academy]데이터 분석 관점에서의 네트워크 보안 (Snort)

gogoriver 2020. 12. 29. 17:39

[3강] Snort를 이용한 이상징후 분석 

SNORT란? 리눅스 환경에서 동작하는 프로그램( IDS의 대표적인 오픈소스 )

대표적인 오픈소스 IDS로 네트워크를 통한 침투를 탐지/방어 하는데 사용
네트워크 상에서 실시간으로 흐르는 트래픽을 분석하여 패킷 로깅(로그 생성)을 수행하는 시스템
기능 1. 패킷 스니퍼
- 패킷 냄새를 맡는 탐지기, 패킷을 감시하는 기능 
2. 패킷 로거
- 패킷의 로그를 기록하는 기능
3. IDS 기능
- 네트워크 트래픽을 이용한 침입을 탐지하는 기능
4. Snort Inline(IPS) 기능
- 네트워크 망은 Inline과 Mirroring이라는 방식 존재
- Inline은 한 회선안에 직접 장비가 들어가서 해당 회선에 영향을 주는 것을 의미
- Mirroring은 패킷이 흐르는 것을 복사하는 것으로 해당 회선에 영향을 주지 않는다.
- Snort는 Mirroring 방식을 통해 IDS를, Inline방식을 탐지되는 트래픽에 따라 해당 트래픽을 차단하는 기능도 수행
SNORT 설치 snort 설치가 힘든 편이다. 
그래서 T-academy의 snort 가상서버에 이미지를 사용하거나 설치 스크립트 ppt 참고하여 해야한다.
snort 구성

snort에 룰을 적용해 놓으면 barnyard2 끼고 mysql에 적용을 시킨다.

* 주요 경로 파일

1. PUTTY 실행

리눅스 서버를 접속하여 로그인 한다

* 종료 명령어

shutdown -h now

네트워크가 연결이 안될 때 => ping 명령어 실행

* ping : 해당 도메인에 ip를 확인할 때 많이 사용

ping [ip or 도메인]

2. SNORT 설치 후 확인

강의에서는 snort가 이미 설치된 image를 제공해주었음. 이 쉘 파일로도 설치 가능!

3. SNORT내 폴더 확인

중요한 파일은 barnyard2.conf, sid-msg.map, snort.conf 파일 등이 있다.

여기서 rules 폴더를 열어보면, community.rules, local.rules가 있다.

우리는 local을 사용할 것이다.

snort가 떨구는 log파일은 아래의 이미지를 참고하면 된다.

4. local.rule 파일 확인

vim으로 확인 및 수정 가능하고, 아래와 같은 링크를 통해 vim 명령어를 공부하면 편하다.

https://gyuha.tistory.com/157

 

vi/vim 명령어 모음

vi 편집기 종료 마치기 명령 :q : 그대로 종료하기(quit) :q! : 변경된 내용을 저장하지 않고 강제로 종료하기 :wq : 변경된 내용을 저장하고 종료하기(write and quit) :x : :wq와 동일한 명령 ZZ : :wq와 동일.

inpages.tistory.com

vi/vim 명령어 모음

vi 편집기 종료 마치기 명령 :q : 그대로 종료하기(quit) :q! : 변경된 내용을 저장하지 않고 강제로 종료하기 :wq : 변경된 내용을 저장하고 종료하기(write and quit) :x : :wq와 동일한 명령 ZZ : :wq와 동일.

5. 필요한 파일 실행시키기

(1) banyard2 실행

banyard2 -c /etc/snort/barnyard2.conf -d /var/log/snort/ -f alert.log -w /var/log/snort/barnyard2.waldo

해당 명령어의 의미는 barnyard를 실행할 때 해당 conf파일을 이용해 실행할 것이고, -d 옵션으로 읽어올 파일의 경로를 설정하고, -f로 실제 읽어올 파일 이름을 설정하고, -w로 읽은 내용을 waldo라는 폴더에 저장시키겠다는 의미이다.

위와 같은 화면이 뜨면 성공한 것이다. 지금 snort 읽기를 대기하고 있는 상태라는 것이다.

6. putty 창을 하나 더 띄워서 snort 실행시키기

snort 실행 명령어

snort -c /etc/snort/snort.conf -i enp0s3

-i 옵션은 실행할 RAM카드를 설정하는 부분인데 ipconfig로 확인한 내용을 이용하면 된다.

해당 명령어 입력시 아래와 같은 창이 뜬다. 내부포트를 사용할 것이므로 enp0s3을 이용한 것이다.

위와 같이 Commencing packet processing 이 떠있으면 snort가 성공적으로 실행되었다는 의미이다.

7. ping명령어 실행 후 log가 수집되는 것 확인하기

아래와 같이 ping 명령어를 치면 지속적으로 로그를 수집한다. 

ping [ip 주소] -t

위에 Snort Alert이라고 뜨는 자리에 사실은 적용한 rule이 들어가야한다.

이러한 오류는 아래 sid-msg.map을 확인해야한다.

8. sid-msg.map 파일 확인

sid-msg.map파일은 snort rule의 지도라고 이해하면 된다. 

vim을 이용해 rule 번호 100만번을 매치해준다

그러면 이렇게 icmp-test라는 rule이름으로 운영되고 있는 것을 확인할 수 있다.


Snort Rule 

Snort가 가장 많은 사용자를 가진 오픈소스이다.

그 원인 중 하나가 위와 같은 rule구조이다. 

아까와 같이 읽어보면 대충 무슨 내용인지 알 수 있어서, 간편해서 많이 사용하는 것이다.

즉 직관적이다. rule 만들기도 쉽다.

* payload 검사 옵션

snort의 payload 검사 옵션에는 msg, content, offset, depth, nocase, sid, flow, rev가 있다.

content가 있는데 uricontent가 또 있는 이유는 아무래도 웹 해킹이 많다보니, 웹만 위주로 하기 위해서 있는 것이다.

즉, 웹 해킹의 경우에는 uricontent만 선택적으로 검사하면 된다는 것이다.

pcre는 정규표현식을 지원한다.

payload 검사 옵션이 제일 중요하다. 

대표적으로는 위에 3가지가 있고, 그래서 그런지 정보보안기사에도 출제되는 항목이라고 한다.

기타 룰로는 아래와 같이 확인할 수 있다.


추가적으로 강의에서는 sql 관리 툴로 sqlyog로 snort도 연결하는데 아래와 같이 확인할 수 있다.

이는 sql에 대한 공부를 하면 되는데 이는 거의 복습이여서 걍 설명 없이 강의내용만 공유한다.

 

 


참고

- kk-7790.tistory.com/49