Slazds (tarpit) ienākošajiem SSH savienojumiem

Nav noslēpums, ka internets ir ļoti naidīga vide. Tiklīdz paceļat serveri, tas uzreiz tiek pakļauts masveida uzbrukumiem un vairākkārtējai skenēšanai. Piemēram meduspods no apsardzes jūs varat novērtēt šīs atkritumu plūsmas mērogu. Faktiski vidējā serverī 99% trafika var būt ļaunprātīga.

Tarpit ir slazdošanas ports, ko izmanto, lai palēninātu ienākošos savienojumus. Ja šim portam pievienojas trešās puses sistēma, savienojumu nevarēs ātri aizvērt. Viņai būs jātērē savi sistēmas resursi un jāgaida, līdz beidzas savienojuma taimauts, vai arī tas manuāli jāpārtrauc.

Visbiežāk aizsardzībai izmanto tarpitus. Paņēmiens vispirms tika izstrādāts, lai aizsargātu pret datoru tārpiem. Un tagad to var izmantot, lai sabojātu surogātpasta izplatītāju un pētnieku dzīvi, kuri nodarbojas ar visu IP adrešu plašu skenēšanu pēc kārtas (piemēri par Habré: Austrija, Ukraina).

Vienam no sistēmas administratoriem, vārdā Kriss Velonss, acīmredzot apnika skatīties šo apkaunojumu, un viņš uzrakstīja nelielu programmu Bezgalīgs, tarpit SSH, kas palēnina ienākošos savienojumus. Programma atver portu (noklusējuma ports testēšanai ir 2222) un izliekas par SSH serveri, bet patiesībā tā izveido bezgalīgu savienojumu ar ienākošo klientu, līdz tas atsakās. Tas var turpināties vairākas dienas vai ilgāk, līdz klients nokrīt.

Lietderības uzstādīšana:

$ make
$ ./endlessh &
$ ssh -p2222 localhost

Pareizi ieviests tarpit prasīs vairāk resursu no uzbrucēja nekā no jums. Bet tas nav pat jautājums par resursiem. Autors rakstaka programma rada atkarību. Šobrīd tajā ir iesprostoti 27 klienti, daži no tiem ir savienoti nedēļām ilgi. Aktivitātes maksimumā uz 1378 stundām bija iesprostoti 20 klienti!

Darbības režīmā Endlessh serveris jāinstalē parastajā 22. portā, kur masveidā klauvē huligāni. Standarta drošības ieteikumi vienmēr iesaka pārvietot SSH uz citu portu, kas nekavējoties samazina žurnālu lielumu par lielumu.

Kriss Velons saka, ka viņa programma izmanto vienu specifikācijas punktu RFC 4253 uz SSH protokolu. Tūlīt pēc TCP savienojuma izveides, bet pirms kriptogrāfijas lietošanas, abām pusēm ir jānosūta identifikācijas virkne. Un ir arī piezīme: "Serveris VAR sūtīt citas datu rindas pirms versijas rindas nosūtīšanas". Un nav ierobežojumu par šo datu apjomu, jums vienkārši jāsāk katra rinda ar SSH-.

Tas ir tieši tas, ko dara Endlessh programma: tā sūta bezgalīgs nejauši ģenerētu datu plūsma, kas atbilst RFC 4253, tas ir, nosūta pirms autentifikācijas, un katra rinda sākas ar SSH- un nepārsniedz 255 rakstzīmes, ieskaitot rindiņas beigu rakstzīmi. Kopumā viss ir pēc standarta.

Pēc noklusējuma programma gaida 10 sekundes starp pakešu nosūtīšanu. Tas novērš klienta taimautu, tāpēc klients būs iesprostots uz visiem laikiem.

Tā kā dati tiek nosūtīti pirms kriptogrāfijas piemērošanas, programma ir ļoti vienkārša. Tam nav jāievieš nekādi šifri, un tas atbalsta vairākus protokolus.

Autore centās nodrošināt, lai utilīta patērē minimālu resursu un strādā pilnīgi nepamanīti uz mašīnas. Atšķirībā no mūsdienu antivīrusiem un citām "drošības sistēmām", tam nevajadzētu palēnināt datora darbību. Viņam izdevās samazināt gan trafika, gan atmiņas patēriņu, pateicoties nedaudz viltīgākai programmatūras ieviešanai. Ja tas vienkārši uzsāktu atsevišķu procesu jaunam savienojumam, potenciālie uzbrucēji varētu uzsākt DDoS uzbrukumu, atverot vairākus savienojumus, lai iztērētu iekārtas resursus. Viens pavediens vienam savienojumam arī nav labākais risinājums, jo kodols tērēs resursus, pārvaldot pavedienus.

