Trap (tarpit) kanggo sambungan SSH mlebu

Ora rahasia manawa Internet minangka lingkungan sing ora sopan. Sanalika sampeyan mundhakaken server, iku enggal ngalami serangan massive lan sawetara scan. Tuladhane honeypot saka pengawal keamanan sampeyan bisa ngira ukuran lalu lintas sampah iki. Nyatane, ing server rata-rata, 99% lalu lintas bisa uga mbebayani.

Tarpit minangka port trap sing digunakake kanggo alon-alon sambungan sing mlebu. Yen sistem pihak katelu nyambung menyang port iki, sampeyan ora bakal bisa kanthi cepet nutup sambungan. Dheweke kudu mbuwang sumber daya sistem lan ngenteni nganti wektu sambungan entek, utawa mungkasi kanthi manual.

Paling asring, tarpits digunakake kanggo perlindungan. Teknik iki pisanan dikembangake kanggo nglindhungi saka cacing komputer. Lan saiki bisa digunakake kanggo ngrusak urip spammer lan peneliti sing melu mindhai kabeh alamat IP berturut-turut (conto ing HabrΓ©: Austria, Ukraine).

Salah sawijining administrator sistem sing jenenge Chris Wellons ketoke kesel nonton aib iki - lan dheweke nulis program cilik. tanpa wates, tarpit kanggo SSH sing alon mudhun sambungan mlebu. Program kasebut mbukak port (port standar kanggo tes yaiku 2222) lan nyamar dadi server SSH, nanging nyatane nggawe sambungan tanpa wates karo klien sing mlebu nganti nyerah. Iki bisa terus nganti sawetara dina utawa luwih nganti klien tiba.

Instalasi sarana:

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

Tarpit sing dileksanakake kanthi bener bakal njupuk luwih akeh sumber daya saka panyerang tinimbang sampeyan. Nanging dudu masalah sumber daya. Pengarang Panjenenganipun nyeratsing program gawe ketagihan. Saiki, ana 27 klien sing kepepet, sawetara disambungake nganti pirang-pirang minggu. Ing puncak kegiatan, 1378 klien kepepet sajrone 20 jam!

Ing mode operasi, server Endlessh kudu diinstal ing port biasanipun 22, ngendi hooligans ngalahake en masse. Rekomendasi keamanan standar tansah menehi saran kanggo mindhah SSH menyang port sing beda, sing langsung nyuda ukuran log kanthi urutan gedhene.

Chris Wellons ujar manawa program kasebut nggunakake siji paragraf saka spesifikasi kasebut RFC 4253 menyang protokol SSH. Sanalika sawise sambungan TCP digawe, nanging sadurunge kriptografi diterapake, loro pihak kudu ngirim string identifikasi. Lan uga ana cathetan: "Server MUNGKIN ngirim baris data liyane sadurunge ngirim baris versi". Lan ora ana watesan ing volume data iki, sampeyan mung kudu miwiti saben baris karo SSH-.

Iki persis apa program Endlessh: iku ngirim telas stream saka data kui acak, sing tundhuk karo RFC 4253, yaiku, ngirim sadurunge otentikasi, lan saben baris diwiwiti karo SSH- lan ora ngluwihi 255 karakter, kalebu karakter pungkasan baris. UmumΓ©, kabeh miturut standar.

Kanthi gawan, program ngenteni 10 detik ing antarane ngirim paket. Iki nyegah klien supaya ora ana wektu, supaya klien bakal kepepet ing salawas-lawase.

Wiwit data dikirim sadurunge kriptografi ditrapake, program kasebut gampang banget. Ora perlu ngleksanakake cipher lan ndhukung sawetara protokol.

Penulis nyoba kanggo mesthekake yen sarana nggunakake minimal sumber daya lan bisa rampung unnoticed ing mesin. Ora kaya antivirus modern lan "sistem keamanan" liyane, ora kudu alon-alon komputer sampeyan. Dheweke bisa nyilikake lalu lintas lan konsumsi memori amarga implementasine piranti lunak sing rada licik. Yen mung ngluncurake proses sing kapisah ing sambungan anyar, mula panyerang potensial bisa miwiti serangan DDoS kanthi mbukak pirang-pirang sambungan kanggo mbuwang sumber daya ing mesin kasebut. Siji utas saben sambungan uga dudu pilihan sing paling apik, amarga kernel bakal mbuang sumber daya kanggo ngatur benang.

