Daxil olan SSH əlaqələri üçün tələ (tarpit).

Heç kimə sirr deyil ki, İnternet çox düşmən mühitdir. Bir server qaldıran kimi o, dərhal kütləvi hücumlara və çoxsaylı skanlara məruz qalır. Misal üçün mühafizəçilərdən bal qabı bu zibil trafikinin miqyasını təxmin edə bilərsiniz. Əslində, orta serverdə trafikin 99%-i zərərli ola bilər.

Tarpit, daxil olan əlaqələri yavaşlatmaq üçün istifadə edilən tələ portudur. Bu porta üçüncü tərəf sistemi qoşularsa, siz əlaqəni tez bağlaya bilməyəcəksiniz. O, sistem resurslarını sərf etməli və əlaqə vaxtının bitməsini gözləməli və ya onu əl ilə dayandırmalı olacaq.

Çox vaxt tarpitlər qorunmaq üçün istifadə olunur. Texnika ilk dəfə kompüter qurdlarından qorunmaq üçün hazırlanmışdır. İndi o, ardıcıl olaraq bütün IP ünvanlarının geniş skan edilməsi ilə məşğul olan spam göndərənlərin və tədqiqatçıların həyatını məhv etmək üçün istifadə edilə bilər (Habré-də nümunələr: Австрия, Ukrayna).

Chris Wellons adlı sistem administratorlarından biri yəqin ki, bu biabırçılığı izləməkdən yorulub - və o, kiçik bir proqram yazdı. Sonsuz, daxil olan əlaqələri yavaşlatan SSH üçün tarpit. Proqram bir port açır (sınaq üçün standart port 2222-dir) və özünü SSH serveri kimi göstərir, lakin reallıqda o, imtina edənə qədər gələn müştəri ilə sonsuz əlaqə qurur. Bu, müştəri yıxılana qədər bir neçə gün və ya daha çox davam edə bilər.

Utilityin quraşdırılması:

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

Düzgün tətbiq olunan tarpit sizdən daha çox təcavüzkardan daha çox resurs alacaq. Ancaq bu, hətta resurs məsələsi deyil. Müəllif yazırproqramın asılılıq yaratdığını. Hazırda onun 27 müştərisi tələyə düşüb, onlardan bəziləri həftələrlə bağlıdır. Fəaliyyətin zirvəsində 1378 müştəri 20 saat ərzində tələyə düşdü!

İş rejimində Endlessh serveri xuliqanların kütləvi şəkildə döydüyü adi port 22-də quraşdırılmalıdır. Standart təhlükəsizlik tövsiyələri həmişə SSH-ni fərqli bir porta köçürməyi məsləhət görür ki, bu da jurnalların ölçüsünü dərhal böyüklük sırası ilə azaldır.

Chris Wellons deyir ki, onun proqramı spesifikasiyanın bir paraqrafından istifadə edir RFC 4253 SSH protokoluna. TCP bağlantısı qurulduqdan dərhal sonra, lakin kriptoqrafiya tətbiq edilməzdən əvvəl hər iki tərəf identifikasiya sətrini göndərməlidir. Və bir qeyd də var: "Server versiya sırasını göndərməzdən əvvəl digər məlumat sətirlərini göndərə bilər". Və məhdudiyyət yoxdur bu məlumatların həcminə görə hər bir sətirlə başlamaq lazımdır SSH-.

Bu, Endlessh proqramının etdiyi şeydir: o göndərir sonsuz təsadüfi yaradılan məlumat axını, RFC 4253-ə uyğundur, yəni autentifikasiyadan əvvəl göndərilir və hər sətir ilə başlayır SSH- və sətir sonu simvolu daxil olmaqla 255 simvoldan çox deyil. Ümumiyyətlə, hər şey standarta uyğundur.

Varsayılan olaraq, proqram paketlərin göndərilməsi arasında 10 saniyə gözləyir. Bu, müştərinin vaxt aşımına uğramasının qarşısını alır, beləliklə, müştəri həmişəlik tələyə düşəcək.

Məlumatlar kriptoqrafiya tətbiq edilməzdən əvvəl göndərildiyi üçün proqram olduqca sadədir. Heç bir şifrə tətbiq etməyə ehtiyac yoxdur və çoxlu protokolları dəstəkləyir.

