Snort

**Snort** бол signature-based NIDS учраас халдагчийн дамжуулж буй пакетуудын шинж чанар дээр нь тулгуурлан халдлагыг тодорхойлдог. Халдлага мөн гэдгийг болон төрлийг нь тодорхойлохдоо Rule-үүдийн цуглуулгыг ашигладаг. 
Snort нь дотроо packet sniffer, packet логger, Network-based Interusion Detection System гэсэн үндсэн гурван функцыг агуулсан орчин үеийн хамгаалалтын application юм. Snort нь лог files-ийг удирдах бичих олон арга замуудыг дэмждэг. Snort ажиллаж байх үед багцуудыг барих, хөнөөлтэй traffic илэрсэн бол системийн админд мэдэгдэх маш өргөн боломжтой програмуудаар өргөжүүлэх боломжтой. Snort-ийг маш олон төрлийн бүтцээр зохион байгуулах боломжтой байдаг учраас тухайн байгууллагад зориулсан бүтцийг гаргахад хялбар байдаг. 
Snort нь зөвхөн TCP/IP протокол дээр шинжилгээ хийхээс гадна бусад маш олон сүлжээний протокол дээр шинжилгээ хийх боломжтой. Тухайлбал Novell-ийн IPX протокол дээр шинжилгээ хийх боломжтой.Snort нь мөн маш олон төрлийн үйлдлийн систем дээр суулгах боломжтой нээлттэй эх бүхий програм хангамж юм. Тухайлбал Linux, FreeBSD, NetBSD, OpenBSD, Windows, Solaris, MacOS X, MkLinux, PA-RISC HP-UX зэрэгүйлдлийн системүүд дээр ажиллах боломжтой.

### Snort-ийн ерөнхий ажиллагаа 
Unix төст системд libpcap буюу windows системд winpcap гэх сүлжээний траффикийг тодорхой форматтайгаар файлд хадгалдаг application programming interface ашиглан пакетуудыг барьдаг. Тухайлбал Snort нь packet sniffing горимд пакетыг уншиж байх үедээ pcap (Packet CAPture library)-ийг ашиглан Process Packet функцийг дуудаж ажиллуулан пакетыг бүтцээр нь задална. Дараа нь IDS горимонд шилжин уг пакетыг шалгаж үнэлгээ дүгнэлт өгнө. Эцэст нь packet-логging горимд шилжин гаралтын plug-in-уудыг дуудаж ажиллуулах замаар alert-уудыг үүсгэдэг.

                                                           Ажиллагааны зарчим
Snort нь Ethernet, 802.11, TokenRing, FDDI, Cisco HDLC, SLIP, PPP, and OpenBSD’s PF зэрэг OSI model-ийн хоёрдугаар түвний frame-ийг задлах боломжтой бөгөөд түвшин болгонд ялгаатай задлах функцуудыг ашигладаг. Тухайлбал дээрх зурагт үзүүлсэнчлэн Ethernet frame-ийг задлахдаа DecodeEthPkt функцэд уг frame-ийг дамжуулж frame-ийн өгөгдөл,  эх болон очих MAC хаяг, дараагийн түвшний төрөл зэргийг ялгах боломжтой

### Snort-ийг суулгах 
Snort-ийг windows систем дээр суулгахдаа www.snort.org татаж аваад step-to-step байдлаар суулгаж болно. Харин unix төст системүүд дээр эх кодыг нь татаж аваад компайл хийх, rpm пакежийг нь татаж аваад суулгах боломжтой. Харин fedora project-д snort-ийг fedora-д зориулан тохиргоо хийсэн кодыг бэлдсэн байдаг учир snort-ийг fedora дээр yum install командаар суулгах боломжтой байдаг. Иймд snort-ийг зөвхөн халдлага илрүүлэх систем байдлаар ажиллуулх тохиолдолд yum install командаар суулгах нь тохиромжтой. Snort-ийн бүх холбоотой пакежуудыг суулгах бол “yum install snort*” гэсэн командаар суулгаж болно. Харин зөвхөн mysql өгөгдлийн санд alert болон лог-уудаа хадгалдаг байхаар ашиглах бол yum install “snort snort-mysql” гэсэн командаар суулгах нь тохиромжтой. Ингэсэн тохиолдолд мэдээж зөвхөн snort нь mysql өгөгөдлийн сантай холбогдох гаралтын plugin-тайгаа л сууна гэсэн үг.

