Pèlen (tarpit) pou koneksyon SSH fèk ap rantre

Li pa sekrè ke Entènèt la se yon anviwònman trè ostil. Le pli vit ke ou ogmante yon sèvè, li imedyatman sibi atak masiv ak analiz miltip. Pa egzanp honeypot soti nan gad sekirite yo ou ka estime echèl trafik fatra sa a. An reyalite, sou sèvè an mwayèn, 99% nan trafik ka move.

Tarpit se yon pò pèlen ki itilize pou ralanti koneksyon k ap fèk ap rantre yo. Si yon sistèm twazyèm-pati konekte nan pò sa a, ou pa pral kapab byen vit fèmen koneksyon an. Li pral oblije gaspiye resous sistèm li yo epi tann jiskaske tan koneksyon yo, oswa manyèlman mete fen nan li.

Pi souvan, tarpits yo itilize pou pwoteksyon. Te teknik la premye devlope pou pwoteje kont vè òdinatè. Epi kounyeya li ka itilize pou ruine lavi spame yo ak chèchè yo ki angaje nan analiz lajè nan tout adrès IP nan yon ranje (egzanp sou Habré: Австрия, Ikrèn).

Youn nan administratè sistèm yo te rele Chris Wellons aparamman te fatige gade wont sa a - e li te ekri yon ti pwogram. San limit, yon tarpit pou SSH ki ralanti koneksyon fèk ap rantre yo. Pwogram nan ouvri yon pò (pò default pou tès la se 2222) ak pretann yo dwe yon sèvè SSH, men an reyalite li etabli yon koneksyon kontinuèl ak kliyan an fèk ap rantre jiskaske li bay moute. Sa a ka kontinye pandan plizyè jou oswa plis jiskaske kliyan an tonbe.

Enstalasyon sèvis piblik la:

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

Yon tarpit byen aplike pral pran plis resous nan men atakè a pase nan men ou. Men, li pa menm yon kesyon de resous. Otè ekrike pwogram nan depandans. Kounye a li gen 27 kliyan bloke, kèk ladan yo konekte pou semèn. Nan pik aktivite a, 1378 kliyan yo te bloke pou 20 èdtan!

Nan mòd fonksyònman, sèvè Endlessh la bezwen enstale sou pò abityèl 22, kote vwayou frape an mas. Rekòmandasyon sekirite estanda toujou konseye deplase SSH nan yon pò diferan, ki imedyatman diminye gwosè mòso bwa yo pa yon lòd nan grandè.

Chris Wellons di pwogram li a eksplwate yon paragraf nan spesifikasyon la RFC 4253 nan pwotokòl SSH la. Touswit apre yo fin etabli yon koneksyon TCP, men anvan yo aplike kriptografik, tou de pati yo dwe voye yon kòd idantifikasyon. Epi gen yon nòt tou: "Sèvè a ka voye lòt ranje done anvan li voye ranje vèsyon an". Ak pa gen limit sou volim done sa yo, ou jis bezwen kòmanse chak liy ak SSH-.

Sa a se egzakteman sa pwogram Endlessh la fè: li voye enfini kouran done owaza pwodwi, ki konfòme ak RFC 4253, se sa ki, voye anvan otantifikasyon, epi chak liy kòmanse ak SSH- epi li pa depase 255 karaktè, ki gen ladan karaktè ki fini liy lan. An jeneral, tout bagay se selon estanda a.

Pa default, pwogram nan tann 10 segonn ant voye pakè yo. Sa a anpeche kliyan an soti, kidonk kliyan an pral bloke pou tout tan.

Depi done yo voye anvan yo aplike kriptografik, pwogram nan trè senp. Li pa bezwen aplike okenn chifre epi li sipòte plizyè pwotokòl.

Otè a te eseye asire ke sèvis piblik la konsome yon minimòm de resous ak travay konplètman inapèsi sou machin nan. Kontrèman ak antivirus modèn ak lòt "sistèm sekirite," li pa ta dwe ralanti òdinatè w lan. Li te jere pou misyon pou minimize tou de trafik ak konsomasyon memwa akòz yon aplikasyon lojisyèl yon ti kras plis atizan konn fè. Si li tou senpleman te lanse yon pwosesis separe sou yon nouvo koneksyon, Lè sa a, atakan potansyèl yo ta ka lanse yon atak DDoS lè yo louvri koneksyon miltip pou itilize resous sou machin nan. Yon fil pou chak koneksyon tou se pa opsyon ki pi bon, paske nwayo a pral gaspiye resous jere fil.

