Tarpit za SSH povezave

Ni skrivnost, da je internet zelo sovražno okolje. Takoj ko postavite strežnik, je takoj izpostavljen obsežnim napadom in večkratnim skeniranjem. Na primeru honeypota varnostnikov lahko ocenimo obseg tega smetnjak prometa. Dejansko je lahko na povprečnem strežniku 99 % prometa zlonamernega.

Tarpit je vrata-lovilec, ki se uporablja za upočasnitev vhodnih povezav. Če se zunanja sistema povežejo na ta vrata, povezava ne bo hitro zaprta. Poračunala se bo morala porabiti svoje sistemske vire in čakati, da se povezava pretrga zaradi časovne omejitve, ali jo ročno prekiniti.

Najpogosteje se tarpiti uporabljajo za zaščito. Tehniko so prvič razvili za zaščito pred računalniškimi črvi. Zdaj jo lahko uporabimo za oteževanje življenja spammerjem in raziskovalcem, ki opravljajo široko skeniranje vseh IP naslovov zaporedoma (primeri na Habré: Avstrija, Ukrajina).

Eden od sistemskih administratorjev po imenu Chris Wellons se je očitno naveličal opazovati to zmedo — in napisal je majhno aplikacijo Endlessh, tarpit za SSH, ki upočasnjuje vhodne povezave. Program odpre vrata (privzeto za testiranje je navedena vrata 2222) in se pretvarja, da je SSH strežnik, medtem ko v resnici vzpostavi neskončno povezavo z prihajajočim odjemalcem, dokler se ta ne predaja. To lahko traja več dni ali več, dokler se odjemalec ne odklopi.

Namestitev orodja:

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

Pravilno izveden tarpit bo odvzel več virov napadalcu kot vam. A to ni samo o virih. Avtor , that multimodelity is a sine qua non condition primarily for, da program povzroča zasvojenost. Prav zdaj je v njegovi pasti 27 odjemalcev, nekateri so povezani že tedne. Ob vrhuncu aktivnosti je bilo v pasti 1378 odjemalcev v času 20 ur!

V delovnem načinu je treba strežnik Endlessh namestiti na običajna vrata 22, kjer se množično povezujejo huligani. Standardne varnostne priporočila vedno svetujejo, da SSH premaknete na druga vrata, kar takoj znatno zmanjša velikost logov.

Chris Wellons pravi, da njegov program izkorišča en odstavek iz specifikacije RFC 4253 na protokolu SSH. Takoj zhe moment, kak tol'ko ustanovleno TCP-soedinenie, no do primeneniya kriptografii obe storony dolzhny otpravit' identifikatsionnuyu stroku. I tam zhe pripeska: «Server MOZHET otpravit' drugie stroki dannykh pered otpravkoy stroki s versiyey». I net ogranicheniya na ob'yem etikh dannykh, prosto kazhdaya stroka nuzhno nachinat' s SSH-.

Imenno etim zanymaya programma Endlessh: ona otpravlyaet beskonechnyy potok sluchayno sgenerirovannykh dannykh, kotorye sootvetstvuyut RFC 4253, to yest' otpravka pered identifikatsiey, a kazhdaya stroka nachinaetsya s SSH- i ne prevyshaet 255 simvolov, vklyuchaya simvol okonchaniya stroki. V obshchem, vse po standartu.

Po umolchaniyu programma zhdet 10 sekund mezhdu otpravkami paketov. Eto predotvrashchayet otklyuchenie po taym-autu, tak chto klient budet sidet' v lovushke vyechno.

Poskol'ku otpravka dannykh osushchestvlyaetsya do primeneniya kriptografii, programma iskluchitel'no prostaya. V ney ne nuzhno vnedryat' nikakikh shifrov i podderzhku mnogikh protokolov.

Avtor postaralsya, chtoby utilita potreblyala minimum resursov i rabotala aboslutno nezametno na mashine. V otlichie ot sovremennykh antivirusov i drugikh «sistem bezopasnosti», ona ne dolzhna tormozit' komp'yuter. Yemu udalos' minimizirovat' i trafik, i potreblenie pamyati za schet chut' bolee khitroy programmnoi realizatsii. Esli by on prosto zapuskal otdel'nyy protsess na novoye soedinenie, to potentsial'nye zloumyshlenniki mogliby provesti DDoS-ataku, otkryv mnogochislenniye soedineniy dlya ischerpaniya resursov na mashine. Po odnomu potoku na soedinenie — tozhe ne luchshiy variant, potomu chto yadro budet tratit' resursy na upravlenie potokami.

