Trap (tarpit) saapuville SSH-yhteyksille

Ei ole mikään salaisuus, että Internet on erittäin vihamielinen ympäristö. Heti kun nostat palvelimen, se joutuu välittömästi massiivisten hyökkäysten ja useiden tarkistusten kohteeksi. Esimerkiksi hunajapurkki vartijoilta voit arvioida tämän roskaliikenteen laajuuden. Itse asiassa keskimääräisellä palvelimella 99 % liikenteestä voi olla haitallista.

Tarpit on trap-portti, jota käytetään hidastamaan saapuvia yhteyksiä. Jos kolmannen osapuolen järjestelmä muodostaa yhteyden tähän porttiin, et voi sulkea yhteyttä nopeasti. Hänen täytyy tuhlata järjestelmäresurssejaan ja odottaa yhteyden aikakatkaisuja tai katkaista se manuaalisesti.

Useimmiten suojana käytetään peitteitä. Tekniikka kehitettiin ensin suojaamaan tietokonematoja vastaan. Ja nyt sitä voidaan käyttää tuhoamaan roskapostittajien ja tutkijoiden elämän, jotka ovat mukana kaikkien IP-osoitteiden laajassa skannauksessa peräkkäin (esimerkkejä Habrésta: Itävalta, Ukraina).

Yksi järjestelmänvalvojista nimeltä Chris Wellons ilmeisesti kyllästyi katsomaan tätä häpeää - ja hän kirjoitti pienen ohjelman Loputon, SSH:n tarpit, joka hidastaa saapuvia yhteyksiä. Ohjelma avaa portin (oletusportti testaukseen on 2222) ja teeskentelee olevansa SSH-palvelin, mutta todellisuudessa se muodostaa loputtoman yhteyden saapuvaan asiakkaaseen, kunnes se luovuttaa. Tämä voi jatkua useita päiviä tai kauemmin, kunnes asiakas putoaa.

Apuohjelman asennus:

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

Oikein toteutettu tarpit vie enemmän resursseja hyökkääjältä kuin sinulta. Mutta kyse ei ole edes resursseista. Tekijä kirjoittaaettä ohjelma on koukuttava. Tällä hetkellä sillä on 27 asiakasta loukussa, joista osa on yhteydessä viikkoja. Aktiivisuuden huipulla 1378 20 asiakasta jäi loukkuun XNUMX tunniksi!

Käyttötilassa Endlessh-palvelin on asennettava tavalliseen porttiin 22, jossa huligaanit koputtavat massat. Vakioturvasuositukset neuvovat aina siirtämään SSH:n toiseen porttiin, mikä pienentää lokien kokoa välittömästi suuruusluokkaa.

Chris Wellons sanoo, että hänen ohjelmansa hyödyntää yhtä kappaletta spesifikaatiosta RFC 4253 SSH-protokollaan. Heti TCP-yhteyden muodostamisen jälkeen, mutta ennen salauksen käyttöönottoa, molempien osapuolten on lähetettävä tunnistemerkkijono. Ja siinä on myös huomautus: "Palvelin VOI lähettää muita tietorivejä ennen versiorivin lähettämistä". ja ei rajoitusta näiden tietojen määrästä, sinun tarvitsee vain aloittaa jokainen rivi SSH-.

Juuri tätä Endlessh-ohjelma tekee: se lähettää loputon satunnaisesti luotujen tietojen virta, jotka ovat RFC 4253 -standardin mukaisia, eli lähettävät ennen todennusta, ja jokainen rivi alkaa SSH- ja se ei ylitä 255 merkkiä, mukaan lukien rivin loppumerkki. Yleensä kaikki on standardin mukaan.

Oletusarvoisesti ohjelma odottaa 10 sekuntia pakettien lähettämisen välillä. Tämä estää asiakkaan aikakatkaisun, jolloin asiakas jää loukkuun ikuisesti.

Koska tiedot lähetetään ennen salauksen käyttöönottoa, ohjelma on erittäin yksinkertainen. Sen ei tarvitse toteuttaa salauksia ja se tukee useita protokollia.

Kirjoittaja yritti varmistaa, että apuohjelma kuluttaa mahdollisimman vähän resursseja ja toimii täysin huomaamattomasti koneessa. Toisin kuin nykyaikaiset virustorjuntaohjelmat ja muut "turvajärjestelmät", sen ei pitäisi hidastaa tietokonettasi. Hän onnistui minimoimaan sekä liikenteen että muistin kulutuksen hieman ovelamman ohjelmistototeutuksen ansiosta. Jos se vain käynnistäisi erillisen prosessin uudelle yhteydelle, mahdolliset hyökkääjät voisivat käynnistää DDoS-hyökkäyksen avaamalla useita yhteyksiä koneen resurssien tyhjentämiseksi. Yksi säie per yhteys ei myöskään ole paras vaihtoehto, koska ydin tuhlaa resursseja säikeiden hallintaan.

