
Um framework de ataque RPC para nós Blockchain.
.. image:: https://img.shields.io/pypi/v/teatime.svg :target: https://pypi.python.org/pypi/teatime
.. image:: https://img.shields.io/travis/dmuhs/teatime.svg :target: https://travis-ci.com/dmuhs/teatime
.. image:: https://codecov.io/gh/dmuhs/teatime/branch/master/graph/badge.svg?token=RP0WZ6NXUP :target: https://codecov.io/gh/dmuhs/teatime
.. image:: https://readthedocs.org/projects/teatime/badge/?version=latest :target: https://teatime.readthedocs.io/en/latest/?badge=latest :alt: Documentation Status
Teatime é uma estrutura de ataque RPC projetada para facilitar a identificação de configurações incorretas em nós de blockchain. Ela detecta uma grande variedade de problemas, desde vazamentos de informações até contas abertas e manipulação de configuração.
O objetivo é permitir ferramentas que escaneiem nós vulneráveis e minimizem o risco de ataques baseados em nó devido a vulnerabilidades comuns. Teatime usa uma arquitetura baseada em plugins, portanto, estender a biblioteca com suas próprias verificações é simples.
Observe que esta biblioteca ainda é uma PoC e carece de documentação. Se houver plugins que você gostaria de ver, sinta-se à vontade para entrar em contato comigo no Twitter!
Teatime funciona com Python 3.6+.
Para começar, basta executar
.. code-block:: console
$ pip3 install teatime
Alternativamente, clone o repositório e execute
.. code-block:: console
$ pip3 install .
Ou diretamente através do :code:setuptools do Python:
.. code-block:: console
$ python3 setup.py install
Para começar, basta instanciar uma classe :code:Scanner e passar o IP de destino, porta, tipo de nó e uma lista de plugins instanciados. Considere o seguinte exemplo para verificar se um nó está sincronizado e minerando:
.. code-block:: python
from teatime.scanner import Scanner
from teatime.plugins.context import NodeType
from teatime.plugins.eth1 import NodeSync, MiningStatus
TARGET_IP = "127.0.0.1"
TARGET_PORT = 8545
INFURA_URL = "Infura API Endpoint"
def get_scanner():
return Scanner(
ip=TARGET_IP,
port=TARGET_PORT,
node_type=NodeType.GETH,
plugins=[
NodeSync(infura_url=INFURA_URL, block_threshold=10),
MiningStatus(should_mine=False)
]
)
if __name__ == '__main__':
scanner = get_scanner()
report = scanner.run()
print(report.to_dict())
Confira o diretório de exemplos para mais pequenas amostras! Teatime é totalmente tipado, então fique à vontade para explorar as opções no seu IDE se a leitura da documentação não for sua preferência. :)
O futuro do Teatime é incerto, embora eu adoraria adicionar verificações mais amplas que vão além das interfaces RPC, especificamente para tecnologias como:
Se você quiser integrar plugins para cadeias menores e menos significativas, como Bitcoin ou imitações do Ethereum, sinta-se à vontade para bifurcar o projeto e integrá-los separadamente.