Gaiste (tarpit) le haghaidh naisc SSH ag teacht isteach

Ní haon rún é gur timpeallacht thar a bheith naimhdeach é an tIdirlíon. Chomh luath agus a ardaíonn tú freastalaí, cuirtear faoi réir ionsaithe ollmhóra agus scananna iolracha láithreach é. Mar shampla pota meala ó na gardaí slándála is féidir leat scála an tráchta truflais seo a mheas. Go deimhin, ar an bhfreastalaí meán, d'fhéadfadh 99% den trácht a bheith mailíseach.

Is calafort gaiste é Tarpit a úsáidtear chun naisc a thagann isteach a mhoilliú. Má nascann córas tríú páirtí leis an bport seo, ní bheidh tú in ann an nasc a dhúnadh go tapa. Beidh uirthi a cuid acmhainní córais a chur amú agus fanacht go dtí go dtiocfaidh deireadh leis an nasc, nó deireadh a chur leis de láimh.

Is minic a úsáidtear tarpits le haghaidh cosanta. Forbraíodh an teicníc ar dtús chun cosaint a dhéanamh i gcoinne péisteanna ríomhaire. Agus anois is féidir é a úsáid chun saol spammers agus taighdeoirí atá ag gabháil do scanadh leathan ar gach seoladh IP as a chéile a mhilleadh (mar shampla ar Habré: An Ostair, An Úcráin).

Is cosúil gur éirigh duine de riarthóirí an chórais darb ainm Chris Wellons tuirseach ag breathnú ar an náire seo - agus scríobh sé clár beag gan deireadh, tarpit do SSH a mhoillíonn naisc ag teacht isteach. Osclaíonn an clár port (is é 2222 an calafort réamhshocraithe le haghaidh tástála) agus ligeann air gur freastalaí SSH é, ach i ndáiríre bunaíonn sé nasc gan teorainn leis an gcliant isteach go dtí go n-éireoidh sé. Féadfaidh sé seo leanúint ar aghaidh ar feadh roinnt laethanta nó níos mó go dtí go dtiteann an cliant as.

Suiteáil an áirgiúlachta:

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

Tógfaidh tarpit a chuirtear i bhfeidhm i gceart níos mó acmhainní ón ionsaitheoir ná uaitse. Ach ní ceist acmhainní é fiú. Údar scríobhanngo bhfuil an clár andúileach. Faoi láthair tá 27 cliant gafa aige, cuid acu ceangailte le seachtainí anuas. Ag buaicphointe na gníomhaíochta, bhí 1378 cliant gafa ar feadh 20 uair!

I mód oibriúcháin, ní mór an freastalaí Endlessh a shuiteáil ar an gcalafort gnách 22, áit a bhuaileann maistíní en masse. Moltar i gcónaí le moltaí slándála caighdeánacha SSH a aistriú go calafort difriúil, rud a laghdaíonn méid na logaí láithreach le hordú méide.

Deir Chris Wellons go mbaineann a chlár leas as alt amháin den tsonraíocht RFC 4253 chuig prótacal SSH. Díreach tar éis nasc TCP a bhunú, ach sula gcuirtear cripteagrafaíocht i bhfeidhm, ní mór don dá pháirtí teaghrán aitheantais a sheoladh. Agus tá nóta ann freisin: msgstr "FÉIDIR leis an bhfreastalaí sraitheanna eile sonraí a sheoladh sula seolann sé an ró leagan". Agus gan teorainn maidir le méid na sonraí seo, ní gá duit ach tús a chur le gach líne SSH-.

Is é seo go díreach a dhéanann an clár Endlessh: é seolann gan teorainn sruth sonraí a ghintear go randamach, a chomhlíonann RFC 4253, is é sin, seol roimh fhíordheimhniú, agus tosaíonn gach líne le SSH- agus nach mó ná 255 carachtar, lena n-áirítear an carachtar deiridh líne. Go ginearálta, tá gach rud de réir an chaighdeáin.

De réir réamhshocraithe, fanann an clár 10 soicind idir na paicéid a sheoladh. Cuireann sé seo cosc ​​ar an gcliant a bheith imithe i léig, mar sin beidh an cliant gafa go deo.

Ós rud é go seoltar na sonraí sula gcuirtear cripteagrafaíocht i bhfeidhm, tá an clár thar a bheith simplí. Ní gá aon scipéir a chur i bhfeidhm agus tacaíonn sé le ilphrótacail.

