එන SSH සම්බන්ධතා සඳහා උගුලක් (ටාර්පිට්).

අන්තර්ජාලය ඉතා සතුරු පරිසරයක් බව රහසක් නොවේ. ඔබ සේවාදායකයක් ඉහළ දැමූ විගස, එය ක්ෂණිකව දැවැන්ත ප්‍රහාරවලට සහ බහු ස්කෑන් වලට ලක් වේ. උදාහරණ වශයෙන් ආරක්ෂක භටයන්ගෙන් පැණි පොදිය මෙම කුණු ගමනාගමනයේ පරිමාණය ඔබට තක්සේරු කළ හැකිය. ඇත්ත වශයෙන්ම, සාමාන්‍ය සේවාදායකයේ, ගමනාගමනයෙන් 99% ක් අනිෂ්ට විය හැකිය.

Tarpit යනු පැමිණෙන සම්බන්ධතා මන්දගාමී කිරීමට භාවිතා කරන උගුල් තොටකි. තෙවන පාර්ශවීය පද්ධතියක් මෙම වරායට සම්බන්ධ වන්නේ නම්, ඔබට ඉක්මනින් සම්බන්ධතාවය වසා දැමීමට නොහැකි වනු ඇත. ඇයට ඇයගේ පද්ධති සම්පත් නාස්ති කිරීමටත්, සම්බන්ධතා කාලය අවසන් වන තෙක් රැඳී සිටීමටත්, නැතහොත් එය අතින් අවසන් කිරීමටත් සිදු වනු ඇත.

බොහෝ විට, ආරක්ෂාව සඳහා ටාපිට් භාවිතා වේ. පරිගණක පණුවන්ගෙන් ආරක්ෂා වීම සඳහා මෙම තාක්ෂණය මුලින්ම දියුණු කරන ලදී. දැන් එය සියලුම IP ලිපින පේලියට පුළුල් පරිලෝකනය කිරීමේ යෙදී සිටින අයාචිත තැපැල් කරුවන්ගේ සහ පර්යේෂකයන්ගේ ජීවිත විනාශ කිරීමට භාවිතා කළ හැකිය (Habre හි උදාහරණ: ඔස්ට්රියාව, යුක්රේනය).

ක්‍රිස් වෙලොන්ස් නම් පද්ධති පරිපාලකයෙකුට පෙනෙන පරිදි මෙම අපකීර්තිය නැරඹීමෙන් වෙහෙසට පත් විය - ඔහු කුඩා වැඩසටහනක් ලිවීය. නිමක් නැති, එන සම්බන්ධතා මන්දගාමී කරන SSH සඳහා ටාපිට් එකක්. වැඩසටහන වරායක් විවෘත කරයි (පරීක්ෂා කිරීම සඳහා පෙරනිමි වරාය 2222) සහ SSH සේවාදායකයක් ලෙස පෙනී සිටියි, නමුත් යථාර්ථයේ දී එය ලබා දෙන තෙක් පැමිණෙන සේවාදායකයා සමඟ නිමක් නැති සම්බන්ධතාවයක් ස්ථාපිත කරයි. සේවාදායකයා වැටෙන තෙක් මෙය දින කිහිපයක් හෝ ඊට වැඩි කාලයක් පැවතිය හැක.

උපයෝගිතා ස්ථාපනය:

$ make
$ ./endlessh &
$ ssh -p2222 localhost

නිසි ලෙස ක්‍රියාත්මක කරන ලද ටාපිට් එකක් ඔබට වඩා ප්‍රහාරකයාගෙන් වැඩි සම්පත් ලබා ගනී. නමුත් එය සම්පත් පිළිබඳ ප්‍රශ්නයක් නොවේ. කර්තෘ ඔහු මෙසේ ලියයිවැඩසටහන ඇබ්බැහි වීමක් බව. මේ වන විට එහි ගණුදෙණුකරුවන් 27ක් සිරවී ඇත, ඔවුන්ගෙන් සමහරක් සති ගණනක් සම්බන්ධ වී ඇත. ක්‍රියාකාරකම්වල උච්චතම අවස්ථාවේදී, සේවාදායකයින් 1378 පැය 20 ක් සිරවී ඇත!

