
Un framework d'attaque RPC pour les nœuds 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 est un framework d'attaque RPC conçu pour faciliter la détection de mauvaises configurations dans les nœuds de blockchain. Il repère une grande variété de problèmes, allant des fuites d'informations aux comptes ouverts, en passant par la manipulation de configuration.
L'objectif est de permettre aux outils de scanner les nœuds vulnérables et de minimiser le risque d'attaques basées sur des vulnérabilités courantes. Teatime utilise une architecture basée sur des plugins, ce qui rend l'extension de la bibliothèque avec vos propres vérifications simple.
Veuillez noter que cette bibliothèque est encore une preuve de concept (PoC) et qu'elle manque de documentation. Si vous souhaitez voir certains plugins, n'hésitez pas à me contacter sur Twitter !
Teatime fonctionne avec Python 3.6+.
Pour commencer, exécutez simplement
.. code-block:: console
$ pip3 install teatime
Sinon, clonez le dépôt et exécutez
.. code-block:: console
$ pip3 install .
Ou directement via :code:setuptools de Python :
.. code-block:: console
$ python3 setup.py install
Pour commencer, instanciez simplement une classe :code:Scanner et passez
l'IP cible, le port, le type de nœud et une liste de plugins instanciés.
Considérez l'exemple suivant pour vérifier si un nœud est synchronisé et en
train de miner :
.. 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())
Consultez le répertoire examples pour des exemples supplémentaires ! Teatime est entièrement typé, n'hésitez donc pas à explorer les options dans votre IDE si la lecture de la documentation n'est pas votre méthode préférée. :)
L'avenir de Teatime est incertain, même si j'aimerais ajouter des vérifications plus larges allant au-delà des interfaces RPC, en particulier pour des technologies telles que :
Si vous souhaitez intégrer des plugins pour des chaînes plus petites et moins significatives comme Bitcoin ou des clones d'Ethereum, n'hésitez pas à forker le projet et à les intégrer séparément.