[root@localхост /]# yum install snort*Installed: 
snort.i386 0:2.8.1-4.fc9 
snort-bloat.i386 0:2.8.1-4.fc9 
snort-mysql.i3860:2.8.1-4.fc9 
snort-mysql+flexresp.i386 0:2.8.1-4.fc9 
snort-plain+flexresp.i3860:2.8.1-4.fc9 
snort-postgresql.i386 0:2.8.1-4.fc9 
snort-postgresql+flexresp.i3860:2.8.1-4.fc9 
snort-snmp.i386 0:2.8.1-4.fc9 
snort-snmp+flexresp.i386 0:2.8.1-4.fc9
Dependency Installed: libprelude.i386 0:0.9.17.2-1.fc9 
mysql-libs.i3860:5.0.51a-1.fc9 
postgresql-libs.i386 0:8.3.4-1.fc9
Complete!

#### Snort-ийг тохируулах 
Халдлагыг зөв тодорхойлох болон хэрэгцээтэй мэдээллээ цуглуулах нь Snort-ийг хэр зэрэг тухайн системд тохирсон оновчтой тохируулга хийхээс хамаарна. Иймд Snort-ийг тохируулахдаа rule сонгох, ямар горимд ажиллуулахөгөгдлийн сан ашиглах эсгийг оновчтой байдлаар сонгох шаардлагатай. 
Snort-ийн үндсэн тохиргооны файл нь fedora-ийн хувьд /etc/snort/snort.conf файл байдаг. Энэ файл дотор rule-үүдийг тодорхойлох, гадаад болон дотоод сүлжээг ялгах, өгөгдлийн сантай холбох, server-үүдийн хаягийг заах (тухайлбал dns query-ийг alert болгож гаргахгүйн тулд dns server ямар хаяган дээр байгааг тодорхойлдог) зэрэг үндсэн тохиргоог хийдэг.
### Rule нэмэх 
Snort нь орж ирсэн пакетыг хөнөөлтэй үйл ажиллагаа явуулах пакет мөн гэдгийг танихын тулд rule-ийг ашигладаг. Rule-үүдийг хэрхэн тохиромжтой бичсэнээс халдлага илрүүлэх систем нь халдлагыг оновчтой тодорхойлж alert гаргах нь хамаарна. Иймд rule-үүдийг зөв сонгох нь чухал байдаг.
Rule-ийг өөрийн системд тохиромжтой байдлаар бичих шаардлагатай байдаг боловч Snort-ийг хөгжүүлдэг багаас зөвлөмж болгож өөрсдийнх нь гаргадаг rule-үүдийг албан ёсны сайтандаа үнэгүй татах боломжтойгоор байрлуулсан байдаг. Гэхдээ тухайн сайтад бүртгэгдээгүй хэрэглэгчид нэмэлт сайжруулалт хийгддэгүй rule-үүдийг л татах боломжтой, бүртгэгдсэн хэрэглэгчид нь шинэ гарсан rule-үүдийг 30 хоногийн дараанаас татах боломжтой болно, бүртгэгдээд төлбөр төлсөн хэрэглэгчид болон хөгжүүлэгчид нь шинэ rule-ийг гарсан дариуд нь авах боломжтой байдаг. Шинэ rule гарахаараа бүртгэгдсэн хэрэглэгчдийн и-мэйл хаягаар нь мэдэгддэг.
Өөрийн тодорхойлсон болон татаж авсан rule-үүдийг ашиглахын тулд snort-ийн үндсэн тохиргооны файлд оруулах шаардлагатай. Өөрөөр хэлбэл snort-ийн үндсэн тохиргооны файлд rule-ийг тодорхойлж байгаа бичлэгийг нэмэх эсвэл snort-ийн албан ёсны сайтаас татаж авсан rule-үүд байрлах замыг зааж өгч include командаар сонгосон rule-үүдийг үндсэн тохиргооны файлд оруулахшаардлагатай.
Анхны утгаараа snort-ийн үндсэн тохиргооны файлд “var RULE_PATH/etc/snort/rules” гэсэн байдлаар rule-үүдийн байрлах замыг тодорхойлсон байдаг. Иймд татаж авсан rule-үүдийг /etc/snort/rules хавтсанд хуулаад үндсэн тохиргооны файл дээр include командаар оруулснаар тухайн rule-ийг ашиглах боломжтой болно. Тухайлбал scan хийхийг шалгадаг rule-ийг татаж аваад /etc/snort/rules хавтсанд хуулсан байлаа гэхэд /etc/snort/snort.conf файлд дараах бичлэгийг нэмэх ёстой. include $Rule_PATH/scan.rule