Tāpēc Kriss Velons izvēlējās visvieglāko Endlessh opciju: viena pavediena serveri. poll(2), kur iesprostotie klienti praktiski nepatērē papildu resursus, izņemot kodola ligzdas objektu un papildu 78 baitus izsekošanai Endlessh. Lai izvairītos no saņemšanas un nosūtīšanas buferu piešķiršanas katram klientam, Endlessh atver tiešas piekļuves ligzdu un tieši pārraida TCP paketes, ignorējot gandrīz visu steku. TCP/IP operētājsistēma. Ievades buferis vispār nav nepieciešams, jo mūs neinteresē ienākošie dati.

Autors saka, ka viņa programmas laikā nezināju par Python asycio un citu tarpitu esamību. Ja viņš zinātu par asycio, viņš Python varētu ieviest savu utilītu tikai 18 rindās:

import asyncio
import random

async def handler(_reader, writer):
try:
while True:
await asyncio.sleep(10)
writer.write(b'%xrn' % random.randint(0, 2**32))
await writer.drain()
except ConnectionResetError:
pass

async def main():
server = await asyncio.start_server(handler, '0.0.0.0', 2222)
async with server:
await server.serve_forever()

asyncio.run(main())

Asyncio ir ideāli piemērots tarpitu rakstīšanai. Piemēram, šis āķis iesaldēs Firefox, Chrome vai jebkuru citu klientu, kas daudzas stundas mēģina izveidot savienojumu ar jūsu HTTP serveri:

import asyncio
import random

async def handler(_reader, writer):
writer.write(b'HTTP/1.1 200 OKrn')
try:
while True:
await asyncio.sleep(5)
header = random.randint(0, 2**32)
value = random.randint(0, 2**32)
writer.write(b'X-%x: %xrn' % (header, value))
await writer.drain()
except ConnectionResetError:
pass

async def main():
server = await asyncio.start_server(handler, '0.0.0.0', 8080)
async with server:
await server.serve_forever()

asyncio.run(main())

Tarpit ir lielisks rīks tiešsaistes iebiedētāju sodīšanai. Tiesa, pastāv zināms risks, gluži pretēji, pievērst viņu uzmanību konkrēta servera neparastajai uzvedībai. Kāds varētu domāt par atriebību un mērķtiecīgs DDoS uzbrukums jūsu IP. Taču līdz šim tādu gadījumu nav bijis, un tarpits strādā lieliski.

Centrmezgli:
Python, Informācijas drošība, Programmatūra, Sistēmu administrēšana

Tags:
SSH, Endlessh, tarpit, tarpit, trap, asycio
Slazds (tarpit) ienākošajiem SSH savienojumiem

Nav noslēpums, ka internets ir ļoti naidīga vide. Tiklīdz paceļat serveri, tas uzreiz tiek pakļauts masveida uzbrukumiem un vairākkārtējai skenēšanai. Piemēram meduspods no apsardzes jūs varat novērtēt šīs atkritumu plūsmas mērogu. Faktiski vidējā serverī 99% trafika var būt ļaunprātīga.

Tarpit ir slazdošanas ports, ko izmanto, lai palēninātu ienākošos savienojumus. Ja šim portam pievienojas trešās puses sistēma, savienojumu nevarēs ātri aizvērt. Viņai būs jātērē savi sistēmas resursi un jāgaida, līdz beidzas savienojuma taimauts, vai arī tas manuāli jāpārtrauc.

Visbiežāk aizsardzībai izmanto tarpitus. Paņēmiens vispirms tika izstrādāts, lai aizsargātu pret datoru tārpiem. Un tagad to var izmantot, lai sabojātu surogātpasta izplatītāju un pētnieku dzīvi, kuri nodarbojas ar visu IP adrešu plašu skenēšanu pēc kārtas (piemēri par Habré: Austrija, Ukraina).

Vienam no sistēmas administratoriem, vārdā Kriss Velonss, acīmredzot apnika skatīties šo apkaunojumu, un viņš uzrakstīja nelielu programmu Bezgalīgs, tarpit SSH, kas palēnina ienākošos savienojumus. Programma atver portu (noklusējuma ports testēšanai ir 2222) un izliekas par SSH serveri, bet patiesībā tā izveido bezgalīgu savienojumu ar ienākošo klientu, līdz tas atsakās. Tas var turpināties vairākas dienas vai ilgāk, līdz klients nokrīt.

Lietderības uzstādīšana:

$ make
$ ./endlessh &
$ ssh -p2222 localhost

Pareizi ieviests tarpit prasīs vairāk resursu no uzbrucēja nekā no jums. Bet tas nav pat jautājums par resursiem. Autors rakstaka programma rada atkarību. Šobrīd tajā ir iesprostoti 27 klienti, daži no tiem ir savienoti nedēļām ilgi. Aktivitātes maksimumā uz 1378 stundām bija iesprostoti 20 klienti!

Darbības režīmā Endlessh serveris jāinstalē parastajā 22. portā, kur masveidā klauvē huligāni. Standarta drošības ieteikumi vienmēr iesaka pārvietot SSH uz citu portu, kas nekavējoties samazina žurnālu lielumu par lielumu.

