Fälla (tarpit) för inkommande SSH-anslutningar

Det är ingen hemlighet att Internet är en mycket fientlig miljö. Så fort du höjer en server utsätts den omedelbart för massiva attacker och flera skanningar. Till exempel honungskruka från säkerhetsvakter du kan uppskatta omfattningen av denna soptrafik. Faktum är att på den genomsnittliga servern kan 99 % av trafiken vara skadlig.

Tarpit är en fällport som används för att bromsa inkommande anslutningar. Om ett tredjepartssystem ansluter till den här porten kommer du inte att kunna stänga anslutningen snabbt. Hon kommer att behöva slösa bort sina systemresurser och vänta tills anslutningen går ut, eller manuellt avsluta den.

Oftast används presenningar för skydd. Tekniken utvecklades först för att skydda mot datormaskar. Och nu kan den användas för att förstöra livet för spammare och forskare som är engagerade i bred skanning av alla IP-adresser i rad (exempel på Habré: Österrike, Ukraina).

En av systemadministratörerna som heter Chris Wellons tröttnade tydligen på att se denna skam - och han skrev ett litet program Ändlös, en tarpit för SSH som saktar ner inkommande anslutningar. Programmet öppnar en port (standardporten för testning är 2222) och utger sig för att vara en SSH-server, men i verkligheten upprättar det en oändlig förbindelse med den inkommande klienten tills den ger upp. Detta kan fortsätta i flera dagar eller mer tills klienten faller av.

Installation av verktyget:

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

En korrekt implementerad tarpit kommer att ta mer resurser från angriparen än från dig. Men det är inte ens en fråga om resurser. Författare skriveratt programmet är beroendeframkallande. Just nu har det 27 klienter instängda, några av dem anslutna i veckor. När aktiviteten var som mest var 1378 20 klienter instängda i XNUMX timmar!

I driftläge måste Endlessh-servern installeras på den vanliga porten 22, där huliganer knackar på massor. Standardsäkerhetsrekommendationer rekommenderar alltid att SSH flyttas till en annan port, vilket omedelbart minskar storleken på stockarna med en storleksordning.

Chris Wellons säger att hans program utnyttjar ett stycke i specifikationen RFC 4253 till SSH-protokollet. Omedelbart efter att en TCP-anslutning upprättats, men innan kryptografi tillämpas, måste båda parter skicka en identifieringssträng. Och det finns också en anteckning: "Servern KAN skicka andra rader med data innan versionsraden skickas". och ingen gräns på volymen av dessa data behöver du bara börja varje rad med SSH-.

Det är precis vad Endlessh-programmet gör: det skickar ändlös ström av slumpmässigt genererad data, som överensstämmer med RFC 4253, det vill säga skickar före autentisering, och varje rad börjar med SSH- och inte överstiger 255 tecken, inklusive radsluttecknet. I allmänhet är allt enligt standarden.

Som standard väntar programmet 10 sekunder mellan att skicka paket. Detta förhindrar att klienten får timeout, så klienten kommer att vara instängd för alltid.

Eftersom data skickas innan kryptografi tillämpas är programmet extremt enkelt. Den behöver inte implementera några chiffer och stöder flera protokoll.

Författaren försökte se till att verktyget förbrukar ett minimum av resurser och fungerar helt obemärkt på maskinen. Till skillnad från moderna antivirus och andra "säkerhetssystem" bör det inte sakta ner din dator. Han lyckades minimera både trafik och minnesförbrukning tack vare en lite listigare mjukvaruimplementering. Om den helt enkelt startade en separat process på en ny anslutning, kan potentiella angripare starta en DDoS-attack genom att öppna flera anslutningar för att tömma resurserna på maskinen. En tråd per anslutning är inte heller det bästa alternativet, eftersom kärnan kommer att slösa med resurser på att hantera trådar.

Det är därför Chris Wellons valde det lättaste alternativet för Endlessh: en enkeltrådig server poll(2), där klienterna i fällan förbrukar praktiskt taget inga extra resurser, utan att räkna socket-objektet i kärnan och ytterligare 78 byte för spårning i Endlessh. För att undvika att behöva allokera mottagnings- och sändbuffertar för varje klient, öppnar Endlessh en direktåtkomstsocket och översätter TCP-paket direkt, och kringgår nästan hela operativsystemets TCP/IP-stacken. Den inkommande bufferten behövs inte alls, eftersom vi inte är intresserade av inkommande data.

Författaren säger att vid tidpunkten för sitt program visste inte om existensen av Pythons asycio och andra tarpits. Om han kände till asycio skulle han kunna implementera sitt verktyg på bara 18 rader i 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 är idealiskt för att skriva tarpits. Till exempel kommer denna krok att frysa Firefox, Chrome eller någon annan klient som försöker ansluta till din HTTP-server i många timmar:

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 är ett bra verktyg för att straffa mobbare online. Det är sant att det finns en viss risk, tvärtom, att uppmärksamma dem på det ovanliga beteendet hos en viss server. Någon kan tänka på hämnd och en riktad DDoS-attack på din IP. Men hittills har det inte förekommit några sådana fall, och presenningar fungerar utmärkt.

Hubs:
Python, Informationssäkerhet, Programvara, Systemadministration

