Diapo Rom1
Before Width: | Height: | Size: 60 KiB After Width: | Height: | Size: 60 KiB |
Before Width: | Height: | Size: 54 KiB After Width: | Height: | Size: 54 KiB |
After Width: | Height: | Size: 14 KiB |
BIN
docs/presentation_metier/centralisation/img/nomad/nomad_fonc.png
Normal file
After Width: | Height: | Size: 21 KiB |
BIN
docs/presentation_metier/centralisation/img/nomad/nomad_hack.png
Normal file
After Width: | Height: | Size: 46 KiB |
Before Width: | Height: | Size: 113 KiB |
Before Width: | Height: | Size: 7.8 KiB After Width: | Height: | Size: 7.8 KiB |
Before Width: | Height: | Size: 8.7 KiB After Width: | Height: | Size: 8.7 KiB |
Before Width: | Height: | Size: 36 KiB After Width: | Height: | Size: 36 KiB |
After Width: | Height: | Size: 93 KiB |
After Width: | Height: | Size: 97 KiB |
Before Width: | Height: | Size: 22 KiB After Width: | Height: | Size: 22 KiB |
After Width: | Height: | Size: 26 KiB |
After Width: | Height: | Size: 78 KiB |
@ -1,31 +1,41 @@
|
||||
\begin{frame}{Le protocole Nomad}
|
||||
\begin{block}{Mise en contexte}
|
||||
\begin{itemize}
|
||||
\item Protocole d'échange inter-blockchains.
|
||||
\item Utilisation de \textit{smart contracts}.
|
||||
\end{itemize}
|
||||
\end{block}
|
||||
\begin{block}{Les \textit{smart contracts}}
|
||||
\begin{itemize}
|
||||
\item \textit{Home} : "Boite d'envoi", déployé sur les blockchain source.
|
||||
\item \textit{Replica} : "Boite de réception", déployé sur les blockchains de destination.
|
||||
\end{itemize}
|
||||
\end{block}
|
||||
\begin{frame}{Nomad - Mise en contexte}
|
||||
\centering
|
||||
\includegraphics[scale = 0.8]{centralisation/img/nomad/nomad_contracts.png}
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}{Le protocole Nomad}
|
||||
\begin{block}{Fonctionnement d'une transaction}
|
||||
\begin{itemize}
|
||||
\item Création de la transaction.
|
||||
\item Vérification du message par sa racine.
|
||||
\item Accepte la racine.
|
||||
\item Envoi.
|
||||
\end{itemize}
|
||||
\end{block}
|
||||
%\begin{frame}{Le protocole Nomad}
|
||||
% \begin{block}{Mise en contexte}
|
||||
% \begin{itemize}
|
||||
% \item Protocole d'échange inter-blockchains.
|
||||
% \item Utilisation de \textit{smart contracts}.
|
||||
% \end{itemize}
|
||||
% \end{block}
|
||||
% \begin{block}{Les \textit{smart contracts}}
|
||||
% \begin{itemize}
|
||||
% \item \textit{Home} : "Boite d'envoi", déployé sur les blockchain source.
|
||||
% \item \textit{Replica} : "Boite de réception", déployé sur les blockchains de destination.
|
||||
% \end{itemize}
|
||||
% \end{block}
|
||||
%\end{frame}
|
||||
|
||||
\begin{frame}{Nomad - Mise en contexte}
|
||||
\centering
|
||||
\includegraphics[scale = 0.9]{centralisation/img/nomad/nomad_fonc.png}
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}{L'attaque}
|
||||
\begin{block}{L'attaque}
|
||||
%\begin{frame}{Le protocole Nomad}
|
||||
% \begin{block}{Fonctionnement d'une transaction}
|
||||
% \begin{itemize}
|
||||
% \item Création de la transaction.
|
||||
% \item Vérification du message par sa racine.
|
||||
% \item Accepte la racine.
|
||||
% \item Envoi.
|
||||
% \end{itemize}
|
||||
% \end{block}
|
||||
%\end{frame}
|
||||
|
||||
\begin{frame}{Nomad - L'attaque}
|
||||
\begin{block}{Attaque sur les briges de Nomad}
|
||||
\begin{itemize}
|
||||
\item Premier Août 2022.
|
||||
\item Apparu après mise a jour utilisant la fonction \textit{process} pour vérifier la racine.
|
||||
@ -41,29 +51,31 @@
|
||||
\end{block}
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}{L'attaque}
|
||||
\begin{frame}{Nomad - L'attaque}
|
||||
\begin{block}{Erreur d'initialisation}
|
||||
\begin{itemize}
|
||||
\item Racine initialisée à $0$, fonctionnement normal.
|
||||
\item Mais, racine $0$ pré-approuvée.
|
||||
\item Tout message non vérifié sera valide.
|
||||
\item Racine initialisée à $0$.
|
||||
\item Racine $0$ pré-approuvée.
|
||||
\end{itemize}
|
||||
$\rightarrow$ Tout message non vérifié sera valide.
|
||||
\end{block}
|
||||
\begin{figure}
|
||||
\centering
|
||||
\includegraphics[scale = 0.3]{centralisation/img/nomad_hack.png}
|
||||
\caption{Contrat Réplica erroné}
|
||||
\end{figure}
|
||||
\includegraphics[scale = 0.35]{centralisation/img/nomad/nomad_code_hack.png}
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}{L'attaque}
|
||||
\begin{frame}{Nomad - L'attaque}
|
||||
\centering
|
||||
\includegraphics[scale = 0.9]{centralisation/img/nomad/nomad_hack.png}
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}{Nomad - Correctif}
|
||||
\begin{itemize}
|
||||
\item Correction le 3 septembre 2022
|
||||
\item La racine nulle n'est plus pré-approuvée.
|
||||
\end{itemize}
|
||||
\begin{figure}
|
||||
\centering
|
||||
\includegraphics[scale = 0.3]{centralisation/img/nomad_fixed.png}
|
||||
\includegraphics[scale = 0.35]{centralisation/img/nomad/nomad_code_fixed.png}
|
||||
\caption{Contrat Réplica corrigé}
|
||||
\end{figure}
|
||||
\end{frame}
|
@ -1,80 +1,106 @@
|
||||
% Auteur : Romain TESTUD
|
||||
\begin{frame}{Le protocole Wormhole}
|
||||
\begin{block}{Mise en contexte}
|
||||
\begin{itemize}
|
||||
\item Solution d'échanges inter-blockchains.
|
||||
\item utilisation de bridges.
|
||||
\end{itemize}
|
||||
\end{block}
|
||||
\begin{block}{Les étapes d'un transfert}
|
||||
\begin{itemize}
|
||||
\item Formulation de la transaction.
|
||||
\item Récupération et vérification des signatures des gardiens.
|
||||
\item Envoi de la transaction.
|
||||
\end{itemize}
|
||||
\end{block}
|
||||
\begin{figure}
|
||||
\centering
|
||||
\includegraphics[scale = 0.3]{centralisation/img/fonctions.png}
|
||||
\caption{Fonctions appelées lors d'un transfert}
|
||||
\end{figure}
|
||||
\begin{frame}{Wormhole - Mise en contexte}
|
||||
\centering
|
||||
\includegraphics[scale = 0.69]{centralisation/img/wormhole/worm_fonc.png}
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}{L'attaque}
|
||||
\begin{frame}{Wormhole - Mise en contexte}
|
||||
\begin{itemize}
|
||||
\item Transaction standard.
|
||||
\end{itemize}
|
||||
\centering
|
||||
\includegraphics[scale = 0.45]{centralisation/img/wormhole/sysvar_trans_normal.png}
|
||||
\end{frame}
|
||||
%\begin{frame}{Le protocole Wormhole}
|
||||
% \begin{block}{Mise en contexte}
|
||||
% \begin{itemize}
|
||||
% \item Solution d'échanges inter-blockchains.
|
||||
% \item utilisation de bridges.
|
||||
% \end{itemize}
|
||||
% \end{block}
|
||||
% \begin{block}{Les étapes d'un transfert}
|
||||
% \begin{itemize}
|
||||
% \item Formulation de la transaction.
|
||||
% \item Récupération et vérification des signatures des gardiens.
|
||||
% \item Envoi de la transaction.
|
||||
% \end{itemize}
|
||||
% \end{block}
|
||||
% \begin{figure}
|
||||
% \centering
|
||||
% \includegraphics[scale = 0.3]{centralisation/img/fonctions.png}
|
||||
% \caption{Fonctions appelées lors d'un transfert}
|
||||
% \end{figure}
|
||||
%\end{frame}
|
||||
|
||||
\begin{frame}{Wormhole - L'attaque}
|
||||
\begin{block}{Attaque sur le bridge entre Solana et Ethereum}
|
||||
\begin{itemize}
|
||||
\item Le 2 Février 2022.
|
||||
\item 120 000 ETH de perte.
|
||||
\item 120 000 ETH (300M €) de perte.
|
||||
\item Correction de bug publié mais pas encore en production.
|
||||
\end{itemize}
|
||||
\end{block}
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}{L'attaque}
|
||||
\begin{block}{Passer la signature des gardiens?}
|
||||
Utilisation de signatures d'une transaction antérieure.
|
||||
\end{block}
|
||||
\begin{block}{Passer la vérification ?}
|
||||
\begin{block}{L'attaquant a contourné\dots}
|
||||
\begin{itemize}
|
||||
\item Exploitation d'une erreur d'implémentation dans \textit{verify\_signature}
|
||||
\item Appel à un programme externe.
|
||||
\item la signature des gardiens.
|
||||
\item la vérification des signatures.
|
||||
\end{itemize}
|
||||
\begin{figure}
|
||||
\centering
|
||||
\includegraphics[scale = 0.3]{centralisation/img/sysvar_atk.png}
|
||||
\caption{Appel à la fonction de vérification}
|
||||
\end{figure}
|
||||
\end{block}
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}{L'attaque}
|
||||
\begin{itemize}
|
||||
\item Utilisation d'une nouvelle adresse.
|
||||
\item Validation des signatures par défaut.
|
||||
\end{itemize}
|
||||
\begin{figure}
|
||||
\centering
|
||||
\includegraphics[scale = 0.3]{centralisation/img/sysvar_transaction.png}
|
||||
\caption{Appel à la fonction de vérification}
|
||||
\end{figure}
|
||||
\begin{frame}{Wormhole - L'attaque}
|
||||
\centering
|
||||
\includegraphics[scale=0.69]{centralisation/img/wormhole/worm_hack.png}
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}
|
||||
%\begin{frame}{L'attaque}
|
||||
% \begin{block}{Passer la signature des gardiens?}
|
||||
% Utilisation de signatures d'une transaction antérieure.
|
||||
% \end{block}
|
||||
% \begin{block}{Passer la vérification ?}
|
||||
% \begin{itemize}
|
||||
% \item Exploitation d'une erreur d'implémentation dans \textit{verify\_signature}
|
||||
% \item Appel à un programme externe.
|
||||
% \end{itemize}
|
||||
% \begin{figure}
|
||||
% \centering
|
||||
% \includegraphics[scale = 0.3]{centralisation/img/sysvar_atk.png}
|
||||
% \caption{Appel à la fonction de vérification}
|
||||
% \end{figure}
|
||||
% \end{block}
|
||||
%\end{frame}
|
||||
|
||||
|
||||
|
||||
\begin{frame}{Wormhole - L'attaque}
|
||||
\begin{itemize}
|
||||
\item Transaction de l'attaquant.
|
||||
\end{itemize}
|
||||
\centering
|
||||
\includegraphics[scale = 0.45]{centralisation/img/wormhole/sysvar_transaction_hack.png}
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}{Wormhole - L'attaque}
|
||||
\begin{block}{Transaction validée et envoyée}
|
||||
\begin{itemize}
|
||||
\item 120 000 ETH transmis.
|
||||
\item Sans avoir déposé de jetons au préalable.
|
||||
\item 0 wETH déposés.
|
||||
\end{itemize}
|
||||
\end{block}
|
||||
\begin{block}{Correctif}
|
||||
Vérification des appels externes.\\
|
||||
\centering
|
||||
\includegraphics[scale = 0.5]{centralisation/img/wormhole/worm_fixed.png}
|
||||
\end{block}
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}{Correctif}
|
||||
\begin{itemize}
|
||||
\item Vérification de l'appel par \textit{sysvar\_instruction}
|
||||
\end{itemize}
|
||||
\begin{figure}
|
||||
\centering
|
||||
\includegraphics[scale = 0.3]{centralisation/img/worm_fixed.png}
|
||||
\caption{Appel à la fonction de vérification}
|
||||
\end{figure}
|
||||
\end{frame}
|
||||
%\begin{frame}{Correctif}
|
||||
% \begin{itemize}
|
||||
% \item Vérification de l'appel par \textit{sysvar\_instruction}
|
||||
% \end{itemize}
|
||||
% \begin{figure}
|
||||
% \centering
|
||||
% \includegraphics[scale = 0.3]{centralisation/img/wormhole/worm_fixed.png}
|
||||
% \caption{Appel à la fonction de vérification}
|
||||
% \end{figure}
|
||||
%\end{frame}
|