Poetomu Kris Vellons vybral dlya Endlessh samyy legkoves'tvennyy variant: odnopotochnyy server poll(2), gde klienty v lovushke prakticheski ne potreblyayut lishnikh resursov, ne schitaya ob'yekta soketa v yadre i yeshche 78 bayt dlya otslezhivaniya v Endlessh. Chtoby ne vydelyat' bufery polucheniya i otpravki dlya kazhdogo klienta, Endlessh otkryvayet soket pryamogo dostupa i pryamoy transmityruet pakety TCP, ignoriruyushchi pochti vse yasku TCP/IP operatsionnoi sistemy. Vkhodyashchiy bufyur voobshche ne nuzhen, potomu chto vkhodyashchie dannye nas ne interesuyut.

Avtor govorit, chto na moment svoey programmy ne znal o obstoju Pythonovega asyncio in drugih tarpitisov. Če bi vedel za asyncio, bi svojo orodje lahko implementiral v le 18 vrsticah v Pythonu:

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 je idealen za pisanje tarpitisov. Na primer, ta past bo na dolgi rok obvisela Firefox, Chrome ali drugega odjemalca, ki poskuša povezati z vašim HTTP strežnikom:

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 je odlično orodje za kaznovanje internetnih huliganov. Vendar pa obstaja nekakšna tveganje, da pritegne njihovo pozornost na nenavadno vedenje določenega strežnika. Nekdo lahko pomisli na maščevanje in usmerjen DDoS napad na vaš IP. Kljub temu takih primerov še ni bilo, in tarpiti odlično delujejo.

Hubi:
Python, Informacijska varnost, Programska oprema, Sistemsko upravljanje

Oznake:
SSH, Endlessh, tarpit, tarpiti, past, asyncio
Tarpit za SSH povezave

Ni skrivnost, da je internet zelo sovražno okolje. Takoj ko postavite strežnik, je takoj izpostavljen obsežnim napadom in večkratnim skeniranjem. Na primeru honeypota varnostnikov lahko ocenimo obseg tega smetnjak prometa. Dejansko je lahko na povprečnem strežniku 99 % prometa zlonamernega.

Tarpit je vrata-lovilec, ki se uporablja za upočasnitev vhodnih povezav. Če se zunanja sistema povežejo na ta vrata, povezava ne bo hitro zaprta. Poračunala se bo morala porabiti svoje sistemske vire in čakati, da se povezava pretrga zaradi časovne omejitve, ali jo ročno prekiniti.

Najpogosteje se tarpiti uporabljajo za zaščito. Tehniko so prvič razvili za zaščito pred računalniškimi črvi. Zdaj jo lahko uporabimo za oteževanje življenja spammerjem in raziskovalcem, ki opravljajo široko skeniranje vseh IP naslovov zaporedoma (primeri na Habré: Avstrija, Ukrajina).

Eden od sistemskih administratorjev po imenu Chris Wellons se je očitno naveličal opazovati to zmedo — in napisal je majhno aplikacijo Endlessh, tarpit za SSH, ki upočasnjuje vhodne povezave. Program odpre vrata (privzeto za testiranje je navedena vrata 2222) in se pretvarja, da je SSH strežnik, medtem ko v resnici vzpostavi neskončno povezavo z prihajajočim odjemalcem, dokler se ta ne predaja. To lahko traja več dni ali več, dokler se odjemalec ne odklopi.

Namestitev orodja:

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

Pravilno izveden tarpit bo odvzel več virov napadalcu kot vam. A to ni samo o virih. Avtor , that multimodelity is a sine qua non condition primarily for, da program povzroča zasvojenost. Prav zdaj je v njegovi pasti 27 odjemalcev, nekateri so povezani že tedne. Ob vrhuncu aktivnosti je bilo v pasti 1378 odjemalcev v času 20 ur!

