bubu (tarpit) pikeun sambungan SSH asup

Henteu aya rusiah yén Internét mangrupikeun lingkungan anu parah pisan. Pas anjeun ngangkat server a, éta instan subjected kana serangan masif sarta sababaraha scan. Salaku conto honeypot ti satpam Anjeun tiasa estimasi skala lalulintas sampah ieu. Kanyataanna, dina server rata, 99% lalulintas bisa jadi jahat.

Tarpit mangrupikeun port bubu anu dianggo pikeun ngalambatkeun sambungan anu asup. Lamun sistem pihak katilu nyambung ka port ieu, anjeun moal bisa gancang nutup sambungan. Anjeunna kedah nyéépkeun sumber daya sistemna sareng ngantosan dugi ka waktos sambunganna, atanapi ngeureunkeunana sacara manual.

Paling sering, tarpits dipaké pikeun panangtayungan. Téhnik munggaran dikembangkeun pikeun ngajagaan tina cacing komputer. Sareng ayeuna éta tiasa dianggo pikeun ngarusak kahirupan spammers sareng peneliti anu kalibet dina scanning lega sadaya alamat IP sakaligus (conto dina Habré: Austria, Ukraine).

Salah sahiji pangurus sistem anu namina Chris Wellons katingalina bosen ningali aib ieu - sareng anjeunna nyerat program leutik. Taya tungtung, Tarpit pikeun SSH anu ngalambatkeun sambungan anu asup. Program éta muka port (port standar pikeun nguji nyaéta 2222) sareng nyamar janten server SSH, tapi dina kanyataanana éta ngawangun sambungan anu teu terbatas sareng klien anu datang dugi ka nyerah. Ieu bisa dituluykeun pikeun sababaraha poé atawa leuwih nepi ka klien layu atawa gugur.

Pamasangan utiliti:

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

Tarpit anu dilaksanakeun leres bakal nyandak langkung seueur sumber daya ti panyerang tibatan anjeun. Tapi éta sanés masalah sumber daya. Pangarang manéhna nu nyeratyén program éta adiktif. Ayeuna éta ngagaduhan 27 klien anu kajebak, sababaraha di antarana nyambung sababaraha minggu. Dina puncak kagiatan, 1378 klien kajebak salami 20 jam!

Dina modeu operasi, server Endlessh kudu dipasang dina port dawam 22, dimana hooligans sambel en masse. Rekomendasi kaamanan standar salawasna mamatahan mindahkeun SSH ka port béda, nu langsung ngurangan ukuran log ku urutan gedena.

Chris Wellons nyebutkeun program na exploitasi hiji paragraf spésifikasi nu RFC 4253 kana protokol SSH. Langsung saatos sambungan TCP diadegkeun, tapi sateuacan kriptografi diterapkeun, duanana pihak kedah ngirim string idéntifikasi. Sareng aya ogé catetan: "Server BISA ngirim baris data anu sanés sateuacan ngirim baris versi". Sareng euweuh watesna on volume data ieu, Anjeun ngan kudu mimitian unggal garis kalawan SSH-.

Ieu persis naon program Endlessh teu: eta ngirim sajajalan aliran data dihasilkeun acak, nu sasuai jeung RFC 4253, nyaeta, ngirim saméméh auténtikasi, sarta unggal baris dimimitian ku SSH- sarta henteu ngaleuwihan 255 karakter, kaasup karakter tungtung garis. Sacara umum, sagalana geus nurutkeun standar.

Sacara standar, program ngantosan 10 detik antara ngirim pakét. Ieu nyegah klien ti keur timed kaluar, jadi klien bakal trapped salawasna.

Kusabab data dikirim sateuacan kriptografi diterapkeun, programna saderhana pisan. Henteu kedah nerapkeun ciphers sareng ngadukung sababaraha protokol.

Panulis ngusahakeun pikeun mastikeun yén utilitas ngonsumsi sumber daya minimum sareng tiasa dianggo leres-leres dina mesin. Beda sareng antipirus modern sareng "sistem kaamanan" sanés, éta henteu kedah ngalambatkeun komputer anjeun. Anjeunna junun ngaleutikan duanana lalulintas sarta konsumsi memori alatan palaksanaan software rada licik. Upami éta ngan saukur ngaluncurkeun prosés anu misah dina sambungan énggal, maka panyerang poténsial tiasa ngaluncurkeun serangan DDoS ku cara muka sababaraha sambungan pikeun ngaleungitkeun sumber daya dina mesin. Hiji thread per sambungan oge sanes pilihan pangalusna, sabab kernel bakal runtah sumberdaya ngatur threads.

