Trap (tarpit) sarrerako SSH konexioetarako

Ez da sekretua Internet oso ingurune etsai bat dela. Zerbitzari bat planteatu bezain laster, berehala eraso masiboak eta hainbat azterketa jasango ditu. Adibidez Segurtasun zaindarien ezti-potea zabor-trafiko horren tamaina kalkula dezakezu. Izan ere, batez besteko zerbitzarian, trafikoaren %99 gaiztoa izan daiteke.

Tarpit sarrerako konexioak moteltzeko erabiltzen den tranpa ataka da. Hirugarrenen sistema bat ataka honetara konektatzen bada, ezin izango duzu konexioa azkar itxi. Sistemaren baliabideak xahutu eta konexio-denbora agortu arte itxaron beharko du, edo eskuz amaitu.

Gehienetan, tarpits babesteko erabiltzen dira. Teknika ordenagailuen zizareen aurka babesteko garatu zen. Eta orain IP helbide guztiak jarraian eskaneatzen ari diren spammer eta ikertzaileen bizitza hondatzeko erabil daiteke (adibideak HabrΓ©-n: Австрия, Ukraine).

Chris Wellons izeneko sistema-administratzaileetako bat itxuraz nekatu egin zen lotsagarri hori ikusteaz - eta programa txiki bat idatzi zuen. Amaigabea, sarrerako konexioak moteltzen dituen SSHrako tarpit bat. Programak ataka bat irekitzen du (probak egiteko ataka lehenetsia 2222 da) eta SSH zerbitzari baten itxura hartzen du, baina errealitatean konexio amaigabea ezartzen du sarrerako bezeroarekin amore ematen duen arte. Horrek hainbat egun edo gehiago iraun dezake bezeroa erori arte.

Utilitatearen instalazioa:

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

Behar bezala inplementatutako tarpit batek zuregandik baino baliabide gehiago hartuko ditu erasotzailearengandik. Baina ez da baliabide kontua ere. Egilea idaztenprograma mendekotasuna dela. Oraintxe bertan 27 bezero ditu harrapatuta, horietako batzuk astez konektatuta. Jardueraren gailurrean, 1378 bezero harrapatuta geratu ziren 20 orduz!

Eragiketa moduan, Endlessh zerbitzaria ohiko 22 atakan instalatu behar da, non hooliganek masiboki jotzen duten. Segurtasun-gomendio estandarrak beti aholkatzen du SSH beste portu batera eramatea, eta horrek berehala txikitzen du erregistroen tamaina magnitude batean.

Chris Wellons-ek dio bere programak zehaztapenaren paragrafo bat ustiatzen duela RFC 4253 SSH protokoloari. TCP konexioa ezarri eta berehala, baina kriptografia aplikatu aurretik, bi alderdiek identifikazio kate bat bidali behar dute. Eta ohar bat ere badago: "Zerbitzariak beste datu-lerro batzuk bidal ditzake bertsio-errenkada bidali aurretik". eta mugarik ez datu horien bolumenean, lerro bakoitzarekin hasi besterik ez duzu behar SSH-.

Hau da Endlessh programak egiten duena: it bidaltzen amaigabeak ausaz sortutako datuen korrontea, RFC 4253-a betetzen dutenak, hau da, autentifikazioaren aurretik bidali eta lerro bakoitzarekin hasten da SSH- eta ez ditu 255 karaktere baino gehiago, lerro amaierako karakterea barne. Oro har, dena estandarraren araberakoa da.

Lehenespenez, programak 10 segundo itxarongo ditu paketeak bidaltzen dituen artean. Horrek bezeroa denbora-muga izatea eragozten du, beraz bezeroa betirako harrapatuta egongo da.

Datuak kriptografia aplikatu aurretik bidaltzen direnez, programa oso erraza da. Ez du inolako zifraketarik ezarri behar eta hainbat protokolo onartzen ditu.

Egilea saiatu zen erabilgarritasunak gutxieneko baliabideak kontsumitzen dituela eta makinan guztiz oharkabean funtzionatzen duela. Antibirus modernoak eta beste "segurtasun sistemak" ez bezala, ez luke zure ordenagailua moteldu behar. Trafikoa zein memoria-kontsumoa murriztea lortu zuen softwarearen ezarpen apur bat maltzuragoa zela eta. Konexio berri batean prozesu bereizi bat abiarazi besterik ez balu, orduan erasotzaile potentzialek DDoS eraso bat abiarazi dezakete hainbat konexio irekiz makinako baliabideak agortzeko. Konexio bakoitzeko hari bat ere ez da aukerarik onena, nukleoak hariak kudeatzen baliabideak xahutuko dituelako.