### Deamon хэлбэрээр ажиллуулах тохиргоо 
Системийн администратор тухайн хугацаанд snort-ийг команд ашиглан ажиллуулна гэдэг нь администратор командыг хийж ажиллуулж байгаа season-оо хаахад snort мөн ажиллахгүй болох учир энэ тохиромжгүй үйлдэл бөгөөд deamon хэлбэрээр ажиллуулах нь тохиромжтой. Тухайлбал snort суулгасан машин унтарч ассан ч ажилладаг байхаар тохируулах үед энэ тохиргоо нь хэрэглэгэдэнэ.
/etc/init.d/snortd файл дотор snort-ийг deamon хэлбэрээр ажиллахад шаардагдах тохиргоонуудыг хийнэ. Тухайлбал service-ийг ачааллахад snort нь ямар option-той ажиллах вэ гэдгийг тохируулна. “-D” option нь daemon горимонд ажиллана гэдгийн заана, “-u” ямар хэрэглэгчийн эрхээр ажиллана гэдгийг заана. Тухайлбал /etc/init.d/snortd файлыг доор үзүүлсэн байдлаар тохируулж болно.

Код:
case "$1" in
   start)
           echo -n "Starting snort: "
           cd /var/лог/snort
           daemon /usr/sbin/snort -D $SNORT_OPTIONS -u $USER -g $GROUP \
                    -i $INTERFACE -c /etc/snort/snort.conf
           touch /var/lock/subsys/snort 
           echo;;
   stop)
           echo -n "Stopping snort: "
           killproc snort
           rm -f /var/lock/subsys/snort
           echo;;
   restart)
           $0 stop
           $0 start
           ;;
   status)
           status snort
           ;;
           *)
                 echo "Usage: $0 {start|stop|restart|status}"
                 exit 1
   esac
   exit 0
### Өгөгдлийн санд холбох тохиргоо 
Snort нь пакетыг барьж аваад хадгалах замаар их хэмжээний лог болон alert-ийг үүсгэдэг учир тэгдээрийг файлд хадгалсан байдлаар нь удирдан зохицуулах нь төвөгтэй байдаг энэ байдлыг шийдвэрлэхийн тулд өгөгдлийн сантай холбож тэдгээр лог болон alert-ийг ангилан хадгалдаг. Энэ ажилдаа Snort-ийг mysql-тэй холбож лог болон alert-уудыг нь өгөгдлийн санд хадгалдаг болгосон.
Ингэхийн тулд mysql-ийг суулгасан байх шаардлагатай. Хэрэв суулгаагүй бол fedora дээр yum install командаар суулгах боломжтой.
#yum install mysql mysql-server
Installed: mysql-server.i386 0:5.0.51a-1.fc9,mysql-5.0.51a-1.fc9.i386
                 Mysql-ийг суулгасний дараа mysql-ээ demon хэлбэрээр ажиллуулах
                 # service mysqld start
                 Mysql admin-ий нууц үгийг тохируулах
                 # mysqladmin -u root password [нууц үг]
                 Mysql рүү root хэрэглэгчийн эрхээр нэвтрэх
                 # mysql -u root -p
                 Snort-д зориулан лог болон alert-ийг хадгалдаг өгөгдлийн сан үүсгэх
                 mysql> CREATE DATABASE snort;
Query OK, 1 row affected (0.12 sec)
                 Snort-ийн өгөгдлийн санд хандах хэрэглэгчийг үүсгэх болон тухайнхэрэглэгчийн тухайн өгөгдлийн санд хандах эрх болон нууц үгийг ньтодорхойлох
                 mysql> grant all privileges on snort.* to snortusr@"localхост" identified