Müəllif, kommunalın minimum resurs istehlak etməsini və maşında tamamilə fərq edilmədən işləməsini təmin etməyə çalışdı. Müasir antiviruslardan və digər “təhlükəsizlik sistemlərindən” fərqli olaraq, o, kompüterinizi yavaşlatmamalıdır. O, bir az daha hiyləgər proqram tətbiqi sayəsində həm trafik, həm də yaddaş istehlakını minimuma endirməyi bacardı. Əgər o, sadəcə olaraq yeni bir əlaqədə ayrıca bir proses başlatdısa, potensial təcavüzkarlar maşındakı resursları tükəndirmək üçün birdən çox əlaqə açaraq DDoS hücumuna başlaya bilər. Hər bir əlaqə üçün bir ip də ən yaxşı seçim deyil, çünki nüvə mövzuları idarə etmək üçün resursları sərf edəcək.

Buna görə Chris Wellons Endlessh üçün ən yüngül variantı seçdi: tək yivli server poll(2), burada tələdəki müştərilər kerneldəki yuva obyektini və Endlessh-də izləmə üçün başqa 78 baytı saymasaq, faktiki olaraq heç bir əlavə resurs istehlak etmirlər. Hər bir müştəri üçün qəbul və göndərmə buferləri ayırmaq məcburiyyətində qalmamaq üçün Endlessh birbaşa giriş yuvası açır və demək olar ki, bütün əməliyyat sisteminin TCP/IP yığınını keçərək TCP paketlərini birbaşa tərcümə edir. Gələn buferə ümumiyyətlə ehtiyac yoxdur, çünki daxil olan məlumatlar bizi maraqlandırmır.

Müəllif deyir ki, verilişi zamanı bilmirdi Python-un asycio və digər tarpitlərinin mövcudluğu haqqında. Əgər o, asycio haqqında bilsəydi, Python-da yardım proqramını cəmi 18 sətirdə həyata keçirə bilərdi:

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 tarpitlər yazmaq üçün idealdır. Məsələn, bu qarmaq Firefox, Chrome və ya HTTP serverinizə bir neçə saat qoşulmağa çalışan hər hansı digər müştərini donduracaq:

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 onlayn zorakılıqları cəzalandırmaq üçün əla vasitədir. Düzdür, əksinə, onların diqqətini müəyyən bir serverin qeyri-adi davranışına cəlb etmək riski var. Kimsə qisas haqqında düşünə bilər və IP-yə hədəflənmiş DDoS hücumu. Ancaq indiyə qədər belə hallar olmayıb və tarpitlər əla işləyir.

Qovşaqlar:
Python, İnformasiya təhlükəsizliyi, Proqram təminatı, Sistem idarəçiliyi

Tags:
SSH, Endlessh, tarpit, tarpit, trap, asycio
Daxil olan SSH əlaqələri üçün tələ (tarpit).

Heç kimə sirr deyil ki, İnternet çox düşmən mühitdir. Bir server qaldıran kimi o, dərhal kütləvi hücumlara və çoxsaylı skanlara məruz qalır. Misal üçün mühafizəçilərdən bal qabı bu zibil trafikinin miqyasını təxmin edə bilərsiniz. Əslində, orta serverdə trafikin 99%-i zərərli ola bilər.

Tarpit, daxil olan əlaqələri yavaşlatmaq üçün istifadə edilən tələ portudur. Bu porta üçüncü tərəf sistemi qoşularsa, siz əlaqəni tez bağlaya bilməyəcəksiniz. O, sistem resurslarını sərf etməli və əlaqə vaxtının bitməsini gözləməli və ya onu əl ilə dayandırmalı olacaq.

Çox vaxt tarpitlər qorunmaq üçün istifadə olunur. Texnika ilk dəfə kompüter qurdlarından qorunmaq üçün hazırlanmışdır. İndi o, ardıcıl olaraq bütün IP ünvanlarının geniş skan edilməsi ilə məşğul olan spam göndərənlərin və tədqiqatçıların həyatını məhv etmək üçün istifadə edilə bilər (Habré-də nümunələr: Австрия, Ukrayna).

Chris Wellons adlı sistem administratorlarından biri yəqin ki, bu biabırçılığı izləməkdən yorulub - və o, kiçik bir proqram yazdı. Sonsuz, daxil olan əlaqələri yavaşlatan SSH üçün tarpit. Proqram bir port açır (sınaq üçün standart port 2222-dir) və özünü SSH serveri kimi göstərir, lakin reallıqda o, imtina edənə qədər gələn müştəri ilə sonsuz əlaqə qurur. Bu, müştəri yıxılana qədər bir neçə gün və ya daha çox davam edə bilər.

Utilityin quraşdırılması:

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

Düzgün tətbiq olunan tarpit sizdən daha çox təcavüzkardan daha çox resurs alacaq. Ancaq bu, hətta resurs məsələsi deyil. Müəllif yazırproqramın asılılıq yaratdığını. Hazırda onun 27 müştərisi tələyə düşüb, onlardan bəziləri həftələrlə bağlıdır. Fəaliyyətin zirvəsində 1378 müştəri 20 saat ərzində tələyə düşdü!