Siksi Chris Wellons valitsi Endlesshille kevyimmän vaihtoehdon: yksisäikeisen palvelimen poll(2), jossa trap-asiakkaat eivät kuluta käytännössä lainkaan ylimääräisiä resursseja, lukuun ottamatta ytimessä olevaa socket-objektia ja toista 78 tavua Endlesshin seurantaan. Välttääkseen vastaanotto- ja lähetyspuskureiden allokoinnin jokaiselle asiakkaalle Endlessh avaa suoran pääsyn pistorasian ja kääntää TCP-paketit suoraan ohittaen lähes koko käyttöjärjestelmän TCP/IP-pinon. Saapuvaa puskuria ei tarvita ollenkaan, koska emme ole kiinnostuneita saapuvista tiedoista.

Kirjoittaja sanoo, että hänen ohjelmansa aikana ei tiennyt Pythonin asycion ja muiden tarpitien olemassaolosta. Jos hän tiesi asyciosta, hän voisi toteuttaa apuohjelmansa vain 18 rivillä Pythonissa:

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 on ihanteellinen tarpittien kirjoittamiseen. Tämä koukku esimerkiksi jäädyttää Firefoxin, Chromen tai minkä tahansa muun asiakkaan, joka yrittää muodostaa yhteyden HTTP-palvelimeesi useiden tuntien ajaksi:

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 on loistava työkalu nettikiusaajien rankaisemiseen. On totta, että on olemassa riski, päinvastoin, että heidän huomionsa kiinnitetään tietyn palvelimen epätavalliseen toimintaan. Joku voisi ajatella kostoa ja kohdistettu DDoS-hyökkäys IP-osoitteeseesi. Toistaiseksi tällaisia ​​tapauksia ei kuitenkaan ole ollut, ja tarpit toimivat loistavasti.

Keskittimet:
Python, Tietoturva, Ohjelmistot, Järjestelmänhallinta

Tunnisteet:
SSH, Endlessh, tarpit, tarpit, trap, asycio
Trap (tarpit) saapuville SSH-yhteyksille

Ei ole mikään salaisuus, että Internet on erittäin vihamielinen ympäristö. Heti kun nostat palvelimen, se joutuu välittömästi massiivisten hyökkäysten ja useiden tarkistusten kohteeksi. Esimerkiksi hunajapurkki vartijoilta voit arvioida tämän roskaliikenteen laajuuden. Itse asiassa keskimääräisellä palvelimella 99 % liikenteestä voi olla haitallista.

Tarpit on trap-portti, jota käytetään hidastamaan saapuvia yhteyksiä. Jos kolmannen osapuolen järjestelmä muodostaa yhteyden tähän porttiin, et voi sulkea yhteyttä nopeasti. Hänen täytyy tuhlata järjestelmäresurssejaan ja odottaa yhteyden aikakatkaisuja tai katkaista se manuaalisesti.

Useimmiten suojana käytetään peitteitä. Tekniikka kehitettiin ensin suojaamaan tietokonematoja vastaan. Ja nyt sitä voidaan käyttää tuhoamaan roskapostittajien ja tutkijoiden elämän, jotka ovat mukana kaikkien IP-osoitteiden laajassa skannauksessa peräkkäin (esimerkkejä Habrésta: Itävalta, Ukraina).

Yksi järjestelmänvalvojista nimeltä Chris Wellons ilmeisesti kyllästyi katsomaan tätä häpeää - ja hän kirjoitti pienen ohjelman Loputon, SSH:n tarpit, joka hidastaa saapuvia yhteyksiä. Ohjelma avaa portin (oletusportti testaukseen on 2222) ja teeskentelee olevansa SSH-palvelin, mutta todellisuudessa se muodostaa loputtoman yhteyden saapuvaan asiakkaaseen, kunnes se luovuttaa. Tämä voi jatkua useita päiviä tai kauemmin, kunnes asiakas putoaa.

Apuohjelman asennus:

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

Oikein toteutettu tarpit vie enemmän resursseja hyökkääjältä kuin sinulta. Mutta kyse ei ole edes resursseista. Tekijä kirjoittaaettä ohjelma on koukuttava. Tällä hetkellä sillä on 27 asiakasta loukussa, joista osa on yhteydessä viikkoja. Aktiivisuuden huipulla 1378 20 asiakasta jäi loukkuun XNUMX tunniksi!