Mulane Chris Wellons milih pilihan sing paling entheng kanggo Endlessh: server siji-threaded poll(2), ngendi klien ing trap nggunakake sakbenere ora sumber daya ekstra, ora ngetang obyek soket ing kernel lan liyane 78 bita kanggo nelusuri ing Endlessh. Supaya ora kudu nyedhiakke nampa lan ngirim buffer kanggo saben klien, Endlessh mbukak soket akses langsung lan nerjemahake paket TCP langsung, bypassing meh kabeh sistem operasi TCP / IP tumpukan. Buffer mlebu ora dibutuhake kabeh, amarga kita ora kasengsem ing data sing mlebu.

Penulis ngandika sing ing wektu kang program ora ngerti bab orane asycio Python lan tarpits liyane. Yen dheweke ngerti babagan asycio, dheweke bisa ngetrapake utilitas mung ing 18 baris ing 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 becik kanggo nulis tarpits. Contone, pancing iki bakal beku Firefox, Chrome, utawa klien liyane sing nyoba nyambung menyang server HTTP nganti pirang-pirang jam:

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 minangka alat sing apik kanggo ngukum pembuli online. Bener, ana sawetara risiko, ing nalisir, narik kawigaten manungsa waΓ© menyang prilaku mboten umum saka server tartamtu. sopo wae bisa mikir babagan dendam lan serangan DDoS sing ditargetake ing IP sampeyan. Nanging, nganti saiki durung ana kasus kaya ngono, lan tarpit bisa digunakake kanthi apik.

Hub:
Python, Keamanan informasi, Perangkat Lunak, Administrasi sistem

Tags:
SSH, Endlessh, tarpit, tarpit, trap, asycio
Trap (tarpit) kanggo sambungan SSH mlebu

Ora rahasia manawa Internet minangka lingkungan sing ora sopan. Sanalika sampeyan mundhakaken server, iku enggal ngalami serangan massive lan sawetara scan. Tuladhane honeypot saka pengawal keamanan sampeyan bisa ngira ukuran lalu lintas sampah iki. Nyatane, ing server rata-rata, 99% lalu lintas bisa uga mbebayani.

Tarpit minangka port trap sing digunakake kanggo alon-alon sambungan sing mlebu. Yen sistem pihak katelu nyambung menyang port iki, sampeyan ora bakal bisa kanthi cepet nutup sambungan. Dheweke kudu mbuwang sumber daya sistem lan ngenteni nganti wektu sambungan entek, utawa mungkasi kanthi manual.

Paling asring, tarpits digunakake kanggo perlindungan. Teknik iki pisanan dikembangake kanggo nglindhungi saka cacing komputer. Lan saiki bisa digunakake kanggo ngrusak urip spammer lan peneliti sing melu mindhai kabeh alamat IP berturut-turut (conto ing HabrΓ©: Austria, Ukraine).

Salah sawijining administrator sistem sing jenenge Chris Wellons ketoke kesel nonton aib iki - lan dheweke nulis program cilik. tanpa wates, tarpit kanggo SSH sing alon mudhun sambungan mlebu. Program kasebut mbukak port (port standar kanggo tes yaiku 2222) lan nyamar dadi server SSH, nanging nyatane nggawe sambungan tanpa wates karo klien sing mlebu nganti nyerah. Iki bisa terus nganti sawetara dina utawa luwih nganti klien tiba.

Instalasi sarana:

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

Tarpit sing dileksanakake kanthi bener bakal njupuk luwih akeh sumber daya saka panyerang tinimbang sampeyan. Nanging dudu masalah sumber daya. Pengarang Panjenenganipun nyeratsing program gawe ketagihan. Saiki, ana 27 klien sing kepepet, sawetara disambungake nganti pirang-pirang minggu. Ing puncak kegiatan, 1378 klien kepepet sajrone 20 jam!

