Trap (tarpit) për lidhjet hyrëse SSH

Nuk është sekret se interneti është një mjedis shumë armiqësor. Sapo ngrini një server, ai i nënshtrohet menjëherë sulmeve masive dhe skanimeve të shumta. Për shembull honeypot nga rojet e sigurisë ju mund të vlerësoni shkallën e këtij trafiku plehrash. Në fakt, në serverin mesatar, 99% e trafikut mund të jetë me qëllim të keq.

Tarpit është një port kurthi që përdoret për të ngadalësuar lidhjet hyrëse. Nëse një sistem i palës së tretë lidhet me këtë portë, nuk do të mund ta mbyllni shpejt lidhjen. Ajo do të duhet të harxhojë burimet e saj të sistemit dhe të presë derisa të përfundojë koha e lidhjes, ose ta ndërpresë atë manualisht.

Më shpesh, tarpitat përdoren për mbrojtje. Teknika u zhvillua fillimisht për të mbrojtur kundër krimbave të kompjuterit. Dhe tani mund të përdoret për të shkatërruar jetën e spammerëve dhe studiuesve të cilët janë të angazhuar në skanimin e gjerë të të gjitha adresave IP me radhë (shembuj në Habré: Австрия, Ukrainë).

Një nga administratorët e sistemit të quajtur Chris Wellons me sa duket u lodh duke parë këtë turp - dhe ai shkroi një program të vogël Pafund, një tarpit për SSH që ngadalëson lidhjet hyrëse. Programi hap një port (porta e paracaktuar për testim është 2222) dhe pretendon të jetë një server SSH, por në realitet krijon një lidhje të pafundme me klientin në hyrje derisa ai të heqë dorë. Kjo mund të vazhdojë për disa ditë ose më shumë derisa klienti të bjerë jashtë.

Instalimi i mjetit:

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

Një tarpit i zbatuar siç duhet do të marrë më shumë burime nga sulmuesi sesa nga ju. Por nuk është as çështje burimesh. Autori shkruanse programi është i varur. Për momentin ka 27 klientë të bllokuar, disa prej tyre të lidhur për javë të tëra. Në kulmin e aktivitetit, 1378 klientë mbetën të bllokuar për 20 orë!

Në modalitetin e funksionimit, serveri Endlessh duhet të instalohet në portën e zakonshme 22, ku huliganët trokasin masivisht. Rekomandimet standarde të sigurisë këshillojnë gjithmonë lëvizjen e SSH në një port tjetër, i cili menjëherë zvogëlon madhësinë e regjistrave me një renditje të madhësisë.

Chris Wellons thotë se programi i tij shfrytëzon një paragraf të specifikimit RFC4253 në protokollin SSH. Menjëherë pas vendosjes së një lidhjeje TCP, por përpara se të aplikohet kriptografia, të dyja palët duhet të dërgojnë një varg identifikimi. Dhe ka gjithashtu një shënim: "Serveri MUND të dërgojë rreshta të tjerë të dhënash përpara se të dërgojë rreshtin e versionit"... DHE pa kufi në vëllimin e këtyre të dhënave, ju vetëm duhet të filloni çdo rresht me SSH-.

Kjo është pikërisht ajo që bën programi Endlessh: ajo dërgon i pafund rrjedhë e të dhënave të krijuara rastësisht, të cilat përputhen me RFC 4253, domethënë dërgoni përpara vërtetimit dhe çdo rresht fillon me SSH- dhe nuk i kalon 255 karaktere, duke përfshirë karakterin e mbarimit të rreshtit. Në përgjithësi, gjithçka është sipas standardeve.

Si parazgjedhje, programi pret 10 sekonda ndërmjet dërgimit të paketave. Kjo parandalon që klienti të skadojë, kështu që klienti do të mbetet në kurth përgjithmonë.

Meqenëse të dhënat dërgohen përpara se të aplikohet kriptografia, programi është jashtëzakonisht i thjeshtë. Nuk ka nevojë të zbatojë ndonjë shifër dhe mbështet protokolle të shumta.