Rinne an t-údar iarracht a chinntiú go n-ídíonn an áirgiúlacht íosmhéid acmhainní agus go n-oibríonn sé go hiomlán gan aird ar an meaisín. Murab ionann agus frithvíreas nua-aimseartha agus “córais slándála” eile, níor cheart go gcuirfeadh sé moill ar do ríomhaire. D'éirigh leis ídiú tráchta agus cuimhne a íoslaghdú mar gheall ar chur i bhfeidhm bogearraí beagán níos cunning. Má sheol sé próiseas ar leith ar nasc nua go simplí, d'fhéadfadh ionsaitheoirí ionchasacha ionsaí DDoS a sheoladh trí naisc iolracha a oscailt chun acmhainní a sceite ar an meaisín. Ní hé snáithe amháin in aghaidh an naisc an rogha is fearr freisin, mar go gcuirfidh an t-eithne amú acmhainní a bhainistiú snáitheanna.

Sin an fáth a roghnaigh Chris Wellons an rogha is éadrom do Endlessh: freastalaí aon-snáithithe poll(2), áit a n-itheann na cliaint sa ghaiste beagnach aon acmhainní breise, gan an réad soicéad san eithne a chomhaireamh agus 78 beart eile le haghaidh rianú in Endlessh. Chun maoláin fháil agus a sheoladh a sheachaint do gach cliant, osclaíonn Endlessh soicéad rochtana dírí agus aistríonn paicéid TCP go díreach, ag seachaint beagnach iomlán an chórais oibriúcháin TCP/IP. Níl gá leis an maolán atá ag teacht isteach ar chor ar bith, toisc nach bhfuil suim againn sna sonraí atá ag teacht isteach.

Deir an t-údar sin tráth a chláir ní raibh a fhios faoi ​​asycio Python agus tarpits eile a bheith ann. Dá mbeadh a fhios aige faoi asycio, d'fhéadfadh sé a áirgiúlacht a chur i bhfeidhm i 18 líne i Python:

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())

Tá Asyncio oiriúnach chun tarpanna a scríobh. Mar shampla, reofaidh an hook seo Firefox, Chrome, nó cliant ar bith eile atá ag iarraidh ceangal le do fhreastalaí HTTP ar feadh go leor uaireanta:

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())

Is uirlis iontach é Tarpit chun bulaithe ar líne a phionósú. Fíor, tá baol áirithe ann, ar a mhalairt, a n-aird a tharraingt ar iompar neamhghnách freastalaí ar leith. Duine éigin b’fhéidir smaoineamh ar dhíoltas agus ionsaí DDoS spriocdhírithe ar do IP. Mar sin féin, go dtí seo ní raibh aon chásanna den sórt sin, agus oibríonn tarpits go hiontach.

Moil:
Python, slándáil faisnéise, Bogearraí, riarachán córais

Tags:
SSH, Endlessh, tarpit, tarpit, trap, asycio
Gaiste (tarpit) le haghaidh naisc SSH ag teacht isteach

Ní haon rún é gur timpeallacht thar a bheith naimhdeach é an tIdirlíon. Chomh luath agus a ardaíonn tú freastalaí, cuirtear faoi réir ionsaithe ollmhóra agus scananna iolracha láithreach é. Mar shampla pota meala ó na gardaí slándála is féidir leat scála an tráchta truflais seo a mheas. Go deimhin, ar an bhfreastalaí meán, d'fhéadfadh 99% den trácht a bheith mailíseach.

Is calafort gaiste é Tarpit a úsáidtear chun naisc a thagann isteach a mhoilliú. Má nascann córas tríú páirtí leis an bport seo, ní bheidh tú in ann an nasc a dhúnadh go tapa. Beidh uirthi a cuid acmhainní córais a chur amú agus fanacht go dtí go dtiocfaidh deireadh leis an nasc, nó deireadh a chur leis de láimh.

Is minic a úsáidtear tarpits le haghaidh cosanta. Forbraíodh an teicníc ar dtús chun cosaint a dhéanamh i gcoinne péisteanna ríomhaire. Agus anois is féidir é a úsáid chun saol spammers agus taighdeoirí atá ag gabháil do scanadh leathan ar gach seoladh IP as a chéile a mhilleadh (mar shampla ar Habré: An Ostair, An Úcráin).

Is cosúil gur éirigh duine de riarthóirí an chórais darb ainm Chris Wellons tuirseach ag breathnú ar an náire seo - agus scríobh sé clár beag gan deireadh, tarpit do SSH a mhoillíonn naisc ag teacht isteach. Osclaíonn an clár port (is é 2222 an calafort réamhshocraithe le haghaidh tástála) agus ligeann air gur freastalaí SSH é, ach i ndáiríre bunaíonn sé nasc gan teorainn leis an gcliant isteach go dtí go n-éireoidh sé. Féadfaidh sé seo leanúint ar aghaidh ar feadh roinnt laethanta nó níos mó go dtí go dtiteann an cliant as.

Suiteáil an áirgiúlachta:

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

Tógfaidh tarpit a chuirtear i bhfeidhm i gceart níos mó acmhainní ón ionsaitheoir ná uaitse. Ach ní ceist acmhainní é fiú. Údar scríobhanngo bhfuil an clár andúileach. Faoi láthair tá 27 cliant gafa aige, cuid acu ceangailte le seachtainí anuas. Ag buaicphointe na gníomhaíochta, bhí 1378 cliant gafa ar feadh 20 uair!

