IDS(Snort) 10111119 이기준
Snort? snort는 프로토콜 분석, 컨텐츠 검색, 웜, 취약점 공격, 포트스캔, 버퍼 오버플로우 등 다양한 공격을 탐지하는 OpenSource IDS snort 기능 패킷 스니퍼 모드(패킷을 읽고 출력하는 기능) 패킷 로거 모드(모니터링 한 패킷을 저장하고 로그에 남기는 기능) 침입 탐지 시스템 모드 침입 차단 시스템 모드 옵션 v: snort를 패킷 스니퍼 모드로 동작(tcp) d: 모든 네트워크 계층을 포함. e: 데이터링크 계층 헤더를 포함. c: 패킷 검출
Snort? snort 구조(Sniffer -> Preprocessor -> Detection Engine -> Alert/Logging) Sniffer 네트워크를 도청하는데 쓰이는 하드웨어 또는 소프트웨어 장치 어플리케이션 또는 하드웨어 장치에서 해당 네트워크의 트래픽을 도청할 수 있다. Preprocessor 패킷 Sniffer로부터 전달받은 패킷을 특정한 플러그인으로 전달하여 패킷에서 특정한 종류의 행위를 찾는다. 패킷에서 특정한 행위를 찾은 뒤에 Detection Engine으로 전송하게 된다. Detection Engine Preprocessor로부터 패킷을 전달받아 패킷과 일치하는 Ruleset이 있다면 해당 패킷은 Alert/Logging으로 전달된다. Alert/Logging Detection Engine과 일치하는 패킷이 있다면 경고가 발생하는데, 이 때 경고는 로그파일, SMB, SNMP 트랩 등으로 전달된다. SMB(Server Message Block, 서버 메시지 블록)는 도스나 윈도우에서 파일이나 디렉터리 및 주변 장치들을 공유하는데 사용되는 메시지 형식 SNMP(Simple Network Management Protocol, 간이 망 관리 프로토콜)는 네트워크 장비를 관리 감시하기 위한 목적으로 UDP 상에 정의된 응용 계층 표준 프로토콜이다. SNMP는 지원하는 서버에 관리자가 질의를 해 자료를 받아갈 수 있고, 반대로 어떤 값은 설정을 요청할 수도 있다.
Snort 설치 필요한 패키지 gcc flex zlib(zlib-devel) libnet(libnet-devel) pcre tcpdump libpcap
Snort 설치 EPEL 저장소를 추가한 yum 명령어로 설치 Epel이란? Extra Packages for Enterprise Linux Red Hat 계열 리눅스 (RHEL, CentOS, Oracle Linux, Amazon Linux ...) 에서 유용한 유틸리티가 많이 포함되어 있어 필수적으로 설치하는 추가 Repository 이다. http://fedoraproject.org/wiki/EPEL 다운로드 경로 Repository - 데이터 집합체가 보관되고 조직적인 방식으로 유지되는 대체로 컴퓨터 저장장치 내의 주요 장소
Snort 설치 wget http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm rpm –Uvh epel-release-6-8.noarch.rpm sed –i –e “s/enabled=1/enabled=0/g” /etc/yum.repos.d/epel.repo 기본 저장소와 충돌하지 않게 epel.repo 파일을 enable=0으로 비활성화. 이 저장소를 사용하려면 yum 명령에서 –enablerepo=epel이라고 지정해야 함. yum --enablerepo=epel –y install gcc make rpm-build autoconf automake flex bison libpcap-devel libdnet libdnet-devel zlib zlib-devel Yum –y install pcre*
Snort 설치 wget https://www.snort.org/downloads/snort/daq-2.0.6.tar.gz daq와 snort 설치 및 확인 작업 파일을 다운로드 받고 설치하는 경로는 임의로 해도 되지만 처음 설치할 때는 헷갈리기 때문에 그대로 하는 것을 추천함 cd /usr/local/src <- 이 경로에 들어가서 설치 wget https://www.snort.org/downloads/snort/daq-2.0.6.tar.gz wget https://www.snort.org/downloads/snort/snort-2.9.7.6.tar.gz 홈페이지에서 설치하도록 두 가지 파일을 모두 다운받았다면, 각각 압축을 풀고 설치를 하면 된다.
Snort 설치 daq 파일 설치 tar –zxvf daq-2.0.6.tar.gz cd daq-2.0.6 ./configure; make; make install 여기서 ;의 의미는 앞의 명령어가 실행된 뒤 다음 명령어를 실행하라는 의미. * yum 명령어로 설치하는 방법 yum install https://www.snort.org/downloads/snort/daq-2.0.6-1.centos7.x86_64.rpm
Snort 설치 snort 파일 설치 tar –zxvf snort2.9.7.6.tar.gz cd snort-2.9.7.6 ./configure --enable-sourcefire; make; make install * yum 명령어로 설치하는 방법 yum install https://www.snort.org/downloads/snort/snort-2.9.7.6-1.centos7.x86_64.rpm
Snort 설치 daq 파일과 snort 파일을 설치하는 방법은 https://www.snort.org 사이트에 들어가면 자세하게 설명이 되어 있다.
Snort 설치 snort 설치 확인 및 버전 확인 snort –V daq 모듈 확인 snort –daq-list
Snort 설치 필요한 폴더 작성과 룰 세트 복사 mkdir –p /etc/snort – 룰이 들어가게 됨 snort를 설치했지만, 필요한 rules은 설치되지 않았다. 즉, 데이터가 들어오는 것은 확인할 수 있어도, 그에 필요한 필터는 되지 않는다는 것을 뜻한다. 디렉터리를 만들고, 다운받은 룰 세트의 압축을 푼 뒤, 정해진 위치에 복사해 넣는다. mkdir –p /etc/snort – 룰이 들어가게 됨 P : 폴더를 생성시 상위폴더가 없으면 같이 만들어줌 mkdir –p /var/log/snort – 로그가 남을 경우 기록 cd /etc/snort /etc/snort 폴더에 snort 룰을 다운받은 뒤 압축을 해제한다.
Snort rules 설치 snort rules은 홈페이지에 다운받을 수 있도록 링크가 걸려있다. 여기서는 wget 명령어로 다운받는다. Registered rules 룰을 받을 예정인데, 이것은 사용자 등록을 한 뒤 30일간 유효한 룰을 구할 수 있는 것을 뜻한다. 스노트 홈페이지에 로그인을 해서 계정 생성을 위한 URL을 받는다. 지정된 URL로 계정에 로그인하고 다운로드 페이지에 들어간다. 취득을 위한 코드 생성을 하고 나서 다운로드한다.
Snort rules 설치(/etc/snort) 스노트 홈페이지에 로그인을 해서 계정 생성을 위한 URL을 받는다. 오른쪽 상단에 sign in을 클릭한 뒤, sign up for an account 페이지에서 계정을 만들 수 있도록 Login, Email address, password를 치고, 라이선스에 동의한 후 sign up을 클릭하면 지정한 메일로 계정 활성화 URL을 보내준다. 지정된 URL로 계정에 로그인하고 다운로드 페이지에 들어간다. 여기서 자신의 메일로 들어가서 확인을 해보면 URL이 적힌 메일을 볼 수 있다. 들어가서 인증을 해주면 가입이 완료된다. rules을 다운받기 위해서 Oinkcodes를 받아야 하는데 메일계정을 클릭하면 Oinkcode를 받을 수 있는 곳이 있다. 거기서 Documentation이라는 창에 How to use your oinkcode라는 곳을 클릭하면 다운로드 받을 수 있는 경로가 나온다. wget 명령어로 다운을 받아준다. 압축해제(tar –zxvf 명령어) touch /etc/snort/rules/white_list.rules /etc/snort/rules/black_list.rules
Snort 설치 snort 설정 파일 변경 및 권한 설정 – 경로가 안맞기 때문 어떤 경로에 로그가 생성되는지, 어떤 룰을 적용시킬지 설정. 설정 하기 전에 반드시 백업파일을 만들어 두고 할 것!! cp –p snort.conf snort.conf.original vi snort.conf 라인 변경 전 변경 후 45 ipvar HOME_NET any ipvar HOME_NET [자신의IP주소] 48 ipvar EXTERNAL_NET any ipvar EXTERNAL_NET !$HOME_NET 104 var RULE_PATH ../rules var RULE_PATH /etc/snort/rules 105 var SO_RULE_PATH ../so_rules var RULE_PATH /etc/snort/so_rules 106 var PREPROC_RULE_PATH ../preproc_rules var PREPROC_RULE_PATH /etc/snort/preproc_rules 113 var WHITE_LIST_PATH ../rules var WHITE_LIST_PATH /etc/snort/rules 114 var BLACK_LIST_PATH ../rules var BLACK_LIST_PATH /etc/snort/rules
Snort 설치 snort config 파일 옵션 var HOME_NET : snort에서 탐지할 목적지 ip 주소를 뜻함 var EXTERNAL_NET : snort에서 탐지할 출발지 ip 주소를 뜻함 var RULE_PATH : 룰 파일이 저장된 디렉터리를 지정 종류 특징 White List - 화이트리스트에 등록된 사용자만 서버와 통신이 가능하다. - 첫 사용자는 화이트리스트에 등록이 되어 있지 않으므로 관리자에게 등록을 요청하고, 등록이 될 때 까지 기다려야 한다. Black List - 블랙리스트에 등록된 사용자는 서버와 통신이 불가능하다. - 첫 사용자도 마음대로 접속 가능하기 때문에, 블랙리스트에 등록될 경우, 다른 IP로 변조하여 다시 들어올 가능성이 높다. 결론 - 보안적 측면에서는 화이트리스트가 블랙리스트보다 보안성이 높다. - 유저 편이 입장에서는 블랙리스트가 화이트리스트보다 효율적이다.
Snort 설치 snort 그룹과 사용자를 생성하고 각 파일과 폴더의 권한과 소유자를 설정 그룹 추가 권한 설정 groupadd –g 40000 snort useradd snort –u 40000 –d /var/log/snort –s /sbin/nologin –c SNORT_IDS –g snort 권한 설정 cd /usr/local/src chown –R snort:snort daq-2.0.6 snort:snort는 그룹과 유저 chmod –R 700 daq-2.0.6 chown –R snort:snort snort-2.9.7.6 chmod –R 700 snort-2.9.7.6 chown –R snort:snort snort_dynamicsrc/ chmod –R 700 snort_dynamicsrc
Snort 설치 권한 설정 cd /var/log chmod 700 snort chown –R snort:snort snort cd /usr/local/lib mkdir –p snort_dynamicrules chown –R snort:snort snort* chown –R snort:snort pkgconfig chmod –R 700 snort* chmod –R 700 pkgconfig cd /usr/local/bin chown –R snort:snort daq-modules-config chown –R snort:snort u2* chmod –R 700 daq-modules-config chmod –R 700 u2*
Snort 설치 권한 설정 cd /etc chown –R snort:snort snort chmod –R 700 snort 설정 확인 snort –T –i eth0 –u snort –g snort –c /etc/snort/etc/snort.conf Snort successfully validated th configureation! Snort exiting 마지막에 이런 문구가 나오면 설치 완료
Snort 룰 설명 snort가 제대로 작동되는지 간단한 ping 명령어로 테스트를 해본다. vi /etc/snort/rules/local.rules alert icmp any any -> $HOME_NET any (msg:”ICMP test!!”; sid:10000001; rev:001;) ICMP test!!라는 룰의 설명으로 icmp 패킷이 외부에서 들어오거나 외부로 나가는 패킷 중에 icmp 패킷은 alert(경고창)과 로그를 남기라는 뜻 snort -vde –c /etc/snort/etc/snort.conf –A full –l /var/log/snort
Snort 룰 설명 alert icmp any any -> $HOME_NET any (msg:"ICMP packet catched!"; sid:10000001; rev:001;) 룰 타입 항목 설명 헤더 alert alert - 룰에 매칭 되면 log와 경보를 남긴다. log - 룰에 매칭 되면 log만 남긴다. pass - 룰에 매칭 되든 말든 무시하고 그냥 보낸다. activate - 경보를 띄우고 다른 동적 룰(dynamic)들을 활성화 시킨다. dynamic - activate룰이 활성화시키기 전 까지는 log로 행동한다. drop - 룰에 매칭되면 패킷을 드랍 시키고 로그를 남긴다. reject - 룰에 매칭되면 패킷을 드랍 시키고 로그를 남긴다. TCP는 RST 패킷, UDP는 unreachable packet을 발생시킨다. sdrop - drop과 동일하지만 로그를 남기지 않는다. icmp 룰에서 매칭하는 프로토콜 (tcp/udp/ip/icmp)을 지정한다. any any 아무 소스 IP와 아무 소스 포트 지정한다. -> 패킷의 방향이다. $HOME_NET 목적지 ip를 자신의 IP로 설정한다. any 목적지 포트를 모든 포트로 지정한다. 옵션 msg 룰 매칭시 alert 파일에 표시할 내용이다. flags TCP 헤더에 포함되는 플래그를 설정한다. content 패킷에 특정한 문자열이 있는지 확인한다. sameip 수신지와 송신지의 IP 주소가 같은지 확인한다. sid 각 룰의 (id 번호이다. 룰마다 고유 번호가 사용된다.) rev 룰의 버전으로 같은 제목의 룰이라도 rev가 높은 것을 사용하는 것이 좋다.
Snort alert log 기록 cd /var/log/snort snort라는 폴더 안에 alert log가 남게 된다. Syn flooding공격 룰 추가하고 잡는거 확인해보기