Գաղտնիք չէ, որ ինտերնետը շատ թշնամական միջավայր է։ Հենց որ դուք բարձրացնում եք սերվերը, այն անմիջապես ենթարկվում է զանգվածային հարձակումների և բազմաթիվ սկանավորման: Օրինակ
Tarpit-ը ծուղակ է, որն օգտագործվում է մուտքային կապերը դանդաղեցնելու համար: Եթե երրորդ կողմի համակարգը միանա այս պորտին, դուք չեք կարողանա արագ փակել կապը: Նա պետք է վատնի իր համակարգի ռեսուրսները և սպասի մինչև կապի ժամանակի վերջանալը կամ ձեռքով դադարեցնի այն:
Ամենից հաճախ բրեզենտները օգտագործվում են պաշտպանության համար: Տեխնիկան առաջին անգամ մշակվել է համակարգչային որդերից պաշտպանվելու համար: Եվ այժմ այն կարող է օգտագործվել սպամերի և հետազոտողների կյանքը փչացնելու համար, ովքեր զբաղվում են անընդմեջ բոլոր IP հասցեների լայնածավալ սկանավորմամբ (օրինակներ Habré-ում.
Քրիս Ուելոնս անունով համակարգի ադմինիստրատորներից մեկը, ըստ երևույթին, հոգնել է այս խայտառակությունը դիտելուց, և նա գրել է մի փոքրիկ ծրագիր
Կոմունալ ծառայության տեղադրում.
$ make
$ ./endlessh &
$ ssh -p2222 localhost
Պատշաճ կերպով իրականացված tarpit-ը հարձակվողից ավելի շատ ռեսուրսներ կխլի, քան ձեզանից: Բայց դա նույնիսկ ռեսուրսների խնդիր չէ: Հեղինակ
Գործառնական ռեժիմում Endlessh սերվերը պետք է տեղադրվի սովորական 22 պորտի վրա, որտեղ խուլիգանները զանգվածաբար թակում են: Անվտանգության ստանդարտ առաջարկությունները միշտ խորհուրդ են տալիս SSH-ը տեղափոխել այլ նավահանգիստ, որն անմիջապես նվազեցնում է տեղեկամատյանների չափը մեծության կարգով:
Քրիս Ուելոնսն ասում է, որ իր ծրագիրը օգտագործում է ճշգրտման մեկ պարբերությունը SSH-
.
Սա հենց այն է, ինչ անում է Endlessh ծրագիրը ուղարկում է անվերջ պատահականորեն ստեղծված տվյալների հոսք, որոնք համապատասխանում են RFC 4253-ին, այսինքն՝ ուղարկում են մինչև իսկությունը, և յուրաքանչյուր տող սկսվում է SSH-
և չի գերազանցում 255 նիշը, ներառյալ տողերի վերջավորության նիշը: Ընդհանուր առմամբ, ամեն ինչ ստանդարտի համաձայն է:
Լռելյայնորեն, ծրագիրը սպասում է 10 վայրկյան փաթեթներ ուղարկելու միջև: Սա թույլ չի տալիս հաճախորդին ժամանակավորել, ուստի հաճախորդը ընդմիշտ կմնա թակարդում:
Քանի որ տվյալները ուղարկվում են նախքան ծածկագրման կիրառումը, ծրագիրը չափազանց պարզ է: Այն կարիք չունի որևէ գաղտնագրման ներդրման և աջակցում է բազմաթիվ արձանագրությունների:
Հեղինակը փորձել է ապահովել, որ կոմունալը սպառում է նվազագույն ռեսուրսներ և ամբողջովին աննկատ աշխատում է մեքենայի վրա: Ի տարբերություն ժամանակակից հակավիրուսների և այլ «անվտանգության համակարգերի», այն չպետք է դանդաղեցնի ձեր համակարգիչը: Նրան հաջողվել է նվազագույնի հասցնել ինչպես երթևեկությունը, այնպես էլ հիշողության սպառումը մի փոքր ավելի խորամանկ ծրագրային ապահովման ներդրման շնորհիվ: Եթե այն պարզապես գործարկի առանձին գործընթաց նոր կապի վրա, ապա պոտենցիալ հարձակվողները կարող են DDoS հարձակում սկսել՝ բացելով բազմաթիվ կապեր՝ սարքի ռեսուրսները սպառելու համար: Մեկ կապի համար մեկ շարանը նույնպես լավագույն տարբերակը չէ, քանի որ միջուկը կվատնի ռեսուրսները՝ կառավարելով թելերը:
Ահա թե ինչու Քրիս Ուելոնսն ընտրեց ամենաթեթև տարբերակը Endlessh-ի համար՝ մեկ թելերով սերվեր: poll(2)
, որտեղ ծուղակում գտնվող հաճախորդները գործնականում չեն սպառում լրացուցիչ ռեսուրսներ՝ չհաշված միջուկի վարդակից օբյեկտը և ևս 78 բայթ՝ Endlessh-ում հետևելու համար։ Յուրաքանչյուր հաճախորդի համար ստանալու և ուղարկելու բուֆերներ հատկացնելու անհրաժեշտությունից խուսափելու համար 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-ն իդեալական է թրթուրներ գրելու համար: Օրինակ, այս կեռիկը կսառեցնի 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-ը հիանալի գործիք է առցանց կռվարարներին պատժելու համար: Ճիշտ է, կա որոշակի ռիսկ, ընդհակառակը, նրանց ուշադրությունը հրավիրելու որոշակի սերվերի անսովոր պահվածքի վրա: Ինչ-որ մեկը
Հանգույցներ:
Python, Տեղեկատվական անվտանգություն, Ծրագրեր, Համակարգի կառավարում
Tags:
SSH, Endlessh, tarpit, tarpit, trap, asycio
Թակարդ (tarpit) մուտքային SSH միացումների համար
Գաղտնիք չէ, որ ինտերնետը շատ թշնամական միջավայր է։ Հենց որ դուք բարձրացնում եք սերվերը, այն անմիջապես ենթարկվում է զանգվածային հարձակումների և բազմաթիվ սկանավորման: Օրինակ
Tarpit-ը ծուղակ է, որն օգտագործվում է մուտքային կապերը դանդաղեցնելու համար: Եթե երրորդ կողմի համակարգը միանա այս պորտին, դուք չեք կարողանա արագ փակել կապը: Նա պետք է վատնի իր համակարգի ռեսուրսները և սպասի մինչև կապի ժամանակի վերջանալը կամ ձեռքով դադարեցնի այն:
Ամենից հաճախ բրեզենտները օգտագործվում են պաշտպանության համար: Տեխնիկան առաջին անգամ մշակվել է համակարգչային որդերից պաշտպանվելու համար: Եվ այժմ այն կարող է օգտագործվել սպամերի և հետազոտողների կյանքը փչացնելու համար, ովքեր զբաղվում են անընդմեջ բոլոր IP հասցեների լայնածավալ սկանավորմամբ (օրինակներ Habré-ում.
Քրիս Ուելոնս անունով համակարգի ադմինիստրատորներից մեկը, ըստ երևույթին, հոգնել է այս խայտառակությունը դիտելուց, և նա գրել է մի փոքրիկ ծրագիր
Կոմունալ ծառայության տեղադրում.
$ make
$ ./endlessh &
$ ssh -p2222 localhost
Պատշաճ կերպով իրականացված tarpit-ը հարձակվողից ավելի շատ ռեսուրսներ կխլի, քան ձեզանից: Բայց դա նույնիսկ ռեսուրսների խնդիր չէ: Հեղինակ
Գործառնական ռեժիմում Endlessh սերվերը պետք է տեղադրվի սովորական 22 պորտի վրա, որտեղ խուլիգանները զանգվածաբար թակում են: Անվտանգության ստանդարտ առաջարկությունները միշտ խորհուրդ են տալիս SSH-ը տեղափոխել այլ նավահանգիստ, որն անմիջապես նվազեցնում է տեղեկամատյանների չափը մեծության կարգով:
Քրիս Ուելոնսն ասում է, որ իր ծրագիրը օգտագործում է ճշգրտման մեկ պարբերությունը SSH-
.
Սա հենց այն է, ինչ անում է Endlessh ծրագիրը ուղարկում է անվերջ պատահականորեն ստեղծված տվյալների հոսք, որոնք համապատասխանում են RFC 4253-ին, այսինքն՝ ուղարկում են մինչև իսկությունը, և յուրաքանչյուր տող սկսվում է SSH-
և չի գերազանցում 255 նիշը, ներառյալ տողերի վերջավորության նիշը: Ընդհանուր առմամբ, ամեն ինչ ստանդարտի համաձայն է:
Լռելյայնորեն, ծրագիրը սպասում է 10 վայրկյան փաթեթներ ուղարկելու միջև: Սա թույլ չի տալիս հաճախորդին ժամանակավորել, ուստի հաճախորդը ընդմիշտ կմնա թակարդում:
Քանի որ տվյալները ուղարկվում են նախքան ծածկագրման կիրառումը, ծրագիրը չափազանց պարզ է: Այն կարիք չունի որևէ գաղտնագրման ներդրման և աջակցում է բազմաթիվ արձանագրությունների:
Հեղինակը փորձել է ապահովել, որ կոմունալը սպառում է նվազագույն ռեսուրսներ և ամբողջովին աննկատ աշխատում է մեքենայի վրա: Ի տարբերություն ժամանակակից հակավիրուսների և այլ «անվտանգության համակարգերի», այն չպետք է դանդաղեցնի ձեր համակարգիչը: Նրան հաջողվել է նվազագույնի հասցնել ինչպես երթևեկությունը, այնպես էլ հիշողության սպառումը մի փոքր ավելի խորամանկ ծրագրային ապահովման ներդրման շնորհիվ: Եթե այն պարզապես գործարկի առանձին գործընթաց նոր կապի վրա, ապա պոտենցիալ հարձակվողները կարող են DDoS հարձակում սկսել՝ բացելով բազմաթիվ կապեր՝ սարքի ռեսուրսները սպառելու համար: Մեկ կապի համար մեկ շարանը նույնպես լավագույն տարբերակը չէ, քանի որ միջուկը կվատնի ռեսուրսները՝ կառավարելով թելերը:
Ահա թե ինչու Քրիս Ուելոնսն ընտրեց ամենաթեթև տարբերակը Endlessh-ի համար՝ մեկ թելերով սերվեր: poll(2)
, որտեղ ծուղակում գտնվող հաճախորդները գործնականում չեն սպառում լրացուցիչ ռեսուրսներ՝ չհաշված միջուկի վարդակից օբյեկտը և ևս 78 բայթ՝ Endlessh-ում հետևելու համար։ Յուրաքանչյուր հաճախորդի համար ստանալու և ուղարկելու բուֆերներ հատկացնելու անհրաժեշտությունից խուսափելու համար 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-ն իդեալական է թրթուրներ գրելու համար: Օրինակ, այս կեռիկը կսառեցնի 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-ը հիանալի գործիք է առցանց կռվարարներին պատժելու համար: Ճիշտ է, կա որոշակի ռիսկ, ընդհակառակը, նրանց ուշադրությունը հրավիրելու որոշակի սերվերի անսովոր պահվածքի վրա: Ինչ-որ մեկը
Source: www.habr.com