
Un marco de ataque RPC para nodos 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 es un framework de ataque RPC diseñado para facilitar la detección de configuraciones incorrectas en nodos de blockchain. Detecta una gran variedad de problemas, desde fugas de información hasta cuentas abiertas y manipulación de configuraciones.
El objetivo es permitir que las herramientas escaneen nodos vulnerables y minimicen el riesgo de ataques basados en nodos debido a vulnerabilidades comunes. Teatime utiliza una arquitectura basada en plugins, por lo que extender la biblioteca con tus propias verificaciones es sencillo.
Ten en cuenta que esta biblioteca sigue siendo un PoC y carece de documentación. Si hay plugins que te gustaría ver, ¡no dudes en contactarme en Twitter!
Teatime funciona con Python 3.6+.
Para comenzar, simplemente ejecuta
.. code-block:: console
$ pip3 install teatime
Alternativamente, clona el repositorio y ejecuta
.. code-block:: console
$ pip3 install .
O directamente a través de :code:setuptools de Python:
.. code-block:: console
$ python3 setup.py install
Para comenzar, simplemente instancia una clase :code:Scanner y pasa la IP de destino, el puerto, el tipo de nodo y una lista de plugins instanciados. Considera el siguiente ejemplo para verificar si un nodo está sincronizado y minando:
.. 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())
¡Consulta el directorio de ejemplos para ver más ejemplos pequeños! Teatime está completamente tipado, así que siéntete libre de explorar opciones en tu IDE si leer la documentación no es tu opción preferida. :)
El futuro de Teatime es incierto, aunque me encantaría añadir verificaciones más amplias que vayan más allá de las interfaces RPC, específicamente para tecnologías como:
Si deseas integrar plugins para cadenas más pequeñas y menos significativas, como Bitcoin o imitaciones de Ethereum, siéntete libre de bifurcar el proyecto e integrarlas por separado.