මෙහෙයුම් මාදිලියේදී, එන්ඩ්ලෙෂ් සේවාදායකය සාමාන්‍ය වරාය 22 හි ස්ථාපනය කළ යුතුය, එහිදී දාමරිකයන් විශාල වශයෙන් තට්ටු කරයි. සම්මත ආරක්ෂක නිර්දේශයන් සෑම විටම SSH වෙනත් වරායකට ගෙනයාමට උපදෙස් දෙයි, එය විශාලත්වයේ අනුපිළිවෙලකින් ලොග් වල ප්‍රමාණය වහාම අඩු කරයි.

Chris Wellons පවසන්නේ ඔහුගේ වැඩසටහන පිරිවිතරයේ එක් ඡේදයක් ගසාකන බවයි RFC 4253 SSH ප්‍රොටෝකෝලය වෙත. TCP සම්බන්ධතාවයක් ස්ථාපිත කළ වහාම, නමුත් ගුප්තකේතනය යෙදීමට පෙර, දෙපාර්ශවයම හඳුනාගැනීමේ තන්තුවක් යැවිය යුතුය. සහ සටහනක් ද ඇත: "සේවාදායකය අනුවාද පේළිය යැවීමට පෙර වෙනත් දත්ත පේළි යැවිය හැක". සහ සීමාවක් නැත මෙම දත්ත පරිමාව මත, ඔබ එක් එක් පේළිය ආරම්භ කිරීමට අවශ්ය වේ SSH-.

Endlessh වැඩසටහන කරන්නේ මෙයයි: එය යවයි නිමක් නැති අහඹු ලෙස ජනනය කරන ලද දත්ත ප්‍රවාහය, එය RFC 4253 සමඟ අනුකූල වේ, එනම්, සත්‍යාපනයට පෙර යවන්න, සහ සෑම පේළියක්ම ආරම්භ වන්නේ SSH- සහ රේඛාව අවසන් වන අක්ෂරය ඇතුළුව අක්ෂර 255 නොඉක්මවිය යුතුය. පොදුවේ ගත් කල, සෑම දෙයක්ම සම්මතයට අනුකූල වේ.

පෙරනිමියෙන්, වැඩසටහන පැකට් යැවීම අතර තත්පර 10 ක් රැඳී සිටියි. මෙය සේවාලාභියාගේ කල් ඉකුත්වීම වළක්වයි, එබැවින් සේවාදායකයා සදහටම කොටු වනු ඇත.

ගුප්තකේතනය යෙදීමට පෙර දත්ත යවන බැවින්, වැඩසටහන අතිශයින්ම සරල ය. එයට කිසිදු කේතාංකයක් ක්‍රියාත්මක කිරීමට අවශ්‍ය නොවන අතර බහු ප්‍රොටෝකෝල සඳහා සහය දක්වයි.

උපයෝගිතා අවම සම්පත් පරිභෝජනය කරන බව සහතික කිරීමට කතුවරයා උත්සාහ කළ අතර යන්ත්රය මත සම්පූර්ණයෙන්ම නොදැනුවත්වම ක්රියා කරයි. නවීන ප්රතිවයිරස සහ අනෙකුත් "ආරක්ෂක පද්ධති" මෙන් නොව, එය ඔබේ පරිගණකය මන්දගාමී නොවිය යුතුය. තරමක් කපටි මෘදුකාංග ක්‍රියාත්මක කිරීම හේතුවෙන් රථවාහන තදබදය සහ මතක පරිභෝජනය යන දෙකම අවම කිරීමට ඔහු සමත් විය. එය හුදෙක් නව සම්බන්ධතාවයක් මත වෙනම ක්‍රියාවලියක් දියත් කළේ නම්, විභව ප්‍රහාරකයන්ට යන්ත්‍රයේ ඇති සම්පත් පිටකිරීම සඳහා බහු සම්බන්ධතා විවෘත කිරීමෙන් DDoS ප්‍රහාරයක් දියත් කළ හැකිය. සම්බන්ධතාවයකට එක් නූල් එකක් ද හොඳම විකල්පය නොවේ, මන්දයත් කර්නලය නූල් කළමනාකරණය කිරීමේ සම්පත් නාස්ති කරයි.