Autori u përpoq të sigurojë që shërbimi konsumon një minimum burimesh dhe funksionon plotësisht pa u vënë re në makinë. Ndryshe nga antiviruset moderne dhe "sistemet e tjera të sigurisë", ai nuk duhet të ngadalësojë kompjuterin tuaj. Ai arriti të minimizojë trafikun dhe konsumin e kujtesës për shkak të një zbatimi pak më dinakë softueri. Nëse thjesht nisi një proces të veçantë në një lidhje të re, atëherë sulmuesit e mundshëm mund të nisin një sulm DDoS duke hapur lidhje të shumta për të shterur burimet në makinë. Një thread për lidhje nuk është gjithashtu alternativa më e mirë, sepse kerneli do të harxhojë burime duke menaxhuar thread-ët.

Kjo është arsyeja pse Chris Wellons zgjodhi opsionin më të lehtë për Endlessh: një server me një fije poll(2), ku klientët në kurth nuk konsumojnë praktikisht asnjë burim shtesë, pa llogaritur objektin e folesë në kernel dhe 78 bajt të tjerë për gjurmim në Endlessh. Për të shmangur nevojën për të ndarë buferat e pranimit dhe dërgimit për secilin klient, Endlesssh hap një prizë të aksesit të drejtpërdrejtë dhe përkthen direkt paketat TCP, duke anashkaluar pothuajse të gjithë stakun e sistemit operativ TCP/IP. Buferi në hyrje nuk nevojitet fare, sepse ne nuk jemi të interesuar për të dhënat hyrëse.

Autori thotë se në kohën e programit të tij nuk e dija për ekzistencën e asycios të Python-it dhe tarpiteve të tjera. Nëse ai dinte për asycio, ai mund të zbatonte programin e tij 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ë ideale për të shkruar tarpita. Për shembull, kjo goditje do të ngrijë Firefox, Chrome ose çdo klient tjetër që po përpiqet të lidhet me serverin tuaj HTTP për shumë orë:

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ëlqyeshëm për ndëshkimin e ngacmuesve në internet. Vërtetë, ekziston një rrezik, përkundrazi, për të tërhequr vëmendjen e tyre ndaj sjelljes së pazakontë të një serveri të veçantë. Dikush mund të mendojë për hakmarrje dhe një sulm të synuar DDoS në IP-në tuaj. Megjithatë, deri më tani nuk ka pasur raste të tilla, dhe tarpitat funksionojnë shumë.

Qendrat:
Python, Siguria e informacionit, Softueri, Administrimi i Sistemit

Tags:
SSH, Endlesssh, tarpit, tarpit, kurth, asycio
Trap (tarpit) për lidhjet hyrëse SSH

Nuk është sekret se interneti është një mjedis shumë armiqësor. Sapo ngrini një server, ai i nënshtrohet menjëherë sulmeve masive dhe skanimeve të shumta. Për shembull honeypot nga rojet e sigurisë ju mund të vlerësoni shkallën e këtij trafiku plehrash. Në fakt, në serverin mesatar, 99% e trafikut mund të jetë me qëllim të keq.

Tarpit është një port kurthi që përdoret për të ngadalësuar lidhjet hyrëse. Nëse një sistem i palës së tretë lidhet me këtë portë, nuk do të mund ta mbyllni shpejt lidhjen. Ajo do të duhet të harxhojë burimet e saj të sistemit dhe të presë derisa të përfundojë koha e lidhjes, ose ta ndërpresë atë manualisht.

Më shpesh, tarpitat përdoren për mbrojtje. Teknika u zhvillua fillimisht për të mbrojtur kundër krimbave të kompjuterit. Dhe tani mund të përdoret për të shkatërruar jetën e spammerëve dhe studiuesve të cilët janë të angazhuar në skanimin e gjerë të të gjitha adresave IP me radhë (shembuj në Habré: Австрия, Ukrainë).

Një nga administratorët e sistemit të quajtur Chris Wellons me sa duket u lodh duke parë këtë turp - dhe ai shkroi një program të vogël Pafund, një tarpit për SSH që ngadalëson lidhjet hyrëse. Programi hap një port (porta e paracaktuar për testim është 2222) dhe pretendon të jetë një server SSH, por në realitet krijon një lidhje të pafundme me klientin në hyrje derisa ai të heqë dorë. Kjo mund të vazhdojë për disa ditë ose më shumë derisa klienti të bjerë jashtë.

Instalimi i mjetit:

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

Një tarpit i zbatuar siç duhet do të marrë më shumë burime nga sulmuesi sesa nga ju. Por nuk është as çështje burimesh. Autori shkruanse programi është i varur. Për momentin ka 27 klientë të bllokuar, disa prej tyre të lidhur për javë të tëra. Në kulmin e aktivitetit, 1378 klientë mbetën të bllokuar për 20 orë!