Tags:
SSH, Endlessh, tarpit, tarpit, trap, asycio
Fälla (tarpit) för inkommande SSH-anslutningar

Det är ingen hemlighet att Internet är en mycket fientlig miljö. Så fort du höjer en server utsätts den omedelbart för massiva attacker och flera skanningar. Till exempel honungskruka från säkerhetsvakter du kan uppskatta omfattningen av denna soptrafik. Faktum är att på den genomsnittliga servern kan 99 % av trafiken vara skadlig.

Tarpit är en fällport som används för att bromsa inkommande anslutningar. Om ett tredjepartssystem ansluter till den här porten kommer du inte att kunna stänga anslutningen snabbt. Hon kommer att behöva slösa bort sina systemresurser och vänta tills anslutningen går ut, eller manuellt avsluta den.

Oftast används presenningar för skydd. Tekniken utvecklades först för att skydda mot datormaskar. Och nu kan den användas för att förstöra livet för spammare och forskare som är engagerade i bred skanning av alla IP-adresser i rad (exempel på Habré: Österrike, Ukraina).

En av systemadministratörerna som heter Chris Wellons tröttnade tydligen på att se denna skam - och han skrev ett litet program Ändlös, en tarpit för SSH som saktar ner inkommande anslutningar. Programmet öppnar en port (standardporten för testning är 2222) och utger sig för att vara en SSH-server, men i verkligheten upprättar det en oändlig förbindelse med den inkommande klienten tills den ger upp. Detta kan fortsätta i flera dagar eller mer tills klienten faller av.

Installation av verktyget:

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

En korrekt implementerad tarpit kommer att ta mer resurser från angriparen än från dig. Men det är inte ens en fråga om resurser. Författare skriveratt programmet är beroendeframkallande. Just nu har det 27 klienter instängda, några av dem anslutna i veckor. När aktiviteten var som mest var 1378 20 klienter instängda i XNUMX timmar!

I driftläge måste Endlessh-servern installeras på den vanliga porten 22, där huliganer knackar på massor. Standardsäkerhetsrekommendationer rekommenderar alltid att SSH flyttas till en annan port, vilket omedelbart minskar storleken på stockarna med en storleksordning.

Chris Wellons säger att hans program utnyttjar ett stycke i specifikationen RFC 4253 till SSH-protokollet. Omedelbart efter att en TCP-anslutning upprättats, men innan kryptografi tillämpas, måste båda parter skicka en identifieringssträng. Och det finns också en anteckning: "Servern KAN skicka andra rader med data innan versionsraden skickas". och ingen gräns på volymen av dessa data behöver du bara börja varje rad med SSH-.

Det är precis vad Endlessh-programmet gör: det skickar ändlös ström av slumpmässigt genererad data, som överensstämmer med RFC 4253, det vill säga skickar före autentisering, och varje rad börjar med SSH- och inte överstiger 255 tecken, inklusive radsluttecknet. I allmänhet är allt enligt standarden.

Som standard väntar programmet 10 sekunder mellan att skicka paket. Detta förhindrar att klienten får timeout, så klienten kommer att vara instängd för alltid.

Eftersom data skickas innan kryptografi tillämpas är programmet extremt enkelt. Den behöver inte implementera några chiffer och stöder flera protokoll.

Författaren försökte se till att verktyget förbrukar ett minimum av resurser och fungerar helt obemärkt på maskinen. Till skillnad från moderna antivirus och andra "säkerhetssystem" bör det inte sakta ner din dator. Han lyckades minimera både trafik och minnesförbrukning tack vare en lite listigare mjukvaruimplementering. Om den helt enkelt startade en separat process på en ny anslutning, kan potentiella angripare starta en DDoS-attack genom att öppna flera anslutningar för att tömma resurserna på maskinen. En tråd per anslutning är inte heller det bästa alternativet, eftersom kärnan kommer att slösa med resurser på att hantera trådar.

Det är därför Chris Wellons valde det lättaste alternativet för Endlessh: en enkeltrådig server poll(2), där klienterna i fällan förbrukar praktiskt taget inga extra resurser, utan att räkna socket-objektet i kärnan och ytterligare 78 byte för spårning i Endlessh. För att undvika att behöva allokera mottagnings- och sändbuffertar för varje klient, öppnar Endlessh en direktåtkomstsocket och översätter TCP-paket direkt, och kringgår nästan hela operativsystemets TCP/IP-stacken. Den inkommande bufferten behövs inte alls, eftersom vi inte är intresserade av inkommande data.

Författaren säger att vid tidpunkten för sitt program visste inte om existensen av Pythons asycio och andra tarpits. Om han kände till asycio skulle han kunna implementera sitt verktyg på bara 18 rader i 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 är idealiskt för att skriva tarpits. Till exempel kommer denna krok att frysa Firefox, Chrome eller någon annan klient som försöker ansluta till din HTTP-server i många timmar:

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 är ett bra verktyg för att straffa mobbare online. Det är sant att det finns en viss risk, tvärtom, att uppmärksamma dem på det ovanliga beteendet hos en viss server. Någon kan tänka på hämnd och en riktad DDoS-attack på din IP. Men hittills har det inte förekommit några sådana fall, och presenningar fungerar utmärkt.

Fälla (tarpit) för inkommande SSH-anslutningar

Källa: will.com

Lägg en kommentar