Trap (tarpit) kwa miunganisho ya SSH inayoingia

Sio siri kuwa mtandao ni mazingira yenye uadui sana. Mara tu unapoinua seva, inakabiliwa mara moja na mashambulizi makubwa na skanning nyingi. Kwa mfano asali kutoka kwa walinzi unaweza kukadiria ukubwa wa trafiki hii ya takataka. Kwa kweli, kwa seva ya wastani, 99% ya trafiki inaweza kuwa mbaya.

Tarpit ni mlango wa mtego unaotumiwa kupunguza kasi ya miunganisho inayoingia. Ikiwa mfumo wa mtu wa tatu unaunganisha kwenye bandari hii, hutaweza kufunga muunganisho haraka. Atalazimika kupoteza rasilimali za mfumo wake na kungoja hadi muda wa muunganisho utakapokwisha, au ausitishe mwenyewe.

Mara nyingi, tarpits hutumiwa kwa ulinzi. Mbinu hiyo ilitengenezwa kwanza ili kulinda dhidi ya minyoo ya kompyuta. Na sasa inaweza kutumika kuharibu maisha ya watumaji taka na watafiti ambao wanajishughulisha na utafutaji mpana wa anwani zote za IP mfululizo (mifano kuhusu Habre: Austria, Ukraine).

Mmoja wa wasimamizi wa mfumo anayeitwa Chris Wellons inaonekana alichoka kutazama aibu hii - na aliandika programu ndogo. Isiyo na mwisho, tarpit ya SSH ambayo hupunguza kasi ya miunganisho inayoingia. Programu inafungua bandari (bandari chaguo-msingi ya majaribio ni 2222) na inajifanya kuwa seva ya SSH, lakini kwa kweli huanzisha muunganisho usio na mwisho na mteja anayeingia hadi inakata tamaa. Hii inaweza kuendelea kwa siku kadhaa au zaidi hadi mteja atakapoanguka.

Ufungaji wa matumizi:

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

tarpit iliyotekelezwa ipasavyo itachukua rasilimali zaidi kutoka kwa mshambuliaji kuliko kutoka kwako. Lakini hata sio suala la rasilimali. Mwandishi anaandikakwamba programu ni ya kulevya. Hivi sasa ina wateja 27 walionaswa, baadhi yao wameunganishwa kwa wiki. Katika kilele cha shughuli, wateja 1378 walinaswa kwa saa 20!

Katika hali ya uendeshaji, seva ya Endlessh inahitaji kusakinishwa kwenye bandari ya kawaida 22, ambapo wahuni hugonga kwa wingi. Mapendekezo ya kawaida ya usalama daima hushauri kuhamisha SSH kwenye bandari tofauti, ambayo hupunguza mara moja ukubwa wa magogo kwa amri ya ukubwa.

Chris Wellons anasema mpango wake unatumia aya moja ya maelezo RFC 4253 kwa itifaki ya SSH. Mara tu baada ya muunganisho wa TCP kuanzishwa, lakini kabla ya cryptography kutumika, pande zote mbili lazima kutuma kamba ya utambulisho. Na pia kuna kumbuka: "Seva HUENDA ikatuma safu mlalo nyingine za data kabla ya kutuma safu mlalo ya toleo". Na hakuna kikomo kwa kiasi cha data hii, unahitaji tu kuanza kila mstari na SSH-.

Hivi ndivyo programu ya Endlessh hufanya: it hutuma kutokuwa na mwisho mtiririko wa data inayozalishwa bila mpangilio, ambayo inatii RFC 4253, yaani, kutuma kabla ya uthibitishaji, na kila mstari huanza na SSH- na haizidi herufi 255, ikijumuisha herufi inayomalizia mstari. Kwa ujumla, kila kitu ni kulingana na kiwango.

Kwa chaguo-msingi, programu inasubiri sekunde 10 kati ya kutuma pakiti. Hii huzuia mteja kuwekewa muda, hivyo mteja atanaswa milele.

Kwa kuwa data inatumwa kabla ya cryptography kutumika, mpango ni rahisi sana. Haihitaji kutekeleza misimbo yoyote na inasaidia itifaki nyingi.

Mwandishi alijaribu kuhakikisha kuwa matumizi hutumia kiwango cha chini cha rasilimali na inafanya kazi bila kutambuliwa kabisa kwenye mashine. Tofauti na antivirus za kisasa na "mifumo ya usalama" mingine, haipaswi kupunguza kasi ya kompyuta yako. Aliweza kupunguza matumizi ya trafiki na kumbukumbu kwa sababu ya utekelezaji wa programu ya ujanja zaidi. Iwapo ilianzisha mchakato tofauti kwenye muunganisho mpya, basi washambuliaji watarajiwa wanaweza kuzindua shambulio la DDoS kwa kufungua miunganisho mingi ili kumaliza rasilimali kwenye mashine. Kamba moja kwa kila unganisho pia sio chaguo bora, kwa sababu kernel itapoteza rasilimali za kudhibiti nyuzi.

