ఇంటర్నెట్ చాలా ప్రతికూల వాతావరణం అని రహస్యం కాదు. మీరు సర్వర్ను పెంచిన వెంటనే, అది తక్షణమే భారీ దాడులు మరియు బహుళ స్కాన్లకు లోబడి ఉంటుంది. ఉదాహరణకి
టార్పిట్ అనేది ఇన్కమింగ్ కనెక్షన్లను నెమ్మదించడానికి ఉపయోగించే ట్రాప్ పోర్ట్. మూడవ పక్షం సిస్టమ్ ఈ పోర్ట్కు కనెక్ట్ చేయబడితే, మీరు కనెక్షన్ని త్వరగా మూసివేయలేరు. ఆమె తన సిస్టమ్ వనరులను వృధా చేయాలి మరియు కనెక్షన్ గడువు ముగిసే వరకు వేచి ఉండాలి లేదా దానిని మాన్యువల్గా ముగించాలి.
చాలా తరచుగా, టార్పిట్లను రక్షణ కోసం ఉపయోగిస్తారు. కంప్యూటర్ పురుగుల నుండి రక్షించడానికి సాంకేతికత మొదట అభివృద్ధి చేయబడింది. మరియు ఇప్పుడు అది వరుసగా అన్ని IP చిరునామాల విస్తృత స్కానింగ్లో నిమగ్నమై ఉన్న స్పామర్లు మరియు పరిశోధకుల జీవితాలను నాశనం చేయడానికి ఉపయోగించవచ్చు (హబ్రేలో ఉదాహరణలు:
క్రిస్ వెల్లన్స్ అనే సిస్టమ్ అడ్మినిస్ట్రేటర్లలో ఒకరు ఈ అవమానాన్ని చూసి విసిగిపోయారు - మరియు అతను ఒక చిన్న ప్రోగ్రామ్ రాశాడు
యుటిలిటీ యొక్క సంస్థాపన:
$ make
$ ./endlessh &
$ ssh -p2222 localhost
సరిగ్గా అమలు చేయబడిన టార్పిట్ మీ నుండి కంటే దాడి చేసేవారి నుండి ఎక్కువ వనరులను తీసుకుంటుంది. కానీ ఇది వనరుల విషయం కూడా కాదు. రచయిత
ఆపరేటింగ్ మోడ్లో, ఎండ్లెస్ సర్వర్ సాధారణ పోర్ట్ 22లో ఇన్స్టాల్ చేయబడాలి, ఇక్కడ పోకిరీలు మూకుమ్మడిగా కొట్టుకుంటారు. ప్రామాణిక భద్రతా సిఫార్సులు ఎల్లప్పుడూ SSHని వేరొక పోర్ట్కి తరలించమని సలహా ఇస్తాయి, ఇది లాగ్ల పరిమాణాన్ని మాగ్నిట్యూడ్ క్రమం ద్వారా వెంటనే తగ్గిస్తుంది.
క్రిస్ వెల్లన్స్ తన ప్రోగ్రామ్ స్పెసిఫికేషన్లోని ఒక పేరాని ఉపయోగించుకుందని చెప్పారు SSH-
.
ఇది ఎండ్లెస్ ప్రోగ్రామ్ చేస్తుంది: ఇది పంపుతుంది అంతులేని యాదృచ్ఛికంగా ఉత్పత్తి చేయబడిన డేటా యొక్క స్ట్రీమ్, ఇది RFC 4253కి అనుగుణంగా ఉంటుంది, అంటే, ప్రమాణీకరణకు ముందు పంపండి మరియు ప్రతి పంక్తి దీనితో ప్రారంభమవుతుంది SSH-
మరియు పంక్తి ముగింపు అక్షరంతో సహా 255 అక్షరాలను మించకూడదు. సాధారణంగా, ప్రతిదీ ప్రమాణం ప్రకారం ఉంటుంది.
డిఫాల్ట్గా, ప్రోగ్రామ్ ప్యాకెట్లను పంపే మధ్య 10 సెకన్లు వేచి ఉంటుంది. ఇది క్లయింట్ సమయం ముగియకుండా నిరోధిస్తుంది, కాబట్టి క్లయింట్ ఎప్పటికీ చిక్కుకుపోతాడు.
క్రిప్టోగ్రఫీని వర్తింపజేయడానికి ముందు డేటా పంపబడినందున, ప్రోగ్రామ్ చాలా సులభం. ఇది ఏ సాంకేతికలిపిని అమలు చేయవలసిన అవసరం లేదు మరియు బహుళ ప్రోటోకాల్లకు మద్దతు ఇస్తుంది.
యుటిలిటీ కనీస వనరులను వినియోగిస్తుందని మరియు మెషీన్లో పూర్తిగా గుర్తించబడకుండా పని చేస్తుందని నిర్ధారించడానికి రచయిత ప్రయత్నించారు. ఆధునిక యాంటీవైరస్లు మరియు ఇతర "సెక్యూరిటీ సిస్టమ్స్" వలె కాకుండా, ఇది మీ కంప్యూటర్ను వేగాన్ని తగ్గించకూడదు. అతను కొంచెం ఎక్కువ మోసపూరిత సాఫ్ట్వేర్ అమలు కారణంగా ట్రాఫిక్ మరియు మెమరీ వినియోగం రెండింటినీ తగ్గించగలిగాడు. ఇది కొత్త కనెక్షన్పై ప్రత్యేక ప్రక్రియను ప్రారంభించినట్లయితే, సంభావ్య దాడి చేసేవారు మెషీన్లోని వనరులను ఎగ్జాస్ట్ చేయడానికి బహుళ కనెక్షన్లను తెరవడం ద్వారా DDoS దాడిని ప్రారంభించవచ్చు. ప్రతి కనెక్షన్కు ఒక థ్రెడ్ ఉత్తమ ఎంపిక కాదు, ఎందుకంటే కెర్నల్ థ్రెడ్లను నిర్వహించే వనరులను వృధా చేస్తుంది.
అందుకే క్రిస్ వెల్లన్స్ ఎండ్లెస్కు అత్యంత తేలికైన ఎంపికను ఎంచుకున్నారు: ఒకే-థ్రెడ్ సర్వర్ poll(2)
, ట్రాప్లోని క్లయింట్లు వాస్తవంగా అదనపు వనరులను వినియోగించరు, కెర్నల్లోని సాకెట్ వస్తువును మరియు ఎండ్లెస్లో ట్రాకింగ్ కోసం మరో 78 బైట్లను లెక్కించరు. ప్రతి క్లయింట్ కోసం రిసీవ్ మరియు పంపే బఫర్లను కేటాయించకుండా ఉండటానికి, ఎండ్లెస్ష్ డైరెక్ట్ యాక్సెస్ సాకెట్ను తెరుస్తుంది మరియు దాదాపు మొత్తం ఆపరేటింగ్ సిస్టమ్ TCP/IP స్టాక్ను దాటవేస్తూ TCP ప్యాకెట్లను నేరుగా అనువదిస్తుంది. ఇన్కమింగ్ బఫర్ అస్సలు అవసరం లేదు, ఎందుకంటే ఇన్కమింగ్ డేటాపై మాకు ఆసక్తి లేదు.
రచయిత తన ప్రోగ్రామ్ సమయంలో చెప్పారు
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())
టార్పిట్లను వ్రాయడానికి అసిన్సియో అనువైనది. ఉదాహరణకు, ఈ హుక్ Firefox, Chrome లేదా మీ HTTP సర్వర్కి కనెక్ట్ చేయడానికి ప్రయత్నిస్తున్న ఏదైనా ఇతర క్లయింట్ చాలా గంటలపాటు స్తంభింపజేస్తుంది:
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())
ఆన్లైన్ బెదిరింపులను శిక్షించడానికి టార్పిట్ ఒక గొప్ప సాధనం. నిజమే, ఒక నిర్దిష్ట సర్వర్ యొక్క అసాధారణ ప్రవర్తనకు వారి దృష్టిని ఆకర్షించే కొంత ప్రమాదం ఉంది. ఎవరైనా
కేంద్రాలు:
పైథాన్, ఇన్ఫర్మేషన్ సెక్యూరిటీ, సాఫ్ట్వేర్, సిస్టమ్ అడ్మినిస్ట్రేషన్
టాగ్లు:
SSH, ఎండ్లెస్, టార్పిట్, టార్పిట్, ట్రాప్, అసిసియో
ఇన్కమింగ్ SSH కనెక్షన్ల కోసం ట్రాప్ (టార్పిట్).
ఇంటర్నెట్ చాలా ప్రతికూల వాతావరణం అని రహస్యం కాదు. మీరు సర్వర్ను పెంచిన వెంటనే, అది తక్షణమే భారీ దాడులు మరియు బహుళ స్కాన్లకు లోబడి ఉంటుంది. ఉదాహరణకి
టార్పిట్ అనేది ఇన్కమింగ్ కనెక్షన్లను నెమ్మదించడానికి ఉపయోగించే ట్రాప్ పోర్ట్. మూడవ పక్షం సిస్టమ్ ఈ పోర్ట్కు కనెక్ట్ చేయబడితే, మీరు కనెక్షన్ని త్వరగా మూసివేయలేరు. ఆమె తన సిస్టమ్ వనరులను వృధా చేయాలి మరియు కనెక్షన్ గడువు ముగిసే వరకు వేచి ఉండాలి లేదా దానిని మాన్యువల్గా ముగించాలి.
చాలా తరచుగా, టార్పిట్లను రక్షణ కోసం ఉపయోగిస్తారు. కంప్యూటర్ పురుగుల నుండి రక్షించడానికి సాంకేతికత మొదట అభివృద్ధి చేయబడింది. మరియు ఇప్పుడు అది వరుసగా అన్ని IP చిరునామాల విస్తృత స్కానింగ్లో నిమగ్నమై ఉన్న స్పామర్లు మరియు పరిశోధకుల జీవితాలను నాశనం చేయడానికి ఉపయోగించవచ్చు (హబ్రేలో ఉదాహరణలు:
క్రిస్ వెల్లన్స్ అనే సిస్టమ్ అడ్మినిస్ట్రేటర్లలో ఒకరు ఈ అవమానాన్ని చూసి విసిగిపోయారు - మరియు అతను ఒక చిన్న ప్రోగ్రామ్ రాశాడు
యుటిలిటీ యొక్క సంస్థాపన:
$ make
$ ./endlessh &
$ ssh -p2222 localhost
సరిగ్గా అమలు చేయబడిన టార్పిట్ మీ నుండి కంటే దాడి చేసేవారి నుండి ఎక్కువ వనరులను తీసుకుంటుంది. కానీ ఇది వనరుల విషయం కూడా కాదు. రచయిత
ఆపరేటింగ్ మోడ్లో, ఎండ్లెస్ సర్వర్ సాధారణ పోర్ట్ 22లో ఇన్స్టాల్ చేయబడాలి, ఇక్కడ పోకిరీలు మూకుమ్మడిగా కొట్టుకుంటారు. ప్రామాణిక భద్రతా సిఫార్సులు ఎల్లప్పుడూ SSHని వేరొక పోర్ట్కి తరలించమని సలహా ఇస్తాయి, ఇది లాగ్ల పరిమాణాన్ని మాగ్నిట్యూడ్ క్రమం ద్వారా వెంటనే తగ్గిస్తుంది.
క్రిస్ వెల్లన్స్ తన ప్రోగ్రామ్ స్పెసిఫికేషన్లోని ఒక పేరాని ఉపయోగించుకుందని చెప్పారు SSH-
.
ఇది ఎండ్లెస్ ప్రోగ్రామ్ చేస్తుంది: ఇది పంపుతుంది అంతులేని యాదృచ్ఛికంగా ఉత్పత్తి చేయబడిన డేటా యొక్క స్ట్రీమ్, ఇది RFC 4253కి అనుగుణంగా ఉంటుంది, అంటే, ప్రమాణీకరణకు ముందు పంపండి మరియు ప్రతి పంక్తి దీనితో ప్రారంభమవుతుంది SSH-
మరియు పంక్తి ముగింపు అక్షరంతో సహా 255 అక్షరాలను మించకూడదు. సాధారణంగా, ప్రతిదీ ప్రమాణం ప్రకారం ఉంటుంది.
డిఫాల్ట్గా, ప్రోగ్రామ్ ప్యాకెట్లను పంపే మధ్య 10 సెకన్లు వేచి ఉంటుంది. ఇది క్లయింట్ సమయం ముగియకుండా నిరోధిస్తుంది, కాబట్టి క్లయింట్ ఎప్పటికీ చిక్కుకుపోతాడు.
క్రిప్టోగ్రఫీని వర్తింపజేయడానికి ముందు డేటా పంపబడినందున, ప్రోగ్రామ్ చాలా సులభం. ఇది ఏ సాంకేతికలిపిని అమలు చేయవలసిన అవసరం లేదు మరియు బహుళ ప్రోటోకాల్లకు మద్దతు ఇస్తుంది.
యుటిలిటీ కనీస వనరులను వినియోగిస్తుందని మరియు మెషీన్లో పూర్తిగా గుర్తించబడకుండా పని చేస్తుందని నిర్ధారించడానికి రచయిత ప్రయత్నించారు. ఆధునిక యాంటీవైరస్లు మరియు ఇతర "సెక్యూరిటీ సిస్టమ్స్" వలె కాకుండా, ఇది మీ కంప్యూటర్ను వేగాన్ని తగ్గించకూడదు. అతను కొంచెం ఎక్కువ మోసపూరిత సాఫ్ట్వేర్ అమలు కారణంగా ట్రాఫిక్ మరియు మెమరీ వినియోగం రెండింటినీ తగ్గించగలిగాడు. ఇది కొత్త కనెక్షన్పై ప్రత్యేక ప్రక్రియను ప్రారంభించినట్లయితే, సంభావ్య దాడి చేసేవారు మెషీన్లోని వనరులను ఎగ్జాస్ట్ చేయడానికి బహుళ కనెక్షన్లను తెరవడం ద్వారా DDoS దాడిని ప్రారంభించవచ్చు. ప్రతి కనెక్షన్కు ఒక థ్రెడ్ ఉత్తమ ఎంపిక కాదు, ఎందుకంటే కెర్నల్ థ్రెడ్లను నిర్వహించే వనరులను వృధా చేస్తుంది.
అందుకే క్రిస్ వెల్లన్స్ ఎండ్లెస్కు అత్యంత తేలికైన ఎంపికను ఎంచుకున్నారు: ఒకే-థ్రెడ్ సర్వర్ poll(2)
, ట్రాప్లోని క్లయింట్లు వాస్తవంగా అదనపు వనరులను వినియోగించరు, కెర్నల్లోని సాకెట్ వస్తువును మరియు ఎండ్లెస్లో ట్రాకింగ్ కోసం మరో 78 బైట్లను లెక్కించరు. ప్రతి క్లయింట్ కోసం రిసీవ్ మరియు పంపే బఫర్లను కేటాయించకుండా ఉండటానికి, ఎండ్లెస్ష్ డైరెక్ట్ యాక్సెస్ సాకెట్ను తెరుస్తుంది మరియు దాదాపు మొత్తం ఆపరేటింగ్ సిస్టమ్ TCP/IP స్టాక్ను దాటవేస్తూ TCP ప్యాకెట్లను నేరుగా అనువదిస్తుంది. ఇన్కమింగ్ బఫర్ అస్సలు అవసరం లేదు, ఎందుకంటే ఇన్కమింగ్ డేటాపై మాకు ఆసక్తి లేదు.
రచయిత తన ప్రోగ్రామ్ సమయంలో చెప్పారు
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())
టార్పిట్లను వ్రాయడానికి అసిన్సియో అనువైనది. ఉదాహరణకు, ఈ హుక్ Firefox, Chrome లేదా మీ HTTP సర్వర్కి కనెక్ట్ చేయడానికి ప్రయత్నిస్తున్న ఏదైనా ఇతర క్లయింట్ చాలా గంటలపాటు స్తంభింపజేస్తుంది:
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())
ఆన్లైన్ బెదిరింపులను శిక్షించడానికి టార్పిట్ ఒక గొప్ప సాధనం. నిజమే, ఒక నిర్దిష్ట సర్వర్ యొక్క అసాధారణ ప్రవర్తనకు వారి దృష్టిని ఆకర్షించే కొంత ప్రమాదం ఉంది. ఎవరైనా
మూలం: www.habr.com