Nav noslÄpums, ka internets ir ļoti naidÄ«ga vide. TiklÄ«dz paceļat serveri, tas uzreiz tiek pakļauts masveida uzbrukumiem un vairÄkkÄrtÄjai skenÄÅ”anai. PiemÄram
Tarpit ir slazdoÅ”anas ports, ko izmanto, lai palÄninÄtu ienÄkoÅ”os savienojumus. Ja Å”im portam pievienojas treÅ”Äs puses sistÄma, savienojumu nevarÄs Ätri aizvÄrt. ViÅai bÅ«s jÄtÄrÄ savi sistÄmas resursi un jÄgaida, lÄ«dz beidzas savienojuma taimauts, vai arÄ« tas manuÄli jÄpÄrtrauc.
VisbiežÄk aizsardzÄ«bai izmanto tarpitus. PaÅÄmiens vispirms tika izstrÄdÄts, lai aizsargÄtu pret datoru tÄrpiem. Un tagad to var izmantot, lai sabojÄtu surogÄtpasta izplatÄ«tÄju un pÄtnieku dzÄ«vi, kuri nodarbojas ar visu IP adreÅ”u plaÅ”u skenÄÅ”anu pÄc kÄrtas (piemÄri par HabrĆ©:
Vienam no sistÄmas administratoriem, vÄrdÄ Kriss Velonss, acÄ«mredzot apnika skatÄ«ties Å”o apkaunojumu, un viÅÅ” uzrakstÄ«ja nelielu programmu
LietderÄ«bas uzstÄdÄ«Å”ana:
$ make
$ ./endlessh &
$ ssh -p2222 localhost
Pareizi ieviests tarpit prasÄ«s vairÄk resursu no uzbrucÄja nekÄ no jums. Bet tas nav pat jautÄjums par resursiem. Autors
DarbÄ«bas režīmÄ Endlessh serveris jÄinstalÄ parastajÄ 22. portÄ, kur masveidÄ klauvÄ huligÄni. Standarta droŔības ieteikumi vienmÄr iesaka pÄrvietot SSH uz citu portu, kas nekavÄjoties samazina žurnÄlu lielumu par lielumu.
Kriss Velons saka, ka viÅa programma izmanto vienu specifikÄcijas punktu SSH-
.
Tas ir tieÅ”i tas, ko dara Endlessh programma: tÄ sÅ«ta bezgalÄ«gs nejauÅ”i Ä£enerÄtu datu plÅ«sma, kas atbilst RFC 4253, tas ir, nosÅ«ta pirms autentifikÄcijas, un katra rinda sÄkas ar SSH-
un nepÄrsniedz 255 rakstzÄ«mes, ieskaitot rindiÅas beigu rakstzÄ«mi. KopumÄ viss ir pÄc standarta.
PÄc noklusÄjuma programma gaida 10 sekundes starp pakeÅ”u nosÅ«tÄ«Å”anu. Tas novÄrÅ” klienta taimautu, tÄpÄc klients bÅ«s iesprostots uz visiem laikiem.
TÄ kÄ dati tiek nosÅ«tÄ«ti pirms kriptogrÄfijas piemÄroÅ”anas, programma ir ļoti vienkÄrÅ”a. Tam nav jÄievieÅ” nekÄdi Å”ifri, un tas atbalsta vairÄkus protokolus.
Autore centÄs nodroÅ”inÄt, lai utilÄ«ta patÄrÄ minimÄlu resursu un strÄdÄ pilnÄ«gi nepamanÄ«ti uz maŔīnas. AtŔķirÄ«bÄ no mÅ«sdienu antivÄ«rusiem un citÄm "droŔības sistÄmÄm", tam nevajadzÄtu palÄninÄt datora darbÄ«bu. ViÅam izdevÄs samazinÄt gan trafika, gan atmiÅas patÄriÅu, pateicoties nedaudz viltÄ«gÄkai programmatÅ«ras ievieÅ”anai. Ja tas vienkÄrÅ”i uzsÄktu atseviŔķu procesu jaunam savienojumam, potenciÄlie uzbrucÄji varÄtu uzsÄkt DDoS uzbrukumu, atverot vairÄkus savienojumus, lai iztÄrÄtu iekÄrtas resursus. Viens pavediens vienam savienojumam arÄ« nav labÄkais risinÄjums, jo kodols tÄrÄs resursus, pÄrvaldot pavedienus.
TÄpÄc Kriss Velons izvÄlÄjÄs visvieglÄko Endlessh opciju: viena pavediena serveri. poll(2)
, kur slazdÄ esoÅ”ie klienti praktiski nepatÄrÄ nekÄdus papildu resursus, neskaitot ligzdas objektu kodolÄ un vÄl 78 baitus izsekoÅ”anai Endlessh. Lai izvairÄ«tos no katra klienta saÅemÅ”anas un nosÅ«tÄ«Å”anas buferu pieŔķirÅ”anas, Endlessh atver tieÅ”Äs piekļuves ligzdu un tieÅ”i tulko TCP paketes, apejot gandrÄ«z visu operÄtÄjsistÄmas TCP/IP steku. IenÄkoÅ”ais buferis vispÄr nav vajadzÄ«gs, jo mÅ«s neinteresÄ ienÄkoÅ”ie dati.
Autors saka, ka viÅa programmas laikÄ
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 ir ideÄli piemÄrots tarpitu rakstÄ«Å”anai. PiemÄram, Å”is ÄÄ·is iesaldÄs Firefox, Chrome vai jebkuru citu klientu, kas daudzas stundas mÄÄ£ina izveidot savienojumu ar jÅ«su HTTP serveri:
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 ir lielisks rÄ«ks tieÅ”saistes iebiedÄtÄju sodÄ«Å”anai. Tiesa, pastÄv zinÄms risks, gluži pretÄji, pievÄrst viÅu uzmanÄ«bu konkrÄta servera neparastajai uzvedÄ«bai. KÄds
Centrmezgli:
Python, InformÄcijas droŔība, ProgrammatÅ«ra, SistÄmu administrÄÅ”ana
Tags:
SSH, Endlessh, tarpit, tarpit, trap, asycio
Slazds (tarpit) ienÄkoÅ”ajiem SSH savienojumiem
Nav noslÄpums, ka internets ir ļoti naidÄ«ga vide. TiklÄ«dz paceļat serveri, tas uzreiz tiek pakļauts masveida uzbrukumiem un vairÄkkÄrtÄjai skenÄÅ”anai. PiemÄram
Tarpit ir slazdoÅ”anas ports, ko izmanto, lai palÄninÄtu ienÄkoÅ”os savienojumus. Ja Å”im portam pievienojas treÅ”Äs puses sistÄma, savienojumu nevarÄs Ätri aizvÄrt. ViÅai bÅ«s jÄtÄrÄ savi sistÄmas resursi un jÄgaida, lÄ«dz beidzas savienojuma taimauts, vai arÄ« tas manuÄli jÄpÄrtrauc.
VisbiežÄk aizsardzÄ«bai izmanto tarpitus. PaÅÄmiens vispirms tika izstrÄdÄts, lai aizsargÄtu pret datoru tÄrpiem. Un tagad to var izmantot, lai sabojÄtu surogÄtpasta izplatÄ«tÄju un pÄtnieku dzÄ«vi, kuri nodarbojas ar visu IP adreÅ”u plaÅ”u skenÄÅ”anu pÄc kÄrtas (piemÄri par HabrĆ©:
Vienam no sistÄmas administratoriem, vÄrdÄ Kriss Velonss, acÄ«mredzot apnika skatÄ«ties Å”o apkaunojumu, un viÅÅ” uzrakstÄ«ja nelielu programmu
LietderÄ«bas uzstÄdÄ«Å”ana:
$ make
$ ./endlessh &
$ ssh -p2222 localhost
Pareizi ieviests tarpit prasÄ«s vairÄk resursu no uzbrucÄja nekÄ no jums. Bet tas nav pat jautÄjums par resursiem. Autors
DarbÄ«bas režīmÄ Endlessh serveris jÄinstalÄ parastajÄ 22. portÄ, kur masveidÄ klauvÄ huligÄni. Standarta droŔības ieteikumi vienmÄr iesaka pÄrvietot SSH uz citu portu, kas nekavÄjoties samazina žurnÄlu lielumu par lielumu.
Kriss Velons saka, ka viÅa programma izmanto vienu specifikÄcijas punktu SSH-
.
Tas ir tieÅ”i tas, ko dara Endlessh programma: tÄ sÅ«ta bezgalÄ«gs nejauÅ”i Ä£enerÄtu datu plÅ«sma, kas atbilst RFC 4253, tas ir, nosÅ«ta pirms autentifikÄcijas, un katra rinda sÄkas ar SSH-
un nepÄrsniedz 255 rakstzÄ«mes, ieskaitot rindiÅas beigu rakstzÄ«mi. KopumÄ viss ir pÄc standarta.
PÄc noklusÄjuma programma gaida 10 sekundes starp pakeÅ”u nosÅ«tÄ«Å”anu. Tas novÄrÅ” klienta taimautu, tÄpÄc klients bÅ«s iesprostots uz visiem laikiem.
TÄ kÄ dati tiek nosÅ«tÄ«ti pirms kriptogrÄfijas piemÄroÅ”anas, programma ir ļoti vienkÄrÅ”a. Tam nav jÄievieÅ” nekÄdi Å”ifri, un tas atbalsta vairÄkus protokolus.
Autore centÄs nodroÅ”inÄt, lai utilÄ«ta patÄrÄ minimÄlu resursu un strÄdÄ pilnÄ«gi nepamanÄ«ti uz maŔīnas. AtŔķirÄ«bÄ no mÅ«sdienu antivÄ«rusiem un citÄm "droŔības sistÄmÄm", tam nevajadzÄtu palÄninÄt datora darbÄ«bu. ViÅam izdevÄs samazinÄt gan trafika, gan atmiÅas patÄriÅu, pateicoties nedaudz viltÄ«gÄkai programmatÅ«ras ievieÅ”anai. Ja tas vienkÄrÅ”i uzsÄktu atseviŔķu procesu jaunam savienojumam, potenciÄlie uzbrucÄji varÄtu uzsÄkt DDoS uzbrukumu, atverot vairÄkus savienojumus, lai iztÄrÄtu iekÄrtas resursus. Viens pavediens vienam savienojumam arÄ« nav labÄkais risinÄjums, jo kodols tÄrÄs resursus, pÄrvaldot pavedienus.
TÄpÄc Kriss Velons izvÄlÄjÄs visvieglÄko Endlessh opciju: viena pavediena serveri. poll(2)
, kur slazdÄ esoÅ”ie klienti praktiski nepatÄrÄ nekÄdus papildu resursus, neskaitot ligzdas objektu kodolÄ un vÄl 78 baitus izsekoÅ”anai Endlessh. Lai izvairÄ«tos no katra klienta saÅemÅ”anas un nosÅ«tÄ«Å”anas buferu pieŔķirÅ”anas, Endlessh atver tieÅ”Äs piekļuves ligzdu un tieÅ”i tulko TCP paketes, apejot gandrÄ«z visu operÄtÄjsistÄmas TCP/IP steku. IenÄkoÅ”ais buferis vispÄr nav vajadzÄ«gs, jo mÅ«s neinteresÄ ienÄkoÅ”ie dati.
Autors saka, ka viÅa programmas laikÄ
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 ir ideÄli piemÄrots tarpitu rakstÄ«Å”anai. PiemÄram, Å”is ÄÄ·is iesaldÄs Firefox, Chrome vai jebkuru citu klientu, kas daudzas stundas mÄÄ£ina izveidot savienojumu ar jÅ«su HTTP serveri:
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 ir lielisks rÄ«ks tieÅ”saistes iebiedÄtÄju sodÄ«Å”anai. Tiesa, pastÄv zinÄms risks, gluži pretÄji, pievÄrst viÅu uzmanÄ«bu konkrÄta servera neparastajai uzvedÄ«bai. KÄds
Avots: www.habr.com