Ndiyo maana Chris Wellons alichagua chaguo nyepesi zaidi la Endlessh: seva yenye nyuzi moja poll(2), ambapo wateja kwenye mtego hawatumii rasilimali za ziada, bila kuhesabu kitu cha tundu kwenye kernel na ka nyingine 78 za kufuatilia katika Endlesssh. Ili kuepuka kulazimika kutenga vihifadhi na kutuma kwa kila mteja, Endlessh hufungua tundu la ufikiaji wa moja kwa moja na kutafsiri pakiti za TCP moja kwa moja, kwa kupita karibu mfumo mzima wa uendeshaji wa TCP/IP. Bafa inayoingia haihitajiki hata kidogo, kwa sababu hatuvutiwi na data inayoingia.

Mwandishi anasema kwamba wakati wa programu yake sikujua kuhusu kuwepo kwa asycio ya Python na tarpits nyingine. Ikiwa angejua juu ya asycio, angeweza kutekeleza matumizi yake katika mistari 18 tu huko 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())

Asyncio ni bora kwa kuandika tarpits. Kwa mfano, ndoano hii itafungia Firefox, Chrome, au mteja mwingine yeyote ambaye anajaribu kuunganisha kwenye seva yako ya HTTP kwa saa nyingi:

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 ni zana nzuri ya kuwaadhibu wanyanyasaji mtandaoni. Kweli, kuna hatari fulani, kinyume chake, ya kuvutia mawazo yao kwa tabia isiyo ya kawaida ya seva fulani. Mtu fulani anaweza kufikiria kulipiza kisasi na shambulio lengwa la DDoS kwenye IP yako. Walakini, hadi sasa hakujawa na kesi kama hizo, na tarpits hufanya kazi nzuri.

Vitovu:
Python, Usalama wa habari, Programu, Usimamizi wa mfumo

Tags:
SSH, Endlesssh, tarpit, tarpit, trap, asycio
Trap (tarpit) kwa miunganisho ya SSH inayoingia

Sio siri kuwa mtandao ni mazingira yenye uadui sana. Mara tu unapoinua seva, inakabiliwa mara moja na mashambulizi makubwa na skanning nyingi. Kwa mfano asali kutoka kwa walinzi unaweza kukadiria ukubwa wa trafiki hii ya takataka. Kwa kweli, kwa seva ya wastani, 99% ya trafiki inaweza kuwa mbaya.

Tarpit ni mlango wa mtego unaotumiwa kupunguza kasi ya miunganisho inayoingia. Ikiwa mfumo wa mtu wa tatu unaunganisha kwenye bandari hii, hutaweza kufunga muunganisho haraka. Atalazimika kupoteza rasilimali za mfumo wake na kungoja hadi muda wa muunganisho utakapokwisha, au ausitishe mwenyewe.

Mara nyingi, tarpits hutumiwa kwa ulinzi. Mbinu hiyo ilitengenezwa kwanza ili kulinda dhidi ya minyoo ya kompyuta. Na sasa inaweza kutumika kuharibu maisha ya watumaji taka na watafiti ambao wanajishughulisha na utafutaji mpana wa anwani zote za IP mfululizo (mifano kuhusu Habre: Austria, Ukraine).

Mmoja wa wasimamizi wa mfumo anayeitwa Chris Wellons inaonekana alichoka kutazama aibu hii - na aliandika programu ndogo. Isiyo na mwisho, tarpit ya SSH ambayo hupunguza kasi ya miunganisho inayoingia. Programu inafungua bandari (bandari chaguo-msingi ya majaribio ni 2222) na inajifanya kuwa seva ya SSH, lakini kwa kweli huanzisha muunganisho usio na mwisho na mteja anayeingia hadi inakata tamaa. Hii inaweza kuendelea kwa siku kadhaa au zaidi hadi mteja atakapoanguka.

Ufungaji wa matumizi:

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

tarpit iliyotekelezwa ipasavyo itachukua rasilimali zaidi kutoka kwa mshambuliaji kuliko kutoka kwako. Lakini hata sio suala la rasilimali. Mwandishi anaandikakwamba programu ni ya kulevya. Hivi sasa ina wateja 27 walionaswa, baadhi yao wameunganishwa kwa wiki. Katika kilele cha shughuli, wateja 1378 walinaswa kwa saa 20!