Ing mode operasi, server Endlessh kudu diinstal ing port biasanipun 22, ngendi hooligans ngalahake en masse. Rekomendasi keamanan standar tansah menehi saran kanggo mindhah SSH menyang port sing beda, sing langsung nyuda ukuran log kanthi urutan gedhene.

Chris Wellons ujar manawa program kasebut nggunakake siji paragraf saka spesifikasi kasebut RFC 4253 menyang protokol SSH. Sanalika sawise sambungan TCP digawe, nanging sadurunge kriptografi diterapake, loro pihak kudu ngirim string identifikasi. Lan uga ana cathetan: "Server MUNGKIN ngirim baris data liyane sadurunge ngirim baris versi". Lan ora ana watesan ing volume data iki, sampeyan mung kudu miwiti saben baris karo SSH-.

Iki persis apa program Endlessh: iku ngirim telas stream saka data kui acak, sing tundhuk karo RFC 4253, yaiku, ngirim sadurunge otentikasi, lan saben baris diwiwiti karo SSH- lan ora ngluwihi 255 karakter, kalebu karakter pungkasan baris. UmumΓ©, kabeh miturut standar.

Kanthi gawan, program ngenteni 10 detik ing antarane ngirim paket. Iki nyegah klien supaya ora ana wektu, supaya klien bakal kepepet ing salawas-lawase.

Wiwit data dikirim sadurunge kriptografi ditrapake, program kasebut gampang banget. Ora perlu ngleksanakake cipher lan ndhukung sawetara protokol.

Penulis nyoba kanggo mesthekake yen sarana nggunakake minimal sumber daya lan bisa rampung unnoticed ing mesin. Ora kaya antivirus modern lan "sistem keamanan" liyane, ora kudu alon-alon komputer sampeyan. Dheweke bisa nyilikake lalu lintas lan konsumsi memori amarga implementasine piranti lunak sing rada licik. Yen mung ngluncurake proses sing kapisah ing sambungan anyar, mula panyerang potensial bisa miwiti serangan DDoS kanthi mbukak pirang-pirang sambungan kanggo mbuwang sumber daya ing mesin kasebut. Siji utas saben sambungan uga dudu pilihan sing paling apik, amarga kernel bakal mbuang sumber daya kanggo ngatur benang.

Mulane Chris Wellons milih pilihan sing paling entheng kanggo Endlessh: server siji-threaded poll(2), ngendi klien ing trap nggunakake sakbenere ora sumber daya ekstra, ora ngetang obyek soket ing kernel lan liyane 78 bita kanggo nelusuri ing Endlessh. Supaya ora kudu nyedhiakke nampa lan ngirim buffer kanggo saben klien, Endlessh mbukak soket akses langsung lan nerjemahake paket TCP langsung, bypassing meh kabeh sistem operasi TCP / IP tumpukan. Buffer mlebu ora dibutuhake kabeh, amarga kita ora kasengsem ing data sing mlebu.

Penulis ngandika sing ing wektu kang program ora ngerti bab orane asycio Python lan tarpits liyane. Yen dheweke ngerti babagan asycio, dheweke bisa ngetrapake utilitas mung ing 18 baris ing 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 becik kanggo nulis tarpits. Contone, pancing iki bakal beku Firefox, Chrome, utawa klien liyane sing nyoba nyambung menyang server HTTP nganti pirang-pirang jam:

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 minangka alat sing apik kanggo ngukum pembuli online. Bener, ana sawetara risiko, ing nalisir, narik kawigaten manungsa waΓ© menyang prilaku mboten umum saka server tartamtu. sopo wae bisa mikir babagan dendam lan serangan DDoS sing ditargetake ing IP sampeyan. Nanging, nganti saiki durung ana kasus kaya ngono, lan tarpit bisa digunakake kanthi apik.

Trap (tarpit) kanggo sambungan SSH mlebu

Source: www.habr.com

Add a comment