Chan eil e na dhìomhaireachd gu bheil an eadar-lìn na àrainneachd gu math nàimhdeil. Cho luath ‘s a thogas tu frithealaiche, bidh e sa bhad fo ionnsaighean mòra agus grunn sganaidhean. Mar eisimpleir
Is e port ribe a th’ ann an Tarpit a thathas a’ cleachdadh gus ceanglaichean a tha a’ tighinn a-steach a dhèanamh nas slaodaiche. Ma cheanglas siostam treas-phàrtaidh ris a’ phort seo, cha bhith e comasach dhut an ceangal a dhùnadh gu sgiobalta. Feumaidh i na goireasan siostam aice a chaitheamh agus feitheamh gus an tèid an ceangal a-mach, no crìoch a chuir air le làimh.
Mar as trice, bidh tarpits air an cleachdadh airson dìon. Chaidh an dòigh-obrach a leasachadh an toiseach gus dìon an aghaidh cnuimhean coimpiutair. Agus a-nis faodar a chleachdadh gus beatha spammers agus luchd-rannsachaidh a sgrios a tha an sàs ann an sganadh farsaing de gach seòladh IP ann an sreath (eisimpleirean air Habré:
Tha e coltach gun do dh’ fhàs fear de luchd-rianachd an t-siostaim leis an t-ainm Chris Wellons sgìth de bhith a’ coimhead an tàmailt seo - agus sgrìobh e prògram beag
Stàladh an goireas:
$ make
$ ./endlessh &
$ ssh -p2222 localhost
Bheir tarpit a tha air a chuir an gnìomh gu ceart barrachd ghoireasan bhon neach-ionnsaigh na bhuat. Ach chan eil e eadhon ceist mu ghoireasan. Ughdar
Ann am modh obrachaidh, feumar am frithealaiche Endlessh a chuir a-steach air a’ phort àbhaisteach 22, far am bi hooligans a’ gnogadh en masse. Bidh molaidhean tèarainteachd àbhaisteach an-còmhnaidh a’ comhairleachadh gluasad SSH gu port eile, a lughdaicheas meud nan logaichean sa bhad le òrdugh meudachd.
Tha Chris Wellons ag ràdh gu bheil am prògram aige a’ gabhail brath air aon pharagraf den t-sònrachadh SSH-
.
Is e seo dìreach a bhios am prògram Endlessh a’ dèanamh: e a ’cur gun chrìoch sruth de dhàta air a chruthachadh air thuaiream, a tha a’ gèilleadh ri RFC 4253, is e sin, cuir air adhart ro dhearbhadh, agus tòisichidh gach loidhne le SSH-
agus chan eil e nas àirde na 255 caractar, a’ gabhail a-steach caractar crìochnachaidh na loidhne. San fharsaingeachd, tha a h-uile dad a rèir na h-ìre àbhaisteach.
Gu gnàthach, bidh am prògram a’ feitheamh 10 diogan eadar pacaidean a chuir. Tha seo a’ cur casg air an neach-dèiligidh bho bhith a’ dol a-mach à ùine, agus mar sin bidh an neach-dèiligidh glaiste gu bràth.
Leis gu bheil an dàta air a chuir mus tèid cryptography a chuir an sàs, tha am prògram gu math sìmplidh. Chan fheum e ciphers sam bith a chuir an gnìomh agus bheir e taic do ghrunn phròtacalan.
Dh'fheuch an t-ùghdar ri dèanamh cinnteach gu bheil an goireas a 'cleachdadh a' char as lugha de ghoireasan agus ag obair gu tur gun mhothachadh air an inneal. Eu-coltach ri anti-bhìorasan an latha an-diugh agus “siostaman tèarainteachd” eile, cha bu chòir dha do choimpiutair a dhèanamh nas slaodaiche. Chaidh aige air an dà chuid trafaic agus caitheamh cuimhne a lughdachadh mar thoradh air buileachadh bathar-bog beagan nas seòlta. Ma chuir e dìreach pròiseas air leth air bhog air ceangal ùr, dh’ fhaodadh luchd-ionnsaigh ionnsaigh DDoS a chuir air bhog le bhith a’ fosgladh grunn cheanglaichean gus goireasan a chuir a-mach air an inneal. Chan e aon snàithlean airson gach ceangal an roghainn as fheàrr cuideachd, oir bidh an kernel a’ caitheamh ghoireasan a’ riaghladh snàithleanan.
Sin as coireach gun do thagh Chris Wellons an roghainn as aotrom airson Endlessh: frithealaiche aon-snàthainn poll(2)
, far nach bi an luchd-dèiligidh anns an ribe ag ithe cha mhòr gun ghoireasan a bharrachd, gun a bhith a’ cunntadh an nì socaid anns an kernel agus 78 bytes eile airson lorg ann an Endlessh. Gus nach fheum iad bufairean fhaighinn agus a chuir air falbh airson gach neach-dèiligidh, bidh Endlessh a’ fosgladh socaid ruigsinneachd dìreach agus ag eadar-theangachadh pacaidean TCP gu dìreach, a’ dol seachad air cha mhòr an t-siostam obrachaidh TCP/IP stac gu lèir. Chan eil feum air a’ bhufair a tha a’ tighinn a-steach idir, oir chan eil ùidh againn anns an dàta a tha a’ tighinn a-steach.
Tha an t-ùghdar ag ràdh sin aig àm a’ phrògram aige
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())
Tha Asyncio air leth freagarrach airson tarpits a sgrìobhadh. Mar eisimpleir, reothadh an dubhan seo Firefox, Chrome, no teachdaiche sam bith eile a tha a’ feuchainn ri ceangal ris an t-seirbheisiche HTTP agad airson grunn uairean a thìde:
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())
Tha Tarpit na inneal math airson burraidhean air-loidhne a pheanasachadh. Fìor, tha beagan cunnart ann, air an làimh eile, an aire a tharraing gu giùlan neo-àbhaisteach frithealaiche sònraichte. Cuideigin
Mòr-ionadan:
Python, tèarainteachd fiosrachaidh, bathar-bog, rianachd siostam
Tags:
SSH, gun chrìch, tarpit, tarpit, ribe, asycio
Trap (tarpit) airson ceanglaichean SSH a tha a’ tighinn a-steach
Chan eil e na dhìomhaireachd gu bheil an eadar-lìn na àrainneachd gu math nàimhdeil. Cho luath ‘s a thogas tu frithealaiche, bidh e sa bhad fo ionnsaighean mòra agus grunn sganaidhean. Mar eisimpleir
Is e port ribe a th’ ann an Tarpit a thathas a’ cleachdadh gus ceanglaichean a tha a’ tighinn a-steach a dhèanamh nas slaodaiche. Ma cheanglas siostam treas-phàrtaidh ris a’ phort seo, cha bhith e comasach dhut an ceangal a dhùnadh gu sgiobalta. Feumaidh i na goireasan siostam aice a chaitheamh agus feitheamh gus an tèid an ceangal a-mach, no crìoch a chuir air le làimh.
Mar as trice, bidh tarpits air an cleachdadh airson dìon. Chaidh an dòigh-obrach a leasachadh an toiseach gus dìon an aghaidh cnuimhean coimpiutair. Agus a-nis faodar a chleachdadh gus beatha spammers agus luchd-rannsachaidh a sgrios a tha an sàs ann an sganadh farsaing de gach seòladh IP ann an sreath (eisimpleirean air Habré:
Tha e coltach gun do dh’ fhàs fear de luchd-rianachd an t-siostaim leis an t-ainm Chris Wellons sgìth de bhith a’ coimhead an tàmailt seo - agus sgrìobh e prògram beag
Stàladh an goireas:
$ make
$ ./endlessh &
$ ssh -p2222 localhost
Bheir tarpit a tha air a chuir an gnìomh gu ceart barrachd ghoireasan bhon neach-ionnsaigh na bhuat. Ach chan eil e eadhon ceist mu ghoireasan. Ughdar
Ann am modh obrachaidh, feumar am frithealaiche Endlessh a chuir a-steach air a’ phort àbhaisteach 22, far am bi hooligans a’ gnogadh en masse. Bidh molaidhean tèarainteachd àbhaisteach an-còmhnaidh a’ comhairleachadh gluasad SSH gu port eile, a lughdaicheas meud nan logaichean sa bhad le òrdugh meudachd.
Tha Chris Wellons ag ràdh gu bheil am prògram aige a’ gabhail brath air aon pharagraf den t-sònrachadh SSH-
.
Is e seo dìreach a bhios am prògram Endlessh a’ dèanamh: e a ’cur gun chrìoch sruth de dhàta air a chruthachadh air thuaiream, a tha a’ gèilleadh ri RFC 4253, is e sin, cuir air adhart ro dhearbhadh, agus tòisichidh gach loidhne le SSH-
agus chan eil e nas àirde na 255 caractar, a’ gabhail a-steach caractar crìochnachaidh na loidhne. San fharsaingeachd, tha a h-uile dad a rèir na h-ìre àbhaisteach.
Gu gnàthach, bidh am prògram a’ feitheamh 10 diogan eadar pacaidean a chuir. Tha seo a’ cur casg air an neach-dèiligidh bho bhith a’ dol a-mach à ùine, agus mar sin bidh an neach-dèiligidh glaiste gu bràth.
Leis gu bheil an dàta air a chuir mus tèid cryptography a chuir an sàs, tha am prògram gu math sìmplidh. Chan fheum e ciphers sam bith a chuir an gnìomh agus bheir e taic do ghrunn phròtacalan.
Dh'fheuch an t-ùghdar ri dèanamh cinnteach gu bheil an goireas a 'cleachdadh a' char as lugha de ghoireasan agus ag obair gu tur gun mhothachadh air an inneal. Eu-coltach ri anti-bhìorasan an latha an-diugh agus “siostaman tèarainteachd” eile, cha bu chòir dha do choimpiutair a dhèanamh nas slaodaiche. Chaidh aige air an dà chuid trafaic agus caitheamh cuimhne a lughdachadh mar thoradh air buileachadh bathar-bog beagan nas seòlta. Ma chuir e dìreach pròiseas air leth air bhog air ceangal ùr, dh’ fhaodadh luchd-ionnsaigh ionnsaigh DDoS a chuir air bhog le bhith a’ fosgladh grunn cheanglaichean gus goireasan a chuir a-mach air an inneal. Chan e aon snàithlean airson gach ceangal an roghainn as fheàrr cuideachd, oir bidh an kernel a’ caitheamh ghoireasan a’ riaghladh snàithleanan.
Sin as coireach gun do thagh Chris Wellons an roghainn as aotrom airson Endlessh: frithealaiche aon-snàthainn poll(2)
, far nach bi an luchd-dèiligidh anns an ribe ag ithe cha mhòr gun ghoireasan a bharrachd, gun a bhith a’ cunntadh an nì socaid anns an kernel agus 78 bytes eile airson lorg ann an Endlessh. Gus nach fheum iad bufairean fhaighinn agus a chuir air falbh airson gach neach-dèiligidh, bidh Endlessh a’ fosgladh socaid ruigsinneachd dìreach agus ag eadar-theangachadh pacaidean TCP gu dìreach, a’ dol seachad air cha mhòr an t-siostam obrachaidh TCP/IP stac gu lèir. Chan eil feum air a’ bhufair a tha a’ tighinn a-steach idir, oir chan eil ùidh againn anns an dàta a tha a’ tighinn a-steach.
Tha an t-ùghdar ag ràdh sin aig àm a’ phrògram aige
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())
Tha Asyncio air leth freagarrach airson tarpits a sgrìobhadh. Mar eisimpleir, reothadh an dubhan seo Firefox, Chrome, no teachdaiche sam bith eile a tha a’ feuchainn ri ceangal ris an t-seirbheisiche HTTP agad airson grunn uairean a thìde:
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())
Tha Tarpit na inneal math airson burraidhean air-loidhne a pheanasachadh. Fìor, tha beagan cunnart ann, air an làimh eile, an aire a tharraing gu giùlan neo-àbhaisteach frithealaiche sònraichte. Cuideigin
Source: www.habr.com