Nem titok, hogy az internet egy nagyon ellenséges környezet. Amint bekapcsol egy szervert, azonnal tömeges támadásoknak és számos szkennelésnek van kitéve. Egy példa alapján meg lehet ítélni ennek a szemétforgalomnak a mértékét. Valójában egy átlagos szerveren a forgalom 99%-a káros lehet.
A Tarpit egy portcsapda, amelyet a bejövő kapcsolatok lelassítására használnak. Ha egy külső rendszer csatlakozik ehhez a portra, nem lehet gyorsan bezárni a kapcsolatot. A rendszer a saját erőforrásait fogja felhasználni, és várnia kell, amíg a kapcsolat időkorlát miatt megszakad, vagy kézzel kell megszakítania azt.
A tarpitet leggyakrabban védelemre használják. Ezt a technikát először számítógépes féreg elleni védelemre fejlesztették ki. Most már arra is használható, hogy megkeserítse a spammerek és a széleskörű IP-címek szkennelésével foglalkozó kutatók életét (példák a Habr-on: , ).
Egy Chris Vellons nevű rendszergazdának valószínűleg elege lett a rendezett káoszból — és írt egy kis programot , egy SSH tarpitet, amely lelassítja a bejövő kapcsolatokat. A program megnyit egy portot (alapértelmezés szerint a teszteléshez a 2222-es port van megadva), és úgy tesz, mintha SSH-szerver lenne, valójában pedig végtelen kapcsolatot létesít a bejövő klienssel, amíg az fel nem adja. Ez akár több napig is eltarthat, amíg a kliens le nem kapcsolódik.
A program telepítése:
$ make
$ ./endlessh &
$ ssh -p2222 localhostA helyesen megvalósított tarpité több forrást von el a támadótól, mint neked. De a lényeg nem is a forrásokban rejlik. A szerző , hogy a program függőséget okoz. Jelenleg 27 kliens van a csapdájában, közülük néhány hete csatlakozott. A csapdában a csúcsidőszakban 1378 kliens ült 20 órán keresztül!
Működés közben az Endlessh szervert a szokásos 22-es portra kell telepíteni, amelyre tömegesen próbálnak bejutni a zaklatók. A biztonsági ajánlások mindig azt javasolják, hogy az SSH-t egy másik portra helyezzék, ami azonnal jelentősen csökkenti a napló méretét.
Chris Vellons szerint a programja kihasznál egy bekezdést az SSH protokoll specifikációjából. Azonnal a TCP-kapcsolat létrehozása után, de a titkosítás alkalmazása előtt mindkét félnek elküldenie kell az azonosító karakterláncot. És itt van az utalás: A szerver MÁS más adatokat küldhet, mielőtt elküldené a verziót tartalmazó sort.. És nincs korlátozás az adatok mennyiségére, csak minden sort a következővel kell kezdeni SSH-.
Erre szolgál az Endlessh program: a küldi végtelen véletlenszerűen generált adatok áramlása, amelyek megfelelnek az RFC 4253-nak, azaz az azonosítás előtti küldés, és minden sor a következővel kezdődik SSH- és nem haladja meg a 255 karaktert, beleértve a sort végző karaktert is. Összességében minden a szabvány szerint van.
Alapértelmezés szerint a program 10 másodpercet vár az adatcsomagok küldése között. Ez megelőzi az időtúllépés általi lecsatlakozást, így az ügyfél gyakorlatilag végtelen ideig fog ülni a csapdában.
Mivel az adatok küldése a titkosítás alkalmazása előtt történik, a program rendkívül egyszerű. Nincs szükség titkosítások beépítésére és számos protokoll támogatására.
A szerző arra törekedett, hogy az eszköz a lehető legkevesebb erőforrást fogyassza, és teljesen észrevétlenül működjön a gépen. A modern vírusirtókkal és más „biztonsági rendszerekkel” ellentétben nem kell lelassítania a számítógépet. Sikerült minimalizálnia a forgalmat és a memóriafogyasztást egy kissé ügyesebb szoftvermegvalósítással. Ha csak egy külön folyamatot indítana egy új kapcsolathoz, a potenciális támadók DDoS-támadást indíthatnának, nyitva számos kapcsolatot a gép erőforrásainak kimerítésére. Egy folyamat egy kapcsolat számára - az sem a legjobb megoldás, mert a mag közben erőforrásokat költ a folyamatok kezelésére.
Ezért Chris Vellons az Endlessh-hez a legkönnyebben használható verziót választotta: egy szálú szervert poll(2), ahol a csapdába esett kliensek gyakorlatilag nem fogyasztanak plusz erőforrásokat, eltekintve a magbeli socket objektumtól és további 78 bájt nyilvántartástól az Endlessh-ben. Annak érdekében, hogy ne hozzanak létre fogadási és küldési puffereket minden ügyfél számára, az Endlessh közvetlen hozzáférést biztosító socketet nyit, és közvetlenül TCP csomagokat közvetít, figyelmen kívül hagyva a TCP/IP operációs rendszer szinte teljes veremét. A bejövő puffer egyáltalán nem szükséges, mert a bejövő adatok minket nem érdekelnek.
A szerző elmondta, hogy a program időpontjában a Python asycio és egyéb tarpitokról. Ha tudta volna az asycio-ról, az eszközét mindössze 18 sorban valósíthatta volna meg Pythonban:
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())Az Asyncio tökéletesen alkalmas tarpitok írására. Például egy ilyen csapda órákra felfüggesztheti a Firefoxot, a Chrome-ot vagy bármely más klienst, amely megpróbál csatlakozni az HTTP szerveréhez:
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())A tarpit nagyszerű eszköz az internetes huligánok büntetésére. Igaz, van némi kockázat, hogy éppen ellenkezőleg, felhívhatja a figyelmüket a konkrét szerver szokatlan viselkedésére. Valaki és irányított DDoS-támadást indíthat az IP-címére. Eddig azonban ilyen esetek nem voltak, és a tarpitek jól működnek.
Kategóriák:
Python, Információbiztonság, Szoftver, Rendszergazdálkodás
Címkék:
SSH, Endlessh, tarpit, csapda, asycio
Honeypot (tarpit) a bejövő SSH kapcsolatokhoz
Nem titok, hogy az internet egy nagyon ellenséges környezet. Amint bekapcsol egy szervert, azonnal tömeges támadásoknak és számos szkennelésnek van kitéve. Egy példa alapján meg lehet ítélni ennek a szemétforgalomnak a mértékét. Valójában egy átlagos szerveren a forgalom 99%-a káros lehet.
A Tarpit egy portcsapda, amelyet a bejövő kapcsolatok lelassítására használnak. Ha egy külső rendszer csatlakozik ehhez a portra, nem lehet gyorsan bezárni a kapcsolatot. A rendszer a saját erőforrásait fogja felhasználni, és várnia kell, amíg a kapcsolat időkorlát miatt megszakad, vagy kézzel kell megszakítania azt.
A tarpitet leggyakrabban védelemre használják. Ezt a technikát először számítógépes féreg elleni védelemre fejlesztették ki. Most már arra is használható, hogy megkeserítse a spammerek és a széleskörű IP-címek szkennelésével foglalkozó kutatók életét (példák a Habr-on: , ).
Egy Chris Vellons nevű rendszergazdának valószínűleg elege lett a rendezett káoszból — és írt egy kis programot , egy SSH tarpitet, amely lelassítja a bejövő kapcsolatokat. A program megnyit egy portot (alapértelmezés szerint a teszteléshez a 2222-es port van megadva), és úgy tesz, mintha SSH-szerver lenne, valójában pedig végtelen kapcsolatot létesít a bejövő klienssel, amíg az fel nem adja. Ez akár több napig is eltarthat, amíg a kliens le nem kapcsolódik.
A program telepítése:
$ make
$ ./endlessh &
$ ssh -p2222 localhostA helyesen megvalósított tarpité több forrást von el a támadótól, mint neked. De a lényeg nem is a forrásokban rejlik. A szerző , hogy a program függőséget okoz. Jelenleg 27 kliens van a csapdájában, közülük néhány hete csatlakozott. A csapdában a csúcsidőszakban 1378 kliens ült 20 órán keresztül!
Működés közben az Endlessh szervert a szokásos 22-es portra kell telepíteni, amelyre tömegesen próbálnak bejutni a zaklatók. A biztonsági ajánlások mindig azt javasolják, hogy az SSH-t egy másik portra helyezzék, ami azonnal jelentősen csökkenti a napló méretét.
Chris Vellons szerint a programja kihasznál egy bekezdést az SSH protokoll specifikációjából. Azonnal a TCP-kapcsolat létrehozása után, de a titkosítás alkalmazása előtt mindkét félnek elküldenie kell az azonosító karakterláncot. És itt van az utalás: A szerver MÁS más adatokat küldhet, mielőtt elküldené a verziót tartalmazó sort.. És nincs korlátozás az adatok mennyiségére, csak minden sort a következővel kell kezdeni SSH-.
Erre szolgál az Endlessh program: a küldi végtelen véletlenszerűen generált adatok áramlása, amelyek megfelelnek az RFC 4253-nak, azaz az azonosítás előtti küldés, és minden sor a következővel kezdődik SSH- és nem haladja meg a 255 karaktert, beleértve a sort végző karaktert is. Összességében minden a szabvány szerint van.
Alapértelmezés szerint a program 10 másodpercet vár az adatcsomagok küldése között. Ez megelőzi az időtúllépés általi lecsatlakozást, így az ügyfél gyakorlatilag végtelen ideig fog ülni a csapdában.
Mivel az adatok küldése a titkosítás alkalmazása előtt történik, a program rendkívül egyszerű. Nincs szükség titkosítások beépítésére és számos protokoll támogatására.
A szerző arra törekedett, hogy az eszköz a lehető legkevesebb erőforrást fogyassza, és teljesen észrevétlenül működjön a gépen. A modern vírusirtókkal és más „biztonsági rendszerekkel” ellentétben nem kell lelassítania a számítógépet. Sikerült minimalizálnia a forgalmat és a memóriafogyasztást egy kissé ügyesebb szoftvermegvalósítással. Ha csak egy külön folyamatot indítana egy új kapcsolathoz, a potenciális támadók DDoS-támadást indíthatnának, nyitva számos kapcsolatot a gép erőforrásainak kimerítésére. Egy folyamat egy kapcsolat számára - az sem a legjobb megoldás, mert a mag közben erőforrásokat költ a folyamatok kezelésére.
Ezért Chris Vellons az Endlessh-hez a legkönnyebben használható verziót választotta: egy szálú szervert poll(2), ahol a csapdába esett kliensek gyakorlatilag nem fogyasztanak plusz erőforrásokat, eltekintve a magbeli socket objektumtól és további 78 bájt nyilvántartástól az Endlessh-ben. Annak érdekében, hogy ne hozzanak létre fogadási és küldési puffereket minden ügyfél számára, az Endlessh közvetlen hozzáférést biztosító socketet nyit, és közvetlenül TCP csomagokat közvetít, figyelmen kívül hagyva a TCP/IP operációs rendszer szinte teljes veremét. A bejövő puffer egyáltalán nem szükséges, mert a bejövő adatok minket nem érdekelnek.
A szerző elmondta, hogy a program időpontjában a Python asycio és egyéb tarpitokról. Ha tudta volna az asycio-ról, az eszközét mindössze 18 sorban valósíthatta volna meg Pythonban:
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())Az Asyncio tökéletesen alkalmas tarpitok írására. Például egy ilyen csapda órákra felfüggesztheti a Firefoxot, a Chrome-ot vagy bármely más klienst, amely megpróbál csatlakozni az HTTP szerveréhez:
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())A tarpit nagyszerű eszköz az internetes huligánok büntetésére. Igaz, van némi kockázat, hogy éppen ellenkezőleg, felhívhatja a figyelmüket a konkrét szerver szokatlan viselkedésére. Valaki és irányított DDoS-támadást indíthat az IP-címére. Eddig azonban ilyen esetek nem voltak, és a tarpitek jól működnek.
Forrás: habr.com
