Порт Сканнер

Порт скан хийгч програм нь нээлттэй портуудын хувьд сервер эсвэл хостыг шалгах зорилготой програмууд байдаг. Энэ нь ихэвчлэн админууд өөрсдийн сүлжээний аюулгүй байдлын бодлогыг шалгах харин халдагчид хост дээр ажиллаж байгаа үйлчилгээ түүний эмзэг байдлыг ашиглан тодорхойлох гэх мэт зорилгоор ашиглаж байна.

**Порт скан** эсвэл **портын хайлт** нь хост дээрх серверийн портын хаягийн хүрээнд клиент нь идэвхтэй портыг олох зорилгоор хүсэлтийг илгээдэг үйл явц юм. Энэ нь тийм ч хорон үйл явц биш юм. Порт скан ашиглах үйл явцын дийлэнх нь халдлага биш юм. Гэхдээ энгийн пробууд нь алсын машин дээр нээлттэй байгаа үйлчилгээг тодорхойлох нь илүү байдаг.

**Порт свип** нь (portsweep) тодорхой сонсох портод зориулж хэд хэдэн хостуудыг хайх явдал юм. Дараа нь ерөнхийдөө тодорхой үйлчилгээний тулд л хайлтыг ашигладаг. Жишээ нь SQL-д суурилсан компьютерийн өт хостын TCP 1433 портыг сонсож порт свип хайлт хийж болох юм.

## TCP/IP суурь мэдлэг 
Интернетийн загвар болон үйл ажиллагаа нь интернет проток

ол иж бүрдэл -д суурилсан ба TCP/IP гэж нэрлэх нь түгээмэл. Энэ системд, хостууд болон хостын сервисүүд нь хоёр бүрэлдэхүүн хэсгүүдийг ашиглан референц хийдэг: хаяг болон портын дугаар. Ашиглах боломжтой 65536 төрлийн портууд байдаг. Ихэнхи сервисүүд нь тооны хязгаарлагдмал хүрээтэй.

Зарим порт скан хийгч програмууд нь зөвхөн хамгийн түгээмэл портын дугаарууд эсвэл ихэнхи түгээмэл портууд нь тухайн хост дээр эмзэг сервистэй холбогдсон байхад нь скан хийдэг.

Порт дээр скан хийх үр дүн нь ихэвчлэн гурван ангилалд хуваан үздэг.
# *Нээлттэй* эсвэл *Хүлээн авсан*: Хост сервис порт дээр сонсож байгааг харуулсан хариу илгээсэн байна.
# *Хаалттай* эсвэл *Татгалзсан* эсвэл *Сонсохгүй байгаа*: Хост холболт порт руу татгалзах болно гэдгийг харуулсан хариу илгээсэн байна.
# *Шүүгдсэн*, *Гээгдсэн* эсвэл *Хаагдсан*: Хостоос хариу өгөхгүй байх.
Администраторууд болгоомжтой байх ёстой хоёр эмзэг нээлттэй порт:
# Нээлттэй порт -  Аюулгүй байдал болон тогтвортой байдал нь сервисийг хүргэх үүрэгтэй програмтай холбогдсон эсэхэд санаа тавих.
# Нээлттэй эсвэл Хаалттай портууд – Аюулгүй байдал болон тогтвортой байдал нь хост дээр ажиллаж байгаа үйлдлийн системтэй холбогдсон эсэхэд санаа тавих.
Шүүгдсэн портууд эмзэг байдлыг бий болгодоггүй.

## Ойлголт 
Порт сканын бүх төрлүүд бай болгосон хост RFC 793 – Transmission Control Protocol -тай нийцсэн гэсэн таамаглал дээр тулгуурладаг. Хэдийгээр энэ хэрэг нь голдуу хост буцааж үл мэдэгдэх пакетуудыг буцаан илгээх эсвэл бүр хостын TCP/IP стек RFC -д нийцэхгүй буюу өөрчилсөн байх үед хуурамч алдаануудыг бий болгох боломж байсаар байна. Энэ нь Үйлдлийн системд -д хамааралтай (жишээ нь FIN скан хийх техник) арай бага түгээмэл бус скан хийх техникүүдийн хувьд ялангуяа үнэн байдаг. TCP/IP стек Fingerprinting арга нь тухайн хостын ажиллаж байгаа үйлдлийн системийн төрлийг таах тодорхой стимулаас эдгээр төрлийн сүлжээний хариун дээр тулгуурладаг.

