Как да скриете порт от сканиране

Статията се занимава с проблема със скриването на портове, използвани от програми или демони. Предполага се протоколът tcp, въпреки че някои изчисления се отнасят и за udp (дори по-просто). По принцип скриването на троянски кон и работата с него може да се направи и чрез icmp, но целта на тази статия беше да разгледаме специално скриването на портове.

Да предположим, че поставим руткит на жертвата на хоста - всичко изглежда готино, системата е троянизирана и, като сме на тази машина, трудно можем да открием този троянски кон, а ако самото ядро ​​също е троянизирано, тогава това не е тривиална задача. Но администраторът се сети да сканира тази машина от други хостове и да установи, че е отворен порт, който преди това не е бил използван на тази машина. След като се увери, че този порт не трябва да е отворен тук, той анализира системата и открива вашия руткит, кръпва системата и все повече и повече вие ​​нямате тази обвивка.

Сега помислете как можем да заблудим скенера, така че да не можем да бъдем открити. Както знаете, връзката се установява на 3 етапа - това е така нареченото "тристранно ръкостискане" (rfc793).

Първо, нека да разгледаме стандартната настройка на връзката. На първия етап получаваме заявка за връзка под формата - SYN.

След това изпращаме нашата заявка за връзка и потвърждаваме получаването на последователността - SYN, ACK. Накрая получаваме потвърждение за нашата последователност.

Така връзката беше успешно установена.

Сега нека да видим какво се случва, ако сървърът откаже да се свърже (т.е. ако, например, нашият порт не е отворен).

Получихме заявка за връзка - SYN.

защото портът не слуша, тогава ядрото отговаря с отговора - RST, ACK. Т.е. връзката не еинсталиран - в общия случай това означава, че портът не слуша или там е инсталирана и правилно конфигурирана защитна стена.

За да подобрите системата за сигурност на нашия порт, можете също да добавите удостоверяване (проверка на потребителя за съответствие). Това означава, че връзката е направена само ако низът е идентифициран. Можете да използвате криптография с публичен ключ за удостоверяване на клиента. Клиентът има таен ключ, с който криптира низ за идентификация и някаква произволна последователност. Полученият низ се изпраща на сървъра заедно с произволна последователност. От страната на сървъра има публичен ключ (е, няма да оставим тайния ключ зад вражеските линии), който декриптира низа, който след това се разделя за проверка с вътрешния низ и произтичащата произволна последователност. По този начин намаляваме вероятността да открием нашия троян - дори ако се появи специализиран скенер (въпреки че е трудно да се направи това, ако се използва криптография) на нашия руткит, и истинският низ за идентификация няма да се вижда в трафика. По принцип е възможно да се шифрова целият трафик между клиента и сървъра.

Така че, с подходящо ниво на "невидимост" на нашия руткит на жертвения хост (скриване на процеси, отворени портове и т.н.) - като скрием порта, можем да увеличим неговата прозрачност за външни очи - получаваме почти доживотна разходка (докато някой реши да пренареди системата), или няма да бъдем раздадени от някой IDS, който е открил подозрителен трафик на неизвестен порт при условие, че той също е затворен.