Қорғау қабырғасындағы порттарды ашудың қауіпсіздік әдісі – порт соғу. Порттарды сканерлеуден қорғайды, тек дұрыс тізбекпен қосылғанда ғана ашылады. SPA нұсқасы да бар.
Ағылшыншамен салыстырыңыз: абзацты басыңыз — түпнұсқа терезеде ашылады. Абзац астындағы EN түймесі оны мәтін ішінде көрсетеді.
Мазмұны
Кіріспе
Өрт қабырғасындағы порттарды сырттан ашу әдісі
Method of externally opening ports on a firewall
Компьютерлік желілерде, портты қағу – бұл алдын ала белгіленген жабық порттар жиынтығына қосылу әрекетін жасау арқылы өрт қабырғасындағы порттарды сырттан ашу әдісі. Қосылу әрекеттерінің дұрыс тізбегі алынғаннан кейін, өрт қабырғасының ережелері динамикалық түрде өзгертіліп, қосылу әрекеттерін жіберген хостқа белгілі бір порт(тар) арқылы қосылуға рұқсат беріледі. Шифрланған пакеттен тұратын бір ғана "қағу" қажет болатын бір пакеттік авторизациялау (SPA) деп аталатын түрі де бар. Портты қағудың басты мақсаты – шабуылшыны портты сканерлеу арқылы жүйеде әлсіздіктерді іздеуден қорғау, себебі шабуылшы дұрыс қағу тізбегін жібермесе, қорғалған порттар жабық болып көрінеді.
In computer networking, port knocking is a method of externally opening ports on a firewall by generating a connection attempt on a set of prespecified closed ports. Once a correct sequence of connection attempts is received, the firewall rules are dynamically modified to allow the host which sent the connection attempts to connect over specific port(s). A variant called single packet authorization (SPA) exists, where only a single "knock" is needed, consisting of an encrypted packet. The primary purpose of port knocking is to prevent an attacker from scanning a system for potentially exploitable services by doing a port scan, because unless the attacker sends the correct knock sequence, the protected ports will appear closed.
Шолу
Порт-қағу әдетте, белгілі бір нүктелерге қосылу әрекеттерін бақылау үшін брандмауэр журналын қарауға және содан кейін брандмауэр конфигурациясын сәйкесінше өзгертуге арналған демонды конфигурациялау арқылы іске асырылады. Ол ядро деңгейінде де (iptables сияқты ядролық деңгейдегі пакет сүзгісін пайдалану арқылы) немесе пакеттерді жоғары деңгейде тексеру арқылы (pcap сияқты пакеттерді ұстау интерфейстерін пайдалану арқылы) орындалуы мүмкін, бұл қағу тізбегінде бұрыннан "ашық" TCP порттарын пайдалануға мүмкіндік береді. Портты "қағу" құпия қол алысуға ұқсас және кез келген саннан тұруы мүмкін TCP, UDP, тіпті кейде ICMP және басқа да протокол пакеттерінен, мақсаттағы машинадағы нөмірленген порттарға. Қағудың күрделілігі қарапайым реттелген тізімнен (мысалы, TCP порт 1000, TCP порт 2000, UDP порт 3000) бастап, уақытқа тәуелді, IP-адреске негізделген және басқа факторларға негізделген шифрланған хэштің күрделі түріне дейін болуы мүмкін. Брандмауэрдегі портқағу демоны белгілі бір порттардағы пакеттерді тыңдайды (брандмауэр журналы арқылы немесе пакеттерді ұстау арқылы). Клиент пайдаланушы қосымша құралмен жабдықталады, ол netcat немесе өзгертілген пинг бағдарламасы сияқты қарапайым немесе толық хэш генераторы сияқты күрделі болуы мүмкін, және оны әдеттегідей машинаға қосылуға тырысудан бұрын пайдаланады. Көптеген портқағу жүйелері күйлі болып табылады, яғни егер "қағудың" бірінші бөлігі сәтті қабылданса, дұрыс емес екінші бөлігі қашықтан пайдаланушыға жалғастыруға мүмкіндік бермейді және олардың қашан сәтсіз аяқталғаны туралы ешқандай ақпарат бермейді. Әдетте, сәтсіздіктің жалғыз белгісі – қағу тізбегінің соңында күтілген порт ашылмайды. Ешқандай пакет қашықтан пайдаланушыға жіберілмейді. Қауіпсіздік қауымдастығы қашықтан желілік демонға қол жеткізуді қамтамасыз етудің осы әдісін кеңінен қабыланбағанмен, ол 2000 жылға дейін көптеген rootkit-терде белсенді қолданылған.
Port knocking is usually implemented by configuring a daemon to watch the firewall log file for connection attempts to certain points, and then to modify the firewall configuration accordingly. It can also be performed on the kernel level (using a kernel level packet filter such as iptables) or by a userspace process examining packets at a higher level (using packet capture interfaces such as pcap), allowing the use of already "open" TCP ports to be used within the knock sequence. The port "knock" itself is similar to a secret handshake and can consist of any number of TCP, UDP or even sometimes ICMP and other protocol packets to numbered ports on the destination machine. The complexity of the knock can be anything from a simple ordered list (e. g. TCP port 1000, TCP port 2000, UDP port 3000) to a complex time dependent, source IP based and other factor based encrypted hash. A portknock daemon on the firewall machine listens for packets on certain ports (either via the firewall log or by packet capture). The client user would carry an extra utility, which could be as simple as netcat or a modified ping program or as complicated as a full hash generator, and use that before they attempted to connect to the machine in the usual way. Most portknocks are stateful systems in that if the first part of the "knock" has been received successfully, an incorrect second part would not allow the remote user to continue and, indeed, would give the remote user no clue as to how far through the sequence they failed. Usually the only indication of failure is that, at the end of the knock sequence, the port expected to be open is not opened. No packets are sent to the remote user at any time. While this technique for securing access to remote network daemons has not been widely adopted by the security community, it has been actively used in many rootkits even before year 2000.
Артықшылықтары
Порт-нақылдауды жеңу үшін тіпті қарапайым тізбектерді анықтау үшін үлкен көлемде күш қолдану шабуылдары қажет. Үш реттік TCP тізбегіне қарсы анонимді күш қолдану шабуылы (мысалы, 1000, 2000, 3000 порттары) шабуылшыдан 1–65535 диапазонындағы әр үш порттың барлық комбинациясын тексеруді және содан кейін мақсатты жүйедегі порттарға қол жеткізудегі өзгерістерді анықтау үшін шабуылдар арасында әр портты сканерлеуді талап етеді. Порт-нақылдау, өзінің мәні бойынша күйлі болғандықтан, сұралған порт дұрыс үш порт нөмірінің тізбегі дұрыс ретпен алынғанға дейін және бастапқы көзден келген басқа пакеттер алынбағанша ашылмайды. Орташа жағдайда дұрыс үш порт нөмірін анықтау үшін шамамен 141 триллион (655353 / 2) пакет қажет. Бұл техника, соққы жасау әрекеттерін шектеу, ұзақ немесе күрделі тізбектер және криптографиялық хэштермен біріктірілгенде, портқа сәтті кіру әрекеттерін өте қиын етеді. Портты ашу үшін сәтті порт-нақылдау тізбегі берілгеннен кейін, өрт қабырғасының ережелері әдетте портты тек дұрыс соққы берген IP-адреске ғана ашады, бұл өрт қабырғасының мінез-құлқына динамикалық мүмкіндік қосады. Өрт қабырғасында алдын ала конфигурацияланған статикалық IP тізімін пайдаланудың орнына, әлемнің кез келген жерінде орналасқан уәкілетті пайдаланушы сервер әкімшісінің көмегінсіз қажетті кез келген портты аша алады. Жүйені сондай-ақ аутентификацияланған пайдаланушыға сеанс аяқталғаннан кейін портты қолмен жабуға немесе таймер механизмін пайдалану арқылы автоматты түрде жабуға мүмкіндік беру үшін конфигурациялауға болады. Жаңа сеансты орнату үшін қашықтағы пайдаланушы дұрыс тізбекті пайдаланып қайта аутентификациядан өтуі керек. Порт-нақылдаудың күйлі мінез-құлқы әртүрлі IP-адрестерден келген бірнеше пайдаланушыларға порт-нақылдаудың әртүрлі деңгейлерін бір уақытта өтуге мүмкіндік береді, бұл өрт қабырғасы бірнеше IP-адрестерден портқа шабуыл жасап жатқанда, егер өрт қабырғасының өткізу қабілеті толыққанды тұтылмаса, дұрыс соққы тізбегін қолданатын заңды пайдаланушыға өтуге мүмкіндік береді. Кез келген басқа шабуылдаушы IP-адрестен, өрт қабырғасындағы порттар жабық болып көрінеді. Порт-нақылдау тізбегінде криптографиялық хэштерді пайдалану бастапқы және мақсатты машиналар арасындағы пакеттерді ұрлауға қарсы қорғаныс жүзеге асырады, порт-нақылдау тізбегін анықтауға немесе трафикті қайталау шабуылдарын жасау үшін ақпаратты пайдалануға жол бермейді. Порт-нақылдау тереңдік бойынша қорғаныс стратегиясының бір бөлігі ретінде қолданылады. Егер шабуылшы портқа кіруге сәтті қол жеткізсе де, басқа порттық қауіпсіздік механизмдері әлі де қолданылады, сонымен қатар ашылған порттардағы тағайындалған қызметтердің аутентификация механизмдері де бар. Техниканы іске асыру оңай, ең болмағанда серверде баптау скриптін және клиентте Windows пакеттік файлы немесе командалық қатарлы утилита қолданылады. Серверде де, клиентте де трафик, процессор және жадты тұтыну бойынша қосымша шығындар өте аз. Порт-нақылдау демондарын кодтау күрделі емес, аудит жүктемесі төмен. SSH сияқты парольмен аутентификацияланған қызметтерде іске асырылған порт-нақылдау жүйесі кірулерге парольді күшпен қолдану мәселесін айналып өтеді. SSH жағдайында, SSH демоны дұрыс порт-нақылдау болмаса белсендірілмейді және шабуыл SSH аутентификация ресурстарын пайдаланудың орнына TCP/IP стегімен сүзгіленеді. Шабуылшы үшін, дұрыс порт-нақылдау берілгенге дейін, демон қолжетімді емес.
Defeating port knocking protection requires large scale brute force attacks in order to discover even simple sequences. An anonymous brute force attack against a three knock TCP sequence (e. g. port 1000, 2000, 3000) would require an attacker to test every three port combination in the 1–65535 range and then scan each port between attacks to uncover any changes in port access on the target system. Since port knocking is by definition stateful, the requested port would not open until the correct three port number sequence had been received in the correct order and without receiving any other intervening packets from the source. The average case scenario requires approximately 141 trillion (655353 / 2) packets to determine a correct three port number. This technique, in combination with knock attempt limiting, longer or more complex sequences and cryptographic hashes, makes successful port access attempts extremely difficult. Once the successful port knock sequence is supplied to open a port, firewall rules generally only open the port to the IP address that supplied the correct knock, adding dynamic functionality to firewall behaviour. Instead of using a preconfigured static IP whitelist on the firewall, an authorised user situated anywhere in the world would be able to open any necessary port without assistance from the server administrator. The system could also be configured to allow the authenticated user to manually close the port once the session is over or to have it close automatically using a timeout mechanism. To establish a new session, the remote user would be required to reauthenticate using the correct sequence. The stateful behaviour of port knocking allows several users from different source IP addresses to be at varying levels of port knock authentication simultaneously, allowing a legitimate user with the correct knock sequence through the firewall while the firewall itself is in the middle of a port attack from multiple IP addresses (assuming the bandwidth of the firewall is not completely consumed). From any other attacking IP address, the ports on the firewall will still appear to be closed. Using cryptographic hashes inside the port knock sequence defends against packet sniffing between the source and target machines, preventing discovery of the port knock sequence or using the information to create traffic replay attacks to repeat prior port knock sequences. Port knocking is used as part of a defense in depth strategy. Even if the attacker were to successfully gain port access, other port security mechanisms are still in place, along with the assigned service authentication mechanisms on the opened ports. Implementation of the technique is straightforward, using at the bare minimum a shell script on the server and a Windows batch file or command line utility on the client. Overhead on both the server and client in terms of traffic, CPU and memory consumption is minimal. Port knock daemons are not complex to code, with a low audit burden. A port knock system implemented on password authenticated services, like SSH, sidesteps the issue of brute force password attacks on logins. In the case of SSH, the SSH daemon is not activated without the correct port knock, and the attack is filtered by the TCP/IP stack rather than using SSH authentication resources. To the attacker, the daemon is inaccessible until the correct port knock is supplied.
Қауіпсіздік мәселелері
Порт-тоқылдау – икемді, конфигурацияланатын жүйелік қосымша. Әкімші шелл-скриптіні іске қосу сияқты әрекетті тоқылдаумен байланыстырса, скриптке қосымша IP-адрестер үшін порттарды ашуға арналған қосымша қауіпсіздік қабырға ережелерін енгізу сияқты басқа өзгерістерді оңай қосуға болады. Бір уақыттағы сессиялар оңай қолдауға алынады. Динамикалық ұзындық және ұзындықтар жиынтығы сияқты стратегияларды пайдалану арқылы, тоқылдау тізбегін бұзу ықтималдығы дерлік нөлге дейін төмендетілуі мүмкін. Порт-тоқылдау күшпен парольді бұзу шабуылдарынан қорғаумен қатар, протоколдың осалдықтарын пайдаланудан да сақтайды. Егер әдепкі конфигурациясында демонды бұзуға болатын қателік табылса, тыңдау портында порт-тоқылдауды пайдалану бағдарламалық жасақтама немесе процесс жаңартылғанға дейін бұзу мүмкіндігін азайтады. Рұқсат етілген пайдаланушылар дұрыс тоқылдау тізбегін ұсынғаннан кейін қызмет алуын жалғастырады, ал кездейсоқ кіру әрекеттері назардан тыс қалады. Порт-тоқылдауды желінің жалпы қорғаныс стратегиясының бір бөлігі ретінде қарастыру керек, ол кездейсоқ және мақсатты шабуылдардан қорғауды қамтамасыз етеді, толық дербес шешім ретінде емес. Желілік қауіпсіздік мамандары бұрын порт-тоқылдауды шешім ретінде елемеді, себебі алғашқы іске асырулар тек қана қол жеткізу үшін порттардың дұрыс комбинациясын ұсынуға негізделген. Қазіргі заманғы порт-тоқылдау жүйелері жүйелік мүмкіндіктерді одан әрі арттыру үшін қауіпсіз криптографиялық хэштер, қара тізімдер, ақ тізімдер және динамикалық шабуылға жауаптар сияқты мүмкіндіктерді қамтиды. Порт-тоқылдау – интернетке қаратылған желілерде сервер ресурстарын барынша пайдаланудың тиімді құралы. Дұрыс іске асырылған порт-тоқылдау жүйенің жалпы қауіпсіздігін төмендетпейді. Бұл минималды сервер ресурстарын қолдана отырып, қосымша қауіпсіздік қабатын қамтамасыз ететін тиімді шара. Ең нашар жағдайда, порт-тоқылдау сияқты жүйелер нашар іске асыру арқылы жаңа қауіпсіздік мәселелерін тудыруы немесе тәуекелді өтеу сияқты жағдайлар арқылы әкімшілік көзқарастың беймазалығын ашық көрсетуі мүмкін.
Port knocking is a flexible, customisable system add in. If the administrator chooses to link a knock sequence to an activity such as running a shell script, other changes such as implementing additional firewall rules to open ports for specific IP addresses can easily be incorporated into the script. Simultaneous sessions are easily accommodated. By using strategies like dynamic length and pool of length, the probability of hacking knock sequences can be reduced to near zero. In addition to mitigating brute force password attacks and the inevitable growth in logs associated with the process daemon, port knocking also protects against protocol vulnerability exploits. If an exploit were discovered that could compromise a daemon in its default configuration, using port knocking on the listening port reduces the possibility of compromise until the software or process is updated. Authorized users would continue to be served once they provide the correct knock sequence while random access attempts would be ignored. Port knocking should only be viewed as part of an overall network defense strategy providing protection against random and targeted attacks, not as complete standalone solution. Network security professionals have largely ignored port knocking as a solution in the past since early implementations relied solely on providing the correct port combinations to achieve access. Modern port knock systems incorporate features such as secure cryptographic hashes, blacklists, whitelists and dynamic attack responses to further increase system capability. Port knocking is an effective means of maximizing server resources on internet facing networks. Properly implemented port knocking does not lower the overall security of a system. It is an effective measure that provides an additional layer of security with minimal server resource overhead. At worst, systems such as port knocking introduce new security issues through poor implementation or expose ambivalent administration attitudes through situations such as risk compensation.
Кемшіліктер
Порт-нақылдау порт-нақылдау демонының сенімділігіне толыққанды тәуелді. Демонның жұмысын тоқтатуы барлық пайдаланушыларға портқа қол жеткізуді жоққа шығарады және пайдалану және қауіпсіздік тұрғысынан бұл қателікке бейім, жағымсыз бір тұс болып табылады. Қазіргі заманғы порт-нақылдау жүзеге асырулары бұл мәселені процесті бақылайтын демонды ұсына отырып шешеді, ол істен шыққан немесе тоқтап қалған порт-нақылдау демон процесін қайта іске қосады. Криптографиялық хэштерді пайдаланбайтын жүйелер IP-адресті жалғандау шабуылдарына осал. Қызметтен бас тартудың бір түрі болып табылатын бұл шабуылдар, порт-нақылдау мүмкіндігін пайдаланып, белгілі IP-адрестерді (мысалы, әкімшілік басқару станцияларын) кездейсоқ порттарға жалған IP-адресті пакеттерді жіберу арқылы құлыптай алады. Статикалық адрестеуді пайдаланатын серверлер осы типтегі қызметтен бас тартуға әсіресе осал, өйткені олардың адрестері жақсы белгілі. Порт-нақылдау жоғары задерлі желілерде қиындықтар тудыруы мүмкін. Порт-нақылдау, жобаланған функционалдығына қол жеткізу үшін пакеттердің дұрыс реттілікпен келуіне тәуелді. Ал TCP/IP, пакеттерді ретіне келтірмей жинау арқылы байланыс құруға арналған. Мұндай жағдайларда, клиенттің жалғыз шешімі – сервер пакеттердің дұрыс реттілігін мойындағанға дейін, оларды белгілі бір уақыт аралығында қайта жіберу. Порт-нақылдау серверді аутентификациялаудың жалғыз механизмі ретінде қолданылмауы керек. Қауіпсіздік тұрғысынан қарапайым порт-нақылдау құпиялылық арқылы қауіпсіздікке сенеді; соққы реттілігінің кездейсоқ жариялануы, осы реттілікті қолдайтын барлық құрылғылардың бұзылуына әкеледі. Сонымен қатар, шифрланбаған порт-нақылдау пакеттерді ұстап алуға осал. Тиісті ұзындықтағы желілік із, бір IP-адрестен дұрыс соққы реттілігін анықтай алады және осылайша серверге, ал одан әрі қосылған желіге рұқсатсыз кіруге мүмкіндік береді. Бұзылған жағдайда, құрылғыдағы журнал файлдары басқа жарамды соққы реттіліктерінің көзі болып табылады, бұл тағы бір қателік тұсын көрсетеді. Әрбір соққы реттілігін бір реттік пароль ретінде қарастыру сияқты шешімдер, басқаруды жеңілдету мақсатын жоққа шығарады. Іс жүзінде, порт-нақылдауды қайта ойнатуға немесе ортадағы адам шабуылдарына осал емес, басқа аутентификация түрлерімен біріктіру қажет, сонда ғана жүйе толыққанды тиімді болады.
Port knocking is totally dependent on the robustness of the port knocking daemon. The failure of the daemon will deny port access to all users and from a usability and security perspective, this is an undesirable single point of failure. Modern port knocking implementations mitigate this issue by providing a process monitoring daemon that will restart a failed or stalled port knocking daemon process. Systems that do not use cryptographic hashes are vulnerable to IP address spoofing attacks. These attacks, a form of Denial of service, use port knocking functionality to lock out known IP addresses (e. g. administrator management stations) by sending packets with the spoofed IP address to random ports. Servers using static addressing are especially vulnerable to these types of denials of service as their addresses are well known. Port knocking can be problematic on networks exhibiting high latency. Port knocking depends on packets arriving in the correct sequence to access its designed functionality. TCP/IP, on the other hand, is designed to function by assembling out of order packets into a coherent message. In these situations, the only solution is for the client to continue resending the correct sequence of packets on a periodic basis until the sequence is acknowledged by the server. Port knocking cannot be used as the sole authentication mechanism for a server. From a security perspective, simple port knocking relies on security through obscurity; unintended publication of the knock sequence infers compromise of all devices supporting the sequence. Furthermore, unencrypted port knocking is vulnerable to packet sniffing. A network trace of suitable length can detect the correct knock sequence from a single IP address and thus provide a mechanism for unauthorised access to a server and by extension, the attached network. Once compromised, the log files on the device are a source of other valid knock sequences, revealing another point of failure. Solutions such as treating each knock sequence as a one time password defeat the aim of simplified administration. In practice, port knocking must be combined with other forms of authentication that are not vulnerable to replay or man in the middle attacks for the whole system to be effective.