Trap (tarpit) ar gyfer cysylltiadau SSH sy'n dod i mewn

Nid yw'n gyfrinach bod y Rhyngrwyd yn amgylchedd gelyniaethus iawn. Cyn gynted ag y byddwch chi'n codi gweinydd, mae'n destun ymosodiadau enfawr a sganiau lluosog ar unwaith. Er enghraifft pot mêl gan warchodwyr diogelwch gallwch amcangyfrif maint y traffig sbwriel hwn. Mewn gwirionedd, ar y gweinydd cyffredin, gall 99% o draffig fod yn faleisus.

Mae tarpit yn borthladd trap a ddefnyddir i arafu cysylltiadau sy'n dod i mewn. Os yw system trydydd parti yn cysylltu â'r porthladd hwn, ni fyddwch yn gallu cau'r cysylltiad yn gyflym. Bydd yn rhaid iddi wastraffu adnoddau ei system ac aros tan i'r goramser cysylltiad ddod i ben, neu ei derfynu â llaw.

Yn fwyaf aml, defnyddir tarpits i amddiffyn. Datblygwyd y dechneg gyntaf i amddiffyn rhag llyngyr cyfrifiadurol. A nawr gellir ei ddefnyddio i ddifetha bywydau sbamwyr ac ymchwilwyr sy'n ymwneud â sganio eang o'r holl gyfeiriadau IP yn olynol (enghreifftiau ar Habré: Австрия, Wcráin).

Mae'n debyg bod un o weinyddwyr y system o'r enw Chris Wellons wedi blino gwylio'r gwarth hwn - ac ysgrifennodd raglen fach Annherfynol, tarpit ar gyfer SSH sy'n arafu cysylltiadau sy'n dod i mewn. Mae'r rhaglen yn agor porthladd (y porthladd rhagosodedig ar gyfer profi yw 2222) ac yn esgus bod yn weinydd SSH, ond mewn gwirionedd mae'n sefydlu cysylltiad diddiwedd â'r cleient sy'n dod i mewn nes iddo roi'r gorau iddi. Gall hyn barhau am sawl diwrnod neu fwy nes bod y cleient yn cwympo i ffwrdd.

Gosod y cyfleustodau:

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

Bydd tarpit a weithredir yn gywir yn cymryd mwy o adnoddau gan yr ymosodwr nag oddi wrthych. Ond nid yw hyd yn oed yn fater o adnoddau. Awdur ysgrifennubod y rhaglen yn gaethiwus. Ar hyn o bryd mae ganddo 27 o gleientiaid yn gaeth, rhai ohonyn nhw wedi'u cysylltu ers wythnosau. Ar anterth y gweithgaredd, roedd 1378 o gleientiaid yn gaeth am 20 awr!

Yn y modd gweithredu, mae angen gosod y gweinydd Endlessh ar y porthladd arferol 22, lle mae hwliganiaid yn curo en masse. Mae argymhellion diogelwch safonol bob amser yn cynghori symud SSH i borthladd gwahanol, sy'n lleihau maint y boncyffion ar unwaith yn ôl trefn maint.

Dywed Chris Wellons fod ei raglen yn ecsbloetio un paragraff o'r fanyleb RFC 4253 i'r protocol SSH. Yn syth ar ôl sefydlu cysylltiad TCP, ond cyn cymhwyso cryptograffeg, rhaid i'r ddau barti anfon llinyn adnabod. Ac mae nodyn hefyd: "GALLAI'r gweinydd anfon rhesi eraill o ddata cyn anfon y rhes fersiwn". Ac dim terfyn ar gyfaint y data hwn, does ond angen i chi ddechrau pob llinell SSH-.

Dyma’n union y mae’r rhaglen Endlessh yn ei wneud: fe yn anfon diddiwedd ffrwd o ddata a gynhyrchir ar hap, sy'n cydymffurfio â RFC 4253, hynny yw, anfon cyn dilysu, ac mae pob llinell yn dechrau gyda SSH- ac nad yw'n fwy na 255 nod, gan gynnwys y nod terfynu llinell. Yn gyffredinol, mae popeth yn unol â'r safon.

Yn ddiofyn, mae'r rhaglen yn aros 10 eiliad rhwng anfon pecynnau. Mae hyn yn atal y cleient rhag cael ei amseru allan, felly bydd y cleient yn gaeth am byth.

Gan fod y data yn cael ei anfon cyn cymhwyso cryptograffeg, mae'r rhaglen yn hynod o syml. Nid oes angen iddo weithredu unrhyw seiffrau ac mae'n cefnogi protocolau lluosog.