V delovnem načinu je treba strežnik Endlessh namestiti na običajna vrata 22, kjer se množično povezujejo huligani. Standardne varnostne priporočila vedno svetujejo, da SSH premaknete na druga vrata, kar takoj znatno zmanjša velikost logov.

Chris Wellons pravi, da njegov program izkorišča en odstavek iz specifikacije RFC 4253 na protokolu SSH. Takoj zhe moment, kak tol'ko ustanovleno TCP-soedinenie, no do primeneniya kriptografii obe storony dolzhny otpravit' identifikatsionnuyu stroku. I tam zhe pripeska: «Server MOZHET otpravit' drugie stroki dannykh pered otpravkoy stroki s versiyey». I net ogranicheniya na ob'yem etikh dannykh, prosto kazhdaya stroka nuzhno nachinat' s SSH-.

Imenno etim zanymaya programma Endlessh: ona otpravlyaet beskonechnyy potok sluchayno sgenerirovannykh dannykh, kotorye sootvetstvuyut RFC 4253, to yest' otpravka pered identifikatsiey, a kazhdaya stroka nachinaetsya s SSH- i ne prevyshaet 255 simvolov, vklyuchaya simvol okonchaniya stroki. V obshchem, vse po standartu.

Po umolchaniyu programma zhdet 10 sekund mezhdu otpravkami paketov. Eto predotvrashchayet otklyuchenie po taym-autu, tak chto klient budet sidet' v lovushke vyechno.

Poskol'ku otpravka dannykh osushchestvlyaetsya do primeneniya kriptografii, programma iskluchitel'no prostaya. V ney ne nuzhno vnedryat' nikakikh shifrov i podderzhku mnogikh protokolov.

Avtor postaralsya, chtoby utilita potreblyala minimum resursov i rabotala aboslutno nezametno na mashine. V otlichie ot sovremennykh antivirusov i drugikh «sistem bezopasnosti», ona ne dolzhna tormozit' komp'yuter. Yemu udalos' minimizirovat' i trafik, i potreblenie pamyati za schet chut' bolee khitroy programmnoi realizatsii. Esli by on prosto zapuskal otdel'nyy protsess na novoye soedinenie, to potentsial'nye zloumyshlenniki mogliby provesti DDoS-ataku, otkryv mnogochislenniye soedineniy dlya ischerpaniya resursov na mashine. Po odnomu potoku na soedinenie — tozhe ne luchshiy variant, potomu chto yadro budet tratit' resursy na upravlenie potokami.

Poetomu Kris Vellons vybral dlya Endlessh samyy legkoves'tvennyy variant: odnopotochnyy server poll(2), gde klienty v lovushke prakticheski ne potreblyayut lishnikh resursov, ne schitaya ob'yekta soketa v yadre i yeshche 78 bayt dlya otslezhivaniya v Endlessh. Chtoby ne vydelyat' bufery polucheniya i otpravki dlya kazhdogo klienta, Endlessh otkryvayet soket pryamogo dostupa i pryamoy transmityruet pakety TCP, ignoriruyushchi pochti vse yasku TCP/IP operatsionnoi sistemy. Vkhodyashchiy bufyur voobshche ne nuzhen, potomu chto vkhodyashchie dannye nas ne interesuyut.

Avtor govorit, chto na moment svoey programmy ne znal o obstoju Pythonovega asyncio in drugih tarpitisov. Če bi vedel za asyncio, bi svojo orodje lahko implementiral v le 18 vrsticah v Pythonu:

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 je idealen za pisanje tarpitisov. Na primer, ta past bo na dolgi rok obvisela Firefox, Chrome ali drugega odjemalca, ki poskuša povezati z vašim HTTP strežnikom:

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 je odlično orodje za kaznovanje internetnih huliganov. Vendar pa obstaja nekakšna tveganje, da pritegne njihovo pozornost na nenavadno vedenje določenega strežnika. Nekdo lahko pomisli na maščevanje in usmerjen DDoS napad na vaš IP. Kljub temu takih primerov še ni bilo, in tarpiti odlično delujejo.

Tarpit za SSH povezave

Izvor: habr.com

Kupite zanesljivo gostovanje za spletne strani z zaščito pred DDoS, VPS VDS strežniki 🔥 Kupite zanesljivo gostovanje za spletne strani z zaščito pred DDoS, VPS VDS strežniki | ProHoster