Projeto de Botnet com Python, Websockets, Async e Javascript

Overview

A3 - Botnets

Este é um repositório onde documentarei todo o processo de pesquisa e desenvolvimento de uma botnet do zero com python, websockets e asyncio, com o objetivo de aprender networking e redes, programação assincrona e outros conceitos.

Esta botnet será apresentada como demonstração durante a apresentação do trabalho de conclusão da matéria de Sistemas Computacionais e Segurança.

O tema escolhido pelo meu grupo foi o de Botnets, uma coleção de tecnologias utilizada para controlar de maneira distribuida um exercito de dispositivos infectados, podendo gerar muitos impactos com o grande poder de processamento e geração de tráfego.

Indice

Setup

Resumo do Projeto

Este projeto vai ser muito complexo e contará com diversas partes, entre elas um servidor de controle que comandará os zumbis, um frontend malicioso que infecta as vítimas e um site que servirá de vítima da botnet, sofrendo um ataque de DDoS durante a apresentação ao vivo.

C2

O servidor de controle

Este será um servidor feito em python utilizando as bibliotecas asyncio e websocket que irá fazer a gestão, controle e monitoramento dos zumbis.

Este será responsável por manter uma espécie de Heartbeat, um pulso que irá checar a conexão de todos os zumbis e enviar uma mensagem para todos os zumbis que não estão conectados ou perderam a conexão com o servidor de controle.

O servidor de c2 será responsável também por enviar o comando de ataque e parada para os zumbis, que irão agir de maneira coordenada e sobrecarregar a vítima, causando um ataque distribuido de negação de serviço, um ataque de DDoS.

Zumbi

O frontend malicioso

Esta é a aplicação web onde as vítimas irão se conectar e se comunicar com o servidor de controle, aguardando ordens de ataques utilizando a tecnologia de websockets.

Os clientes conectados respondem um pulso enviado a cada segundo pelo servidor de controle para provar que ainda estão conectados e ativos, esperando o comando e o alvo do ataque.

Vitima

A vítima do ataque distribuido

Este será um servidor de demonstração que irá sofrer o ataque coordenado da botnet e será sobrecarregado, tendo sua funcionalidade prejudicada pelos zumbis.

Este irá contar com uma interface de monitoramento, onde iremos observar ao vivo o estado da vitima, quantas requisições estão chegando, a quantidade de banda, tráfego recebido e outras métricas.

Protocolos de Rede

Handshake

O processo começa com a abertura da conexão websocket, que é feita pelo cliente.
O servidor então responde com um pacote handshake_ping e uma chave aleatória de 4 bytes que será utilizada para criptografar as mensagens entre o cliente e o servidor.
O cliente então responde com um handshake_pong e outra chave aleatória de 4 bytes, além de um nome de tamanho entre 4 e 16 caracteres, usado para identificar o zumbi.
Usando o nome e as duas chaves trocadas, o servidor faz o hash da chave e envia um pacote do tipo handshake_success, contendo o hash.
O cliente então compara o hash local com o hash recebido pelo servidor e se os hashes forem iguais, envia outro pacote handshake_success, indicando ao servidor de controle que a comunicação foi iniciada e as rotinas de heartbeats e ataque deve começar.

Linha do tempo: (C=cliente, S=servidor))

1 C ---> S | C Abre conexão websocket
2 C <--- S | S Envia handshake_ping e chave aleatória server_key
3 C ---> S | C Envia handshake_pong, nome do zumbi e chave aleatória client_key
4 C <--- S | S Envia handshake_success, hash sha256 do nome do zumbi e das duas chaves trocadas
5 C ---> S | C Envia handshake_success após comparar os hashes sha256 do identificador do zumbi e o hash recebido pelo servidor, confirmando que a troca de chaves foi válida e que já está esperando as rotinas de heartbeat e ataque

Este processo é puramente por Proof of Concept e não é de fato um handshake real, já que este processo é feito por trás dos panos já que estamos usando a tecnologia de websockets.

demo conexão handshake

gif com o processo completo de comunicação, desde o handshake até os heartbeats, com 3 clientes simultâneos

Heartbeat