Chris Wellons Endlessh සඳහා වඩාත්ම සැහැල්ලු විකල්පය තෝරා ගත්තේ එබැවිනි: තනි නූල් සේවාදායකයක් poll(2), උගුලේ සිටින සේවාදායකයන් ප්‍රායෝගිකව අමතර සම්පත් පරිභෝජනය නොකරන අතර, කර්නලයේ ඇති සොකට් වස්තුව ගණන් නොගෙන Endlessh හි ලුහුබැඳීම සඳහා තවත් බයිට් 78ක්. එක් එක් සේවාදායකයා සඳහා ලබා ගැනීමේ සහ යැවීමේ බෆර වෙන් කිරීම වළක්වා ගැනීම සඳහා, Endlessh සෘජු ප්‍රවේශ සොකට් එකක් විවෘත කර TCP පැකට් සෘජුවම පරිවර්තනය කරයි, සමස්ත මෙහෙයුම් පද්ධතියේ TCP/IP තොගයම පාහේ මග හරියි. එන බෆරය කිසිසේත්ම අවශ්‍ය නොවේ, මන්ද අපි එන දත්ත ගැන උනන්දුවක් නොදක්වමු.

කතුවරයා පවසන්නේ ඔහුගේ වැඩසටහන අතරතුරදීය දැන සිටියේ නැත Python ගේ asycio සහ අනෙකුත් tarpits වල පැවැත්ම ගැන. ඔහු asycio ගැන දැන සිටියේ නම්, ඔහුට Python හි පේළි 18 කින් ඔහුගේ උපයෝගීතාව ක්‍රියාත්මක කළ හැකිය:

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 යනු මාර්ගගත හිරිහැර කරන්නන්ට දඬුවම් කිරීම සඳහා විශිෂ්ට මෙවලමකි. ඇත්ත වශයෙන්ම, යම් සේවාදායකයක අසාමාන්ය හැසිරීම් වලට ඔවුන්ගේ අවධානය යොමු කිරීමේ යම් අවදානමක් ඇත. කවුරුහරි පළිගැනීම ගැන හිතන්න ඇති සහ ඔබේ IP මත ඉලක්කගත DDoS ප්‍රහාරයක්. කෙසේ වෙතත්, මෙතෙක් එවැනි අවස්ථා නොමැත, සහ ටාපිට් විශිෂ්ට ලෙස ක්රියා කරයි.

මධ්‍යස්ථාන:
පයිතන්, තොරතුරු ආරක්ෂාව, මෘදුකාංග, පද්ධති පරිපාලනය

tags:
SSH, Endlessh, tarpit, tarpit, trap, asycio
එන SSH සම්බන්ධතා සඳහා උගුලක් (ටාර්පිට්).

අන්තර්ජාලය ඉතා සතුරු පරිසරයක් බව රහසක් නොවේ. ඔබ සේවාදායකයක් ඉහළ දැමූ විගස, එය ක්ෂණිකව දැවැන්ත ප්‍රහාරවලට සහ බහු ස්කෑන් වලට ලක් වේ. උදාහරණ වශයෙන් ආරක්ෂක භටයන්ගෙන් පැණි පොදිය මෙම කුණු ගමනාගමනයේ පරිමාණය ඔබට තක්සේරු කළ හැකිය. ඇත්ත වශයෙන්ම, සාමාන්‍ය සේවාදායකයේ, ගමනාගමනයෙන් 99% ක් අනිෂ්ට විය හැකිය.

Tarpit යනු පැමිණෙන සම්බන්ධතා මන්දගාමී කිරීමට භාවිතා කරන උගුල් තොටකි. තෙවන පාර්ශවීය පද්ධතියක් මෙම වරායට සම්බන්ධ වන්නේ නම්, ඔබට ඉක්මනින් සම්බන්ධතාවය වසා දැමීමට නොහැකි වනු ඇත. ඇයට ඇයගේ පද්ධති සම්පත් නාස්ති කිරීමටත්, සම්බන්ධතා කාලය අවසන් වන තෙක් රැඳී සිටීමටත්, නැතහොත් එය අතින් අවසන් කිරීමටත් සිදු වනු ඇත.

බොහෝ විට, ආරක්ෂාව සඳහා ටාපිට් භාවිතා වේ. පරිගණක පණුවන්ගෙන් ආරක්ෂා වීම සඳහා මෙම තාක්ෂණය මුලින්ම දියුණු කරන ලදී. දැන් එය සියලුම IP ලිපින පේලියට පුළුල් පරිලෝකනය කිරීමේ යෙදී සිටින අයාචිත තැපැල් කරුවන්ගේ සහ පර්යේෂකයන්ගේ ජීවිත විනාශ කිරීමට භාවිතා කළ හැකිය (Habre හි උදාහරණ: ඔස්ට්රියාව, යුක්රේනය).

