Hindi lihim na ang Internet ay isang napakasamang kapaligiran. Sa sandaling itaas mo ang isang server, agad itong sasailalim sa napakalaking pag-atake at maraming pag-scan. Halimbawa
Ang tarpit ay isang trap port na ginagamit upang pabagalin ang mga papasok na koneksyon. Kung kumokonekta ang isang third-party system sa port na ito, hindi mo magagawang mabilis na isara ang koneksyon. Kakailanganin niyang sayangin ang kanyang mga mapagkukunan ng system at maghintay hanggang sa mag-timeout ang koneksyon, o manu-manong wakasan ito.
Kadalasan, ang mga tarpit ay ginagamit para sa proteksyon. Ang pamamaraan ay unang binuo upang maprotektahan laban sa mga worm sa computer. At ngayon ay magagamit na ito upang sirain ang buhay ng mga spammer at mananaliksik na nakikibahagi sa malawak na pag-scan ng lahat ng magkakasunod na IP address (mga halimbawa sa HabrΓ©:
Ang isa sa mga tagapangasiwa ng system na nagngangalang Chris Wellons ay tila napagod sa panonood ng kahihiyan na ito - at nagsulat siya ng isang maliit na programa
Pag-install ng utility:
$ make
$ ./endlessh &
$ ssh -p2222 localhost
Ang wastong ipinatupad na tarpit ay kukuha ng mas maraming mapagkukunan mula sa umaatake kaysa sa iyo. Ngunit ito ay hindi kahit na isang bagay ng mga mapagkukunan. May-akda
Sa operating mode, kailangang mai-install ang Endlessh server sa karaniwang port 22, kung saan kumakatok nang maramihan ang mga hooligan. Palaging pinapayuhan ng mga karaniwang rekomendasyon sa seguridad ang paglipat ng SSH sa ibang port, na agad na binabawasan ang laki ng mga log ayon sa pagkakasunud-sunod ng magnitude.
Sinabi ni Chris Wellons na sinasamantala ng kanyang programa ang isang talata ng detalye SSH-
.
Ito mismo ang ginagawa ng Endlessh program: ito nagpapadala walang katapusang stream ng random na nabuong data, na sumusunod sa RFC 4253, iyon ay, ipadala bago ang pagpapatunay, at ang bawat linya ay nagsisimula sa SSH-
at hindi lalampas sa 255 character, kasama ang line ending character. Sa pangkalahatan, ang lahat ay ayon sa pamantayan.
Bilang default, ang programa ay naghihintay ng 10 segundo sa pagitan ng pagpapadala ng mga packet. Pinipigilan nito ang kliyente na ma-time out, kaya ang kliyente ay ma-trap nang tuluyan.
Dahil ang data ay ipinadala bago ilapat ang cryptography, ang programa ay napakasimple. Hindi nito kailangang magpatupad ng anumang mga cipher at sumusuporta sa maramihang mga protocol.
Sinubukan ng may-akda na tiyakin na ang utility ay kumonsumo ng isang minimum na mga mapagkukunan at gumagana nang ganap na hindi napapansin sa makina. Hindi tulad ng mga modernong antivirus at iba pang βsecurity system,β hindi nito dapat pabagalin ang iyong computer. Nagawa niyang bawasan ang parehong pagkonsumo ng trapiko at memorya dahil sa bahagyang mas tusong pagpapatupad ng software. Kung naglunsad lang ito ng hiwalay na proseso sa isang bagong koneksyon, ang mga potensyal na umaatake ay maaaring maglunsad ng pag-atake ng DDoS sa pamamagitan ng pagbubukas ng maraming koneksyon upang maubos ang mga mapagkukunan sa makina. Ang isang thread sa bawat koneksyon ay hindi rin ang pinakamahusay na pagpipilian, dahil ang kernel ay mag-aaksaya ng mga mapagkukunan sa pamamahala ng mga thread.
Iyon ang dahilan kung bakit pinili ni Chris Wellons ang pinaka magaan na opsyon para sa Endlessh: isang single-threaded server poll(2)
, kung saan ang mga kliyente sa bitag ay halos walang dagdag na mapagkukunan, hindi binibilang ang socket object sa kernel at isa pang 78 byte para sa pagsubaybay sa Endlessh. Upang maiwasang maglaan ng pagtanggap at pagpapadala ng mga buffer para sa bawat kliyente, ang Endlessh ay nagbubukas ng direktang access socket at direktang nagsasalin ng mga TCP packet, na lumalampas sa halos buong operating system na TCP/IP stack. Ang papasok na buffer ay hindi kailangan, dahil hindi kami interesado sa papasok na data.
Sinabi ng may-akda na sa oras ng kanyang programa
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())
Ang Asyncio ay mainam para sa pagsulat ng mga tarpit. Halimbawa, i-freeze ng hook na ito ang Firefox, Chrome, o anumang iba pang kliyente na sumusubok na kumonekta sa iyong HTTP server sa loob ng maraming oras:
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())
Ang Tarpit ay isang mahusay na tool para sa pagpaparusa sa mga online na nananakot. Totoo, may ilang panganib, sa kabaligtaran, na maakit ang kanilang pansin sa hindi pangkaraniwang pag-uugali ng isang partikular na server. Isang tao
Mga Hub:
Python, Seguridad ng impormasyon, Software, Pangangasiwa ng system
Mga Tag:
SSH, Endlessh, tarpit, tarpit, trap, asycio
Trap (tarpit) para sa mga papasok na koneksyon sa SSH
Hindi lihim na ang Internet ay isang napakasamang kapaligiran. Sa sandaling itaas mo ang isang server, agad itong sasailalim sa napakalaking pag-atake at maraming pag-scan. Halimbawa
Ang tarpit ay isang trap port na ginagamit upang pabagalin ang mga papasok na koneksyon. Kung kumokonekta ang isang third-party system sa port na ito, hindi mo magagawang mabilis na isara ang koneksyon. Kakailanganin niyang sayangin ang kanyang mga mapagkukunan ng system at maghintay hanggang sa mag-timeout ang koneksyon, o manu-manong wakasan ito.
Kadalasan, ang mga tarpit ay ginagamit para sa proteksyon. Ang pamamaraan ay unang binuo upang maprotektahan laban sa mga worm sa computer. At ngayon ay magagamit na ito upang sirain ang buhay ng mga spammer at mananaliksik na nakikibahagi sa malawak na pag-scan ng lahat ng magkakasunod na IP address (mga halimbawa sa HabrΓ©:
Ang isa sa mga tagapangasiwa ng system na nagngangalang Chris Wellons ay tila napagod sa panonood ng kahihiyan na ito - at nagsulat siya ng isang maliit na programa
Pag-install ng utility:
$ make
$ ./endlessh &
$ ssh -p2222 localhost
Ang wastong ipinatupad na tarpit ay kukuha ng mas maraming mapagkukunan mula sa umaatake kaysa sa iyo. Ngunit ito ay hindi kahit na isang bagay ng mga mapagkukunan. May-akda
Sa operating mode, kailangang mai-install ang Endlessh server sa karaniwang port 22, kung saan kumakatok nang maramihan ang mga hooligan. Palaging pinapayuhan ng mga karaniwang rekomendasyon sa seguridad ang paglipat ng SSH sa ibang port, na agad na binabawasan ang laki ng mga log ayon sa pagkakasunud-sunod ng magnitude.
Sinabi ni Chris Wellons na sinasamantala ng kanyang programa ang isang talata ng detalye SSH-
.
Ito mismo ang ginagawa ng Endlessh program: ito nagpapadala walang katapusang stream ng random na nabuong data, na sumusunod sa RFC 4253, iyon ay, ipadala bago ang pagpapatunay, at ang bawat linya ay nagsisimula sa SSH-
at hindi lalampas sa 255 character, kasama ang line ending character. Sa pangkalahatan, ang lahat ay ayon sa pamantayan.
Bilang default, ang programa ay naghihintay ng 10 segundo sa pagitan ng pagpapadala ng mga packet. Pinipigilan nito ang kliyente na ma-time out, kaya ang kliyente ay ma-trap nang tuluyan.
Dahil ang data ay ipinadala bago ilapat ang cryptography, ang programa ay napakasimple. Hindi nito kailangang magpatupad ng anumang mga cipher at sumusuporta sa maramihang mga protocol.
Sinubukan ng may-akda na tiyakin na ang utility ay kumonsumo ng isang minimum na mga mapagkukunan at gumagana nang ganap na hindi napapansin sa makina. Hindi tulad ng mga modernong antivirus at iba pang βsecurity system,β hindi nito dapat pabagalin ang iyong computer. Nagawa niyang bawasan ang parehong pagkonsumo ng trapiko at memorya dahil sa bahagyang mas tusong pagpapatupad ng software. Kung naglunsad lang ito ng hiwalay na proseso sa isang bagong koneksyon, ang mga potensyal na umaatake ay maaaring maglunsad ng pag-atake ng DDoS sa pamamagitan ng pagbubukas ng maraming koneksyon upang maubos ang mga mapagkukunan sa makina. Ang isang thread sa bawat koneksyon ay hindi rin ang pinakamahusay na pagpipilian, dahil ang kernel ay mag-aaksaya ng mga mapagkukunan sa pamamahala ng mga thread.
Iyon ang dahilan kung bakit pinili ni Chris Wellons ang pinaka magaan na opsyon para sa Endlessh: isang single-threaded server poll(2)
, kung saan ang mga kliyente sa bitag ay halos walang dagdag na mapagkukunan, hindi binibilang ang socket object sa kernel at isa pang 78 byte para sa pagsubaybay sa Endlessh. Upang maiwasang maglaan ng pagtanggap at pagpapadala ng mga buffer para sa bawat kliyente, ang Endlessh ay nagbubukas ng direktang access socket at direktang nagsasalin ng mga TCP packet, na lumalampas sa halos buong operating system na TCP/IP stack. Ang papasok na buffer ay hindi kailangan, dahil hindi kami interesado sa papasok na data.
Sinabi ng may-akda na sa oras ng kanyang programa
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())
Ang Asyncio ay mainam para sa pagsulat ng mga tarpit. Halimbawa, i-freeze ng hook na ito ang Firefox, Chrome, o anumang iba pang kliyente na sumusubok na kumonekta sa iyong HTTP server sa loob ng maraming oras:
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())
Ang Tarpit ay isang mahusay na tool para sa pagpaparusa sa mga online na nananakot. Totoo, may ilang panganib, sa kabaligtaran, na maakit ang kanilang pansin sa hindi pangkaraniwang pag-uugali ng isang partikular na server. Isang tao
Pinagmulan: www.habr.com