Se poutèt sa Chris Wellons te chwazi opsyon ki pi lejè pou Endlessh: yon sèvè yon sèl-threaded poll(2), kote kliyan yo nan pèlen an konsome nòmalman pa gen okenn resous siplemantè, san konte objè a priz nan nwayo a ak yon lòt 78 bytes pou swiv nan Endlessh. Pou evite gen pou asiyen tanpon resevwa ak voye pou chak kliyan, Endlessh ouvè yon priz aksè dirèk ak tradwi pake TCP dirèkteman, iyore prèske tout sistèm operasyon TCP/IP pil la. Tanpon kap vini an pa nesesè ditou, paske nou pa enterese nan done k ap rantre yo.

Otè a di ke nan moman pwogram li a pa t konnen sou egzistans asycio Python a ak lòt tarpits. Si li te konnen asycio, li te kapab aplike sèvis piblik li nan jis 18 liy nan 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 se ideyal pou ekri tarpits. Pou egzanp, zen sa a pral jele Firefox, Chrome, oswa nenpòt lòt kliyan ki ap eseye konekte ak sèvè HTTP ou a pou plizyè èdtan:

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 se yon bon zouti pou pini entimidatè sou entènèt. Vrè, gen kèk risk, okontrè, nan atire atansyon yo sou konpòtman an etranj nan yon sèvè patikilye. Yon moun ta ka panse sou tire revanj ak yon atak DDoS vize sou IP ou. Sepandan, jiskaprezan pa te gen okenn ka sa yo, ak tarpits travay anpil.

Mwaye:
Python, sekirite enfòmasyon, lojisyèl, administrasyon sistèm

Tags:
SSH, Endlessh, tarpit, tarpit, pèlen, asycio
Pèlen (tarpit) pou koneksyon SSH fèk ap rantre

Li pa sekrè ke Entènèt la se yon anviwònman trè ostil. Le pli vit ke ou ogmante yon sèvè, li imedyatman sibi atak masiv ak analiz miltip. Pa egzanp honeypot soti nan gad sekirite yo ou ka estime echèl trafik fatra sa a. An reyalite, sou sèvè an mwayèn, 99% nan trafik ka move.

Tarpit se yon pò pèlen ki itilize pou ralanti koneksyon k ap fèk ap rantre yo. Si yon sistèm twazyèm-pati konekte nan pò sa a, ou pa pral kapab byen vit fèmen koneksyon an. Li pral oblije gaspiye resous sistèm li yo epi tann jiskaske tan koneksyon yo, oswa manyèlman mete fen nan li.

Pi souvan, tarpits yo itilize pou pwoteksyon. Te teknik la premye devlope pou pwoteje kont vè òdinatè. Epi kounyeya li ka itilize pou ruine lavi spame yo ak chèchè yo ki angaje nan analiz lajè nan tout adrès IP nan yon ranje (egzanp sou Habré: Австрия, Ikrèn).

Youn nan administratè sistèm yo te rele Chris Wellons aparamman te fatige gade wont sa a - e li te ekri yon ti pwogram. San limit, yon tarpit pou SSH ki ralanti koneksyon fèk ap rantre yo. Pwogram nan ouvri yon pò (pò default pou tès la se 2222) ak pretann yo dwe yon sèvè SSH, men an reyalite li etabli yon koneksyon kontinuèl ak kliyan an fèk ap rantre jiskaske li bay moute. Sa a ka kontinye pandan plizyè jou oswa plis jiskaske kliyan an tonbe.

Enstalasyon sèvis piblik la:

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

Yon tarpit byen aplike pral pran plis resous nan men atakè a pase nan men ou. Men, li pa menm yon kesyon de resous. Otè ekrike pwogram nan depandans. Kounye a li gen 27 kliyan bloke, kèk ladan yo konekte pou semèn. Nan pik aktivite a, 1378 kliyan yo te bloke pou 20 èdtan!