Ceisiodd yr awdur sicrhau bod y cyfleustodau'n defnyddio lleiafswm o adnoddau ac yn gweithio'n gwbl ddisylw ar y peiriant. Yn wahanol i wrthfeirysau modern a “systemau diogelwch” eraill, ni ddylai arafu eich cyfrifiadur. Llwyddodd i leihau'r defnydd o draffig a chof oherwydd gweithrediad meddalwedd ychydig yn fwy cyfrwys. Pe bai'n lansio proses ar wahân ar gysylltiad newydd yn unig, yna gallai ymosodwyr posibl lansio ymosodiad DDoS trwy agor cysylltiadau lluosog i wacáu adnoddau ar y peiriant. Nid un edefyn fesul cysylltiad yw'r opsiwn gorau chwaith, oherwydd bydd y cnewyllyn yn gwastraffu adnoddau yn rheoli edafedd.

Dyna pam y dewisodd Chris Wellons yr opsiwn mwyaf ysgafn ar gyfer Endlessh: gweinydd un edau poll(2), lle mae'r cleientiaid yn y trap yn defnyddio bron dim adnoddau ychwanegol, heb gyfrif y gwrthrych soced yn y cnewyllyn a 78 beit arall ar gyfer olrhain yn Endlessh. Er mwyn osgoi gorfod dyrannu byfferau derbyn ac anfon ar gyfer pob cleient, mae Endlessh yn agor soced mynediad uniongyrchol ac yn cyfieithu pecynnau TCP yn uniongyrchol, gan osgoi bron yr holl system weithredu TCP/IP stack. Nid oes angen y byffer sy'n dod i mewn o gwbl, oherwydd nid oes gennym ddiddordeb yn y data sy'n dod i mewn.

Dywed yr awdwr mai adeg ei raglen ddim yn gwybod am fodolaeth asycio Python a tharpits eraill. Pe bai'n gwybod am asycio, gallai weithredu ei ddefnyddioldeb mewn dim ond 18 llinell yn 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())

Mae Asyncio yn ddelfrydol ar gyfer ysgrifennu tarpits. Er enghraifft, bydd y bachyn hwn yn rhewi Firefox, Chrome, neu unrhyw gleient arall sy'n ceisio cysylltu â'ch gweinydd HTTP am oriau lawer:

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

Mae Tarpit yn arf gwych ar gyfer cosbi bwlis ar-lein. Yn wir, mae rhywfaint o risg, i'r gwrthwyneb, o dynnu eu sylw at ymddygiad anarferol gweinydd penodol. Rhywun efallai meddwl am ddial ac ymosodiad DDoS wedi'i dargedu ar eich IP. Fodd bynnag, hyd yn hyn ni fu unrhyw achosion o'r fath, ac mae tarpits yn gweithio'n wych.

Hybiau:
Python, Diogelwch gwybodaeth, Meddalwedd, Gweinyddu System

Tagiau:
SSH, Annherfynol, tarpit, tarpit, trap, asycio
Trap (tarpit) ar gyfer cysylltiadau SSH sy'n dod i mewn

Nid yw'n gyfrinach bod y Rhyngrwyd yn amgylchedd gelyniaethus iawn. Cyn gynted ag y byddwch chi'n codi gweinydd, mae'n destun ymosodiadau enfawr a sganiau lluosog ar unwaith. Er enghraifft pot mêl gan warchodwyr diogelwch gallwch amcangyfrif maint y traffig sbwriel hwn. Mewn gwirionedd, ar y gweinydd cyffredin, gall 99% o draffig fod yn faleisus.

Mae tarpit yn borthladd trap a ddefnyddir i arafu cysylltiadau sy'n dod i mewn. Os yw system trydydd parti yn cysylltu â'r porthladd hwn, ni fyddwch yn gallu cau'r cysylltiad yn gyflym. Bydd yn rhaid iddi wastraffu adnoddau ei system ac aros tan i'r goramser cysylltiad ddod i ben, neu ei derfynu â llaw.

Yn fwyaf aml, defnyddir tarpits i amddiffyn. Datblygwyd y dechneg gyntaf i amddiffyn rhag llyngyr cyfrifiadurol. A nawr gellir ei ddefnyddio i ddifetha bywydau sbamwyr ac ymchwilwyr sy'n ymwneud â sganio eang o'r holl gyfeiriadau IP yn olynol (enghreifftiau ar Habré: Австрия, Wcráin).

Mae'n debyg bod un o weinyddwyr y system o'r enw Chris Wellons wedi blino gwylio'r gwarth hwn - ac ysgrifennodd raglen fach Annherfynol, tarpit ar gyfer SSH sy'n arafu cysylltiadau sy'n dod i mewn. Mae'r rhaglen yn agor porthladd (y porthladd rhagosodedig ar gyfer profi yw 2222) ac yn esgus bod yn weinydd SSH, ond mewn gwirionedd mae'n sefydlu cysylltiad diddiwedd â'r cleient sy'n dod i mewn nes iddo roi'r gorau iddi. Gall hyn barhau am sawl diwrnod neu fwy nes bod y cleient yn cwympo i ffwrdd.

Gosod y cyfleustodau:

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

Bydd tarpit a weithredir yn gywir yn cymryd mwy o adnoddau gan yr ymosodwr nag oddi wrthych. Ond nid yw hyd yn oed yn fater o adnoddau. Awdur ysgrifennubod y rhaglen yn gaethiwus. Ar hyn o bryd mae ganddo 27 o gleientiaid yn gaeth, rhai ohonyn nhw wedi'u cysylltu ers wythnosau. Ar anterth y gweithgaredd, roedd 1378 o gleientiaid yn gaeth am 20 awr!

