İnternetin çok düşmanca bir ortam olduğu bir sır değil. Bir sunucuyu yükselttiğiniz anda, anında büyük saldırılara ve çoklu taramalara maruz kalır. Örneğin
Tarpit, gelen bağlantıları yavaşlatmak için kullanılan bir tuzak bağlantı noktasıdır. Bu bağlantı noktasına üçüncü taraf bir sistem bağlanırsa bağlantıyı hızlı bir şekilde kapatamazsınız. Sistem kaynaklarını boşa harcaması ve bağlantının zaman aşımına uğramasını beklemesi veya bağlantıyı manuel olarak sonlandırması gerekecek.
Çoğu zaman, tarpitler koruma için kullanılır. Bu teknik ilk olarak bilgisayar solucanlarına karşı koruma sağlamak için geliştirildi. Ve artık tüm IP adreslerini arka arkaya geniş bir şekilde tarayan spam gönderenlerin ve araştırmacıların hayatlarını mahvetmek için kullanılabilir (Habré'deki örnekler:
Chris Wellons adındaki sistem yöneticilerinden biri görünüşe göre bu rezaleti izlemekten sıkılmış ve küçük bir program yazmış.
Yardımcı programın kurulumu:
$ make
$ ./endlessh &
$ ssh -p2222 localhost
Doğru şekilde uygulanan bir tarpit, saldırganın sizden daha fazla kaynak almasına neden olacaktır. Ama bu bir kaynak meselesi bile değil. Yazar
Çalışma modunda, Endlessh sunucusunun, holiganların topluca çaldığı normal 22 numaralı bağlantı noktasına kurulması gerekir. Standart güvenlik önerileri her zaman SSH'nin farklı bir bağlantı noktasına taşınmasını önerir; bu da günlüklerin boyutunu anında büyüklük sırasına göre azaltır.
Chris Wellons, programının spesifikasyonun bir paragrafından yararlandığını söylüyor SSH-
.
Endlessh programının yaptığı da tam olarak budur: gönderir бесконечный rastgele oluşturulmuş veri akışıRFC 4253'e uygundur, yani kimlik doğrulamadan önce gönderilir ve her satır şununla başlar: SSH-
ve satır sonu karakteri dahil 255 karakteri geçmez. Genel olarak her şey standarda uygundur.
Varsayılan olarak program, paketlerin gönderilmesi arasında 10 saniye bekler. Bu, istemcinin zaman aşımına uğramasını önler, böylece istemci sonsuza kadar tuzağa düşer.
Veriler kriptografi uygulanmadan önce gönderildiği için program son derece basittir. Herhangi bir şifre uygulamasına gerek yoktur ve birden fazla protokolü destekler.
Yazar, yardımcı programın minimum kaynak tüketmesini ve makinede tamamen fark edilmeden çalışmasını sağlamaya çalıştı. Modern antivirüslerin ve diğer "güvenlik sistemlerinin" aksine, bilgisayarınızı yavaşlatmamalıdır. Biraz daha kurnaz bir yazılım uygulaması sayesinde hem trafiği hem de bellek tüketimini en aza indirmeyi başardı. Yeni bir bağlantıda ayrı bir işlem başlatırsa potansiyel saldırganlar, makinedeki kaynakları tüketmek için birden fazla bağlantı açarak bir DDoS saldırısı başlatabilir. Bağlantı başına bir iş parçacığı da en iyi seçenek değildir çünkü çekirdek, iş parçacıklarını yöneten kaynakları boşa harcar.
Bu nedenle Chris Wellons, Endlessh için en hafif seçeneği seçti: tek iş parçacıklı bir sunucu poll(2)
Tuzaktaki istemciler, çekirdekteki soket nesnesini ve Endlessh'te izleme için diğer 78 baytı saymazsak, neredeyse hiç ekstra kaynak tüketmez. Endlessh, her istemci için alma ve gönderme arabellekleri ayırma zorunluluğunu ortadan kaldırmak için doğrudan erişim soketi açar ve neredeyse tüm işletim sistemi TCP/IP yığınını atlayarak TCP paketlerini doğrudan çevirir. Gelen veriyle ilgilenmiyoruz çünkü gelen tampona hiç ihtiyaç yok.
Yazar, programı sırasında şunu söylüyor:
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 tarpit yazmak için idealdir. Örneğin, bu kanca Firefox'u, Chrome'u veya HTTP sunucunuza bağlanmaya çalışan herhangi bir istemciyi saatlerce donduracaktır:
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, çevrimiçi zorbaları cezalandırmak için harika bir araçtır. Doğru, tam tersine, dikkatlerini belirli bir sunucunun olağandışı davranışına çekme riski var. Birisi
Merkezler:
Python, Bilgi güvenliği, Yazılım, Sistem yönetimi
Etiketler:
SSH, Endlessh, tarpit, tarpit, trap, asycio
Gelen SSH bağlantıları için tuzak (tarpit)
İnternetin çok düşmanca bir ortam olduğu bir sır değil. Bir sunucuyu yükselttiğiniz anda, anında büyük saldırılara ve çoklu taramalara maruz kalır. Örneğin
Tarpit, gelen bağlantıları yavaşlatmak için kullanılan bir tuzak bağlantı noktasıdır. Bu bağlantı noktasına üçüncü taraf bir sistem bağlanırsa bağlantıyı hızlı bir şekilde kapatamazsınız. Sistem kaynaklarını boşa harcaması ve bağlantının zaman aşımına uğramasını beklemesi veya bağlantıyı manuel olarak sonlandırması gerekecek.
Çoğu zaman, tarpitler koruma için kullanılır. Bu teknik ilk olarak bilgisayar solucanlarına karşı koruma sağlamak için geliştirildi. Ve artık tüm IP adreslerini arka arkaya geniş bir şekilde tarayan spam gönderenlerin ve araştırmacıların hayatlarını mahvetmek için kullanılabilir (Habré'deki örnekler:
Chris Wellons adındaki sistem yöneticilerinden biri görünüşe göre bu rezaleti izlemekten sıkılmış ve küçük bir program yazmış.
Yardımcı programın kurulumu:
$ make
$ ./endlessh &
$ ssh -p2222 localhost
Doğru şekilde uygulanan bir tarpit, saldırganın sizden daha fazla kaynak almasına neden olacaktır. Ama bu bir kaynak meselesi bile değil. Yazar
Çalışma modunda, Endlessh sunucusunun, holiganların topluca çaldığı normal 22 numaralı bağlantı noktasına kurulması gerekir. Standart güvenlik önerileri her zaman SSH'nin farklı bir bağlantı noktasına taşınmasını önerir; bu da günlüklerin boyutunu anında büyüklük sırasına göre azaltır.
Chris Wellons, programının spesifikasyonun bir paragrafından yararlandığını söylüyor SSH-
.
Endlessh programının yaptığı da tam olarak budur: gönderir бесконечный rastgele oluşturulmuş veri akışıRFC 4253'e uygundur, yani kimlik doğrulamadan önce gönderilir ve her satır şununla başlar: SSH-
ve satır sonu karakteri dahil 255 karakteri geçmez. Genel olarak her şey standarda uygundur.
Varsayılan olarak program, paketlerin gönderilmesi arasında 10 saniye bekler. Bu, istemcinin zaman aşımına uğramasını önler, böylece istemci sonsuza kadar tuzağa düşer.
Veriler kriptografi uygulanmadan önce gönderildiği için program son derece basittir. Herhangi bir şifre uygulamasına gerek yoktur ve birden fazla protokolü destekler.
Yazar, yardımcı programın minimum kaynak tüketmesini ve makinede tamamen fark edilmeden çalışmasını sağlamaya çalıştı. Modern antivirüslerin ve diğer "güvenlik sistemlerinin" aksine, bilgisayarınızı yavaşlatmamalıdır. Biraz daha kurnaz bir yazılım uygulaması sayesinde hem trafiği hem de bellek tüketimini en aza indirmeyi başardı. Yeni bir bağlantıda ayrı bir işlem başlatırsa potansiyel saldırganlar, makinedeki kaynakları tüketmek için birden fazla bağlantı açarak bir DDoS saldırısı başlatabilir. Bağlantı başına bir iş parçacığı da en iyi seçenek değildir çünkü çekirdek, iş parçacıklarını yöneten kaynakları boşa harcar.
Bu nedenle Chris Wellons, Endlessh için en hafif seçeneği seçti: tek iş parçacıklı bir sunucu poll(2)
Tuzaktaki istemciler, çekirdekteki soket nesnesini ve Endlessh'te izleme için diğer 78 baytı saymazsak, neredeyse hiç ekstra kaynak tüketmez. Endlessh, her istemci için alma ve gönderme arabellekleri ayırma zorunluluğunu ortadan kaldırmak için doğrudan erişim soketi açar ve neredeyse tüm işletim sistemi TCP/IP yığınını atlayarak TCP paketlerini doğrudan çevirir. Gelen veriyle ilgilenmiyoruz çünkü gelen tampona hiç ihtiyaç yok.
Yazar, programı sırasında şunu söylüyor:
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 tarpit yazmak için idealdir. Örneğin, bu kanca Firefox'u, Chrome'u veya HTTP sunucunuza bağlanmaya çalışan herhangi bir istemciyi saatlerce donduracaktır:
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, çevrimiçi zorbaları cezalandırmak için harika bir araçtır. Doğru, tam tersine, dikkatlerini belirli bir sunucunun olağandışı davranışına çekme riski var. Birisi
Kaynak: habr.com