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
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.
A segédprogram telepítése:
$ make
$ ./endlessh &
$ ssh -p2222 localhost
Egy 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ő
Ü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 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ában lévő kliensek gyakorlatilag semmilyen extra erőforrást nem fogyasztanak, nem számítva a kernelben lévő socket objektumot és további 78 bájtot a követéshez az Endlessh-ben. Annak elkerülése érdekében, hogy az egyes kliensekhez vételi és küldési puffereket kelljen lefoglalnia, az Endlessh megnyit egy közvetlen hozzáférésű socketet, és közvetlenül fordítja le a TCP-csomagokat, megkerülve szinte a teljes operációs rendszer TCP/IP veremét. A bejövő pufferre egyáltalán nincs szükség, mert nem vagyunk kíváncsiak a beérkező adatokra.
A szerző azt mondja, hogy programja idején
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
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
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.
A segédprogram telepítése:
$ make
$ ./endlessh &
$ ssh -p2222 localhost
Egy 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ő
Ü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 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ában lévő kliensek gyakorlatilag semmilyen extra erőforrást nem fogyasztanak, nem számítva a kernelben lévő socket objektumot és további 78 bájtot a követéshez az Endlessh-ben. Annak elkerülése érdekében, hogy az egyes kliensekhez vételi és küldési puffereket kelljen lefoglalnia, az Endlessh megnyit egy közvetlen hozzáférésű socketet, és közvetlenül fordítja le a TCP-csomagokat, megkerülve szinte a teljes operációs rendszer TCP/IP veremét. A bejövő pufferre egyáltalán nincs szükség, mert nem vagyunk kíváncsiak a beérkező adatokra.
A szerző azt mondja, hogy programja idején
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
Forrás: will.com