Yn y modd gweithredu, mae angen gosod y gweinydd Endlessh ar y porthladd arferol 22, lle mae hwliganiaid yn curo en masse. Mae argymhellion diogelwch safonol bob amser yn cynghori symud SSH i borthladd gwahanol, sy'n lleihau maint y boncyffion ar unwaith yn ôl trefn maint.

Dywed Chris Wellons fod ei raglen yn ecsbloetio un paragraff o'r fanyleb RFC 4253 i'r protocol SSH. Yn syth ar ôl sefydlu cysylltiad TCP, ond cyn cymhwyso cryptograffeg, rhaid i'r ddau barti anfon llinyn adnabod. Ac mae nodyn hefyd: "GALLAI'r gweinydd anfon rhesi eraill o ddata cyn anfon y rhes fersiwn". Ac dim terfyn ar gyfaint y data hwn, does ond angen i chi ddechrau pob llinell SSH-.

Dyma’n union y mae’r rhaglen Endlessh yn ei wneud: fe yn anfon diddiwedd ffrwd o ddata a gynhyrchir ar hap, sy'n cydymffurfio â RFC 4253, hynny yw, anfon cyn dilysu, ac mae pob llinell yn dechrau gyda SSH- ac nad yw'n fwy na 255 nod, gan gynnwys y nod terfynu llinell. Yn gyffredinol, mae popeth yn unol â'r safon.

Yn ddiofyn, mae'r rhaglen yn aros 10 eiliad rhwng anfon pecynnau. Mae hyn yn atal y cleient rhag cael ei amseru allan, felly bydd y cleient yn gaeth am byth.

Gan fod y data yn cael ei anfon cyn cymhwyso cryptograffeg, mae'r rhaglen yn hynod o syml. Nid oes angen iddo weithredu unrhyw seiffrau ac mae'n cefnogi protocolau lluosog.

Ceisiodd yr awdur sicrhau bod y cyfleustodau'n defnyddio lleiafswm o adnoddau ac yn gweithio'n gwbl ddisylw ar y peiriant. Yn wahanol i wrthfeirysau modern a “systemau diogelwch” eraill, ni ddylai arafu eich cyfrifiadur. Llwyddodd i leihau'r defnydd o draffig a chof oherwydd gweithrediad meddalwedd ychydig yn fwy cyfrwys. Pe bai'n lansio proses ar wahân ar gysylltiad newydd yn unig, yna gallai ymosodwyr posibl lansio ymosodiad DDoS trwy agor cysylltiadau lluosog i wacáu adnoddau ar y peiriant. Nid un edefyn fesul cysylltiad yw'r opsiwn gorau chwaith, oherwydd bydd y cnewyllyn yn gwastraffu adnoddau yn rheoli edafedd.

Dyna pam y dewisodd Chris Wellons yr opsiwn mwyaf ysgafn ar gyfer Endlessh: gweinydd un edau poll(2), lle mae'r cleientiaid yn y trap yn defnyddio bron dim adnoddau ychwanegol, heb gyfrif y gwrthrych soced yn y cnewyllyn a 78 beit arall ar gyfer olrhain yn Endlessh. Er mwyn osgoi gorfod dyrannu byfferau derbyn ac anfon ar gyfer pob cleient, mae Endlessh yn agor soced mynediad uniongyrchol ac yn cyfieithu pecynnau TCP yn uniongyrchol, gan osgoi bron yr holl system weithredu TCP/IP stack. Nid oes angen y byffer sy'n dod i mewn o gwbl, oherwydd nid oes gennym ddiddordeb yn y data sy'n dod i mewn.

Dywed yr awdwr mai adeg ei raglen ddim yn gwybod am fodolaeth asycio Python a tharpits eraill. Pe bai'n gwybod am asycio, gallai weithredu ei ddefnyddioldeb mewn dim ond 18 llinell yn 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())

Mae Asyncio yn ddelfrydol ar gyfer ysgrifennu tarpits. Er enghraifft, bydd y bachyn hwn yn rhewi Firefox, Chrome, neu unrhyw gleient arall sy'n ceisio cysylltu â'ch gweinydd HTTP am oriau lawer:

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

Mae Tarpit yn arf gwych ar gyfer cosbi bwlis ar-lein. Yn wir, mae rhywfaint o risg, i'r gwrthwyneb, o dynnu eu sylw at ymddygiad anarferol gweinydd penodol. Rhywun efallai meddwl am ddial ac ymosodiad DDoS wedi'i dargedu ar eich IP. Fodd bynnag, hyd yn hyn ni fu unrhyw achosion o'r fath, ac mae tarpits yn gweithio'n wych.

Trap (tarpit) ar gyfer cysylltiadau SSH sy'n dod i mewn

Ffynhonnell: hab.com

Ychwanegu sylw