Nu este un secret pentru nimeni că Internetul este un mediu foarte ostil. De îndată ce ridicați un server, acesta este supus instantaneu la atacuri masive și scanări multiple. De exemplu
Tarpit este un port capcană folosit pentru a încetini conexiunile de intrare. Dacă un sistem terță parte se conectează la acest port, nu veți putea închide rapid conexiunea. Ea va trebui să-și irosească resursele de sistem și să aștepte până la expirarea timpului de conexiune sau să o încheie manual.
Cel mai adesea, prelatele sunt folosite pentru protecție. Tehnica a fost dezvoltată mai întâi pentru a proteja împotriva viermilor de computer. Și acum poate fi folosit pentru a ruina viețile spammerilor și cercetătorilor care sunt angajați în scanarea amplă a tuturor adreselor IP la rând (exemple pe Habré:
Unul dintre administratorii de sistem numit Chris Wellons se pare că s-a săturat să urmărească această rușine - și a scris un mic program
Instalarea utilitarului:
$ make
$ ./endlessh &
$ ssh -p2222 localhost
O tarpit implementată corect va lua mai multe resurse de la atacator decât de la tine. Dar nici măcar nu este o chestiune de resurse. Autor
În modul de funcționare, serverul Endlessh trebuie instalat pe portul obișnuit 22, unde huliganii bat în masă. Recomandările standard de securitate recomandă întotdeauna mutarea SSH pe un alt port, ceea ce reduce imediat dimensiunea jurnalelor cu un ordin de mărime.
Chris Wellons spune că programul său exploatează un paragraf din specificație SSH-
.
Este exact ceea ce face programul Endlessh: it trimite fără sfârșit flux de date generate aleatoriu, care respectă RFC 4253, adică trimit înainte de autentificare și fiecare linie începe cu SSH-
și nu depășește 255 de caractere, inclusiv caracterul de sfârșit de linie. În general, totul este conform standardului.
În mod implicit, programul așteaptă 10 secunde între trimiterea pachetelor. Acest lucru împiedică clientul să fie expirat, astfel încât clientul va fi prins pentru totdeauna.
Deoarece datele sunt trimise înainte de aplicarea criptografiei, programul este extrem de simplu. Nu are nevoie să implementeze nicio cifră și acceptă mai multe protocoale.
Autorul a încercat să se asigure că utilitarul consumă un minim de resurse și funcționează complet neobservat pe mașină. Spre deosebire de antivirusurile moderne și alte „sisteme de securitate”, acesta nu ar trebui să vă încetinească computerul. A reușit să minimizeze atât traficul, cât și consumul de memorie datorită unei implementări software ceva mai viclene. Dacă pur și simplu a lansat un proces separat pe o nouă conexiune, atunci potențialii atacatori ar putea lansa un atac DDoS prin deschiderea mai multor conexiuni pentru a epuiza resursele de pe mașină. De asemenea, un fir pe conexiune nu este cea mai bună opțiune, deoarece nucleul va irosi resurse gestionând firele.
De aceea, Chris Wellons a ales cea mai ușoară opțiune pentru Endlessh: un server cu un singur thread poll(2)
, unde clienții din capcană nu consumă practic resurse suplimentare, fără a număra obiectul socket din kernel și alți 78 de octeți pentru urmărire în Endlessh. Pentru a evita alocarea bufferelor de primire și trimitere pentru fiecare client, Endlessh deschide un socket de acces direct și traduce pachetele TCP direct, ocolind aproape întregul sistem de operare TCP/IP. Bufferul de intrare nu este deloc necesar, deoarece nu ne interesează datele primite.
Autorul spune că la momentul programului său
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 este ideal pentru scris prelate. De exemplu, acest cârlig va îngheța Firefox, Chrome sau orice alt client care încearcă să se conecteze la serverul HTTP pentru mai multe ore:
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 este un instrument excelent pentru pedepsirea bătăuților online. Adevărat, există un anumit risc, dimpotrivă, de a le atrage atenția asupra comportamentului neobișnuit al unui anumit server. Cineva
Huburi:
Python, securitatea informațiilor, software, administrare de sistem
Tag-uri:
SSH, Endlessh, tarpit, tarpit, trap, asycio
Capcană (tarpit) pentru conexiunile SSH de intrare
Nu este un secret pentru nimeni că Internetul este un mediu foarte ostil. De îndată ce ridicați un server, acesta este supus instantaneu la atacuri masive și scanări multiple. De exemplu
Tarpit este un port capcană folosit pentru a încetini conexiunile de intrare. Dacă un sistem terță parte se conectează la acest port, nu veți putea închide rapid conexiunea. Ea va trebui să-și irosească resursele de sistem și să aștepte până la expirarea timpului de conexiune sau să o încheie manual.
Cel mai adesea, prelatele sunt folosite pentru protecție. Tehnica a fost dezvoltată mai întâi pentru a proteja împotriva viermilor de computer. Și acum poate fi folosit pentru a ruina viețile spammerilor și cercetătorilor care sunt angajați în scanarea amplă a tuturor adreselor IP la rând (exemple pe Habré:
Unul dintre administratorii de sistem numit Chris Wellons se pare că s-a săturat să urmărească această rușine - și a scris un mic program
Instalarea utilitarului:
$ make
$ ./endlessh &
$ ssh -p2222 localhost
O tarpit implementată corect va lua mai multe resurse de la atacator decât de la tine. Dar nici măcar nu este o chestiune de resurse. Autor
În modul de funcționare, serverul Endlessh trebuie instalat pe portul obișnuit 22, unde huliganii bat în masă. Recomandările standard de securitate recomandă întotdeauna mutarea SSH pe un alt port, ceea ce reduce imediat dimensiunea jurnalelor cu un ordin de mărime.
Chris Wellons spune că programul său exploatează un paragraf din specificație SSH-
.
Este exact ceea ce face programul Endlessh: it trimite fără sfârșit flux de date generate aleatoriu, care respectă RFC 4253, adică trimit înainte de autentificare și fiecare linie începe cu SSH-
și nu depășește 255 de caractere, inclusiv caracterul de sfârșit de linie. În general, totul este conform standardului.
În mod implicit, programul așteaptă 10 secunde între trimiterea pachetelor. Acest lucru împiedică clientul să fie expirat, astfel încât clientul va fi prins pentru totdeauna.
Deoarece datele sunt trimise înainte de aplicarea criptografiei, programul este extrem de simplu. Nu are nevoie să implementeze nicio cifră și acceptă mai multe protocoale.
Autorul a încercat să se asigure că utilitarul consumă un minim de resurse și funcționează complet neobservat pe mașină. Spre deosebire de antivirusurile moderne și alte „sisteme de securitate”, acesta nu ar trebui să vă încetinească computerul. A reușit să minimizeze atât traficul, cât și consumul de memorie datorită unei implementări software ceva mai viclene. Dacă pur și simplu a lansat un proces separat pe o nouă conexiune, atunci potențialii atacatori ar putea lansa un atac DDoS prin deschiderea mai multor conexiuni pentru a epuiza resursele de pe mașină. De asemenea, un fir pe conexiune nu este cea mai bună opțiune, deoarece nucleul va irosi resurse gestionând firele.
De aceea, Chris Wellons a ales cea mai ușoară opțiune pentru Endlessh: un server cu un singur thread poll(2)
, unde clienții din capcană nu consumă practic resurse suplimentare, fără a număra obiectul socket din kernel și alți 78 de octeți pentru urmărire în Endlessh. Pentru a evita alocarea bufferelor de primire și trimitere pentru fiecare client, Endlessh deschide un socket de acces direct și traduce pachetele TCP direct, ocolind aproape întregul sistem de operare TCP/IP. Bufferul de intrare nu este deloc necesar, deoarece nu ne interesează datele primite.
Autorul spune că la momentul programului său
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 este ideal pentru scris prelate. De exemplu, acest cârlig va îngheța Firefox, Chrome sau orice alt client care încearcă să se conecteze la serverul HTTP pentru mai multe ore:
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 este un instrument excelent pentru pedepsirea bătăuților online. Adevărat, există un anumit risc, dimpotrivă, de a le atrage atenția asupra comportamentului neobișnuit al unui anumit server. Cineva
Sursa: www.habr.com