
RPC-фреймворк для атак на узлы блокчейна.
.. 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 — это фреймворк для атак на RPC, предназначенный для упрощения выявления неверных конфигураций в блокчейн-узлах. Он обнаруживает широкий спектр проблем: от утечек информации до открытых аккаунтов и манипуляций конфигурацией.
Цель — предоставить инструменты для сканирования уязвимых узлов и минимизировать риск атак на узлы, вызванных распространёнными уязвимостями. Teatime использует плагинную архитектуру, поэтому расширение библиотеки собственными проверками не составляет труда.
Обратите внимание: эта библиотека всё ещё является PoC и не имеет документации. Если есть плагины, которые вы хотели бы видеть, смело свяжитесь со мной в Twitter!
Teatime работает на Python 3.6+.
Для начала просто выполните
.. code-block:: console
$ pip3 install teatime
Или клонируйте репозиторий и выполните
.. code-block:: console
$ pip3 install .
Или напрямую через :code:setuptools Python:
.. code-block:: console
$ python3 setup.py install
Для начала просто создайте экземпляр класса :code:Scanner и передайте целевой IP, порт, тип узла и список созданных плагинов. Рассмотрите следующий пример для проверки, синхронизирован ли узел и майнит ли он:
.. 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())
Посмотрите директорию examples для дополнительных примеров! Teatime полностью типизирован, так что не стесняйтесь исследовать возможности в вашей IDE, если чтение документации не является вашим предпочтительным способом. :)
Будущее Teatime неопределённо, хотя я хотел бы добавить более широкие проверки, выходящие за рамки интерфейсов RPC, в частности для таких технологий, как:
Если вы хотите добавить плагины для меньших, менее значимых цепочек, таких как Bitcoin или клоны Ethereum, не стесняйтесь форкнуть проект и интегрировать их отдельно.