Éta sababna Chris Wellons milih pilihan anu paling enteng pikeun Endlessh: server single-threaded poll(2), dimana klien dina bubu meakeun ampir euweuh sumberdaya tambahan, teu kaétang objék stop kontak dina kernel jeung bait 78 séjén pikeun tracking di Endlessh. Pikeun ngahindarkeun kudu allocate narima jeung ngirim panyangga pikeun tiap klien, Endlessh muka stop kontak langsung jeung narjamahkeun pakét TCP langsung, bypassing ampir sakabéh sistem operasi TCP/IP tumpukan. The panyangga asup teu diperlukeun pisan, sabab kami henteu kabetot dina data asup.

Nu nulis nyebutkeun yén dina waktu program-Na henteu terang ngeunaan ayana asycio Python jeung tarpits séjén. Upami anjeunna terang ngeunaan asycio, anjeunna tiasa nerapkeun utilitasna dina ngan 18 garis dina 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 idéal pikeun nulis tarpits. Contona, hook ieu bakal freeze Firefox, Chrome, atawa klien sejenna nu nyoba nyambung ka server HTTP anjeun sababaraha 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 mangrupikeun alat anu saé pikeun ngahukum pembuli online. Leres, aya sababaraha résiko, sabalikna, ngagambar perhatian kana paripolah anu teu biasa tina server anu tangtu. batur bisa mikir ngeunaan dendam jeung serangan DDoS sasaran dina IP Anjeun. Nanging, dugi ka ayeuna teu aya kasus sapertos kitu, sareng tarpit tiasa dianggo saé.

Hub:
Python, Kaamanan inpormasi, Parangkat lunak, Administrasi sistem

tags:
SSH, Endlessh, tarpit, tarpit, bubu, asycio
bubu (tarpit) pikeun sambungan SSH asup

Henteu aya rusiah yén Internét mangrupikeun lingkungan anu parah pisan. Pas anjeun ngangkat server a, éta instan subjected kana serangan masif sarta sababaraha scan. Salaku conto honeypot ti satpam Anjeun tiasa estimasi skala lalulintas sampah ieu. Kanyataanna, dina server rata, 99% lalulintas bisa jadi jahat.

Tarpit mangrupikeun port bubu anu dianggo pikeun ngalambatkeun sambungan anu asup. Lamun sistem pihak katilu nyambung ka port ieu, anjeun moal bisa gancang nutup sambungan. Anjeunna kedah nyéépkeun sumber daya sistemna sareng ngantosan dugi ka waktos sambunganna, atanapi ngeureunkeunana sacara manual.

Paling sering, tarpits dipaké pikeun panangtayungan. Téhnik munggaran dikembangkeun pikeun ngajagaan tina cacing komputer. Sareng ayeuna éta tiasa dianggo pikeun ngarusak kahirupan spammers sareng peneliti anu kalibet dina scanning lega sadaya alamat IP sakaligus (conto dina Habré: Austria, Ukraine).

Salah sahiji pangurus sistem anu namina Chris Wellons katingalina bosen ningali aib ieu - sareng anjeunna nyerat program leutik. Taya tungtung, Tarpit pikeun SSH anu ngalambatkeun sambungan anu asup. Program éta muka port (port standar pikeun nguji nyaéta 2222) sareng nyamar janten server SSH, tapi dina kanyataanana éta ngawangun sambungan anu teu terbatas sareng klien anu datang dugi ka nyerah. Ieu bisa dituluykeun pikeun sababaraha poé atawa leuwih nepi ka klien layu atawa gugur.

Pamasangan utiliti:

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

Tarpit anu dilaksanakeun leres bakal nyandak langkung seueur sumber daya ti panyerang tibatan anjeun. Tapi éta sanés masalah sumber daya. Pangarang manéhna nu nyeratyén program éta adiktif. Ayeuna éta ngagaduhan 27 klien anu kajebak, sababaraha di antarana nyambung sababaraha minggu. Dina puncak kagiatan, 1378 klien kajebak salami 20 jam!

