අන්තර්ජාලය ඉතා සතුරු පරිසරයක් බව රහසක් නොවේ. ඔබ සේවාදායකයක් ඉහළ දැමූ විගස, එය ක්ෂණිකව දැවැන්ත ප්රහාරවලට සහ බහු ස්කෑන් වලට ලක් වේ. උදාහරණ වශයෙන්
Tarpit යනු පැමිණෙන සම්බන්ධතා මන්දගාමී කිරීමට භාවිතා කරන උගුල් තොටකි. තෙවන පාර්ශවීය පද්ධතියක් මෙම වරායට සම්බන්ධ වන්නේ නම්, ඔබට ඉක්මනින් සම්බන්ධතාවය වසා දැමීමට නොහැකි වනු ඇත. ඇයට ඇයගේ පද්ධති සම්පත් නාස්ති කිරීමටත්, සම්බන්ධතා කාලය අවසන් වන තෙක් රැඳී සිටීමටත්, නැතහොත් එය අතින් අවසන් කිරීමටත් සිදු වනු ඇත.
බොහෝ විට, ආරක්ෂාව සඳහා ටාපිට් භාවිතා වේ. පරිගණක පණුවන්ගෙන් ආරක්ෂා වීම සඳහා මෙම තාක්ෂණය මුලින්ම දියුණු කරන ලදී. දැන් එය සියලුම IP ලිපින පේලියට පුළුල් පරිලෝකනය කිරීමේ යෙදී සිටින අයාචිත තැපැල් කරුවන්ගේ සහ පර්යේෂකයන්ගේ ජීවිත විනාශ කිරීමට භාවිතා කළ හැකිය (Habre හි උදාහරණ:
ක්රිස් වෙලොන්ස් නම් පද්ධති පරිපාලකයෙකුට පෙනෙන පරිදි මෙම අපකීර්තිය නැරඹීමෙන් වෙහෙසට පත් විය - ඔහු කුඩා වැඩසටහනක් ලිවීය.
උපයෝගිතා ස්ථාපනය:
$ make
$ ./endlessh &
$ ssh -p2222 localhost
නිසි ලෙස ක්රියාත්මක කරන ලද ටාපිට් එකක් ඔබට වඩා ප්රහාරකයාගෙන් වැඩි සම්පත් ලබා ගනී. නමුත් එය සම්පත් පිළිබඳ ප්රශ්නයක් නොවේ. කර්තෘ
මෙහෙයුම් මාදිලියේදී, එන්ඩ්ලෙෂ් සේවාදායකය සාමාන්ය වරාය 22 හි ස්ථාපනය කළ යුතුය, එහිදී දාමරිකයන් විශාල වශයෙන් තට්ටු කරයි. සම්මත ආරක්ෂක නිර්දේශයන් සෑම විටම SSH වෙනත් වරායකට ගෙනයාමට උපදෙස් දෙයි, එය විශාලත්වයේ අනුපිළිවෙලකින් ලොග් වල ප්රමාණය වහාම අඩු කරයි.
Chris Wellons පවසන්නේ ඔහුගේ වැඩසටහන පිරිවිතරයේ එක් ඡේදයක් ගසාකන බවයි SSH-
.
Endlessh වැඩසටහන කරන්නේ මෙයයි: එය යවයි නිමක් නැති අහඹු ලෙස ජනනය කරන ලද දත්ත ප්රවාහය, එය RFC 4253 සමඟ අනුකූල වේ, එනම්, සත්යාපනයට පෙර යවන්න, සහ සෑම පේළියක්ම ආරම්භ වන්නේ SSH-
සහ රේඛාව අවසන් වන අක්ෂරය ඇතුළුව අක්ෂර 255 නොඉක්මවිය යුතුය. පොදුවේ ගත් කල, සෑම දෙයක්ම සම්මතයට අනුකූල වේ.
පෙරනිමියෙන්, වැඩසටහන පැකට් යැවීම අතර තත්පර 10 ක් රැඳී සිටියි. මෙය සේවාලාභියාගේ කල් ඉකුත්වීම වළක්වයි, එබැවින් සේවාදායකයා සදහටම කොටු වනු ඇත.
ගුප්තකේතනය යෙදීමට පෙර දත්ත යවන බැවින්, වැඩසටහන අතිශයින්ම සරල ය. එයට කිසිදු කේතාංකයක් ක්රියාත්මක කිරීමට අවශ්ය නොවන අතර බහු ප්රොටෝකෝල සඳහා සහය දක්වයි.
උපයෝගිතා අවම සම්පත් පරිභෝජනය කරන බව සහතික කිරීමට කතුවරයා උත්සාහ කළ අතර යන්ත්රය මත සම්පූර්ණයෙන්ම නොදැනුවත්වම ක්රියා කරයි. නවීන ප්රතිවයිරස සහ අනෙකුත් "ආරක්ෂක පද්ධති" මෙන් නොව, එය ඔබේ පරිගණකය මන්දගාමී නොවිය යුතුය. තරමක් කපටි මෘදුකාංග ක්රියාත්මක කිරීම හේතුවෙන් රථවාහන තදබදය සහ මතක පරිභෝජනය යන දෙකම අවම කිරීමට ඔහු සමත් විය. එය හුදෙක් නව සම්බන්ධතාවයක් මත වෙනම ක්රියාවලියක් දියත් කළේ නම්, විභව ප්රහාරකයන්ට යන්ත්රයේ ඇති සම්පත් පිටකිරීම සඳහා බහු සම්බන්ධතා විවෘත කිරීමෙන් DDoS ප්රහාරයක් දියත් කළ හැකිය. සම්බන්ධතාවයකට එක් නූල් එකක් ද හොඳම විකල්පය නොවේ, මන්දයත් කර්නලය නූල් කළමනාකරණය කිරීමේ සම්පත් නාස්ති කරයි.
Chris Wellons Endlessh සඳහා වඩාත්ම සැහැල්ලු විකල්පය තෝරා ගත්තේ එබැවිනි: තනි නූල් සේවාදායකයක් poll(2)
, උගුලේ සිටින සේවාදායකයන් ප්රායෝගිකව අමතර සම්පත් පරිභෝජනය නොකරන අතර, කර්නලයේ ඇති සොකට් වස්තුව ගණන් නොගෙන Endlessh හි ලුහුබැඳීම සඳහා තවත් බයිට් 78ක්. එක් එක් සේවාදායකයා සඳහා ලබා ගැනීමේ සහ යැවීමේ බෆර වෙන් කිරීම වළක්වා ගැනීම සඳහා, Endlessh සෘජු ප්රවේශ සොකට් එකක් විවෘත කර TCP පැකට් සෘජුවම පරිවර්තනය කරයි, සමස්ත මෙහෙයුම් පද්ධතියේ TCP/IP තොගයම පාහේ මග හරියි. එන බෆරය කිසිසේත්ම අවශ්ය නොවේ, මන්ද අපි එන දත්ත ගැන උනන්දුවක් නොදක්වමු.
කතුවරයා පවසන්නේ ඔහුගේ වැඩසටහන අතරතුරදීය
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 tarpits ලිවීම සඳහා සුදුසු වේ. උදාහරණයක් ලෙස, මෙම කොක්කෙන් 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())
Tarpit යනු මාර්ගගත හිරිහැර කරන්නන්ට දඬුවම් කිරීම සඳහා විශිෂ්ට මෙවලමකි. ඇත්ත වශයෙන්ම, යම් සේවාදායකයක අසාමාන්ය හැසිරීම් වලට ඔවුන්ගේ අවධානය යොමු කිරීමේ යම් අවදානමක් ඇත. කවුරුහරි
මධ්යස්ථාන:
පයිතන්, තොරතුරු ආරක්ෂාව, මෘදුකාංග, පද්ධති පරිපාලනය
tags:
SSH, Endlessh, tarpit, tarpit, trap, asycio
එන SSH සම්බන්ධතා සඳහා උගුලක් (ටාර්පිට්).
අන්තර්ජාලය ඉතා සතුරු පරිසරයක් බව රහසක් නොවේ. ඔබ සේවාදායකයක් ඉහළ දැමූ විගස, එය ක්ෂණිකව දැවැන්ත ප්රහාරවලට සහ බහු ස්කෑන් වලට ලක් වේ. උදාහරණ වශයෙන්
Tarpit යනු පැමිණෙන සම්බන්ධතා මන්දගාමී කිරීමට භාවිතා කරන උගුල් තොටකි. තෙවන පාර්ශවීය පද්ධතියක් මෙම වරායට සම්බන්ධ වන්නේ නම්, ඔබට ඉක්මනින් සම්බන්ධතාවය වසා දැමීමට නොහැකි වනු ඇත. ඇයට ඇයගේ පද්ධති සම්පත් නාස්ති කිරීමටත්, සම්බන්ධතා කාලය අවසන් වන තෙක් රැඳී සිටීමටත්, නැතහොත් එය අතින් අවසන් කිරීමටත් සිදු වනු ඇත.
බොහෝ විට, ආරක්ෂාව සඳහා ටාපිට් භාවිතා වේ. පරිගණක පණුවන්ගෙන් ආරක්ෂා වීම සඳහා මෙම තාක්ෂණය මුලින්ම දියුණු කරන ලදී. දැන් එය සියලුම IP ලිපින පේලියට පුළුල් පරිලෝකනය කිරීමේ යෙදී සිටින අයාචිත තැපැල් කරුවන්ගේ සහ පර්යේෂකයන්ගේ ජීවිත විනාශ කිරීමට භාවිතා කළ හැකිය (Habre හි උදාහරණ:
ක්රිස් වෙලොන්ස් නම් පද්ධති පරිපාලකයෙකුට පෙනෙන පරිදි මෙම අපකීර්තිය නැරඹීමෙන් වෙහෙසට පත් විය - ඔහු කුඩා වැඩසටහනක් ලිවීය.
උපයෝගිතා ස්ථාපනය:
$ make
$ ./endlessh &
$ ssh -p2222 localhost
නිසි ලෙස ක්රියාත්මක කරන ලද ටාපිට් එකක් ඔබට වඩා ප්රහාරකයාගෙන් වැඩි සම්පත් ලබා ගනී. නමුත් එය සම්පත් පිළිබඳ ප්රශ්නයක් නොවේ. කර්තෘ
මෙහෙයුම් මාදිලියේදී, එන්ඩ්ලෙෂ් සේවාදායකය සාමාන්ය වරාය 22 හි ස්ථාපනය කළ යුතුය, එහිදී දාමරිකයන් විශාල වශයෙන් තට්ටු කරයි. සම්මත ආරක්ෂක නිර්දේශයන් සෑම විටම SSH වෙනත් වරායකට ගෙනයාමට උපදෙස් දෙයි, එය විශාලත්වයේ අනුපිළිවෙලකින් ලොග් වල ප්රමාණය වහාම අඩු කරයි.
Chris Wellons පවසන්නේ ඔහුගේ වැඩසටහන පිරිවිතරයේ එක් ඡේදයක් ගසාකන බවයි SSH-
.
Endlessh වැඩසටහන කරන්නේ මෙයයි: එය යවයි නිමක් නැති අහඹු ලෙස ජනනය කරන ලද දත්ත ප්රවාහය, එය RFC 4253 සමඟ අනුකූල වේ, එනම්, සත්යාපනයට පෙර යවන්න, සහ සෑම පේළියක්ම ආරම්භ වන්නේ SSH-
සහ රේඛාව අවසන් වන අක්ෂරය ඇතුළුව අක්ෂර 255 නොඉක්මවිය යුතුය. පොදුවේ ගත් කල, සෑම දෙයක්ම සම්මතයට අනුකූල වේ.
පෙරනිමියෙන්, වැඩසටහන පැකට් යැවීම අතර තත්පර 10 ක් රැඳී සිටියි. මෙය සේවාලාභියාගේ කල් ඉකුත්වීම වළක්වයි, එබැවින් සේවාදායකයා සදහටම කොටු වනු ඇත.
ගුප්තකේතනය යෙදීමට පෙර දත්ත යවන බැවින්, වැඩසටහන අතිශයින්ම සරල ය. එයට කිසිදු කේතාංකයක් ක්රියාත්මක කිරීමට අවශ්ය නොවන අතර බහු ප්රොටෝකෝල සඳහා සහය දක්වයි.
උපයෝගිතා අවම සම්පත් පරිභෝජනය කරන බව සහතික කිරීමට කතුවරයා උත්සාහ කළ අතර යන්ත්රය මත සම්පූර්ණයෙන්ම නොදැනුවත්වම ක්රියා කරයි. නවීන ප්රතිවයිරස සහ අනෙකුත් "ආරක්ෂක පද්ධති" මෙන් නොව, එය ඔබේ පරිගණකය මන්දගාමී නොවිය යුතුය. තරමක් කපටි මෘදුකාංග ක්රියාත්මක කිරීම හේතුවෙන් රථවාහන තදබදය සහ මතක පරිභෝජනය යන දෙකම අවම කිරීමට ඔහු සමත් විය. එය හුදෙක් නව සම්බන්ධතාවයක් මත වෙනම ක්රියාවලියක් දියත් කළේ නම්, විභව ප්රහාරකයන්ට යන්ත්රයේ ඇති සම්පත් පිටකිරීම සඳහා බහු සම්බන්ධතා විවෘත කිරීමෙන් DDoS ප්රහාරයක් දියත් කළ හැකිය. සම්බන්ධතාවයකට එක් නූල් එකක් ද හොඳම විකල්පය නොවේ, මන්දයත් කර්නලය නූල් කළමනාකරණය කිරීමේ සම්පත් නාස්ති කරයි.
Chris Wellons Endlessh සඳහා වඩාත්ම සැහැල්ලු විකල්පය තෝරා ගත්තේ එබැවිනි: තනි නූල් සේවාදායකයක් poll(2)
, උගුලේ සිටින සේවාදායකයන් ප්රායෝගිකව අමතර සම්පත් පරිභෝජනය නොකරන අතර, කර්නලයේ ඇති සොකට් වස්තුව ගණන් නොගෙන Endlessh හි ලුහුබැඳීම සඳහා තවත් බයිට් 78ක්. එක් එක් සේවාදායකයා සඳහා ලබා ගැනීමේ සහ යැවීමේ බෆර වෙන් කිරීම වළක්වා ගැනීම සඳහා, Endlessh සෘජු ප්රවේශ සොකට් එකක් විවෘත කර TCP පැකට් සෘජුවම පරිවර්තනය කරයි, සමස්ත මෙහෙයුම් පද්ධතියේ TCP/IP තොගයම පාහේ මග හරියි. එන බෆරය කිසිසේත්ම අවශ්ය නොවේ, මන්ද අපි එන දත්ත ගැන උනන්දුවක් නොදක්වමු.
කතුවරයා පවසන්නේ ඔහුගේ වැඩසටහන අතරතුරදීය
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 tarpits ලිවීම සඳහා සුදුසු වේ. උදාහරණයක් ලෙස, මෙම කොක්කෙන් 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())
Tarpit යනු මාර්ගගත හිරිහැර කරන්නන්ට දඬුවම් කිරීම සඳහා විශිෂ්ට මෙවලමකි. ඇත්ත වශයෙන්ම, යම් සේවාදායකයක අසාමාන්ය හැසිරීම් වලට ඔවුන්ගේ අවධානය යොමු කිරීමේ යම් අවදානමක් ඇත. කවුරුහරි
මූලාශ්රය: www.habr.com