I mód oibriúcháin, ní mór an freastalaí Endlessh a shuiteáil ar an gcalafort gnách 22, áit a bhuaileann maistíní en masse. Moltar i gcónaí le moltaí slándála caighdeánacha SSH a aistriú go calafort difriúil, rud a laghdaíonn méid na logaí láithreach le hordú méide.

Deir Chris Wellons go mbaineann a chlár leas as alt amháin den tsonraíocht RFC 4253 chuig prótacal SSH. Díreach tar éis nasc TCP a bhunú, ach sula gcuirtear cripteagrafaíocht i bhfeidhm, ní mór don dá pháirtí teaghrán aitheantais a sheoladh. Agus tá nóta ann freisin: msgstr "FÉIDIR leis an bhfreastalaí sraitheanna eile sonraí a sheoladh sula seolann sé an ró leagan". Agus gan teorainn maidir le méid na sonraí seo, ní gá duit ach tús a chur le gach líne SSH-.

Is é seo go díreach a dhéanann an clár Endlessh: é seolann gan teorainn sruth sonraí a ghintear go randamach, a chomhlíonann RFC 4253, is é sin, seol roimh fhíordheimhniú, agus tosaíonn gach líne le SSH- agus nach mó ná 255 carachtar, lena n-áirítear an carachtar deiridh líne. Go ginearálta, tá gach rud de réir an chaighdeáin.

De réir réamhshocraithe, fanann an clár 10 soicind idir na paicéid a sheoladh. Cuireann sé seo cosc ​​ar an gcliant a bheith imithe i léig, mar sin beidh an cliant gafa go deo.

Ós rud é go seoltar na sonraí sula gcuirtear cripteagrafaíocht i bhfeidhm, tá an clár thar a bheith simplí. Ní gá aon scipéir a chur i bhfeidhm agus tacaíonn sé le ilphrótacail.

Rinne an t-údar iarracht a chinntiú go n-ídíonn an áirgiúlacht íosmhéid acmhainní agus go n-oibríonn sé go hiomlán gan aird ar an meaisín. Murab ionann agus frithvíreas nua-aimseartha agus “córais slándála” eile, níor cheart go gcuirfeadh sé moill ar do ríomhaire. D'éirigh leis ídiú tráchta agus cuimhne a íoslaghdú mar gheall ar chur i bhfeidhm bogearraí beagán níos cunning. Má sheol sé próiseas ar leith ar nasc nua go simplí, d'fhéadfadh ionsaitheoirí ionchasacha ionsaí DDoS a sheoladh trí naisc iolracha a oscailt chun acmhainní a sceite ar an meaisín. Ní hé snáithe amháin in aghaidh an naisc an rogha is fearr freisin, mar go gcuirfidh an t-eithne amú acmhainní a bhainistiú snáitheanna.

Sin an fáth a roghnaigh Chris Wellons an rogha is éadrom do Endlessh: freastalaí aon-snáithithe poll(2), áit a n-itheann na cliaint sa ghaiste beagnach aon acmhainní breise, gan an réad soicéad san eithne a chomhaireamh agus 78 beart eile le haghaidh rianú in Endlessh. Chun maoláin fháil agus a sheoladh a sheachaint do gach cliant, osclaíonn Endlessh soicéad rochtana dírí agus aistríonn paicéid TCP go díreach, ag seachaint beagnach iomlán an chórais oibriúcháin TCP/IP. Níl gá leis an maolán atá ag teacht isteach ar chor ar bith, toisc nach bhfuil suim againn sna sonraí atá ag teacht isteach.

Deir an t-údar sin tráth a chláir ní raibh a fhios faoi ​​asycio Python agus tarpits eile a bheith ann. Dá mbeadh a fhios aige faoi asycio, d'fhéadfadh sé a áirgiúlacht a chur i bhfeidhm i 18 líne i Python:

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())

Tá Asyncio oiriúnach chun tarpanna a scríobh. Mar shampla, reofaidh an hook seo Firefox, Chrome, nó cliant ar bith eile atá ag iarraidh ceangal le do fhreastalaí HTTP ar feadh go leor uaireanta:

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())

Is uirlis iontach é Tarpit chun bulaithe ar líne a phionósú. Fíor, tá baol áirithe ann, ar a mhalairt, a n-aird a tharraingt ar iompar neamhghnách freastalaí ar leith. Duine éigin b’fhéidir smaoineamh ar dhíoltas agus ionsaí DDoS spriocdhírithe ar do IP. Mar sin féin, go dtí seo ní raibh aon chásanna den sórt sin, agus oibríonn tarpits go hiontach.

Gaiste (tarpit) le haghaidh naisc SSH ag teacht isteach

Foinse: will.com

Add a comment