diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 12fd506..1b41823 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -8,6 +8,8 @@ build_and_deploy: - pdflatex -synctex=1 -interaction=nonstopmode -file-line-error -recorder main.tex && biber "main.bcf" && makeglossaries main && pdflatex -synctex=1 -interaction=nonstopmode -file-line-error -recorder main.tex && pdflatex -synctex=1 -interaction=nonstopmode -file-line-error -recorder main.tex - cd ../presentation_17_03_23 - pdflatex -synctex=1 -interaction=nonstopmode -file-line-error -recorder main.tex && pdflatex -synctex=1 -interaction=nonstopmode -file-line-error -recorder main.tex + - cd ../presentation_metier + - pdflatex -synctex=1 -interaction=nonstopmode -file-line-error -recorder main.tex && pdflatex -synctex=1 -interaction=nonstopmode -file-line-error -recorder main.tex only: refs: @@ -21,3 +23,4 @@ build_and_deploy: paths: - ./docs/presentation_17_03_23/main.pdf - ./docs/rapportFinal/main.pdf + - ./docs/presentation_metier/main.pdf diff --git a/docs/presentation_metier/centralisation/img/fonctions.png b/docs/presentation_metier/centralisation/img/fonctions.png new file mode 100644 index 0000000..64a72aa Binary files /dev/null and b/docs/presentation_metier/centralisation/img/fonctions.png differ diff --git a/docs/presentation_metier/centralisation/img/fonctions_atk.png b/docs/presentation_metier/centralisation/img/fonctions_atk.png new file mode 100644 index 0000000..8b7ea81 Binary files /dev/null and b/docs/presentation_metier/centralisation/img/fonctions_atk.png differ diff --git a/docs/presentation_metier/centralisation/img/nomad_fixed.png b/docs/presentation_metier/centralisation/img/nomad_fixed.png new file mode 100644 index 0000000..c4a3792 Binary files /dev/null and b/docs/presentation_metier/centralisation/img/nomad_fixed.png differ diff --git a/docs/presentation_metier/centralisation/img/nomad_hack.png b/docs/presentation_metier/centralisation/img/nomad_hack.png new file mode 100644 index 0000000..99dd69f Binary files /dev/null and b/docs/presentation_metier/centralisation/img/nomad_hack.png differ diff --git a/docs/presentation_metier/centralisation/img/sysvar_atk.png b/docs/presentation_metier/centralisation/img/sysvar_atk.png new file mode 100644 index 0000000..41c80e6 Binary files /dev/null and b/docs/presentation_metier/centralisation/img/sysvar_atk.png differ diff --git a/docs/presentation_metier/centralisation/img/sysvar_transaction.png b/docs/presentation_metier/centralisation/img/sysvar_transaction.png new file mode 100644 index 0000000..0c96d56 Binary files /dev/null and b/docs/presentation_metier/centralisation/img/sysvar_transaction.png differ diff --git a/docs/presentation_metier/centralisation/img/worm_fixed.png b/docs/presentation_metier/centralisation/img/worm_fixed.png new file mode 100644 index 0000000..d3ce3dd Binary files /dev/null and b/docs/presentation_metier/centralisation/img/worm_fixed.png differ diff --git a/docs/presentation_metier/centralisation/index.tex b/docs/presentation_metier/centralisation/index.tex new file mode 100644 index 0000000..f66ffdf --- /dev/null +++ b/docs/presentation_metier/centralisation/index.tex @@ -0,0 +1,5 @@ +\subsection{Wormhole} +\input{centralisation/wormhole.tex} + +\subsection{Nomad} +\input{centralisation/nomad.tex} \ No newline at end of file diff --git a/docs/presentation_metier/centralisation/nomad.tex b/docs/presentation_metier/centralisation/nomad.tex new file mode 100644 index 0000000..3eb57ff --- /dev/null +++ b/docs/presentation_metier/centralisation/nomad.tex @@ -0,0 +1,71 @@ +\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} + \pause + \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}{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}{L'attaque} + \begin{block}{L'attaque} + \begin{itemize} + \item Premier Août 2022. + \item Apparu après mise a jour utilisant la fonction \textit{process} pour vérifier la racine. + \item 190 000 000 de dollars de liquidité volé. + \end{itemize} + \end{block} + \pause + \begin{block}{L'erreur d'implémentation} + \begin{itemize} + \item Erreur d'implémentation sur \textit{Réplica}. + \item Problème de vérification de racine. + \item Possibilité de valider n'importe quel message. + \end{itemize} + \end{block} +\end{frame} + +\begin{frame}{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. + \end{itemize} + \end{block} + \begin{figure} + \centering + \includegraphics[scale = 0.3]{centralisation/img/nomad_hack.png} + \caption{Contrat Réplica erroné} + \end{figure} +\end{frame} + +\begin{frame}{L'attaque} + \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} + \caption{Contrat Réplica corrigé} + \end{figure} +\end{frame} \ No newline at end of file diff --git a/docs/presentation_metier/centralisation/wormhole.tex b/docs/presentation_metier/centralisation/wormhole.tex new file mode 100644 index 0000000..d524a31 --- /dev/null +++ b/docs/presentation_metier/centralisation/wormhole.tex @@ -0,0 +1,188 @@ +% 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} + \pause + \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}{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 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} + \pause + \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}{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} +\end{frame} + +\begin{frame} + \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. + \end{itemize} + \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} +% Etapes de transfer +% \begin{itemize} +% \item Vérification des signatures +% \item post\_vaa appelle la fonction verify signature +% \item Verification effectuée par un programme de solana +% \item image des input dans le code %https://github.com/wormhole-foundation/wormhole/blob/91296e67722032debf04e95c71b3d701d4625c5b/solana/bridge/program/src/instructions.rs#L153 +% \end{itemize} +%\end{frame} + +%\begin{frame} +% Erreur d'implémentation dans verify signature +% \begin{itemize} +% \item Pas de vérification du programme renseigné +% \item possibilité d'utiliser un programme externe +% \end{itemize} +%\end{frame} +% +%\begin{frame} +% Correction de l'erreur +% \begin{itemize} +% \item Commit pushed le 2 Fevrier +% \item change load........ rajoute checked +% \item Confirme l'utilisation du programme interne +% \item qqun observait le git en attendant un push interessant +% \end{itemize} +%\end{frame} +% +%\begin{frame} +% Besoins (???) de l'attaque +% \begin{itemize} +% \item passer la collection des signatures +% \item passer la vérification des signatures +% \end{itemize} +%\end{frame} +% +%\begin{frame} +% Collection des signatures +% \begin{itemize} +% \item utilisation de signatures d'une ancienne transaction +% \end{itemize} +%\end{frame} +% +%\begin{frame} +% Vérification des signatures +% \begin{itemize} +% \item Exploitation de l'erreur d'implémentation de verify\_signature +% \end{itemize} +%\end{frame} +% +%\begin{frame} +% +%\end{frame} +% +%\begin{frame}{Wormhole} +% Attaque sur le bridge entre Solana et Ethereum : +% \begin{itemize} +% \item Quelques heures après un correctif non déployé. +% \item Exploitation d'un défaut d'implémentation. +% \item La transaction de l'attaquant est signée par les gardiens. +% \end{itemize} +%\end{frame} +%\begin{frame}{Wormhole} +% \begin{block}{Fonctionnement du dépôt de jeton} +% \begin{itemize} +% \item Appel de plusieurs fonctions de vérification lors du dépôt. +% \begin{itemize} +% \item $complete\_wrapped$ $\Rightarrow$ +% $transfer\_message$ +% $\Rightarrow$ $post\_vaa$ +% $\Rightarrow$ $verify\_signature$ +% \end{itemize} +% %\item Fonction complete\_wrapped appellée lors du mint de Wormhole ETH sur Solana +% %\item transfer\_message en paramètre : spécifie le token et combien doit être mint, signé par les gardiens +% %\item Contrat sur Solana, créé en utilisant la fonction post\_vaa qui vérifie la signature des gardiens +% %\item Appel a verify\_signature qui utilise un programme de Solana pour verifier les signatures +% \end{itemize} +% Erreur d'implémentation dans $verify\_signature$. +% \end{block} +%\end{frame} +% +%\begin{frame}{Wormhole} +% \begin{block}{$verify\_signature$ appelle un programme de vérification} +% \begin{itemize} +% \item $Sysvar: Instructions$ : Alias du programme. +% \item Vérification des signatures des gardiens. +% \item Il est possible d'utiliser d'une adresse différente. +% \end{itemize} +% \end{block} +% %\begin{figure} +% % \centering +% % \includegraphics[scale = 0.3]{img/wormhole_img1.png} +% %\end{figure} +%\end{frame} +% +%\begin{frame}{Wormhole} +% \begin{itemize} +% \item Adresse tierce entrée par l'attaquant. +% \item Validation de la transaction sans signature. +% \end{itemize} +% %\begin{figure} +% %\centering +% %\includegraphics[scale = 0.7]{img/wormhole_img2.png} +% %\end{figure} +%\end{frame} \ No newline at end of file diff --git a/docs/presentation_metier/decentralisation/cve_2022_3006.png b/docs/presentation_metier/decentralisation/cve_2022_3006.png new file mode 100644 index 0000000..3805298 Binary files /dev/null and b/docs/presentation_metier/decentralisation/cve_2022_3006.png differ diff --git a/docs/presentation_metier/decentralisation/index.tex b/docs/presentation_metier/decentralisation/index.tex new file mode 100644 index 0000000..136d543 --- /dev/null +++ b/docs/presentation_metier/decentralisation/index.tex @@ -0,0 +1,40 @@ +\subsection{Réserves de Liquidités} + +\begin{frame} + \frametitle{Présentation du concept de réserve de liquidité} + \begin{itemize} + \item Smart Contract fournissant une solution d'échange d'actifs + \begin{itemize} + \item Des "holders" déposent des actifs dans la pools. + \item Des "traders" échangent des actifs contre des tokens de la pools. + \end{itemize} + \end{itemize} + \begin{figure} + \centering + \includegraphics[scale = 0.22]{decentralisation/reserve_liquidite.png} + \caption{BTCRelay} + \end{figure} +\end{frame} + +\subsection{CVE-2022-3006} +\begin{frame} + \frametitle{CVE-2022-3006} + \begin{itemize} + \item Concerne une erreur d'implémentation dans les reserve de liquidités du réseau SEAL. + \item Details du fonctionnement de SEAL: + \begin{itemize} + \item Les "holders" gagnent une comission à chaque transaction sous forme de jetons LP. + \item Ils peuvent ensuite retirer leurs jetons LP contre des actifs grace à l'appel de la fonction \textit{breed()}. + \item Cette fonctions à pour effet secondaire d'utiliser $1,6\%$ des récompenses des "holders" pour les reinvestir dans la reserves. + \end{itemize} + \end{itemize} +\end{frame} + +\begin{frame} + \frametitle{CVE-2022-3006} + \begin{figure} + \centering + \includegraphics[scale = 0.3]{decentralisation/cve_2022_3006.png} + \caption{CVE-2022-3006} + \end{figure} +\end{frame} \ No newline at end of file diff --git a/docs/presentation_metier/decentralisation/reserve_liquidite.png b/docs/presentation_metier/decentralisation/reserve_liquidite.png new file mode 100644 index 0000000..740e852 Binary files /dev/null and b/docs/presentation_metier/decentralisation/reserve_liquidite.png differ diff --git a/docs/presentation_metier/img/amu.png b/docs/presentation_metier/img/amu.png new file mode 100644 index 0000000..e27d5d6 Binary files /dev/null and b/docs/presentation_metier/img/amu.png differ diff --git a/docs/presentation_metier/main.tex b/docs/presentation_metier/main.tex new file mode 100644 index 0000000..6424e57 --- /dev/null +++ b/docs/presentation_metier/main.tex @@ -0,0 +1,57 @@ +\documentclass{beamer} +\usetheme{Boadilla} +\usecolortheme{orchid} + +\usepackage[T1]{fontenc} +\usepackage[utf8]{inputenc} +\usepackage[french]{babel} + +\addtobeamertemplate{navigation symbols}{}{% + \usebeamerfont{footline}% + \usebeamercolor[fg]{footline}% + \hspace{1em}% + \insertframenumber/\inserttotalframenumber +} +\usepackage{ulem} +\usepackage{tkz-tab} +\setbeamertemplate{blocks}[rounded]% +[shadow=true] +\AtBeginSection{% + \begin{frame} + \tableofcontents[sections=\value{section}] + \end{frame} +} + +\newenvironment*{remerciements}{% + \renewcommand*{\abstractname}{Remerciements} + \begin{abstract} +}{ + \end{abstract} +} + +\title[Swap Cross-Blockchain]{Echange de jetons inter-blockchains} +\subtitle{Projet de fin d'études: Master 2 Informatique Option Fiabilité et sécurité informatique 2022-2023 \\ Présentation métier} +\author[M2 FSI]{VOLPE Dorian, ROTONDO Eloïse, TESTUD Romain,\\DE CAMPOU Louis, JOLY Amaury \\ \textbf{Encadrants :} TRAVERS Corentin, LABOUREL Arnaud \\[2ex] \includegraphics[scale=0.1]{./img/amu.png}} +\institute[Aix-Marseille Université]{M2 Fiabilité et sécurité informatique} +\date{17 Mars 2023} + +\begin{document} + +\maketitle + +\begin{frame} + \begin{remerciements} + Merci à M. TRAVERS Corentin et M. LABOUREL Arnaud pour la proposition de ce sujet et son encadrement. + \end{remerciements} +\end{frame} + +\begin{frame}{Table des matières} + \tableofcontents +\end{frame} + +\section{Centralisation} +\input{centralisation/index.tex} +\section{Décentralisation} +\input{decentralisation/index.tex} + +\end{document} \ No newline at end of file