Nuk është sekret që interneti është një ambient shumë armiqësor. Sapo të ngrini një server, ai menjëherë përballohet me sulme masive dhe skanime të shumta. Nga shembulli mund të vlerësohet shkalla e këtij trafiku të panevojshëm. Në fakt, në një server mesatar 99% e trafik është potencialisht i dëmshëm.
Tarpit është një port-kapës që përdoret për të ngadalësuar lidhjet hyrëse. Nëse një sistem tjetër lidhet me këtë port, nuk do të jetë e lehtë ta mbyllësh lidhjen shpejt. Ai do të duhet të shpenzojë burimet e tij sistemore dhe të presë deri sa lidhja të ndërpritet përmes një koha të skadimit, ose ta ndalojë atë manuelisht.
Së shumti, tarpitat përdoren për mbrojtje. Kjo teknikë u zhvillua nga fillimi për të mbrojtur nga tërmetet kompjuterike. Tani mund të përdoret për të prishur jetën spamerëve dhe hulumtuesve që bëjnë skanime të gjera të të gjithë IP-ve njëpasnjërisht (shembuj në Habra: , ).
Një administratori të sistemit i quajtur Kris Velons, duket se i është bërë mërzi të vëzhgojë këtë kaos — dhe ai shkroi një program të vogël , një tarpit për SSH, i cili ngadalëson lidhjet hyrëse. Ky program hap një port (për testim, porti 2222 është specificuar si standart) dhe pretendon se është një server SSH, ndërsa në të vërtetë vendos një lidhje të pafund me klientin hyrës, derisa ai të dorëzohet. Kjo mund të vazhdojë për disa ditë ose më shumë, derisa klienti të largohet.
Instalimi i utilitarit:
$ make
$ ./endlessh &
$ ssh -p2222 localhostTarpiti i implementuar siç duhet do t'i marrë më shumë burime sulmuesve sesa ju. Por çështja nuk është vetëm te burimet. Autori , që programi krijon varësi. Tani për tani në grackën e tij ka 27 klientë, disa prej të cilëve janë lidhur për javë. Në kulmin e aktivitetit, në grackë ishin 1378 klientë për 20 orë!
Në funksionim, serveri Endlessh duhet vendosur në portin standard 22, ku të dhunojnë shumë hajnij. Rekomandimet standarde për siguri gjithmonë sugjerojnë të zhvendosni SSH në një port tjetër, gjë që menjëherë zvogëlon numrin e regjistrimeve.
Kris Velons thotë se programi i tij shfrytëzon një paragraf nga specifikimi për protokolimin SSH. Menjëherë pas krijimit të lidhjes TCP, por para zbatimit të kriptografisë, të dy palët duhet të dërgojnë një string identifikues. Dhe aty është një shënim: «Serveri MUND të dërgojë të dhëna të tjera para se të dërgojë stringun me versionin». Dhe . Dhe nuk ka kufizim në volumet e këtyre të dhënave, thjesht çdo string duhet të fillojë me.
SSH- dërgon dërgon një fluks të pafund të të dhënave të gjeneruara rastësisht,të cilat i përmbajnë RFC 4253, domethënë, dërgimi para identifikimit, dhe çdo string fillon me në volumet e këtyre të dhënave, thjesht çdo string duhet të fillojë me dhe nuk kalon 255 karaktere, duke përfshirë karakterin e përfundimit të stringut. Në përgjithësi, gjithçka sipas standardit.
Me standart, programi pret 10 sekonda mes dërgimeve të paketeve. Kjo parandalon ndërprerjen për shkak të skadimit, kështu që klienti do të qëndrojë në grackë për gjithmonë.
Duke qenë se dërgimi i të dhënave bëhet para zbatimit të kriptografisë, programi është jashtëzakonisht i thjeshtë. Nuk ka nevojë të përfshijë ndonjë enkriptim dhe mbështetje për shumë protokolle.
Autori ka bërë përpjekje që utilitari të konsumojë sa më pak burime dhe të punojë plotësisht pa u vënë re në makinë. Në kontrast me antivirusët modernë dhe sistemet e tjera të "sigurisë", ai nuk duhet ta ngadalësojë kompjuterin. Ai arriti ta minimalizojë si trafikun ashtu edhe konsumimin e memories përmes një realizimi pak më të zgjuar programor. Nëse ai do të hapte veçmas një proces për çdo lidhje, atëherë potencialet e keqbërësve mund të ndërmerrnin një sulm DDoS duke hapur shumë lidhje për të shteruar burimet në makinë. Një rrjedhë për lidhje — gjithashtu nuk është opsioni më i mirë, sepse bërthama do të shpenzojë burime për menaxhimin e rrjedhave.
Prandaj, Kris Velons zgjodhi opsionin më të lehtë për Endlessh: një server me një rrjedhë poll(2), ku klientët në grackë praktikisht nuk konsumojnë burime shtesë, përveç objektit të socket-it në bërthamë dhe 78 byteve për ndjekjen në Endlessh. Për të mos ndarë buferat e pranimit dhe dërgimit për çdo klient, Endlessh hap një socket të qasjes direkte dhe transmeton drejtpërdrejt paketat TCP, duke injoruar pothuajse gjithë steak TCP/IP të sistemit operativ. Bufferi hyrës nuk është i nevojshëm fare, sepse të dhënat hyrëse nuk na interesojnë.
Autori thotë se në momentin e krijimit të programit të tij për ekzistencën e asycio të Python-it dhe tarpitëve të tjerë. Nëse ai do ta dinte për asycio, atëherë utilitarin e tij do ta implementonte në vetëm 18 rreshta në Python:
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 është ideal për të shkruar tarpitu. Për shembull, një tullumbace e tillë mund të bllokojë Firefox, Chrome ose çdo klient tjetër që përpiqet të conectohet me serverin tuaj HTTP:
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 është një mjet i shkëlqyer për të ndëshkuar internet-hajdutët. Megjithatë, ka një rrezik që mund të tërheqë vëmendjen e tyre për sjelljen e pazakontë të një serveri të caktuar. Disa dhe një sulm DDoS të drejtuar ndaj IP-së tuaj. Megjithatë, deri tani ka pasur pak raste të tilla, dhe tarpitet funksionojnë shkëlqyeshëm.
Hubet:
Python, Siguria e informacionit, Softuer, Administrimi i sistemeve
Etiketat:
SSH, Endlessh, tarpit, tullumbace, asyncio
Kapja (tarpit) për lidhjet hyrëse SSH
Nuk është sekret që interneti është një ambient shumë armiqësor. Sapo të ngrini një server, ai menjëherë përballohet me sulme masive dhe skanime të shumta. Nga shembulli mund të vlerësohet shkalla e këtij trafiku të panevojshëm. Në fakt, në një server mesatar 99% e trafik është potencialisht i dëmshëm.
Tarpit është një port-kapës që përdoret për të ngadalësuar lidhjet hyrëse. Nëse një sistem tjetër lidhet me këtë port, nuk do të jetë e lehtë ta mbyllësh lidhjen shpejt. Ai do të duhet të shpenzojë burimet e tij sistemore dhe të presë deri sa lidhja të ndërpritet përmes një koha të skadimit, ose ta ndalojë atë manuelisht.
Së shumti, tarpitat përdoren për mbrojtje. Kjo teknikë u zhvillua nga fillimi për të mbrojtur nga tërmetet kompjuterike. Tani mund të përdoret për të prishur jetën spamerëve dhe hulumtuesve që bëjnë skanime të gjera të të gjithë IP-ve njëpasnjërisht (shembuj në Habra: , ).
Një administratori të sistemit i quajtur Kris Velons, duket se i është bërë mërzi të vëzhgojë këtë kaos — dhe ai shkroi një program të vogël , një tarpit për SSH, i cili ngadalëson lidhjet hyrëse. Ky program hap një port (për testim, porti 2222 është specificuar si standart) dhe pretendon se është një server SSH, ndërsa në të vërtetë vendos një lidhje të pafund me klientin hyrës, derisa ai të dorëzohet. Kjo mund të vazhdojë për disa ditë ose më shumë, derisa klienti të largohet.
Instalimi i utilitarit:
$ make
$ ./endlessh &
$ ssh -p2222 localhostTarpiti i implementuar siç duhet do t'i marrë më shumë burime sulmuesve sesa ju. Por çështja nuk është vetëm te burimet. Autori , që programi krijon varësi. Tani për tani në grackën e tij ka 27 klientë, disa prej të cilëve janë lidhur për javë. Në kulmin e aktivitetit, në grackë ishin 1378 klientë për 20 orë!
Në funksionim, serveri Endlessh duhet vendosur në portin standard 22, ku të dhunojnë shumë hajnij. Rekomandimet standarde për siguri gjithmonë sugjerojnë të zhvendosni SSH në një port tjetër, gjë që menjëherë zvogëlon numrin e regjistrimeve.
Kris Velons thotë se programi i tij shfrytëzon një paragraf nga specifikimi për protokolimin SSH. Menjëherë pas krijimit të lidhjes TCP, por para zbatimit të kriptografisë, të dy palët duhet të dërgojnë një string identifikues. Dhe aty është një shënim: «Serveri MUND të dërgojë të dhëna të tjera para se të dërgojë stringun me versionin». Dhe . Dhe nuk ka kufizim në volumet e këtyre të dhënave, thjesht çdo string duhet të fillojë me.
SSH- dërgon dërgon një fluks të pafund të të dhënave të gjeneruara rastësisht,të cilat i përmbajnë RFC 4253, domethënë, dërgimi para identifikimit, dhe çdo string fillon me në volumet e këtyre të dhënave, thjesht çdo string duhet të fillojë me dhe nuk kalon 255 karaktere, duke përfshirë karakterin e përfundimit të stringut. Në përgjithësi, gjithçka sipas standardit.
Me standart, programi pret 10 sekonda mes dërgimeve të paketeve. Kjo parandalon ndërprerjen për shkak të skadimit, kështu që klienti do të qëndrojë në grackë për gjithmonë.
Duke qenë se dërgimi i të dhënave bëhet para zbatimit të kriptografisë, programi është jashtëzakonisht i thjeshtë. Nuk ka nevojë të përfshijë ndonjë enkriptim dhe mbështetje për shumë protokolle.
Autori ka bërë përpjekje që utilitari të konsumojë sa më pak burime dhe të punojë plotësisht pa u vënë re në makinë. Në kontrast me antivirusët modernë dhe sistemet e tjera të "sigurisë", ai nuk duhet ta ngadalësojë kompjuterin. Ai arriti ta minimalizojë si trafikun ashtu edhe konsumimin e memories përmes një realizimi pak më të zgjuar programor. Nëse ai do të hapte veçmas një proces për çdo lidhje, atëherë potencialet e keqbërësve mund të ndërmerrnin një sulm DDoS duke hapur shumë lidhje për të shteruar burimet në makinë. Një rrjedhë për lidhje — gjithashtu nuk është opsioni më i mirë, sepse bërthama do të shpenzojë burime për menaxhimin e rrjedhave.
Prandaj, Kris Velons zgjodhi opsionin më të lehtë për Endlessh: një server me një rrjedhë poll(2), ku klientët në grackë praktikisht nuk konsumojnë burime shtesë, përveç objektit të socket-it në bërthamë dhe 78 byteve për ndjekjen në Endlessh. Për të mos ndarë buferat e pranimit dhe dërgimit për çdo klient, Endlessh hap një socket të qasjes direkte dhe transmeton drejtpërdrejt paketat TCP, duke injoruar pothuajse gjithë steak TCP/IP të sistemit operativ. Bufferi hyrës nuk është i nevojshëm fare, sepse të dhënat hyrëse nuk na interesojnë.
Autori thotë se në momentin e krijimit të programit të tij për ekzistencën e asycio të Python-it dhe tarpitëve të tjerë. Nëse ai do ta dinte për asycio, atëherë utilitarin e tij do ta implementonte në vetëm 18 rreshta në Python:
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 është ideal për të shkruar tarpitu. Për shembull, një tullumbace e tillë mund të bllokojë Firefox, Chrome ose çdo klient tjetër që përpiqet të conectohet me serverin tuaj HTTP:
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 është një mjet i shkëlqyer për të ndëshkuar internet-hajdutët. Megjithatë, ka një rrezik që mund të tërheqë vëmendjen e tyre për sjelljen e pazakontë të një serveri të caktuar. Disa dhe një sulm DDoS të drejtuar ndaj IP-së tuaj. Megjithatë, deri tani ka pasur pak raste të tilla, dhe tarpitet funksionojnë shkëlqyeshëm.
Burimi: habr.com
