Nem titok, hogy az internet nagyon ellenséges környezet. Amint felállít egy szervert, azonnal hatalmas támadásoknak és többszöri vizsgálatnak van kitéve. Például megbecsülheti ennek a szemétforgalomnak a mértékét. Valójában egy átlagos szerveren a forgalom 99%-a rosszindulatú lehet.
A Tarpit egy trap port, amelyet a bejövő kapcsolatok lelassítására használnak. Ha egy harmadik féltől származó rendszer csatlakozik ehhez a porthoz, nem tudja gyorsan lezárni a kapcsolatot. El kell pazarolnia rendszererőforrásait, és meg kell várnia a kapcsolat időtúllépéséig, vagy manuálisan meg kell szakítania azt.
Leggyakrabban védőponyvakat használnak. A technikát először a számítógépes férgek elleni védekezésre fejlesztették ki. És most felhasználható arra, hogy tönkretegyék a spammerek és a kutatók életét, akik egymás után az összes IP-címet széles körben átkutatják (példák Habréról: , ).
Az egyik rendszeradminisztrátor, Chris Wellons láthatóan belefáradt abba, hogy ezt a szégyent nézze – és írt egy kis programot. , az SSH-hoz készült tarpit, amely lelassítja a bejövő kapcsolatokat. A program megnyit egy portot (a teszteléshez az alapértelmezett port a 2222), és úgy tesz, mintha SSH szerver lenne, de a valóságban végtelen kapcsolatot létesít a bejövő klienssel, amíg az fel nem adja. Ez több napig vagy tovább folytatódhat, amíg az ügyfél le nem esik.
A segédprogram telepítése:
$ make
$ ./endlessh &
$ ssh -p2222 localhostEgy megfelelően megvalósított tarpit több erőforrást von el a támadótól, mint tőled. De ez még csak nem is forrás kérdése. Szerző hogy a program addiktív. Jelenleg 27 ügyfele van csapdában, néhányuk hetek óta kapcsolatban van. Az aktivitás csúcsán 1378 ügyfél rekedt 20 órára!
Üzemmódban az Endlessh szervert a szokásos 22-es portra kell telepíteni, ahol tömegesen kopogtatnak a huligánok. A szabványos biztonsági ajánlások mindig azt javasolják, hogy az SSH-t másik portra helyezzék át, ami azonnal egy nagyságrenddel csökkenti a naplók méretét.
Chris Wellons szerint a programja a specifikáció egy bekezdését használja ki az SSH protokollhoz. Közvetlenül a TCP-kapcsolat létrehozása után, de a titkosítás alkalmazása előtt mindkét félnek el kell küldenie egy azonosító karakterláncot. És van egy megjegyzés is: "A szerver más adatsorokat is küldhet a verziósor elküldése előtt". és határ nélül ezeknek az adatoknak a mennyiségére vonatkozóan minden sort csak ezzel kell kezdenie SSH-.
Az Endlessh program pontosan ezt teszi: azt küld végtelen véletlenszerűen generált adatfolyam, amelyek megfelelnek az RFC 4253 szabványnak, azaz hitelesítés előtt küldik el, és minden sor a következővel kezdődik SSH- és nem haladja meg a 255 karaktert, beleértve a sorvégi karaktert is. Általában minden a szabvány szerint történik.
Alapértelmezés szerint a program 10 másodpercet vár a csomagok küldése között. Ez megakadályozza az ügyfél időtúllépését, így az ügyfél örökre csapdába kerül.
Mivel az adatokat a kriptográfia alkalmazása előtt küldik el, a program rendkívül egyszerű. Nem szükséges titkosítást megvalósítani, és több protokollt is támogat.
A szerző arra törekedett, hogy a segédprogram minimális erőforrást fogyasztson, é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 ennek nem szabad lelassítania a számítógépet. Mind a forgalmat, mind a memóriafogyasztást sikerült minimalizálnia egy kicsit ravaszabb szoftveres megvalósításnak köszönhetően. Ha egyszerűen elindít egy külön folyamatot egy új kapcsolaton, akkor a potenciális támadók DDoS-támadást indíthatnak több kapcsolat megnyitásával, hogy kimerítsék a gép erőforrásait. Csatlakozásonként egy szál sem a legjobb megoldás, mert a kernel erőforrásokat pazarol a szálak kezelésére.
Ezért választotta Chris Wellons a legkönnyebb megoldást az Endlessh számára: az egyszálas szervert. poll(2), ahol a csapdába esett kliensek gyakorlatilag semmilyen további erőforrást nem fogyasztanak a kernel socket objektumon és az Endlessh-ben a követéshez szükséges további 78 bájton kívül. Annak érdekében, hogy ne kelljen minden klienshez fogadni és küldeni puffereket, az Endlessh egy közvetlen hozzáférésű socketet nyit, és közvetlenül továbbítja a TCP csomagokat, szinte a teljes vermet figyelmen kívül hagyva. TCP/IP operációs rendszer. A bemeneti pufferre egyáltalán nincs szükség, mivel nem érdekelnek minket a bejövő adatok.
A szerző azt mondja, hogy programja idején Python asycio és egyéb tarpitok létezéséről. Ha ismerné az asycio-t, a segédprogramját mindössze 18 sorban tudná megvalósítani 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 ideális tenyéríráshoz. Ez a hook például leállítja a Firefoxot, a Chrome-ot vagy bármely más olyan klienst, amely több órán keresztül próbál csatlakozni a HTTP-kiszolgálóhoz:
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 online zaklatók megbüntetésére. Igaz, éppen ellenkezőleg, fennáll annak a veszélye, hogy felhívják figyelmüket egy adott szerver szokatlan viselkedésére. Valaki és egy célzott DDoS-támadást az IP-címe ellen. Eddig azonban nem volt ilyen eset, a tarpitok pedig remekül működnek.
Hubok:
Python, Információbiztonság, Szoftver, Rendszeradminisztráció
Címkék:
SSH, Endlessh, tarpit, tarpit, trap, asycio
Csapda (tarpit) a bejövő SSH-kapcsolatokhoz
Nem titok, hogy az internet nagyon ellenséges környezet. Amint felállít egy szervert, azonnal hatalmas támadásoknak és többszöri vizsgálatnak van kitéve. Például megbecsülheti ennek a szemétforgalomnak a mértékét. Valójában egy átlagos szerveren a forgalom 99%-a rosszindulatú lehet.
A Tarpit egy trap port, amelyet a bejövő kapcsolatok lelassítására használnak. Ha egy harmadik féltől származó rendszer csatlakozik ehhez a porthoz, nem tudja gyorsan lezárni a kapcsolatot. El kell pazarolnia rendszererőforrásait, és meg kell várnia a kapcsolat időtúllépéséig, vagy manuálisan meg kell szakítania azt.
Leggyakrabban védőponyvakat használnak. A technikát először a számítógépes férgek elleni védekezésre fejlesztették ki. És most felhasználható arra, hogy tönkretegyék a spammerek és a kutatók életét, akik egymás után az összes IP-címet széles körben átkutatják (példák Habréról: , ).
Az egyik rendszeradminisztrátor, Chris Wellons láthatóan belefáradt abba, hogy ezt a szégyent nézze – és írt egy kis programot. , az SSH-hoz készült tarpit, amely lelassítja a bejövő kapcsolatokat. A program megnyit egy portot (a teszteléshez az alapértelmezett port a 2222), és úgy tesz, mintha SSH szerver lenne, de a valóságban végtelen kapcsolatot létesít a bejövő klienssel, amíg az fel nem adja. Ez több napig vagy tovább folytatódhat, amíg az ügyfél le nem esik.
A segédprogram telepítése:
$ make
$ ./endlessh &
$ ssh -p2222 localhostEgy megfelelően megvalósított tarpit több erőforrást von el a támadótól, mint tőled. De ez még csak nem is forrás kérdése. Szerző hogy a program addiktív. Jelenleg 27 ügyfele van csapdában, néhányuk hetek óta kapcsolatban van. Az aktivitás csúcsán 1378 ügyfél rekedt 20 órára!
Üzemmódban az Endlessh szervert a szokásos 22-es portra kell telepíteni, ahol tömegesen kopogtatnak a huligánok. A szabványos biztonsági ajánlások mindig azt javasolják, hogy az SSH-t másik portra helyezzék át, ami azonnal egy nagyságrenddel csökkenti a naplók méretét.
Chris Wellons szerint a programja a specifikáció egy bekezdését használja ki az SSH protokollhoz. Közvetlenül a TCP-kapcsolat létrehozása után, de a titkosítás alkalmazása előtt mindkét félnek el kell küldenie egy azonosító karakterláncot. És van egy megjegyzés is: "A szerver más adatsorokat is küldhet a verziósor elküldése előtt". és határ nélül ezeknek az adatoknak a mennyiségére vonatkozóan minden sort csak ezzel kell kezdenie SSH-.
Az Endlessh program pontosan ezt teszi: azt küld végtelen véletlenszerűen generált adatfolyam, amelyek megfelelnek az RFC 4253 szabványnak, azaz hitelesítés előtt küldik el, és minden sor a következővel kezdődik SSH- és nem haladja meg a 255 karaktert, beleértve a sorvégi karaktert is. Általában minden a szabvány szerint történik.
Alapértelmezés szerint a program 10 másodpercet vár a csomagok küldése között. Ez megakadályozza az ügyfél időtúllépését, így az ügyfél örökre csapdába kerül.
Mivel az adatokat a kriptográfia alkalmazása előtt küldik el, a program rendkívül egyszerű. Nem szükséges titkosítást megvalósítani, és több protokollt is támogat.
A szerző arra törekedett, hogy a segédprogram minimális erőforrást fogyasztson, é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 ennek nem szabad lelassítania a számítógépet. Mind a forgalmat, mind a memóriafogyasztást sikerült minimalizálnia egy kicsit ravaszabb szoftveres megvalósításnak köszönhetően. Ha egyszerűen elindít egy külön folyamatot egy új kapcsolaton, akkor a potenciális támadók DDoS-támadást indíthatnak több kapcsolat megnyitásával, hogy kimerítsék a gép erőforrásait. Csatlakozásonként egy szál sem a legjobb megoldás, mert a kernel erőforrásokat pazarol a szálak kezelésére.
Ezért választotta Chris Wellons a legkönnyebb megoldást az Endlessh számára: az egyszálas szervert. poll(2), ahol a csapdába esett kliensek gyakorlatilag semmilyen további erőforrást nem fogyasztanak a kernel socket objektumon és az Endlessh-ben a követéshez szükséges további 78 bájton kívül. Annak érdekében, hogy ne kelljen minden klienshez fogadni és küldeni puffereket, az Endlessh egy közvetlen hozzáférésű socketet nyit, és közvetlenül továbbítja a TCP csomagokat, szinte a teljes vermet figyelmen kívül hagyva. TCP/IP operációs rendszer. A bemeneti pufferre egyáltalán nincs szükség, mivel nem érdekelnek minket a bejövő adatok.
A szerző azt mondja, hogy programja idején Python asycio és egyéb tarpitok létezéséről. Ha ismerné az asycio-t, a segédprogramját mindössze 18 sorban tudná megvalósítani 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 ideális tenyéríráshoz. Ez a hook például leállítja a Firefoxot, a Chrome-ot vagy bármely más olyan klienst, amely több órán keresztül próbál csatlakozni a HTTP-kiszolgálóhoz:
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 online zaklatók megbüntetésére. Igaz, éppen ellenkezőleg, fennáll annak a veszélye, hogy felhívják figyelmüket egy adott szerver szokatlan viselkedésére. Valaki és egy célzott DDoS-támadást az IP-címe ellen. Eddig azonban nem volt ilyen eset, a tarpitok pedig remekül működnek.
Forrás: will.com
