Bukan rahasia lagi bahwa Internet adalah lingkungan yang sangat tidak bersahabat. Segera setelah Anda meningkatkan server, server tersebut langsung mengalami serangan besar-besaran dan pemindaian berulang kali. Misalnya
Tarpit adalah port jebakan yang digunakan untuk memperlambat koneksi masuk. Jika sistem pihak ketiga terhubung ke port ini, Anda tidak akan dapat menutup koneksi dengan cepat. Dia harus membuang sumber daya sistemnya dan menunggu hingga koneksi habis, atau menghentikannya secara manual.
Paling sering, terpal digunakan untuk perlindungan. Teknik ini pertama kali dikembangkan untuk melindungi terhadap worm komputer. Dan sekarang ini dapat digunakan untuk menghancurkan kehidupan para spammer dan peneliti yang terlibat dalam pemindaian luas semua alamat IP secara berturut-turut (contoh di HabrΓ©:
Salah satu administrator sistem bernama Chris Wellons rupanya bosan melihat aib ini - dan dia menulis sebuah program kecil
Instalasi utilitas:
$ make
$ ./endlessh &
$ ssh -p2222 localhost
Tarpit yang diterapkan dengan benar akan mengambil lebih banyak sumber daya dari penyerang dibandingkan dari Anda. Tapi ini bukan soal sumber daya. Pengarang
Dalam mode operasi, server Endlessh perlu diinstal pada port 22 biasa, tempat para hooligan mengetuk secara massal. Rekomendasi keamanan standar selalu menyarankan untuk memindahkan SSH ke port lain, yang akan segera mengurangi ukuran log berdasarkan urutan besarnya.
Chris Wellons mengatakan programnya mengeksploitasi satu paragraf spesifikasi SSH-
.
Inilah tepatnya yang dilakukan oleh program Endlessh: itu mengirim tak ada habisnya aliran data yang dihasilkan secara acak, yang mematuhi RFC 4253, yaitu mengirim sebelum otentikasi, dan setiap baris dimulai dengan SSH-
dan tidak melebihi 255 karakter, termasuk karakter akhir baris. Secara umum semuanya sesuai standar.
Secara default, program menunggu 10 detik antara pengiriman paket. Hal ini mencegah klien kehabisan waktu, sehingga klien akan terjebak selamanya.
Karena data dikirim sebelum kriptografi diterapkan, program ini sangat sederhana. Itu tidak perlu mengimplementasikan cipher apa pun dan mendukung banyak protokol.
Penulis mencoba memastikan bahwa utilitas tersebut mengkonsumsi sumber daya minimum dan bekerja sepenuhnya tanpa disadari pada mesin. Tidak seperti antivirus modern dan βsistem keamananβ lainnya, antivirus ini tidak akan memperlambat komputer Anda. Dia berhasil meminimalkan lalu lintas dan konsumsi memori karena implementasi perangkat lunak yang sedikit lebih cerdik. Jika mesin hanya meluncurkan proses terpisah pada koneksi baru, maka calon penyerang dapat melancarkan serangan DDoS dengan membuka beberapa koneksi untuk menghabiskan sumber daya pada mesin. Satu thread per koneksi juga bukan pilihan terbaik, karena kernel akan membuang-buang sumber daya dalam mengelola thread.
Itu sebabnya Chris Wellons memilih opsi paling ringan untuk Endlessh: server single-threaded poll(2)
, di mana klien dalam perangkap hampir tidak menggunakan sumber daya tambahan, tidak termasuk objek soket di kernel dan 78 byte lainnya untuk pelacakan di Endlessh. Untuk menghindari keharusan mengalokasikan buffer penerimaan dan pengiriman untuk setiap klien, Endlessh membuka soket akses langsung dan menerjemahkan paket TCP secara langsung, melewati hampir seluruh tumpukan TCP/IP sistem operasi. Buffer yang masuk tidak diperlukan sama sekali, karena kita tidak tertarik dengan data yang masuk.
Penulis mengatakan itu pada saat 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 sangat ideal untuk menulis tarpits. Misalnya, pengait ini akan membekukan Firefox, Chrome, atau klien lain yang mencoba menyambung ke server 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 adalah alat yang hebat untuk menghukum pelaku intimidasi online. Benar, ada risiko, sebaliknya, menarik perhatian mereka pada perilaku tidak biasa dari server tertentu. Seseorang
Hub:
Python, Keamanan informasi, Perangkat Lunak, Administrasi sistem
Tags:
SSH, Endlessh, tarpit, tarpit, trap, asycio
Perangkap (tarpit) untuk koneksi SSH yang masuk
Bukan rahasia lagi bahwa Internet adalah lingkungan yang sangat tidak bersahabat. Segera setelah Anda meningkatkan server, server tersebut langsung mengalami serangan besar-besaran dan pemindaian berulang kali. Misalnya
Tarpit adalah port jebakan yang digunakan untuk memperlambat koneksi masuk. Jika sistem pihak ketiga terhubung ke port ini, Anda tidak akan dapat menutup koneksi dengan cepat. Dia harus membuang sumber daya sistemnya dan menunggu hingga koneksi habis, atau menghentikannya secara manual.
Paling sering, terpal digunakan untuk perlindungan. Teknik ini pertama kali dikembangkan untuk melindungi terhadap worm komputer. Dan sekarang ini dapat digunakan untuk menghancurkan kehidupan para spammer dan peneliti yang terlibat dalam pemindaian luas semua alamat IP secara berturut-turut (contoh di HabrΓ©:
Salah satu administrator sistem bernama Chris Wellons rupanya bosan melihat aib ini - dan dia menulis sebuah program kecil
Instalasi utilitas:
$ make
$ ./endlessh &
$ ssh -p2222 localhost
Tarpit yang diterapkan dengan benar akan mengambil lebih banyak sumber daya dari penyerang dibandingkan dari Anda. Tapi ini bukan soal sumber daya. Pengarang
Dalam mode operasi, server Endlessh perlu diinstal pada port 22 biasa, tempat para hooligan mengetuk secara massal. Rekomendasi keamanan standar selalu menyarankan untuk memindahkan SSH ke port lain, yang akan segera mengurangi ukuran log berdasarkan urutan besarnya.
Chris Wellons mengatakan programnya mengeksploitasi satu paragraf spesifikasi SSH-
.
Inilah tepatnya yang dilakukan oleh program Endlessh: itu mengirim tak ada habisnya aliran data yang dihasilkan secara acak, yang mematuhi RFC 4253, yaitu mengirim sebelum otentikasi, dan setiap baris dimulai dengan SSH-
dan tidak melebihi 255 karakter, termasuk karakter akhir baris. Secara umum semuanya sesuai standar.
Secara default, program menunggu 10 detik antara pengiriman paket. Hal ini mencegah klien kehabisan waktu, sehingga klien akan terjebak selamanya.
Karena data dikirim sebelum kriptografi diterapkan, program ini sangat sederhana. Itu tidak perlu mengimplementasikan cipher apa pun dan mendukung banyak protokol.
Penulis mencoba memastikan bahwa utilitas tersebut mengkonsumsi sumber daya minimum dan bekerja sepenuhnya tanpa disadari pada mesin. Tidak seperti antivirus modern dan βsistem keamananβ lainnya, antivirus ini tidak akan memperlambat komputer Anda. Dia berhasil meminimalkan lalu lintas dan konsumsi memori karena implementasi perangkat lunak yang sedikit lebih cerdik. Jika mesin hanya meluncurkan proses terpisah pada koneksi baru, maka calon penyerang dapat melancarkan serangan DDoS dengan membuka beberapa koneksi untuk menghabiskan sumber daya pada mesin. Satu thread per koneksi juga bukan pilihan terbaik, karena kernel akan membuang-buang sumber daya dalam mengelola thread.
Itu sebabnya Chris Wellons memilih opsi paling ringan untuk Endlessh: server single-threaded poll(2)
, di mana klien dalam perangkap hampir tidak menggunakan sumber daya tambahan, tidak termasuk objek soket di kernel dan 78 byte lainnya untuk pelacakan di Endlessh. Untuk menghindari keharusan mengalokasikan buffer penerimaan dan pengiriman untuk setiap klien, Endlessh membuka soket akses langsung dan menerjemahkan paket TCP secara langsung, melewati hampir seluruh tumpukan TCP/IP sistem operasi. Buffer yang masuk tidak diperlukan sama sekali, karena kita tidak tertarik dengan data yang masuk.
Penulis mengatakan itu pada saat 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 sangat ideal untuk menulis tarpits. Misalnya, pengait ini akan membekukan Firefox, Chrome, atau klien lain yang mencoba menyambung ke server 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 adalah alat yang hebat untuk menghukum pelaku intimidasi online. Benar, ada risiko, sebaliknya, menarik perhatian mereka pada perilaku tidak biasa dari server tertentu. Seseorang
Sumber: www.habr.com