Në modalitetin e funksionimit, serveri Endlessh duhet të instalohet në portën e zakonshme 22, ku huliganët trokasin masivisht. Rekomandimet standarde të sigurisë këshillojnë gjithmonë lëvizjen e SSH në një port tjetër, i cili menjëherë zvogëlon madhësinë e regjistrave me një renditje të madhësisë.

Chris Wellons thotë se programi i tij shfrytëzon një paragraf të specifikimit RFC4253 në protokollin SSH. Menjëherë pas vendosjes së një lidhjeje TCP, por përpara se të aplikohet kriptografia, të dyja palët duhet të dërgojnë një varg identifikimi. Dhe ka gjithashtu një shënim: "Serveri MUND të dërgojë rreshta të tjerë të dhënash përpara se të dërgojë rreshtin e versionit"... DHE pa kufi në vëllimin e këtyre të dhënave, ju vetëm duhet të filloni çdo rresht me SSH-.

Kjo është pikërisht ajo që bën programi Endlessh: ajo dërgon i pafund rrjedhë e të dhënave të krijuara rastësisht, të cilat përputhen me RFC 4253, domethënë dërgoni përpara vërtetimit dhe çdo rresht fillon me SSH- dhe nuk i kalon 255 karaktere, duke përfshirë karakterin e mbarimit të rreshtit. Në përgjithësi, gjithçka është sipas standardeve.

Si parazgjedhje, programi pret 10 sekonda ndërmjet dërgimit të paketave. Kjo parandalon që klienti të skadojë, kështu që klienti do të mbetet në kurth përgjithmonë.

Meqenëse të dhënat dërgohen përpara se të aplikohet kriptografia, programi është jashtëzakonisht i thjeshtë. Nuk ka nevojë të zbatojë ndonjë shifër dhe mbështet protokolle të shumta.

Autori u përpoq të sigurojë që shërbimi konsumon një minimum burimesh dhe funksionon plotësisht pa u vënë re në makinë. Ndryshe nga antiviruset moderne dhe "sistemet e tjera të sigurisë", ai nuk duhet të ngadalësojë kompjuterin tuaj. Ai arriti të minimizojë trafikun dhe konsumin e kujtesës për shkak të një zbatimi pak më dinakë softueri. Nëse thjesht nisi një proces të veçantë në një lidhje të re, atëherë sulmuesit e mundshëm mund të nisin një sulm DDoS duke hapur lidhje të shumta për të shterur burimet në makinë. Një thread për lidhje nuk është gjithashtu alternativa më e mirë, sepse kerneli do të harxhojë burime duke menaxhuar thread-ët.

Kjo është arsyeja pse Chris Wellons zgjodhi opsionin më të lehtë për Endlessh: një server me një fije poll(2), ku klientët në kurth nuk konsumojnë praktikisht asnjë burim shtesë, pa llogaritur objektin e folesë në kernel dhe 78 bajt të tjerë për gjurmim në Endlessh. Për të shmangur nevojën për të ndarë buferat e pranimit dhe dërgimit për secilin klient, Endlesssh hap një prizë të aksesit të drejtpërdrejtë dhe përkthen direkt paketat TCP, duke anashkaluar pothuajse të gjithë stakun e sistemit operativ TCP/IP. Buferi në hyrje nuk nevojitet fare, sepse ne nuk jemi të interesuar për të dhënat hyrëse.

Autori thotë se në kohën e programit të tij nuk e dija për ekzistencën e asycios të Python-it dhe tarpiteve të tjera. Nëse ai dinte për asycio, ai mund të zbatonte programin e tij 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ë ideale për të shkruar tarpita. Për shembull, kjo goditje do të ngrijë Firefox, Chrome ose çdo klient tjetër që po përpiqet të lidhet me serverin tuaj HTTP për shumë orë:

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ëlqyeshëm për ndëshkimin e ngacmuesve në internet. Vërtetë, ekziston një rrezik, përkundrazi, për të tërhequr vëmendjen e tyre ndaj sjelljes së pazakontë të një serveri të veçantë. Dikush mund të mendojë për hakmarrje dhe një sulm të synuar DDoS në IP-në tuaj. Megjithatë, deri më tani nuk ka pasur raste të tilla, dhe tarpitat funksionojnë shumë.

Trap (tarpit) për lidhjet hyrëse SSH

Burimi: www.habr.com

Shto një koment