Katika hali ya uendeshaji, seva ya Endlessh inahitaji kusakinishwa kwenye bandari ya kawaida 22, ambapo wahuni hugonga kwa wingi. Mapendekezo ya kawaida ya usalama daima hushauri kuhamisha SSH kwenye bandari tofauti, ambayo hupunguza mara moja ukubwa wa magogo kwa amri ya ukubwa.

Chris Wellons anasema mpango wake unatumia aya moja ya maelezo RFC 4253 kwa itifaki ya SSH. Mara tu baada ya muunganisho wa TCP kuanzishwa, lakini kabla ya cryptography kutumika, pande zote mbili lazima kutuma kamba ya utambulisho. Na pia kuna kumbuka: "Seva HUENDA ikatuma safu mlalo nyingine za data kabla ya kutuma safu mlalo ya toleo". Na hakuna kikomo kwa kiasi cha data hii, unahitaji tu kuanza kila mstari na SSH-.

Hivi ndivyo programu ya Endlessh hufanya: it hutuma kutokuwa na mwisho mtiririko wa data inayozalishwa bila mpangilio, ambayo inatii RFC 4253, yaani, kutuma kabla ya uthibitishaji, na kila mstari huanza na SSH- na haizidi herufi 255, ikijumuisha herufi inayomalizia mstari. Kwa ujumla, kila kitu ni kulingana na kiwango.

Kwa chaguo-msingi, programu inasubiri sekunde 10 kati ya kutuma pakiti. Hii huzuia mteja kuwekewa muda, hivyo mteja atanaswa milele.

Kwa kuwa data inatumwa kabla ya cryptography kutumika, mpango ni rahisi sana. Haihitaji kutekeleza misimbo yoyote na inasaidia itifaki nyingi.

Mwandishi alijaribu kuhakikisha kuwa matumizi hutumia kiwango cha chini cha rasilimali na inafanya kazi bila kutambuliwa kabisa kwenye mashine. Tofauti na antivirus za kisasa na "mifumo ya usalama" mingine, haipaswi kupunguza kasi ya kompyuta yako. Aliweza kupunguza matumizi ya trafiki na kumbukumbu kwa sababu ya utekelezaji wa programu ya ujanja zaidi. Iwapo ilianzisha mchakato tofauti kwenye muunganisho mpya, basi washambuliaji watarajiwa wanaweza kuzindua shambulio la DDoS kwa kufungua miunganisho mingi ili kumaliza rasilimali kwenye mashine. Kamba moja kwa kila unganisho pia sio chaguo bora, kwa sababu kernel itapoteza rasilimali za kudhibiti nyuzi.

Ndiyo maana Chris Wellons alichagua chaguo nyepesi zaidi la Endlessh: seva yenye nyuzi moja poll(2), ambapo wateja kwenye mtego hawatumii rasilimali za ziada, bila kuhesabu kitu cha tundu kwenye kernel na ka nyingine 78 za kufuatilia katika Endlesssh. Ili kuepuka kulazimika kutenga vihifadhi na kutuma kwa kila mteja, Endlessh hufungua tundu la ufikiaji wa moja kwa moja na kutafsiri pakiti za TCP moja kwa moja, kwa kupita karibu mfumo mzima wa uendeshaji wa TCP/IP. Bafa inayoingia haihitajiki hata kidogo, kwa sababu hatuvutiwi na data inayoingia.

Mwandishi anasema kwamba wakati wa programu yake sikujua kuhusu kuwepo kwa asycio ya Python na tarpits nyingine. Ikiwa angejua juu ya asycio, angeweza kutekeleza matumizi yake katika mistari 18 tu huko 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())

Asyncio ni bora kwa kuandika tarpits. Kwa mfano, ndoano hii itafungia Firefox, Chrome, au mteja mwingine yeyote ambaye anajaribu kuunganisha kwenye seva yako ya HTTP kwa saa nyingi:

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 ni zana nzuri ya kuwaadhibu wanyanyasaji mtandaoni. Kweli, kuna hatari fulani, kinyume chake, ya kuvutia mawazo yao kwa tabia isiyo ya kawaida ya seva fulani. Mtu fulani anaweza kufikiria kulipiza kisasi na shambulio lengwa la DDoS kwenye IP yako. Walakini, hadi sasa hakujawa na kesi kama hizo, na tarpits hufanya kazi nzuri.

Trap (tarpit) kwa miunganisho ya SSH inayoingia

Chanzo: mapenzi.com

Kuongeza maoni