Bukan rahasia lagi bahwa Internet adalah lingkungan yang sangat bermusuhan. Segera setelah Anda mengangkat server, server langsung mengalami serangan besar dan beberapa pemindaian. Pada contoh
penjaga keamanan hanipot, orang dapat memperkirakan skala lalu lintas sampah ini. Bahkan, pada server rata-rata, 99% dari lalu lintas dapat berbahaya.
Tarpit adalah port perangkap yang digunakan untuk memperlambat koneksi yang masuk. Jika sistem pihak ketiga terhubung ke port ini, itu tidak akan berfungsi untuk menutup koneksi dengan cepat. Dia harus menghabiskan sumber daya sistemnya dan menunggu hingga koneksi terputus oleh batas waktu, atau secara manual memutusnya.
Paling sering, terpal digunakan untuk perlindungan. Teknik ini pertama kali dikembangkan untuk melindungi terhadap cacing komputer. Dan sekarang dapat digunakan untuk merusak kehidupan spammer dan peneliti yang terlibat dalam pemindaian luas semua alamat IP secara berturut-turut (contoh tentang Habré:
Austria ,
Ukraina ).
Salah satu sysadmin dengan nama Chris Wellons, tampaknya lelah menonton aib ini - dan ia menulis sebuah program kecil
Endlessh , tarpit untuk SSH, memperlambat koneksi yang masuk. Program membuka port (secara default, port 2222 ditentukan untuk pengujian) dan berpura-pura menjadi server SSH, tetapi pada kenyataannya membuat koneksi tanpa akhir dengan klien yang masuk sampai menyerah. Ini dapat berlangsung beberapa hari atau lebih hingga klien jatuh.
Instalasi Utilitas:
$ make $ ./endlessh & $ ssh -p2222 localhost
Sebuah tarpit yang diimplementasikan dengan benar akan mengambil lebih banyak sumber daya dari penyerang daripada Anda. Tetapi masalahnya bahkan tidak dalam sumber daya. Penulis
menulis bahwa program ini membuat ketagihan. Ada 27 klien yang terjebak saat ini, beberapa dari mereka terhubung selama berminggu-minggu. Di puncak aktivitas, 1378 klien duduk di perangkap selama 20 jam!
Dalam mode operasi, server Endlessh perlu diinstal pada port biasa 22, di mana hooligan mengetuk secara besar-besaran. Rekomendasi keamanan standar selalu menyarankan untuk memindahkan SSH ke port yang berbeda, yang segera mengurangi ukuran log dengan urutan besarnya.
Chris Wellons mengatakan programnya mengeksploitasi satu paragraf dari spesifikasi
RFC 4253 untuk protokol SSH. Segera setelah membuat koneksi TCP, tetapi sebelum menerapkan kriptografi, kedua belah pihak harus mengirim string identifikasi. Dan ada catatan:
"Server MUNGKIN mengirim baris data lain sebelum mengirim baris dengan versi .
" Dan
tidak ada batasan jumlah data ini, hanya setiap baris tidak boleh dimulai dengan
SSH-
.
Inilah yang dilakukan oleh Endlessh: ia
mengirimkan aliran data tanpa henti yang dihasilkan secara acak yang sesuai dengan RFC 4253, yaitu, mengirim sebelum identifikasi, dan setiap baris tidak dimulai dengan
SSH-
dan tidak melebihi 255 karakter, termasuk karakter terminasi baris. Secara umum, semuanya standar.
Secara default, program menunggu 10 detik antara pengiriman paket. Ini mencegah perjalanan timeout sehingga klien akan terjebak selamanya.
Karena data dikirim sebelum kriptografi diterapkan, program ini sangat sederhana. Tidak perlu mengimplementasikan sandi dan dukungan untuk banyak protokol.
Penulis mencoba membuat utilitas mengkonsumsi sumber daya minimum dan bekerja dengan mulus di mesin. Tidak seperti antivirus modern dan "sistem keamanan" lainnya, seharusnya tidak memperlambat komputer. Dia berhasil meminimalkan lalu lintas dan konsumsi memori karena implementasi perangkat lunak yang sedikit lebih licik. Jika ia hanya memulai proses terpisah pada koneksi baru, maka penyerang potensial dapat melakukan serangan DDoS, membuka banyak koneksi untuk menghabiskan sumber daya pada mesin. Satu utas per koneksi juga bukan pilihan terbaik, karena kernel akan menghabiskan sumber daya untuk manajemen utas.
Oleh karena itu, Chris Wellons memilih opsi yang paling ringan untuk Endlessh: sebuah
poll(2)
single-threaded
poll(2)
, di mana klien dalam perangkap praktis tidak mengkonsumsi sumber daya yang tidak perlu, tidak menghitung objek soket di kernel dan 78 byte lainnya untuk dilacak di Endlessh. Agar tidak mengalokasikan penerimaan dan pengiriman buffer untuk setiap klien, Endlessh membuka soket akses langsung dan langsung menerjemahkan paket TCP, mengabaikan hampir seluruh tumpukan TCP / IP sistem operasi. Input buffer tidak diperlukan sama sekali, karena data input tidak menarik bagi kita.
Penulis mengatakan bahwa pada saat programnya ia
tidak tahu tentang keberadaan Python Asycio dan terpal lainnya. Jika dia tahu tentang asycio, maka dia bisa mengimplementasikan utilitasnya hanya dalam 18 baris dengan Python:
import asyncio import random async def handler(_reader, writer): try: while True: await asyncio.sleep(10) writer.write(b'%x\r\n' % 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 cocok untuk menulis tarpit. Misalnya, jebakan seperti itu akan menggantung Firefox, Chrome atau klien lain yang mencoba terhubung ke server HTTP Anda selama berjam-jam:
import asyncio import random async def handler(_reader, writer): writer.write(b'HTTP/1.1 200 OK\r\n') try: while True: await asyncio.sleep(5) header = random.randint(0, 2**32) value = random.randint(0, 2**32) writer.write(b'X-%x: %x\r\n' % (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 beberapa risiko, sebaliknya, untuk menarik perhatian mereka pada perilaku yang tidak biasa dari server tertentu. Seseorang
mungkin berpikir balas dendam dan serangan DDoS yang ditargetkan pada IP Anda. Namun, sejauh ini belum ada kasus seperti itu, dan tarpit berfungsi dengan baik.