by 'нууц үг';
Query OK, 0 rows affected (0.00 sec)	
                 Өмнө хийсэн командыг идэвхижүүлэх.
                 mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
                 Үүсгэсэн өгөгдлийн сандаа лог болон alert хадгалахад хэрэглэгдэххүснэгтүүдийг нэмэх. Yum install командаар snort-ийг суулгах үед/usr/share/doc/snort-2.8.1/create_mysql файл хуулагдсан байдаг. Уг файл дахьхүснэгтүүдийг өгөгдлийн санд дараах командаар оруулж болно.
                 #mysql -u root -p  Snort! 
Options:
         -A        Set alert mode: fast, full, console, test or none (alert file alerts only)
                     "unsock" enables UNIX socket логging (experimental).
         -b         Лог packets in tcpdump format (much faster!)
         -B  Obfuscated IP addresses in alerts and packet dumps using CIDR mask
         -c  Use Rules File 
         -C         Print out payloads with character data only (no hex)
         -d         Dump the Application Layer
         -D         Run Snort in background (daemon) mode
         -e          Display the second layer header info
         -f           Turn off fflush() calls after binary лог writes

Snort командыг “-v” оption-той ажиллуулж packet sniffer горимонд ажиллаж байгаа эсэхийг шалгана. Хэрэв зөв ажиллаж байвал тухайн хостын хүлээн авсан болон дамжуулж байгаа,  тухайн хостоор дамжиж байгаа пакетууд харагдана. Хэрэв decode хийж харахыг хүсвэл “d” option ашиглана.
#snort –v
Not Using PCAP_FRAMES
12/15-00:29:26.815460 10.0.5.217:137 -> 10.0.5.255:137
UDP TTL:128 TOS:0x0 ID:31 IpLen:20 DgmLen:96
Len: 68
12/15-00:29:27.565365 10.0.5.217:137 -> 10.0.5.255:137
UDP TTL:128 TOS:0x0 ID:32 IpLen:20 DgmLen:96
Len:68
### Snort-ийг байрлуулах 
Snort нь Network-based Intrusion Detection System учир шинжилгээ хийх сүлжээний пакетууд дамжих байрлалд буй хост дээр суусан байх шаардлагатай. Өөрөөр хэлбэл snort нь тухайн сүлжээнд шинжилгээ хийхийн тулд пакетын урсгал төвлөрсөн газар байрлах ёстой. Тухайлбал snort суусан машин нь төв тухайн сүлжээний төв шугамд холбогдсон байвал тухайн сүлжээгээр дамжиж байгаа пакетуудад шинжилгээ хийхэд тохиромжтой.

Hub ашиглан холбогдсон сүлжээний хувьд “Зураг а”-дүзүүлснээр Snort суусан хостийг huн аb-ийль нэг портонд холбоход тухайн hub-аар дамжиж байгаа бүх пакетуудад шинжилгээ хийх боломжтой болно. 

Wireless access point ашиглан холбогдсон сүлжээний хувьд “Зураг б”-д үзүүлснээр hub ашигласан сүлжээтэй адилаар snort бүхий хост нь access point-той холбогдсон бол тухайн access point-оор дамжих пакетыг шинжлэх боломжтой болно.

Switch ашигласан сүлжээний хувьд “Зураг в”-д үзүүлснээр snort суусан хост руу сүлжээгээр дамжиж байгаа пакетуудыг дамжуулахын тулд port mirror хийх буюу нэг портоор дамжиж байгаа frame-үүдийг snort суусан хостын холбогдсон порт руу хувилж дамжуулдаг болгоно. Тухайлбал үүний cisco-ийн managed switch-д span порт тохируулах замаар хэрэгжүүлж болно.

Энэ 2 холболтуудын алийг нь ч ашиглаж болох боловч туршилтын ажилдаа тэдгээрээс хамгийн хямд өртөгтэй холболт болох hub ашигласан холболтыг “Зураг г”-д үзүүлсэн байдлаар холбож ашигласан. “Mnfedora.org” нэртэй хост нь www.mnfedora.org web сайтыг ажиллуулж байгаа веб сервер бөгөөд энэхүү ажилд веб серверт учрах халдлагын тухай мэдээллийг цуглуулах зорилгоор “Зураг д”-д үзүүлсэн физик холболтыг үүсгэсэн

### Ашигласан материал 
* snort.org
* searchsecurity.techtarget.com

Ангилал:Unix программ хангамж
Ангилал:Чөлөөт аюулгүй байдлын программ