It is gjin geheime dat it ynternet in heul fijannige omjouwing is. Sadree't jo in server ferheegje, wurdt it direkt ûnderwurpen oan massive oanfallen en meardere scans. Bygelyks
Tarpit is in trappoarte dy't brûkt wurdt om ynkommende ferbiningen te fertragen. As in systeem fan tredden oanslút op dizze poarte, kinne jo de ferbining net fluch slute. Se sil har systeemboarnen moatte fergrieme en wachtsje oant de ferbining timeouts is, of it mei de hân beëinigje.
Meastentiids wurde tarpits brûkt foar beskerming. De technyk waard earst ûntwikkele om te beskermjen tsjin kompjûterwjirms. En no kin it brûkt wurde om it libben te ferneatigjen fan spammers en ûndersikers dy't dwaande binne mei brede skennen fan alle IP-adressen op in rige (foarbylden op Habré:
Ien fan 'e systeembehearders mei de namme Chris Wellons waard blykber wurch fan it besjen fan dizze skande - en hy skreau in lyts programma
Ynstallaasje fan it hulpprogramma:
$ make
$ ./endlessh &
$ ssh -p2222 localhost
In goed ymplementearre tarpit sil mear boarnen nimme fan 'e oanfaller dan fan jo. Mar it is net iens in kwestje fan middels. Skriuwer
Yn bestjoeringsmodus moat de Endlessh-tsjinner ynstalleare wurde op 'e gewoane poarte 22, wêr't hooligans massaal klopje. Standert feiligens oanbefellings altyd advisearje it ferpleatsen fan SSH nei in oare haven, dy't fuortendaliks ferminderet de grutte fan de logs troch in folchoarder fan grutte.
Chris Wellons seit dat syn programma ien paragraaf fan 'e spesifikaasje eksploitearret SSH-
.
Dit is krekt wat it programma Endlessh docht: it stjoert einleaze stream fan willekeurich oanmakke gegevens, dy't foldogge oan RFC 4253, dat is, stjoere foar autentikaasje, en elke rigel begjint mei SSH-
en net mear as 255 tekens, ynklusyf de line einigjende karakter. Yn 't algemien is alles neffens de standert.
Standert wachtet it programma 10 sekonden tusken it ferstjoeren fan pakketten. Dit foarkomt dat de klant time-out wurdt, sadat de kliïnt foar altyd fêst is.
Sûnt de gegevens wurde ferstjoerd foardat kryptografy wurdt tapast, is it programma ekstreem ienfâldich. It hoecht gjin sifers te ymplementearjen en stipet meardere protokollen.
De skriuwer besocht om te soargjen dat it nut verbruikt in minimum fan middels en wurket hielendal ûngemurken op 'e masine. Oars as moderne anty-firusen en oare "befeiligingssystemen", moat it jo kompjûter net fertrage. Hy wist sawol ferkear as ûnthâldferbrûk te minimalisearjen troch in wat slûchslimme software-ymplemintaasje. As it gewoan in apart proses op in nije ferbining lansearre, dan kinne potinsjele oanfallers in DDoS-oanfal lansearje troch meardere ferbiningen te iepenjen om boarnen op 'e masine út te lûken. Ien thread per ferbining is ek net de bêste opsje, om't de kernel boarnen fergrieme sil by it behearen fan diskusjes.
Dêrom keas Chris Wellons de lichtste opsje foar Endlessh: in single-threaded server poll(2)
, dêr't de kliïnten yn 'e trap konsumearje praktysk gjin ekstra boarnen, net telle it socket foarwerp yn' e kearn en in oare 78 bytes foar folgjen yn Endlessh. Om foar te kommen dat jo buffers foar elke kliïnt moatte allocearje, iepenet Endlessh in direkte tagongssocket en fertaalt TCP-pakketten direkt, en giet sawat it heule TCP / IP-stapel fan bestjoeringssysteem om. De ynkommende buffer is hielendal net nedich, om't wy net ynteressearre binne yn 'e ynkommende gegevens.
De skriuwer seit dat op it stuit fan syn programma
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 is ideaal foar it skriuwen fan tarpits. Bygelyks, dizze hook sil Firefox, Chrome, of elke oare kliïnt dy't in protte oeren besykje te ferbinen mei jo HTTP-tsjinner befrieze:
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 is in geweldich ark foar it straffen fan online pesten. Wier, d'r is wat risiko, krekt oarsom, om har oandacht te tekenjen op it ûngewoane gedrach fan in bepaalde tsjinner. Immen
Hubs:
Python, Ynformaasje feiligens, Software, Systeem administraasje
tags:
SSH, Endlessh, tarpit, tarpit, trap, asycio
Trap (tarpit) foar ynkommende SSH-ferbiningen
It is gjin geheime dat it ynternet in heul fijannige omjouwing is. Sadree't jo in server ferheegje, wurdt it direkt ûnderwurpen oan massive oanfallen en meardere scans. Bygelyks
Tarpit is in trappoarte dy't brûkt wurdt om ynkommende ferbiningen te fertragen. As in systeem fan tredden oanslút op dizze poarte, kinne jo de ferbining net fluch slute. Se sil har systeemboarnen moatte fergrieme en wachtsje oant de ferbining timeouts is, of it mei de hân beëinigje.
Meastentiids wurde tarpits brûkt foar beskerming. De technyk waard earst ûntwikkele om te beskermjen tsjin kompjûterwjirms. En no kin it brûkt wurde om it libben te ferneatigjen fan spammers en ûndersikers dy't dwaande binne mei brede skennen fan alle IP-adressen op in rige (foarbylden op Habré:
Ien fan 'e systeembehearders mei de namme Chris Wellons waard blykber wurch fan it besjen fan dizze skande - en hy skreau in lyts programma
Ynstallaasje fan it hulpprogramma:
$ make
$ ./endlessh &
$ ssh -p2222 localhost
In goed ymplementearre tarpit sil mear boarnen nimme fan 'e oanfaller dan fan jo. Mar it is net iens in kwestje fan middels. Skriuwer
Yn bestjoeringsmodus moat de Endlessh-tsjinner ynstalleare wurde op 'e gewoane poarte 22, wêr't hooligans massaal klopje. Standert feiligens oanbefellings altyd advisearje it ferpleatsen fan SSH nei in oare haven, dy't fuortendaliks ferminderet de grutte fan de logs troch in folchoarder fan grutte.
Chris Wellons seit dat syn programma ien paragraaf fan 'e spesifikaasje eksploitearret SSH-
.
Dit is krekt wat it programma Endlessh docht: it stjoert einleaze stream fan willekeurich oanmakke gegevens, dy't foldogge oan RFC 4253, dat is, stjoere foar autentikaasje, en elke rigel begjint mei SSH-
en net mear as 255 tekens, ynklusyf de line einigjende karakter. Yn 't algemien is alles neffens de standert.
Standert wachtet it programma 10 sekonden tusken it ferstjoeren fan pakketten. Dit foarkomt dat de klant time-out wurdt, sadat de kliïnt foar altyd fêst is.
Sûnt de gegevens wurde ferstjoerd foardat kryptografy wurdt tapast, is it programma ekstreem ienfâldich. It hoecht gjin sifers te ymplementearjen en stipet meardere protokollen.
De skriuwer besocht om te soargjen dat it nut verbruikt in minimum fan middels en wurket hielendal ûngemurken op 'e masine. Oars as moderne anty-firusen en oare "befeiligingssystemen", moat it jo kompjûter net fertrage. Hy wist sawol ferkear as ûnthâldferbrûk te minimalisearjen troch in wat slûchslimme software-ymplemintaasje. As it gewoan in apart proses op in nije ferbining lansearre, dan kinne potinsjele oanfallers in DDoS-oanfal lansearje troch meardere ferbiningen te iepenjen om boarnen op 'e masine út te lûken. Ien thread per ferbining is ek net de bêste opsje, om't de kernel boarnen fergrieme sil by it behearen fan diskusjes.
Dêrom keas Chris Wellons de lichtste opsje foar Endlessh: in single-threaded server poll(2)
, dêr't de kliïnten yn 'e trap konsumearje praktysk gjin ekstra boarnen, net telle it socket foarwerp yn' e kearn en in oare 78 bytes foar folgjen yn Endlessh. Om foar te kommen dat jo buffers foar elke kliïnt moatte allocearje, iepenet Endlessh in direkte tagongssocket en fertaalt TCP-pakketten direkt, en giet sawat it heule TCP / IP-stapel fan bestjoeringssysteem om. De ynkommende buffer is hielendal net nedich, om't wy net ynteressearre binne yn 'e ynkommende gegevens.
De skriuwer seit dat op it stuit fan syn programma
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 is ideaal foar it skriuwen fan tarpits. Bygelyks, dizze hook sil Firefox, Chrome, of elke oare kliïnt dy't in protte oeren besykje te ferbinen mei jo HTTP-tsjinner befrieze:
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 is in geweldich ark foar it straffen fan online pesten. Wier, d'r is wat risiko, krekt oarsom, om har oandacht te tekenjen op it ûngewoane gedrach fan in bepaalde tsjinner. Immen
Boarne: www.habr.com