## Төрлүүд 
### TCP скан хайлт 
Хамгийн энгийн порт скан хийгчэд нь сүлжээний үйл ажиллагааг ашиглах, ерөнхийдөө SYN нь (дараагийн тайлбарласан) боломжит сонголт биш байх үед дараагийн сонголт руу явна гэсэн үг. Nmap энэ горимын скантай холбож дууддаг, Unix connect() систем гэж дараа нь нэрлэгдсэн. Порт нээлттэй байвал үйлдлийн систем TCP three-way handshake -г гүйцээдэг ба порт скан хийгч нэн даруй DoS  нөлөөнд өртсөн байна.

Өөр нэг арга нь хэрэглээний давхрын хариулт бий гэж найдаж, хэрэглээний тусгай UDP пакетуудыг илгээх юм. Жишээлбэл, DNS сервер байвал DNS хүсэлтийг порт 53 -руу илгээж хариуд нь үр дүн гаргах болно. Энэ арга нь нээлттэй портуудыг тодорхойлоход илүү найдвартай байдаг. Гэсэн хэдий ч, энэ нь хэрэглээний тусгай шалгасан пакет нээлттэй тул скан хийж буй портууд хязгаарлагдмал байна. Зарим хэрэгсэл (жишээ нь Nmap) ерөнхийдөө 20-аас доошгүй UDP сервис шалгадаг байхад зарим арилжааны хэрэгслүүдэд (жишээ нь Nessus) 70 аас олон байна. Зарим тохиолдолд, сервис нь порт дээр сонсож байж болно гэхдээ тухайн шалгах пакет хариу өгөхгүй байхаар тохируулсан байдаг.

### ACK скан хайлт 
ACK скан нь илүү ер бусын скан төрлийн нэг юм. Энэ нь яг порт нээлттэй эсвэл хаалттай эсэхийг тодорхойлох биш, харин порт шүүгдсэн эсвэл шүүгдээгүй эсэхийг тодорхойлох юм. Энэ нь ялангуяа галт хана оршин байгаа болон түүний дүрмийн олонлогуудын талаар шалгаж оролдох үед сайн. Энгийн пакет шүүлт хийж (ACK бит багцтай пакетуудыг) бий болгосон холболтуудыг зөвшөөрөх болно харин галт хана илүү нарийн төвөгтэй төлөвт биш байж болох юм.

### Window скан хайлт 
Хуучны шинж чанартай учир ховор ашигласан, window скан нь порт нээсэн эсвэл хаасан эсэхийг тодорхойлоход нэлээн найдваргүй юм. Энэ нь ACK скантай адил пакет үүсгэдэг, гэхдээ пакетийн window талбар нь өөрчлөгдсөн шалгадаг. Пакет эцсийн төхөөрөмж дээр хүрэх үед порт нээлттэй бол пакетын хувьд window хэмжээ үүсгэж дизайн алдаа нь 1- тэй пакетийн window талбарын тэмдэглээгээ түүнийг илгээгчрүү буцааж явуулахаас өмнө оролддог. Энэ сканын техникийг ашиглан нээлттэй портыг хаасан гэж тэмдэглэж window талбарын хувьд систем нь энэ хэрэгжилтийг цаашид дэмждэггүй ба 0-ыг буцаан илгээдэг.

### FIN скан хайлт 
SYN сканерын хувьд хангалттай нууц биш болохоор галт хана ерөнхийдөө SYN пакетын