ක්‍රිස් වෙලොන්ස් නම් පද්ධති පරිපාලකයෙකුට පෙනෙන පරිදි මෙම අපකීර්තිය නැරඹීමෙන් වෙහෙසට පත් විය - ඔහු කුඩා වැඩසටහනක් ලිවීය. නිමක් නැති, එන සම්බන්ධතා මන්දගාමී කරන SSH සඳහා ටාපිට් එකක්. වැඩසටහන වරායක් විවෘත කරයි (පරීක්ෂා කිරීම සඳහා පෙරනිමි වරාය 2222) සහ SSH සේවාදායකයක් ලෙස පෙනී සිටියි, නමුත් යථාර්ථයේ දී එය ලබා දෙන තෙක් පැමිණෙන සේවාදායකයා සමඟ නිමක් නැති සම්බන්ධතාවයක් ස්ථාපිත කරයි. සේවාදායකයා වැටෙන තෙක් මෙය දින කිහිපයක් හෝ ඊට වැඩි කාලයක් පැවතිය හැක.

උපයෝගිතා ස්ථාපනය:

$ make
$ ./endlessh &
$ ssh -p2222 localhost

නිසි ලෙස ක්‍රියාත්මක කරන ලද ටාපිට් එකක් ඔබට වඩා ප්‍රහාරකයාගෙන් වැඩි සම්පත් ලබා ගනී. නමුත් එය සම්පත් පිළිබඳ ප්‍රශ්නයක් නොවේ. කර්තෘ ඔහු මෙසේ ලියයිවැඩසටහන ඇබ්බැහි වීමක් බව. මේ වන විට එහි ගණුදෙණුකරුවන් 27ක් සිරවී ඇත, ඔවුන්ගෙන් සමහරක් සති ගණනක් සම්බන්ධ වී ඇත. ක්‍රියාකාරකම්වල උච්චතම අවස්ථාවේදී, සේවාදායකයින් 1378 පැය 20 ක් සිරවී ඇත!

මෙහෙයුම් මාදිලියේදී, එන්ඩ්ලෙෂ් සේවාදායකය සාමාන්‍ය වරාය 22 හි ස්ථාපනය කළ යුතුය, එහිදී දාමරිකයන් විශාල වශයෙන් තට්ටු කරයි. සම්මත ආරක්ෂක නිර්දේශයන් සෑම විටම SSH වෙනත් වරායකට ගෙනයාමට උපදෙස් දෙයි, එය විශාලත්වයේ අනුපිළිවෙලකින් ලොග් වල ප්‍රමාණය වහාම අඩු කරයි.

Chris Wellons පවසන්නේ ඔහුගේ වැඩසටහන පිරිවිතරයේ එක් ඡේදයක් ගසාකන බවයි RFC 4253 SSH ප්‍රොටෝකෝලය වෙත. TCP සම්බන්ධතාවයක් ස්ථාපිත කළ වහාම, නමුත් ගුප්තකේතනය යෙදීමට පෙර, දෙපාර්ශවයම හඳුනාගැනීමේ තන්තුවක් යැවිය යුතුය. සහ සටහනක් ද ඇත: "සේවාදායකය අනුවාද පේළිය යැවීමට පෙර වෙනත් දත්ත පේළි යැවිය හැක". සහ සීමාවක් නැත මෙම දත්ත පරිමාව මත, ඔබ එක් එක් පේළිය ආරම්භ කිරීමට අවශ්ය වේ SSH-.

Endlessh වැඩසටහන කරන්නේ මෙයයි: එය යවයි නිමක් නැති අහඹු ලෙස ජනනය කරන ලද දත්ත ප්‍රවාහය, එය RFC 4253 සමඟ අනුකූල වේ, එනම්, සත්‍යාපනයට පෙර යවන්න, සහ සෑම පේළියක්ම ආරම්භ වන්නේ SSH- සහ රේඛාව අවසන් වන අක්ෂරය ඇතුළුව අක්ෂර 255 නොඉක්මවිය යුතුය. පොදුවේ ගත් කල, සෑම දෙයක්ම සම්මතයට අනුකූල වේ.

පෙරනිමියෙන්, වැඩසටහන පැකට් යැවීම අතර තත්පර 10 ක් රැඳී සිටියි. මෙය සේවාලාභියාගේ කල් ඉකුත්වීම වළක්වයි, එබැවින් සේවාදායකයා සදහටම කොටු වනු ඇත.

