Bukan rahsia lagi bahawa Internet adalah persekitaran yang sangat bermusuhan. Sebaik sahaja anda menaikkan pelayan, ia serta-merta tertakluk kepada serangan besar-besaran dan berbilang imbasan. Sebagai contoh
Tarpit ialah port perangkap yang digunakan untuk memperlahankan sambungan masuk. Jika sistem pihak ketiga bersambung ke port ini, anda tidak akan dapat menutup sambungan dengan cepat. Dia perlu membazirkan sumber sistemnya dan menunggu sehingga tamat masa sambungan, atau menamatkannya secara manual.
Selalunya, tarpit digunakan untuk perlindungan. Teknik ini mula-mula dibangunkan untuk melindungi daripada cecacing komputer. Dan kini ia boleh digunakan untuk merosakkan kehidupan pengirim spam dan penyelidik yang terlibat dalam pengimbasan luas semua alamat IP berturut-turut (contoh pada HabrΓ©:
Salah seorang pentadbir sistem bernama Chris Wellons nampaknya bosan menonton aib ini - dan dia menulis program kecil
Pemasangan utiliti:
$ make
$ ./endlessh &
$ ssh -p2222 localhost
Tarpit yang dilaksanakan dengan betul akan mengambil lebih banyak sumber daripada penyerang daripada anda. Tetapi ia bukan masalah sumber. Pengarang
Dalam mod pengendalian, pelayan Endlessh perlu dipasang pada port biasa 22, di mana samseng mengetuk beramai-ramai. Pengesyoran keselamatan standard sentiasa menasihati mengalihkan SSH ke port lain, yang dengan serta-merta mengurangkan saiz log mengikut susunan magnitud.
Chris Wellons berkata programnya mengeksploitasi satu perenggan spesifikasi SSH-
.
Inilah yang dilakukan oleh program Endlessh: ia menghantar tak terhingga aliran data yang dijana secara rawak, yang mematuhi RFC 4253, iaitu, hantar sebelum pengesahan, dan setiap baris bermula dengan SSH-
dan tidak melebihi 255 aksara, termasuk aksara akhir baris. Secara umum, semuanya mengikut piawaian.
Secara lalai, program menunggu 10 saat antara menghantar paket. Ini menghalang pelanggan daripada tamat masa, jadi pelanggan akan terperangkap selama-lamanya.
Memandangkan data dihantar sebelum kriptografi digunakan, program ini sangat mudah. Ia tidak perlu melaksanakan sebarang sifir dan menyokong pelbagai protokol.
Penulis cuba memastikan bahawa utiliti menggunakan sumber minimum dan berfungsi sepenuhnya tanpa disedari pada mesin. Tidak seperti antivirus moden dan "sistem keselamatan" lain, ia tidak seharusnya memperlahankan komputer anda. Dia berjaya meminimumkan penggunaan trafik dan memori kerana pelaksanaan perisian yang lebih licik. Jika ia hanya melancarkan proses berasingan pada sambungan baharu, maka penyerang berpotensi boleh melancarkan serangan DDoS dengan membuka berbilang sambungan untuk menghabiskan sumber pada mesin. Satu utas bagi setiap sambungan juga bukan pilihan terbaik, kerana kernel akan membazir sumber menguruskan benang.
Itulah sebabnya Chris Wellons memilih pilihan yang paling ringan untuk Endlessh: pelayan satu benang poll(2)
, di mana pelanggan dalam perangkap menggunakan hampir tiada sumber tambahan, tidak mengira objek soket dalam kernel dan 78 bait lagi untuk penjejakan dalam Endlessh. Untuk mengelak daripada memperuntukkan menerima dan menghantar penimbal untuk setiap pelanggan, Endlessh membuka soket akses terus dan menterjemah paket TCP secara langsung, memintas hampir keseluruhan susunan TCP/IP sistem pengendalian. Penampan masuk tidak diperlukan sama sekali, kerana kami tidak berminat dengan data masuk.
Penulis mengatakan bahawa pada masa programnya
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 sesuai untuk menulis tarpit. Contohnya, cangkuk ini akan membekukan Firefox, Chrome atau mana-mana pelanggan lain yang cuba menyambung ke pelayan HTTP anda selama berjam-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 ialah alat yang hebat untuk menghukum pembuli dalam talian. Benar, terdapat beberapa risiko, sebaliknya, menarik perhatian mereka kepada tingkah laku luar biasa pelayan tertentu. Seseorang
Hab:
Python, Keselamatan maklumat, Perisian, Pentadbiran sistem
Tags:
SSH, Endlessh, tarpit, tarpit, trap, asycio
Perangkap (tarpit) untuk sambungan SSH masuk
Bukan rahsia lagi bahawa Internet adalah persekitaran yang sangat bermusuhan. Sebaik sahaja anda menaikkan pelayan, ia serta-merta tertakluk kepada serangan besar-besaran dan berbilang imbasan. Sebagai contoh
Tarpit ialah port perangkap yang digunakan untuk memperlahankan sambungan masuk. Jika sistem pihak ketiga bersambung ke port ini, anda tidak akan dapat menutup sambungan dengan cepat. Dia perlu membazirkan sumber sistemnya dan menunggu sehingga tamat masa sambungan, atau menamatkannya secara manual.
Selalunya, tarpit digunakan untuk perlindungan. Teknik ini mula-mula dibangunkan untuk melindungi daripada cecacing komputer. Dan kini ia boleh digunakan untuk merosakkan kehidupan pengirim spam dan penyelidik yang terlibat dalam pengimbasan luas semua alamat IP berturut-turut (contoh pada HabrΓ©:
Salah seorang pentadbir sistem bernama Chris Wellons nampaknya bosan menonton aib ini - dan dia menulis program kecil
Pemasangan utiliti:
$ make
$ ./endlessh &
$ ssh -p2222 localhost
Tarpit yang dilaksanakan dengan betul akan mengambil lebih banyak sumber daripada penyerang daripada anda. Tetapi ia bukan masalah sumber. Pengarang
Dalam mod pengendalian, pelayan Endlessh perlu dipasang pada port biasa 22, di mana samseng mengetuk beramai-ramai. Pengesyoran keselamatan standard sentiasa menasihati mengalihkan SSH ke port lain, yang dengan serta-merta mengurangkan saiz log mengikut susunan magnitud.
Chris Wellons berkata programnya mengeksploitasi satu perenggan spesifikasi SSH-
.
Inilah yang dilakukan oleh program Endlessh: ia menghantar tak terhingga aliran data yang dijana secara rawak, yang mematuhi RFC 4253, iaitu, hantar sebelum pengesahan, dan setiap baris bermula dengan SSH-
dan tidak melebihi 255 aksara, termasuk aksara akhir baris. Secara umum, semuanya mengikut piawaian.
Secara lalai, program menunggu 10 saat antara menghantar paket. Ini menghalang pelanggan daripada tamat masa, jadi pelanggan akan terperangkap selama-lamanya.
Memandangkan data dihantar sebelum kriptografi digunakan, program ini sangat mudah. Ia tidak perlu melaksanakan sebarang sifir dan menyokong pelbagai protokol.
Penulis cuba memastikan bahawa utiliti menggunakan sumber minimum dan berfungsi sepenuhnya tanpa disedari pada mesin. Tidak seperti antivirus moden dan "sistem keselamatan" lain, ia tidak seharusnya memperlahankan komputer anda. Dia berjaya meminimumkan penggunaan trafik dan memori kerana pelaksanaan perisian yang lebih licik. Jika ia hanya melancarkan proses berasingan pada sambungan baharu, maka penyerang berpotensi boleh melancarkan serangan DDoS dengan membuka berbilang sambungan untuk menghabiskan sumber pada mesin. Satu utas bagi setiap sambungan juga bukan pilihan terbaik, kerana kernel akan membazir sumber menguruskan benang.
Itulah sebabnya Chris Wellons memilih pilihan yang paling ringan untuk Endlessh: pelayan satu benang poll(2)
, di mana pelanggan dalam perangkap menggunakan hampir tiada sumber tambahan, tidak mengira objek soket dalam kernel dan 78 bait lagi untuk penjejakan dalam Endlessh. Untuk mengelak daripada memperuntukkan menerima dan menghantar penimbal untuk setiap pelanggan, Endlessh membuka soket akses terus dan menterjemah paket TCP secara langsung, memintas hampir keseluruhan susunan TCP/IP sistem pengendalian. Penampan masuk tidak diperlukan sama sekali, kerana kami tidak berminat dengan data masuk.
Penulis mengatakan bahawa pada masa programnya
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 sesuai untuk menulis tarpit. Contohnya, cangkuk ini akan membekukan Firefox, Chrome atau mana-mana pelanggan lain yang cuba menyambung ke pelayan HTTP anda selama berjam-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 ialah alat yang hebat untuk menghukum pembuli dalam talian. Benar, terdapat beberapa risiko, sebaliknya, menarik perhatian mereka kepada tingkah laku luar biasa pelayan tertentu. Seseorang
Sumber: www.habr.com