İş rejimində Endlessh serveri xuliqanların kütləvi şəkildə döydüyü adi port 22-də quraşdırılmalıdır. Standart təhlükəsizlik tövsiyələri həmişə SSH-ni fərqli bir porta köçürməyi məsləhət görür ki, bu da jurnalların ölçüsünü dərhal böyüklük sırası ilə azaldır.

Chris Wellons deyir ki, onun proqramı spesifikasiyanın bir paraqrafından istifadə edir RFC 4253 SSH protokoluna. TCP bağlantısı qurulduqdan dərhal sonra, lakin kriptoqrafiya tətbiq edilməzdən əvvəl hər iki tərəf identifikasiya sətrini göndərməlidir. Və bir qeyd də var: "Server versiya sırasını göndərməzdən əvvəl digər məlumat sətirlərini göndərə bilər". Və məhdudiyyət yoxdur bu məlumatların həcminə görə hər bir sətirlə başlamaq lazımdır SSH-.

Bu, Endlessh proqramının etdiyi şeydir: o göndərir sonsuz təsadüfi yaradılan məlumat axını, RFC 4253-ə uyğundur, yəni autentifikasiyadan əvvəl göndərilir və hər sətir ilə başlayır SSH- və sətir sonu simvolu daxil olmaqla 255 simvoldan çox deyil. Ümumiyyətlə, hər şey standarta uyğundur.

Varsayılan olaraq, proqram paketlərin göndərilməsi arasında 10 saniyə gözləyir. Bu, müştərinin vaxt aşımına uğramasının qarşısını alır, beləliklə, müştəri həmişəlik tələyə düşəcək.

Məlumatlar kriptoqrafiya tətbiq edilməzdən əvvəl göndərildiyi üçün proqram olduqca sadədir. Heç bir şifrə tətbiq etməyə ehtiyac yoxdur və çoxlu protokolları dəstəkləyir.

Müəllif, kommunalın minimum resurs istehlak etməsini və maşında tamamilə fərq edilmədən işləməsini təmin etməyə çalışdı. Müasir antiviruslardan və digər “təhlükəsizlik sistemlərindən” fərqli olaraq, o, kompüterinizi yavaşlatmamalıdır. O, bir az daha hiyləgər proqram tətbiqi sayəsində həm trafik, həm də yaddaş istehlakını minimuma endirməyi bacardı. Əgər o, sadəcə olaraq yeni bir əlaqədə ayrıca bir proses başlatdısa, potensial təcavüzkarlar maşındakı resursları tükəndirmək üçün birdən çox əlaqə açaraq DDoS hücumuna başlaya bilər. Hər bir əlaqə üçün bir ip də ən yaxşı seçim deyil, çünki nüvə mövzuları idarə etmək üçün resursları sərf edəcək.

Buna görə Chris Wellons Endlessh üçün ən yüngül variantı seçdi: tək yivli server poll(2), burada tələdəki müştərilər kerneldəki yuva obyektini və Endlessh-də izləmə üçün başqa 78 baytı saymasaq, faktiki olaraq heç bir əlavə resurs istehlak etmirlər. Hər bir müştəri üçün qəbul və göndərmə buferləri ayırmaq məcburiyyətində qalmamaq üçün Endlessh birbaşa giriş yuvası açır və demək olar ki, bütün əməliyyat sisteminin TCP/IP yığınını keçərək TCP paketlərini birbaşa tərcümə edir. Gələn buferə ümumiyyətlə ehtiyac yoxdur, çünki daxil olan məlumatlar bizi maraqlandırmır.

Müəllif deyir ki, verilişi zamanı bilmirdi Python-un asycio və digər tarpitlərinin mövcudluğu haqqında. Əgər o, asycio haqqında bilsəydi, Python-da yardım proqramını cəmi 18 sətirdə həyata keçirə bilərdi:

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 tarpitlər yazmaq üçün idealdır. Məsələn, bu qarmaq Firefox, Chrome və ya HTTP serverinizə bir neçə saat qoşulmağa çalışan hər hansı digər müştərini donduracaq:

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 onlayn zorakılıqları cəzalandırmaq üçün əla vasitədir. Düzdür, əksinə, onların diqqətini müəyyən bir serverin qeyri-adi davranışına cəlb etmək riski var. Kimsə qisas haqqında düşünə bilər və IP-yə hədəflənmiş DDoS hücumu. Ancaq indiyə qədər belə hallar olmayıb və tarpitlər əla işləyir.

Daxil olan SSH əlaqələri üçün tələ (tarpit).

Mənbə: www.habr.com

Добавить комментарий