Nan mòd fonksyònman, sèvè Endlessh la bezwen enstale sou pò abityèl 22, kote vwayou frape an mas. Rekòmandasyon sekirite estanda toujou konseye deplase SSH nan yon pò diferan, ki imedyatman diminye gwosè mòso bwa yo pa yon lòd nan grandè.

Chris Wellons di pwogram li a eksplwate yon paragraf nan spesifikasyon la RFC 4253 nan pwotokòl SSH la. Touswit apre yo fin etabli yon koneksyon TCP, men anvan yo aplike kriptografik, tou de pati yo dwe voye yon kòd idantifikasyon. Epi gen yon nòt tou: "Sèvè a ka voye lòt ranje done anvan li voye ranje vèsyon an". Ak pa gen limit sou volim done sa yo, ou jis bezwen kòmanse chak liy ak SSH-.

Sa a se egzakteman sa pwogram Endlessh la fè: li voye enfini kouran done owaza pwodwi, ki konfòme ak RFC 4253, se sa ki, voye anvan otantifikasyon, epi chak liy kòmanse ak SSH- epi li pa depase 255 karaktè, ki gen ladan karaktè ki fini liy lan. An jeneral, tout bagay se selon estanda a.

Pa default, pwogram nan tann 10 segonn ant voye pakè yo. Sa a anpeche kliyan an soti, kidonk kliyan an pral bloke pou tout tan.

Depi done yo voye anvan yo aplike kriptografik, pwogram nan trè senp. Li pa bezwen aplike okenn chifre epi li sipòte plizyè pwotokòl.

Otè a te eseye asire ke sèvis piblik la konsome yon minimòm de resous ak travay konplètman inapèsi sou machin nan. Kontrèman ak antivirus modèn ak lòt "sistèm sekirite," li pa ta dwe ralanti òdinatè w lan. Li te jere pou misyon pou minimize tou de trafik ak konsomasyon memwa akòz yon aplikasyon lojisyèl yon ti kras plis atizan konn fè. Si li tou senpleman te lanse yon pwosesis separe sou yon nouvo koneksyon, Lè sa a, atakan potansyèl yo ta ka lanse yon atak DDoS lè yo louvri koneksyon miltip pou itilize resous sou machin nan. Yon fil pou chak koneksyon tou se pa opsyon ki pi bon, paske nwayo a pral gaspiye resous jere fil.

Se poutèt sa Chris Wellons te chwazi opsyon ki pi lejè pou Endlessh: yon sèvè yon sèl-threaded poll(2), kote kliyan yo nan pèlen an konsome nòmalman pa gen okenn resous siplemantè, san konte objè a priz nan nwayo a ak yon lòt 78 bytes pou swiv nan Endlessh. Pou evite gen pou asiyen tanpon resevwa ak voye pou chak kliyan, Endlessh ouvè yon priz aksè dirèk ak tradwi pake TCP dirèkteman, iyore prèske tout sistèm operasyon TCP/IP pil la. Tanpon kap vini an pa nesesè ditou, paske nou pa enterese nan done k ap rantre yo.

Otè a di ke nan moman pwogram li a pa t konnen sou egzistans asycio Python a ak lòt tarpits. Si li te konnen asycio, li te kapab aplike sèvis piblik li nan jis 18 liy nan 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 se ideyal pou ekri tarpits. Pou egzanp, zen sa a pral jele Firefox, Chrome, oswa nenpòt lòt kliyan ki ap eseye konekte ak sèvè HTTP ou a pou plizyè èdtan:

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 se yon bon zouti pou pini entimidatè sou entènèt. Vrè, gen kèk risk, okontrè, nan atire atansyon yo sou konpòtman an etranj nan yon sèvè patikilye. Yon moun ta ka panse sou tire revanj ak yon atak DDoS vize sou IP ou. Sepandan, jiskaprezan pa te gen okenn ka sa yo, ak tarpits travay anpil.

Pèlen (tarpit) pou koneksyon SSH fèk ap rantre

Sous: www.habr.com

Add nouvo kòmantè