Käyttötilassa Endlessh-palvelin on asennettava tavalliseen porttiin 22, jossa huligaanit koputtavat massat. Vakioturvasuositukset neuvovat aina siirtämään SSH:n toiseen porttiin, mikä pienentää lokien kokoa välittömästi suuruusluokkaa.

Chris Wellons sanoo, että hänen ohjelmansa hyödyntää yhtä kappaletta spesifikaatiosta RFC 4253 SSH-protokollaan. Heti TCP-yhteyden muodostamisen jälkeen, mutta ennen salauksen käyttöönottoa, molempien osapuolten on lähetettävä tunnistemerkkijono. Ja siinä on myös huomautus: "Palvelin VOI lähettää muita tietorivejä ennen versiorivin lähettämistä". ja ei rajoitusta näiden tietojen määrästä, sinun tarvitsee vain aloittaa jokainen rivi SSH-.

Juuri tätä Endlessh-ohjelma tekee: se lähettää loputon satunnaisesti luotujen tietojen virta, jotka ovat RFC 4253 -standardin mukaisia, eli lähettävät ennen todennusta, ja jokainen rivi alkaa SSH- ja se ei ylitä 255 merkkiä, mukaan lukien rivin loppumerkki. Yleensä kaikki on standardin mukaan.

Oletusarvoisesti ohjelma odottaa 10 sekuntia pakettien lähettämisen välillä. Tämä estää asiakkaan aikakatkaisun, jolloin asiakas jää loukkuun ikuisesti.

Koska tiedot lähetetään ennen salauksen käyttöönottoa, ohjelma on erittäin yksinkertainen. Sen ei tarvitse toteuttaa salauksia ja se tukee useita protokollia.

Kirjoittaja yritti varmistaa, että apuohjelma kuluttaa mahdollisimman vähän resursseja ja toimii täysin huomaamattomasti koneessa. Toisin kuin nykyaikaiset virustorjuntaohjelmat ja muut "turvajärjestelmät", sen ei pitäisi hidastaa tietokonettasi. Hän onnistui minimoimaan sekä liikenteen että muistin kulutuksen hieman ovelamman ohjelmistototeutuksen ansiosta. Jos se vain käynnistäisi erillisen prosessin uudelle yhteydelle, mahdolliset hyökkääjät voisivat käynnistää DDoS-hyökkäyksen avaamalla useita yhteyksiä koneen resurssien tyhjentämiseksi. Yksi säie per yhteys ei myöskään ole paras vaihtoehto, koska ydin tuhlaa resursseja säikeiden hallintaan.

Siksi Chris Wellons valitsi Endlesshille kevyimmän vaihtoehdon: yksisäikeisen palvelimen poll(2), jossa trap-asiakkaat eivät kuluta käytännössä lainkaan ylimääräisiä resursseja, lukuun ottamatta ytimessä olevaa socket-objektia ja toista 78 tavua Endlesshin seurantaan. Välttääkseen vastaanotto- ja lähetyspuskureiden allokoinnin jokaiselle asiakkaalle Endlessh avaa suoran pääsyn pistorasian ja kääntää TCP-paketit suoraan ohittaen lähes koko käyttöjärjestelmän TCP/IP-pinon. Saapuvaa puskuria ei tarvita ollenkaan, koska emme ole kiinnostuneita saapuvista tiedoista.

Kirjoittaja sanoo, että hänen ohjelmansa aikana ei tiennyt Pythonin asycion ja muiden tarpitien olemassaolosta. Jos hän tiesi asyciosta, hän voisi toteuttaa apuohjelmansa vain 18 rivillä Pythonissa:

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 on ihanteellinen tarpittien kirjoittamiseen. Tämä koukku esimerkiksi jäädyttää Firefoxin, Chromen tai minkä tahansa muun asiakkaan, joka yrittää muodostaa yhteyden HTTP-palvelimeesi useiden tuntien ajaksi:

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 on loistava työkalu nettikiusaajien rankaisemiseen. On totta, että on olemassa riski, päinvastoin, että heidän huomionsa kiinnitetään tietyn palvelimen epätavalliseen toimintaan. Joku voisi ajatella kostoa ja kohdistettu DDoS-hyökkäys IP-osoitteeseesi. Toistaiseksi tällaisia ​​tapauksia ei kuitenkaan ole ollut, ja tarpit toimivat loistavasti.

Trap (tarpit) saapuville SSH-yhteyksille

Lähde: will.com

Lisää kommentti