Horregatik aukeratu zuen Chris Wellonsek Endlessh-erako aukerarik arinena: hari bakarreko zerbitzaria poll(2), non tranpako bezeroek ez dute ia baliabide gehigarririk kontsumitzen, nukleoko socket objektua eta Endlessh-en jarraipena egiteko beste 78 byte zenbatu gabe. Bezero bakoitzari jaso eta bidali buffer-ak esleitu beharrik ez izateko, Endlessh-ek sarbide zuzeneko socket bat irekitzen du eta TCP paketeak zuzenean itzultzen ditu, sistema eragilearen TCP/IP pila ia osoa saihestuz. Sarrerako buffer-a ez da batere behar, sarrerako datuak ez zaizkigulako interesatzen.

Egileak hori dio bere programaren garaian ez zekien Python-en asycio eta beste tarpit batzuen existentziari buruz. Asycio-ri buruz jakingo balu, bere erabilgarritasuna Python-en 18 lerrotan inplementatu dezake:

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 aproposa da tarpitak idazteko. Adibidez, kako honek Firefox, Chrome edo zure HTTP zerbitzariarekin konektatzen saiatzen ari den beste edozein bezero izoztuko ditu ordu askotan:

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 sareko jazarleak zigortzeko tresna bikaina da. Egia da, nolabaiteko arriskua dago, aitzitik, zerbitzari jakin baten ezohiko portaerari arreta erakartzeko. Norbait mendekuan pentsa liteke eta zuzendutako DDoS eraso bat zure IPan. Hala ere, orain arte ez da horrelako kasurik egon, eta tarpitek bikain funtzionatzen dute.

Hubak:
Python, Informazioaren segurtasuna, Softwarea, Sistemaren administrazioa

Tags:
SSH, Endlessh, tarpit, tarpit, tranpa, asycio
Trap (tarpit) sarrerako SSH konexioetarako

Ez da sekretua Internet oso ingurune etsai bat dela. Zerbitzari bat planteatu bezain laster, berehala eraso masiboak eta hainbat azterketa jasango ditu. Adibidez Segurtasun zaindarien ezti-potea zabor-trafiko horren tamaina kalkula dezakezu. Izan ere, batez besteko zerbitzarian, trafikoaren %99 gaiztoa izan daiteke.

Tarpit sarrerako konexioak moteltzeko erabiltzen den tranpa ataka da. Hirugarrenen sistema bat ataka honetara konektatzen bada, ezin izango duzu konexioa azkar itxi. Sistemaren baliabideak xahutu eta konexio-denbora agortu arte itxaron beharko du, edo eskuz amaitu.

Gehienetan, tarpits babesteko erabiltzen dira. Teknika ordenagailuen zizareen aurka babesteko garatu zen. Eta orain IP helbide guztiak jarraian eskaneatzen ari diren spammer eta ikertzaileen bizitza hondatzeko erabil daiteke (adibideak HabrΓ©-n: Австрия, Ukraine).

Chris Wellons izeneko sistema-administratzaileetako bat itxuraz nekatu egin zen lotsagarri hori ikusteaz - eta programa txiki bat idatzi zuen. Amaigabea, sarrerako konexioak moteltzen dituen SSHrako tarpit bat. Programak ataka bat irekitzen du (probak egiteko ataka lehenetsia 2222 da) eta SSH zerbitzari baten itxura hartzen du, baina errealitatean konexio amaigabea ezartzen du sarrerako bezeroarekin amore ematen duen arte. Horrek hainbat egun edo gehiago iraun dezake bezeroa erori arte.

Utilitatearen instalazioa:

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

Behar bezala inplementatutako tarpit batek zuregandik baino baliabide gehiago hartuko ditu erasotzailearengandik. Baina ez da baliabide kontua ere. Egilea idaztenprograma mendekotasuna dela. Oraintxe bertan 27 bezero ditu harrapatuta, horietako batzuk astez konektatuta. Jardueraren gailurrean, 1378 bezero harrapatuta geratu ziren 20 orduz!