Kriss Velons saka, ka viņa programma izmanto vienu specifikācijas punktu RFC 4253 uz SSH protokolu. Tūlīt pēc TCP savienojuma izveides, bet pirms kriptogrāfijas lietošanas, abām pusēm ir jānosūta identifikācijas virkne. Un ir arī piezīme: "Serveris VAR sūtīt citas datu rindas pirms versijas rindas nosūtīšanas". Un nav ierobežojumu par šo datu apjomu, jums vienkārši jāsāk katra rinda ar SSH-.

Tas ir tieši tas, ko dara Endlessh programma: tā sūta bezgalīgs nejauši ģenerētu datu plūsma, kas atbilst RFC 4253, tas ir, nosūta pirms autentifikācijas, un katra rinda sākas ar SSH- un nepārsniedz 255 rakstzīmes, ieskaitot rindiņas beigu rakstzīmi. Kopumā viss ir pēc standarta.

Pēc noklusējuma programma gaida 10 sekundes starp pakešu nosūtīšanu. Tas novērš klienta taimautu, tāpēc klients būs iesprostots uz visiem laikiem.

Tā kā dati tiek nosūtīti pirms kriptogrāfijas piemērošanas, programma ir ļoti vienkārša. Tam nav jāievieš nekādi šifri, un tas atbalsta vairākus protokolus.

Autore centās nodrošināt, lai utilīta patērē minimālu resursu un strādā pilnīgi nepamanīti uz mašīnas. Atšķirībā no mūsdienu antivīrusiem un citām "drošības sistēmām", tam nevajadzētu palēnināt datora darbību. Viņam izdevās samazināt gan trafika, gan atmiņas patēriņu, pateicoties nedaudz viltīgākai programmatūras ieviešanai. Ja tas vienkārši uzsāktu atsevišķu procesu jaunam savienojumam, potenciālie uzbrucēji varētu uzsākt DDoS uzbrukumu, atverot vairākus savienojumus, lai iztērētu iekārtas resursus. Viens pavediens vienam savienojumam arī nav labākais risinājums, jo kodols tērēs resursus, pārvaldot pavedienus.

Tāpēc Kriss Velons izvēlējās visvieglāko Endlessh opciju: viena pavediena serveri. poll(2), kur iesprostotie klienti praktiski nepatērē papildu resursus, izņemot kodola ligzdas objektu un papildu 78 baitus izsekošanai Endlessh. Lai izvairītos no saņemšanas un nosūtīšanas buferu piešķiršanas katram klientam, Endlessh atver tiešas piekļuves ligzdu un tieši pārraida TCP paketes, ignorējot gandrīz visu steku. TCP/IP operētājsistēma. Ievades buferis vispār nav nepieciešams, jo mūs neinteresē ienākošie dati.

Autors saka, ka viņa programmas laikā nezināju par Python asycio un citu tarpitu esamību. Ja viņš zinātu par asycio, viņš Python varētu ieviest savu utilītu tikai 18 rindās:

import asyncio
import random

async def handler(_reader, writer):
    try:
        while True:
            await asyncio.sleep(10)
            writer.write(b'%xrn' % random.randint(0, 2**32))
            await writer.drain()
    except ConnectionResetError:
        pass

async def main():
    server = await asyncio.start_server(handler, '0.0.0.0', 2222)
    async with server:
        await server.serve_forever()

asyncio.run(main())

Asyncio ir ideāli piemērots tarpitu rakstīšanai. Piemēram, šis āķis iesaldēs Firefox, Chrome vai jebkuru citu klientu, kas daudzas stundas mēģina izveidot savienojumu ar jūsu HTTP serveri:

import asyncio
import random

async def handler(_reader, writer):
    writer.write(b'HTTP/1.1 200 OKrn')
    try:
        while True:
            await asyncio.sleep(5)
            header = random.randint(0, 2**32)
            value = random.randint(0, 2**32)
            writer.write(b'X-%x: %xrn' % (header, value))
            await writer.drain()
    except ConnectionResetError:
        pass

async def main():
    server = await asyncio.start_server(handler, '0.0.0.0', 8080)
    async with server:
        await server.serve_forever()

asyncio.run(main())

Tarpit ir lielisks rīks tiešsaistes iebiedētāju sodīšanai. Tiesa, pastāv zināms risks, gluži pretēji, pievērst viņu uzmanību konkrēta servera neparastajai uzvedībai. Kāds varētu domāt par atriebību un mērķtiecīgs DDoS uzbrukums jūsu IP. Taču līdz šim tādu gadījumu nav bijis, un tarpits strādā lieliski.

Slazds (tarpit) ienākošajiem SSH savienojumiem

Avots: www.habr.com

Iegādājieties uzticamu mitināšanu vietnēm ar DDoS aizsardzību, VPS VDS serveriem 🔥 Iegādājieties uzticamu tīmekļa vietņu mitināšanu ar DDoS aizsardzību, VPS VDS serveriem | ProHoster