### Бусад скан хайлт 
Илүү ер бусын скан хийх төрөл байдаг. Эдгээрт янз бүрийн хязгаарлалт байдаг бөгөөд өргөн хэрэглэгддэг. Nmap эдгээрийн ихэнхийг дэмждэг.
* [[Xmas Порт скан|X-mas] болон Null скан - FIN скантай төстэй гэхдээ:  
** Xmas нь зул сарын мод шиг асаалттай FIN, URG болон PUSH тэмдэгтэй пакетуудыг илгээдэг
** Null нь ямар нэг TCP тэмдэглэгээгүй пакетыг илгээдэг.
* Протокол скан - IP түвшний протокол (TCP, UDP, GRE гэх мэт) аль нь идэвхжсэн болохыг тодорхойлдог.
* Proxy скан - прокси (SOCKS эсвэл HTTP) скан хийж гүйцэтгэхэд ашигладаг. Бай проксигийн IP хаягийн эх үүсвэрийг харах болно. Үүгээр мөн зарим нэг FTP сервер ашиглан хийж болно.
* Idle скан - Хэн нэгний IP хаяг, урьдчилан таамаглаж болохуйц IP ID алдааны давуу талыг авч илчлэхгүйгээр скан хийх бас нэг арга юм.
* CatSCAN - Алдаатай пакетуудын хувьд портуудыг шалгадаг.
* ICMP скан - Хост ICMP жишээлбэл echo (ping), netmask гэх мэт хүсэлтүүдэд хариу өгөхийг тодорхойлдог.

## Нээлттэй порт илрүүлэх арга 
### Стандарт TCP handshake 
TCP холболт нь алсын төхөөрөмжийн эсрэг дараах процессуудыг дагаж мөрдөхын тулд байгуулагдсан. Гурван үе шаттайгаар байна, эхнийх нь клиент талаас SYN флагтай TCP пакетыг илгээдэг. Хоёр дахь үе шат нь алсын тал SYN/ACK флагтай TCP пакет хариу болгон илгээх. Ийм флагтай бол порт нээлттэй болон сервис ажиллаж байгаа гэсэн үг юм. Гурав дахь үе шат нь клиент талаас ACK флагтай TCP пакетыг илгээх юм. Ингэснээр холболт одоо нээлттэй. Хоёр дахь үе шатанд, хэрвээ порт нь хаалттай бол сервис ажиллаагүй тул RST флагтай TCP пакетыг буцаан илгээдэг. SYN хайлт нь бүрэн TCP холболт хэзээ ч хийгдээгүй ба зөвхөн эхний SYN флаг гэж тэмдэглэгдсэн нэг пакетыг илгээдэг. Энэ нь RST, ACK эсвэл SYN / ACK аль нэг харуиг хүлээдэг. Хэрвээ RST, ACK хариу ирвэл портон дээр ямар нэг юм ачааллаагүй ба порт хаалттай гэсэн үг юм. Харин SYN, ACK хариу хүлээн авсан бол порт нээлттэй ба сервис ажиллаж байна гэдгийг илтгэж байна. Хэрвээ хэд хэд дахин дамжуулалт хийхэд ямар ч хариу өгөхгүй эсвэл түүний хариуд ICMP (type 3, code 1, 2, 3, 9, 10, or 13) гэсэн алдаануудыг зааж байвал тухайн порт галт ханаар шүүлт хийгдсэн гэсэн үг. Мөн түүнээс гадна энэхүү аргаар хайлт хийхэд SYN шидсэний хариуд буцаагаад зөвхөн SYN (ACK байхгүй) ирэхэд портыг нээлттэй байна гэж ойлгож болно. 
 
### UDP хайлт 
TCP нь маш түгээмэл протокол байж болох ч, UDP ч гэсэн адил юм. UDP хайлт нь тухайн хайж буй хостын порт бүр лүү UDP пакет илгээнэ. Нийтлэг сервистэй портууд руу өгөгдөл илгээдэг боловч ихэнх порт руу хоосон өгөгдөл дамжуулдаг байна. DNS болон DHCP гэх мэт сервисийг ашигладаг. Өгөгдлийн уртыг тодорхойлоод санамсаргүй өгөгдлийн хэсгийг тэр чигт нь хааснаас ялгаагүй гэсэн үг. Энэхүү өгөгдлийн хариуд нь ICMP (type 3, code 3) хүршгүй алдаа ирвэл порт хаалттай гэсэн үг. Харин ICMP (type 3, codes 1, 2, 9, 10, or 13) гэсэн хүршгүй алдаанууд ирвэл порт шүүгдсэн гэсэн үг. Цөөхөн тохиолдолд үүний хариуд UDP пакет ирдэг энэ үед тухайн портыг нээлттэй гэж үзнэ. Гол санаа нь UDP пакетийг илгээж хариуг хүлээх юм. Хэрэв хэд дахин дамжуулалтын дараа ч гэсэн ямар нэгэн хариу ирэхгүй байвал тухайн портыг нээлттэй, шүүгдсэн гэж үздэг. UDP хайлтын арга нь хугацаа их зарцуулдаг яагаад гэвэл UDP хайлтаар хайхад түүнд ихэвчлэн ICMP алдааны хариу ирдэг бөгөөд энэ алдааны хариу их удаан илгээгддэг. 
### SCTP INIT хайлт 
Энэ арга нь SCTP-гийн хувьд TCP SYN хайлтын аргатай ижил арга гэж хэлж болно. Энэ арга нь маш хурдан бөгөөд секундэд мянга мянган портыг хайх боломжтойгоос гадна галт ханын хязгаарлалтанд ордоггүй. Мөн түүнчлэн нээлттэй, хаалттай болон шүүгдсэн портуудыг ялгааг сайн гаргаж өгдөг гэх мэт давуу тал олонтой юм. Энэ аргыг хагас нээлттэй хайлт ч гэж нэрлэх нь байдаг учир нь энэ арга SCTP бүрэн холболт хийдэггүй юм. 

Клиент талаас INIT chunk илгээдэг бөгөөд үүний хариуд INIT-ACK ирвэл порт нээлттэй. ABORT chunk ирвэл порт хаалттай харин хэд хэдэн дахин дамжуулалтын дараагаар ямар нэгэн хариу илгээхгүй эсвэл ICMP (type 3, code 1, 2, 3, 9, 10, or 13) төрлийн хүршгүй алдаануудын аль нэг нь ирвэл энэ порт шүүгдсэн гэсэн үг болно.

## Прокси bounce хайлт
Халдагчид нээлттэй прокси серверээр дамжин TCP дайралт хийдэг. Муу тохиргооны түвшингээс хамаарч сервер заримдаа TCP порт хайлтыг дамжуулах боломжыг олгодог. Ийм маягаар bounce хайлтыг гүйцэтгэхийн тулд прокси сервер ашиглаж ихэвчлэн цаг хугацаа шаардах бөгөөд ихэнхи халдагчид бай сүлжээгээр дамжуулан бодит халдлага илүү ашигтай ба нээлттэй прокси сервер руу халдахыг илүүд үздэг. 

## Sniffer-т суурилсан хуурах хайлт
	Jsbach 1998 онд тэрээр Unix-д суурилсан скан хийгч буюу spoofscan -ыг гаргах үед шинэлэг хагас нээлттэй SYN TCP порт хайх арга гэж танигдсан. Spoofscan хэрэгсэл нь нууцаар порт хайлт хийж тухайн хост дээр root болж ажиллах болно.
	Энэ скан хийгчийн шинэлэг болгодог гол онцлог нь холимог горим -д хостын сүлжээний картыг байрлуулдаг, дараа нь дотоод сүлжээний сегмент дээр хариу санал sniff хийх юм. Sniffer-т суурилсан хуурах порт хайлтыг ашиглах үед дараах өвөрмөц ашиг тус шууд ойлгогдох болно:

## TCP NULL, FIN болон Xmas хайлт
Эдгээр аргуудыг мөн хулгайгаар хайх арга ч гэж нэрлэдэг(stealth scan). Хэрэв порт нээлттэй бол ямар нэгэн хариу илгээхгүй. Харин порт хаалттай бол SYN, RST эсвэл ACK гэсэн хариуг илгээнэ.
## Иш татсан 
## Нэмэлт холбоосууд 
* Port Scanning Techniques by Kris Katterjohn.  Includes examples using Nmap and Hping.
* Port Scanning Unscanned by Ankit Fadia
* Teo, Lawrence (December, 2000). Network Probes Explained:  Understanding Port Scans and Ping Sweeps. Linux Journal, Retrieved September 5, 2009, from Linuxjournal.com