Sio siri kuwa mtandao ni mazingira yenye uadui sana. Mara tu unapoinua seva, inakabiliwa mara moja na mashambulizi makubwa na skanning nyingi. Kwa mfano
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:
Mmoja wa wasimamizi wa mfumo anayeitwa Chris Wellons inaonekana alichoka kutazama aibu hii - na aliandika programu ndogo.
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
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 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
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
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
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:
Mmoja wa wasimamizi wa mfumo anayeitwa Chris Wellons inaonekana alichoka kutazama aibu hii - na aliandika programu ndogo.
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
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 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
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
Chanzo: mapenzi.com