Eragiketa moduan, Endlessh zerbitzaria ohiko 22 atakan instalatu behar da, non hooliganek masiboki jotzen duten. Segurtasun-gomendio estandarrak beti aholkatzen du SSH beste portu batera eramatea, eta horrek berehala txikitzen du erregistroen tamaina magnitude batean.

Chris Wellons-ek dio bere programak zehaztapenaren paragrafo bat ustiatzen duela RFC 4253 SSH protokoloari. TCP konexioa ezarri eta berehala, baina kriptografia aplikatu aurretik, bi alderdiek identifikazio kate bat bidali behar dute. Eta ohar bat ere badago: "Zerbitzariak beste datu-lerro batzuk bidal ditzake bertsio-errenkada bidali aurretik". eta mugarik ez datu horien bolumenean, lerro bakoitzarekin hasi besterik ez duzu behar SSH-.

Hau da Endlessh programak egiten duena: it bidaltzen amaigabeak ausaz sortutako datuen korrontea, RFC 4253-a betetzen dutenak, hau da, autentifikazioaren aurretik bidali eta lerro bakoitzarekin hasten da SSH- eta ez ditu 255 karaktere baino gehiago, lerro amaierako karakterea barne. Oro har, dena estandarraren araberakoa da.

Lehenespenez, programak 10 segundo itxarongo ditu paketeak bidaltzen dituen artean. Horrek bezeroa denbora-muga izatea eragozten du, beraz bezeroa betirako harrapatuta egongo da.

Datuak kriptografia aplikatu aurretik bidaltzen direnez, programa oso erraza da. Ez du inolako zifraketarik ezarri behar eta hainbat protokolo onartzen ditu.

Egilea saiatu zen erabilgarritasunak gutxieneko baliabideak kontsumitzen dituela eta makinan guztiz oharkabean funtzionatzen duela. Antibirus modernoak eta beste "segurtasun sistemak" ez bezala, ez luke zure ordenagailua moteldu behar. Trafikoa zein memoria-kontsumoa murriztea lortu zuen softwarearen ezarpen apur bat maltzuragoa zela eta. Konexio berri batean prozesu bereizi bat abiarazi besterik ez balu, orduan erasotzaile potentzialek DDoS eraso bat abiarazi dezakete hainbat konexio irekiz makinako baliabideak agortzeko. Konexio bakoitzeko hari bat ere ez da aukerarik onena, nukleoak hariak kudeatzen baliabideak xahutuko dituelako.

Horregatik aukeratu zuen Chris Wellonsek Endlessh-erako aukerarik arinena: hari bakarreko zerbitzaria poll(2), non tranpako bezeroek ez dute ia baliabide gehigarririk kontsumitzen, nukleoko socket objektua eta Endlessh-en jarraipena egiteko beste 78 byte zenbatu gabe. Bezero bakoitzari jaso eta bidali buffer-ak esleitu beharrik ez izateko, Endlessh-ek sarbide zuzeneko socket bat irekitzen du eta TCP paketeak zuzenean itzultzen ditu, sistema eragilearen TCP/IP pila ia osoa saihestuz. Sarrerako buffer-a ez da batere behar, sarrerako datuak ez zaizkigulako interesatzen.

Egileak hori dio bere programaren garaian ez zekien Python-en asycio eta beste tarpit batzuen existentziari buruz. Asycio-ri buruz jakingo balu, bere erabilgarritasuna Python-en 18 lerrotan inplementatu dezake:

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 aproposa da tarpitak idazteko. Adibidez, kako honek Firefox, Chrome edo zure HTTP zerbitzariarekin konektatzen saiatzen ari den beste edozein bezero izoztuko ditu ordu askotan:

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 sareko jazarleak zigortzeko tresna bikaina da. Egia da, nolabaiteko arriskua dago, aitzitik, zerbitzari jakin baten ezohiko portaerari arreta erakartzeko. Norbait mendekuan pentsa liteke eta zuzendutako DDoS eraso bat zure IPan. Hala ere, orain arte ez da horrelako kasurik egon, eta tarpitek bikain funtzionatzen dute.

Trap (tarpit) sarrerako SSH konexioetarako

Iturria: www.habr.com

Gehitu iruzkin berria