Ez da sekretua Internet oso ingurune etsai bat dela. Zerbitzari bat planteatu bezain laster, berehala eraso masiboak eta hainbat azterketa jasango ditu. Adibidez
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:
Chris Wellons izeneko sistema-administratzaileetako bat itxuraz nekatu egin zen lotsagarri hori ikusteaz - eta programa txiki bat idatzi zuen.
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
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 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
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
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
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:
Chris Wellons izeneko sistema-administratzaileetako bat itxuraz nekatu egin zen lotsagarri hori ikusteaz - eta programa txiki bat idatzi zuen.
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
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 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
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
Iturria: www.habr.com