O servidor de controle envia um pacote do tipo heartbeat_ping para todos os zumbis que estão conectados, que devem responder com um heartbeat_pong para comprovarem que estão ativos e esperando o comando de ataque.

Teste com 100 zumbis conectados:

teste com 100 zumbis conectados

Pacotes de Rede

Lista com os pacotes e conteudos trocados entre o servidor de controle e zumbis, serializados em formato JSON

  • handshake_ping (C<--S)
  • handshake_pong (C-->S)s
  • handshake_success (C<--S)
  • heartbeat_ping (C<--S)
  • heartbeat_pong (C-->S)

handshake_ping

Pacote enviado do servidor de controle para um zumbi após uma nova conexão via websocket ser aberta, esperando como resposta um handshake pong contendo um nome completo para o cliente

{
"type": "handshake_ping",
"server_key": "<chave aleatoria>"
}

handshake_pong

Pacote enviado do zumbi para o servidor de controle respondendo o handshake_ping, enviando também o nome/identificador do zumbi, composto por um nome escolhido pelo cliente ou gerado automaticamente, uma chave aleatória gerada no cliente e a chave recebida no handshake_ping e um checksum do nome completo, que será validado no servidor

{
"type": "handshake_pong",
"client_name": "<identificador zumbi>",
"checksum": "<checksum>"
}

handshake_success

Pacote enviado do servidor de controle para um zumbi confirmando a conexão bem sucedida e confirmando o inicio do pulso do heartbeat

{
"type": "handshake_success",
"checksum": server_checksum
}

heartbeat_ping

Pacote enviado do servidor de controle para todos os zumbis a cada 1s, mantendo controle de todos os zumbis que ainda estão ativos e que perderam a conexão

{
"type":"heartbeat_ping",
"seed": "<numero aleatorio>"
}

heartbeat_pong

Pacote enviado do zumbi ao servidor de controle respondendo um heartbeat_ping e realizando um Proof-of-Work (PoW) e retornando para o servidor de controle. Caso o PoW seja válido, o cliente é mantido na lista de zumbis ativos.
Por ser um processo demonstrativo, o algorítmo de Proof of Work é só inverter a seed enviada pelo servidor.

{
"type":"heartbeat_pong",
"pow": "<numero aleatorio ao contrario>"
}

Setup

Work in progress, não está funcional ainda Para rodar o projeto em sua própria máquina, são necessárias algumas dependências.

Dependencias

  • python3 (3.9.7 foi usado para o desenvolvimento)
  • python3-pip
  • python3-venv

Instalação

O repositório conta com um arquivo de setup que instala todas as dependências necessárias em sistemas Unix usando apt e outras utilidades do shell.

Linux/Unix

Para instalar com o projeto você precisa de um usuário com privilégios administrativos, ou seja, um usuário com permissão de root.

Instalador

chmod +x ./build
./build

Instalando manualmente

sudo apt install python3 python3-pip python3-venv

Executando

Guia temporário, o projeto contará com instalador e utils para rodar

servidor c2:

cd ./c2_server/; python ./server.py

webapp:

cd ./frontend/; python ./app.py
You might also like...

Conways-game-of-life - A Conway's Game Of Life project using Python

conways-game-of-life A Conway's Game Of Life project using Python JavaScript Devlog January 1st 2022: also need to remember Python's syntax a bit will

Sep 23, 2022

This is a nodejs implementation of the python example

DOC This is a nodejs implementation of the python example provided in https://github.com/EnAccess/OpenPAYGO-Token. In case of anything please feel fre

Jan 25, 2022

Mercury: easily convert Python notebook to web app and share with others

Mercury: easily convert Python notebook to web app and share with others

Mercury Share your Python notebooks with others Easily convert your Python notebooks into interactive web apps by adding parameters in YAML. Simply ad

Dec 30, 2022

Detect the executable python interpreter cmd in $PATH.

detect-python-interpreter Detect the executable python interpreter cmd in $PATH. Installation $ npm install --save detect-python-interpreter Usage con

Apr 12, 2022

Write python code in Solid.js using Pyscript.

PyScript Solid Use PyScript together with Solid.js. Getting Started Installation Install pyscript-solid using npm: npm install pyscript-solid # or yar

