Explorar o código

node: Add Transfer Verifier whitepaper (#4242)

* node: Add Transfer Verifier whitepaper
John Saigle hai 1 mes
pai
achega
1f8128463c
Modificáronse 3 ficheiros con 175 adicións e 1 borrados
  1. 1 1
      CONTRIBUTING.md
  2. 1 0
      cspell-custom-words.txt
  3. 173 0
      whitepapers/0014_transfer_verifier.md

+ 1 - 1
CONTRIBUTING.md

@@ -7,7 +7,7 @@ Wormhole is a mission-critical, high-stakes project. We optimize for quality ove
 and code reviews are our most important tools to accomplish that.
 
 - All new features must first be discussed in a GitHub issue before starting to implement them. For
-  complex features, it can be useful to submit a [formal design document](design/template.md).
+  complex features, it can be useful to submit a [formal design document](whitepapers/template.md).
 
 - Development happens on a long-lived development branch (`main` and `dev.v1`).
   Every change going into a development branch is reviewed individually (see below). Release branches may be used

+ 1 - 0
cspell-custom-words.txt

@@ -220,6 +220,7 @@ vimdiff
 vphash
 wasmhooks
 wasms
+WebSocket
 WORKDIR
 worldchain
 WorldChain

+ 173 - 0
whitepapers/0014_transfer_verifier.md

@@ -0,0 +1,173 @@
+# Transfer Verifier
+
+# Objective
+
+Add a defense-in-depth mechanism that cross-references a message publication from a Core Bridge with a corresponding transfer into the Token Bridge.
+
+# Background
+
+Wormhole works by watching for message publications on Core Bridge contracts for supported chains. Message Publications
+are created when a contract calls into the Core Bridge to trigger a state change in the Wormhole network.
+
+Generally speaking, if an attacker has a way to fraudulently emit message from the Core Bridge, the integrity of the system will be compromised. 
+
+In order to mitigate this risk for Token Transfers, it's possible to cross-reference the Core Bridge message publications with the
+calling contract i.e. the corresponding Token Bridge for that chain.
+
+# Goals
+
+- Detect and respond to a compromise of the Core Bridge pertaining to publishing arbitrary token transfer messages.
+- Provide another layer of defense for token transfers.
+- Allow for a flexible response in the Guardian when suspicious activity is detected.
+
+# Non-Goals
+
+- Block, delay, or otherwise interfere with message processing. The Transfer Verifier reports whether a message looks
+  safe or not, but it does not take any other action.
+- Address any message publications or Token Bridge activity other than token transfers.
+- Check cross-chain invariants. This mechanism only checks that pre-conditions are met on the sender side.
+- Protect against RPC compromises. (The Transfer Verifier relies on reliable RPC information.)
+- Protect against a compromise of the Token Bridge. (The Transfer Verifier checks for a potential _Core Bridge_ issue by querying the Token Bridge.)
+
+# Overview
+
+Users are able to send funds cross-chain by interacting with a Token Bridge contract deployed on the sending chain. When they
+transfer funds into this contract, it will make a corresponding call to the Core Bridge contract on the same chain. The
+Core Bridge contract will then make the details of the token transfer available via a message publishing process 
+(e.g. emitting an event on EVM based chains). The Wormhole Guardians run "watcher" software that observe this activity, 
+parse and verify the data, and finally issue a transfer on the destination chain to complete the cross-chain transfer.
+
+The ability to spoof messages coming from the Core Bridge would pose a serious threat to the integrity of the system, as
+it would trick the Guardians into minting or unlocking funds on the destination chain without a corresponding deposit on the source chain.
+
+In order to mitigate this attack, a Transfer Verifier is designed to cross-reference Core Bridge messages against the Token Bridge's
+activity. If there is no Token Bridge activity that matches the Core Bridge message, the Guardians will have the ability to
+respond to a potentially fraudulent message, such as by dropping or delaying it.
+
+The Transfer Verifier will not drop or delay messages itself. Another part of the node can respond as it sees fit.
+For example, the processor could be extended to process messages differently based on the status a Transfer Verifier
+gives them.
+
+# Detailed Design
+
+The overview section described an abstract view of how the Token Bridge, Core Bridge, and Guardians interact. However,
+different blockchain environments operate heterogeneously. For example, the EVM provides strict logs in the form
+of message receipts that can easily be verified. In contrast, Sui and Solana do not provide the same degree of introspection
+on historical account states. As a result, a Transfer Verifier must be implemented in an ad-hoc way using the state
+and tooling available to particular chains. RPC providers for different blockchains may prune state aggressively which
+provides another limitation on the degree of confidence.
+
+## Types of Implementations
+Broadly, a Transfer Verifier for a chain can be thought of as "strict" or "heuristic" based on whether or not
+historical account data is easily accessible. For "strict" implementations, the Guardian could drop
+the message publication completely as it is guaranteed to be fraudulent. For "heuristic" implementations, the Guardian
+could choose to delay the transfer, allowing time for the transaction to be manually triaged.
+
+## General Process
+
+- Connect to the chain (using a WebSocket subscription, or else by polling)
+- Monitor the Core Contract for Message Publications
+- Filter the Message Publications for Token Transfers
+- Examine Token Bridge activity, ensuring that at least as many funds were
+transferred into the Token Bridge as are encoded in the Core Bridge's message
+- If the above is not true, report the Message Publication as having failed verification.
+
+### Responding to suspicious messages
+If  a Transfer Verifier reports an error the Guardian should block the Message
+Publication if the implementation is "strict". If the implementation is
+"heuristic", the message should be delayed. This will allow some time for core
+contributors to analyze the message and associated logs for potential bugs or
+malicious activity.
+
+In order to handle messages flexibly, they can be tagged with a "verification
+state". This state will be embedded in to the message itself to allow for
+different parts of the message publication process within the node to handle
+messages in specific ways. For example, an `Anomalous` message originating from
+Sui could be treated in a different way than one coming from Solana. As chains
+are developed, they may introduce other tools or logging artifacts that result
+in a Transfer Verifier implementation to become more or less strict.
+
+Some example "verification states" are:
+- Not verified
+- Not applicable
+- Verified
+- Anomalous
+- Rejected
+- Could not verify
+
+Messages can have an initial state of `Not verified` which should eventually be changed to one of the other states.
+
+Messages marked as `Not applicable` should be processed normally. This state
+will be used for messages that are not Token Transfers, as only Token Transfers
+are process by  a Transfer Verifier.
+
+A `Verified` message is in a "known good" state and should be processed normally.
+
+Both `Anomalous` and `Rejected` represent potentially dangerous states. `Anomalous` should be used for "heuristic"
+Transfer Verifier implementations and `Rejected` should be used for "strict" implementations. `Rejected` messages
+must be dropped and must not result in a VAA creation for the message. `Anomalous` messages can be delayed, though
+other potential responses may be appropriate depending on the reliability of  a Transfer Verifier implementation
+and how likely `Anomalous` messages are to occur in practice.
+
+`Could not verify` refers to transactions that could be correctly parsed for whatever reason. This state signals
+that an attempt was made to verify a transfer but that it could not be completed successfully.
+
+### Sequencing with the Governor and the Accountant
+
+Assuming both are enabled, the processor first sends a message to the Governor and then to the Accountant once the
+message is released by the Governor.
+
+Checks relating to  a Transfer Verifier should occur before the checks to the Governor or the Accountant. If a message
+is `Rejected` or `Anomalous`, it should be dropped or delayed before it is included in the Governor or Accountant.
+This prevents a scenario where a `Rejected` message might still consume outgoing Governor capacity, for example.
+
+## Implementations
+
+### Ethereum
+
+The EVM provides a Receipt containing detailed logs for all of the contracts that were interacted with during the transactions.
+The Receipt can be parsed and filtered to isolate Token Bridge and Core Bridge activity and the details are precise. For these
+reasons the Ethereum implementation can be considered "strict". If  a Transfer Verifier is enabled, the Guardians will not
+publish Message Publications in violation of the invariants checked by  a Transfer Verifier.
+
+For EVM implementations, the contents of the [LogMessagePublished event](https://github.com/wormhole-foundation/wormhole/blob/ab34a049e55badc88f2fb1bd8ebd5e1043dcdb4a/ethereum/contracts/Implementation.sol#L12-L26)
+can be observed and parsed.
+
+# Deployment Considerations
+
+## Modularity
+Because  a Transfer Verifier will be integrated with the Watcher code, bugs in its implementations could lead to messages
+being missed. For this reason, the changes to the watcher code must be minimal, well-tested, and reversible. It should
+be possible to disable a Transfer Verifier entirely or on a per-chain basis by a Guardian without the need for a 
+new release.
+
+## Testing
+The Transfer Verifier should be implemented in a standalone package and distributed with a CLI tool that allows users
+to verify its accuracy. This would allow for isolated testing and development outside of the context of critical Guardian code.
+It should be possible to run the standalone tool for long periods of time to ensure that the mechanism is strict and does
+not produce false positives.
+
+# Security Considerations
+
+## Interactions with the Governor
+
+The idea of delaying unusual transfers overlaps to some extent with the Governor's delay mechanism. It is tempting to
+leverage this existing mechanism, e.g. by adding a suspicious transfer to the Governor's pending list. 
+
+There are some complexities to consider if this route is chosen, outlined below.
+
+### Multiple Delays
+If a Transfer Verifier result causes a message to be delayed, this should be considered against other delays that may
+be introduced. For example, a suspicious message on a governed chain with a notional value beyond the Governor's "big
+transaction limit" may result in a message being delayed twice.
+
+### Flow Cancel can release transfers early
+
+The Flow Cancel mechanism can result in the "daily limit" of the Governor being reduced under specific conditions.
+If suspicious transfers are queued alongside regular transfers, and Flow
+Cancel is enabled, the suspicious transfers may become released early.
+
+It should be noted that this only affects small transfers, as Flow Cancel does not affect transfers over the big
+transfer limit.
+
+More details about the Flow Cancel feature can be found in the [Governor whitepaper](./0007_governor.md).