Dina modeu operasi, server Endlessh kudu dipasang dina port dawam 22, dimana hooligans sambel en masse. Rekomendasi kaamanan standar salawasna mamatahan mindahkeun SSH ka port béda, nu langsung ngurangan ukuran log ku urutan gedena.

Chris Wellons nyebutkeun program na exploitasi hiji paragraf spésifikasi nu RFC 4253 kana protokol SSH. Langsung saatos sambungan TCP diadegkeun, tapi sateuacan kriptografi diterapkeun, duanana pihak kedah ngirim string idéntifikasi. Sareng aya ogé catetan: "Server BISA ngirim baris data anu sanés sateuacan ngirim baris versi". Sareng euweuh watesna on volume data ieu, Anjeun ngan kudu mimitian unggal garis kalawan SSH-.

Ieu persis naon program Endlessh teu: eta ngirim sajajalan aliran data dihasilkeun acak, nu sasuai jeung RFC 4253, nyaeta, ngirim saméméh auténtikasi, sarta unggal baris dimimitian ku SSH- sarta henteu ngaleuwihan 255 karakter, kaasup karakter tungtung garis. Sacara umum, sagalana geus nurutkeun standar.

Sacara standar, program ngantosan 10 detik antara ngirim pakét. Ieu nyegah klien ti keur timed kaluar, jadi klien bakal trapped salawasna.

Kusabab data dikirim sateuacan kriptografi diterapkeun, programna saderhana pisan. Henteu kedah nerapkeun ciphers sareng ngadukung sababaraha protokol.

Panulis ngusahakeun pikeun mastikeun yén utilitas ngonsumsi sumber daya minimum sareng tiasa dianggo leres-leres dina mesin. Beda sareng antipirus modern sareng "sistem kaamanan" sanés, éta henteu kedah ngalambatkeun komputer anjeun. Anjeunna junun ngaleutikan duanana lalulintas sarta konsumsi memori alatan palaksanaan software rada licik. Upami éta ngan saukur ngaluncurkeun prosés anu misah dina sambungan énggal, maka panyerang poténsial tiasa ngaluncurkeun serangan DDoS ku cara muka sababaraha sambungan pikeun ngaleungitkeun sumber daya dina mesin. Hiji thread per sambungan oge sanes pilihan pangalusna, sabab kernel bakal runtah sumberdaya ngatur threads.

Éta sababna Chris Wellons milih pilihan anu paling enteng pikeun Endlessh: server single-threaded poll(2), dimana klien dina bubu meakeun ampir euweuh sumberdaya tambahan, teu kaétang objék stop kontak dina kernel jeung bait 78 séjén pikeun tracking di Endlessh. Pikeun ngahindarkeun kudu allocate narima jeung ngirim panyangga pikeun tiap klien, Endlessh muka stop kontak langsung jeung narjamahkeun pakét TCP langsung, bypassing ampir sakabéh sistem operasi TCP/IP tumpukan. The panyangga asup teu diperlukeun pisan, sabab kami henteu kabetot dina data asup.

Nu nulis nyebutkeun yén dina waktu program-Na henteu terang ngeunaan ayana asycio Python jeung tarpits séjén. Upami anjeunna terang ngeunaan asycio, anjeunna tiasa nerapkeun utilitasna dina ngan 18 garis dina 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 idéal pikeun nulis tarpits. Contona, hook ieu bakal freeze Firefox, Chrome, atawa klien sejenna nu nyoba nyambung ka server HTTP anjeun sababaraha 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 mangrupikeun alat anu saé pikeun ngahukum pembuli online. Leres, aya sababaraha résiko, sabalikna, ngagambar perhatian kana paripolah anu teu biasa tina server anu tangtu. batur bisa mikir ngeunaan dendam jeung serangan DDoS sasaran dina IP Anjeun. Nanging, dugi ka ayeuna teu aya kasus sapertos kitu, sareng tarpit tiasa dianggo saé.

bubu (tarpit) pikeun sambungan SSH asup

sumber: www.habr.com

Tambahkeun komentar