Oct 25, 2022

Typescript package compatible with python's pickle loads/dumps

picklefriend Typescript package compatible with python's pickle loads/dumps Installation npm i picklefriend Usage import { pickle } from 'picklefriend

Oct 27, 2022

Python based web application to import, connect and analyze manufacturing data from multiple data sources.

Python based web application to import, connect and analyze manufacturing data from multiple data sources.

Analysis Platform Analysis Platform is an open source web application to import, connect and visualize factory IoT data. It helps to collect, link and

Dec 1, 2022

a website to manage queue with FLASK-PYTHON

wc-queue-with-flask Hello I just needed to organize wc-queue when we go to family trips and made a website with Flask library (for making sample websi

Jul 10, 2022

Run Python code directly in the browser.

Run Python code directly in the browser.

Run Python code directly in the browser. Try it out! Quickstart Install react-py with: npm i react-py Then, wrap your app in a PythonProvider componen

Dec 31, 2022
Owner
Luiz Melo
Red Teamer, Offensive Security Researcher; Python developer; Blockchain Enthusiast;
Luiz Melo
This is a project that is used to execute python codes in the web page. You can install and use it in django projects, You can do any operations that can be performed in python shell with this package.

Django execute code This is a project that is used to execute python codes in the web page. You can install and use it in django projects, You can do

Shinu 5 Nov 12, 2022
Server Sent Events (SSE) and WebSockets for the remix framework

remix-sse Server Side Events (SSE) and WebSockets made easy with Remix. Introduction This monorepo contains several packages for working with SSE and

Baggers 23 Dec 26, 2022
JavaScript project for the Leaderboard list app, using Webpack and ES6 features, notably modules. this app consume the Leaderboard API using JavaScript async and await and add some styling.

Leaderboard Project JavaScript project for the Leaderboard list app, using Webpack and ES6 features, notably modules. this app consume the Leaderboard

bizimungu pascal 4 May 20, 2022
Leader Board is a simple project based on JavaScript programing language. The purpose of this project is to work with APIs and ASYNC & AWAIT methods. I have used vanilla JavaScript with web pack to implement this project

Leader Board - JavaScript Project Table of contents Overview The challenge Screenshot Links Project Setup commands My process Built with What I learne

Mahdi Rezaei 7 Oct 21, 2022
This gem aims to let you quickly send SMS from JavaScript and Python using the Orange SMS API.

Orange SMS API ?? Orange SMS is a client library that allow you to send SMS with Javascript and Python using the Orange SMS API Disclaimer ⛔ This gem

Honorable Con 6 Aug 4, 2022
A concise collection of classes for PHP, Python, JavaScript and Ruby to calculate great circle distance, bearing, and destination from geographic coordinates

GreatCircle A set of three functions, useful in geographical calculations of different sorts. Available for PHP, Python, Javascript and Ruby. Live dem

null 72 Sep 30, 2022
Lightweight, Portable, Flexible Distributed/Mobile Deep Learning with Dynamic, Mutation-aware Dataflow Dep Scheduler; for Python, R, Julia, Scala, Go, Javascript and more

Apache MXNet (incubating) for Deep Learning Apache MXNet is a deep learning framework designed for both efficiency and flexibility. It allows you to m

The Apache Software Foundation 20.2k Jan 5, 2023
Quick One Liners in JavaScript, TypeScript, Python, Rust, Java, Ruby, C, C++

ONE LINERS This repository contains cool and simple one line utility functions to easily use common repetitive methods in JavaScript, TypeScript, Pyth

Divin Irakiza 3 Mar 2, 2022
An obsidian plugin that allows code blocks executed interactively in sandbox like jupyter notebooks. Supported language rust、kotlin、python、Javascript、TypeScript etc.

Obsidian Code Emitter This plugin allows code blocks executed interactively like jupyter notebooks. Currently, support languages: Rust Kotlin JavaScri

YiiSh 38 Dec 28, 2022
High-quality QR Code generator library in Java, TypeScript/JavaScript, Python, Rust, C++, C.

QR Code generator library Introduction This project aims to be the best, clearest QR Code generator library in multiple languages. The primary goals a

Nayuki 3.3k Jan 4, 2023