ගුප්තකේතනය යෙදීමට පෙර දත්ත යවන බැවින්, වැඩසටහන අතිශයින්ම සරල ය. එයට කිසිදු කේතාංකයක් ක්‍රියාත්මක කිරීමට අවශ්‍ය නොවන අතර බහු ප්‍රොටෝකෝල සඳහා සහය දක්වයි.

උපයෝගිතා අවම සම්පත් පරිභෝජනය කරන බව සහතික කිරීමට කතුවරයා උත්සාහ කළ අතර යන්ත්රය මත සම්පූර්ණයෙන්ම නොදැනුවත්වම ක්රියා කරයි. නවීන ප්රතිවයිරස සහ අනෙකුත් "ආරක්ෂක පද්ධති" මෙන් නොව, එය ඔබේ පරිගණකය මන්දගාමී නොවිය යුතුය. තරමක් කපටි මෘදුකාංග ක්‍රියාත්මක කිරීම හේතුවෙන් රථවාහන තදබදය සහ මතක පරිභෝජනය යන දෙකම අවම කිරීමට ඔහු සමත් විය. එය හුදෙක් නව සම්බන්ධතාවයක් මත වෙනම ක්‍රියාවලියක් දියත් කළේ නම්, විභව ප්‍රහාරකයන්ට යන්ත්‍රයේ ඇති සම්පත් පිටකිරීම සඳහා බහු සම්බන්ධතා විවෘත කිරීමෙන් DDoS ප්‍රහාරයක් දියත් කළ හැකිය. සම්බන්ධතාවයකට එක් නූල් එකක් ද හොඳම විකල්පය නොවේ, මන්දයත් කර්නලය නූල් කළමනාකරණය කිරීමේ සම්පත් නාස්ති කරයි.

Chris Wellons Endlessh සඳහා වඩාත්ම සැහැල්ලු විකල්පය තෝරා ගත්තේ එබැවිනි: තනි නූල් සේවාදායකයක් poll(2), උගුලේ සිටින සේවාදායකයන් ප්‍රායෝගිකව අමතර සම්පත් පරිභෝජනය නොකරන අතර, කර්නලයේ ඇති සොකට් වස්තුව ගණන් නොගෙන Endlessh හි ලුහුබැඳීම සඳහා තවත් බයිට් 78ක්. එක් එක් සේවාදායකයා සඳහා ලබා ගැනීමේ සහ යැවීමේ බෆර වෙන් කිරීම වළක්වා ගැනීම සඳහා, Endlessh සෘජු ප්‍රවේශ සොකට් එකක් විවෘත කර TCP පැකට් සෘජුවම පරිවර්තනය කරයි, සමස්ත මෙහෙයුම් පද්ධතියේ TCP/IP තොගයම පාහේ මග හරියි. එන බෆරය කිසිසේත්ම අවශ්‍ය නොවේ, මන්ද අපි එන දත්ත ගැන උනන්දුවක් නොදක්වමු.

කතුවරයා පවසන්නේ ඔහුගේ වැඩසටහන අතරතුරදීය දැන සිටියේ නැත Python ගේ asycio සහ අනෙකුත් tarpits වල පැවැත්ම ගැන. ඔහු asycio ගැන දැන සිටියේ නම්, ඔහුට Python හි පේළි 18 කින් ඔහුගේ උපයෝගීතාව ක්‍රියාත්මක කළ හැකිය:

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 යනු මාර්ගගත හිරිහැර කරන්නන්ට දඬුවම් කිරීම සඳහා විශිෂ්ට මෙවලමකි. ඇත්ත වශයෙන්ම, යම් සේවාදායකයක අසාමාන්ය හැසිරීම් වලට ඔවුන්ගේ අවධානය යොමු කිරීමේ යම් අවදානමක් ඇත. කවුරුහරි පළිගැනීම ගැන හිතන්න ඇති සහ ඔබේ IP මත ඉලක්කගත DDoS ප්‍රහාරයක්. කෙසේ වෙතත්, මෙතෙක් එවැනි අවස්ථා නොමැත, සහ ටාපිට් විශිෂ්ට ලෙස ක්රියා කරයි.

එන SSH සම්බන්ධතා සඳහා උගුලක් (ටාර්පිට්).

මූලාශ්රය: www.habr.com

අදහස් එක් කරන්න