Blockchain is one of the technologies that was developed during the last decade. Due to its many advantages and, especially, its prospects on implementing decentralized, distributed and secure transactions, Blockchain managed to infiltrate in the technology world in a short amount of time. Initially, it was solely focused on financial transactions through the help of Bitcoin. Later, Ethereum did the next step which made Blockchain applicable to a wide variety of environments, like health and supply chain systems. However, the main advantage Blockchain can leverage relies on the creation of economically decentralized models. According to these models, every financial transaction takes place in a distributed system which is not part of any regulator, for example a bank. This system operates independently with the help of its users, while offering secure transaction handling in real time. An alternative funding mechanism has been proposed for this model. This mechanism is known as Initial Coin Offering or ICO and tries to aid financially small and medium-sized enterprises with an automated, secured and decentralized manner. However, as of any mechanism, an ICO can be easily designed using erroneous security methods and, thus, leading the enterprise to an economic failure. The goal of this diploma thesis is the technical analysis of an ICO process that takes place on a Blockchain platform. The analysis will be concentrated on the technical parts that can sabotage and diminish the security and the credibility of a such process and will present some solutions that can applied as countermeasures. At last, there will be an implementation of an ICO process which will, strictly, follow the analyzed material from the previous chapters.
Ανάλυση και μοντελοποίηση προφίλ προγραμματιστών μέσω τεχνικών εξόρυξης γνώση...
Software Security Analysis for an Initial Coin Offering Process on the Ethereum Blockchain
1. Ανάλυση ασφάλειας λογισμικού για τη διεξαγωγή
διαδικασίας αρχικής προσφοράς νομίσματος στο
Ethereum Blockchain
ΤΜΗΜΑ ΗΛΕΚΤΡΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ ΚΑΙ ΜΗΧΑΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ
ΑΡΙΣΤΟΤΕΛΕΙΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΟΝΙΚΗΣ
Επιβλέπων καθηγητής: κ. Ανδρέας Συμεωνίδης
Καμτζηρίδης Γεώργιος
ΑΕΜ: 8542
Οκτώβρης, 2019
ISSEL Intelligent Systems & Software Engineering Labgroup
2. ISSEL Intelligent Systems & Software Engineering Labgroup 2
Κίνητρο
• Επεκτείνει τη λειτουργία της σε μη οικονομοκεντρικά συστήματα
• Διακινεί νόμιμα μεγάλες χρηματικές ποσότητες
• Ενισχύει τη ψηφιοποίηση αγαθών και προϊόντων
• Βοηθά τη χρηματοδότηση μικρομεσαίων επιχειρήσεων
Τα τελευταία 4 χρόνια η τεχνολογία Blockchain μέσω της πλατφόρμας Ethereum:
Τα τελευταία 2 χρόνια μέσω του Ethereum:
• Πραγματοποιήθηκαν πάνω από 1337 ξεχωριστές χρηματοδοτήσεις επιχειρήσεων1
• Συλλέχθηκαν περίπου 8.158.239.066$ μέσω χρηματοδοτήσεων1
1 Πηγές: https://www.icodata.io/stats/2018, https://www.icodata.io/stats/2019
2 Πηγή: https://www.investopedia.com/news/ethereum-smart-contracts-vulnerable-
hacks-4-million-ether-risk/
Ωστόσο, την ίδια περίοδο σε Blockchain δίκτυα:
• Κλάπηκαν περισσότερα από 500.000.000$ λόγω ευπαθών λογισμικών2
• Πάνω από 4.000.000$ ήταν υπό την κατοχή ευάλωτων προγραμμάτων2
3. ISSEL Intelligent Systems & Software Engineering Labgroup 3
Σκοπός
• Παρουσίαση της τεχνολογίας Blockchain με έμφαση στο δίκτυο του Ethereum
• Ανάλυση της αρχιτεκτονικής του λογισμικού που λειτουργεί στο Ethereum
• Έρευνα σχετική με τις ευπάθειες των προγραμμάτων στο Ethereum
• Υπόδειξη χρήσης προτύπων σχεδίασης και γενικότερων λύσεων για την αντιμετώπιση των προβλημάτων
• Καθιέρωση καλών πρακτικών σε θέματα ασφαλείας που αφορούν την ανάπτυξη και παραγωγή
λογισμικού
Γενικά:
Ειδικότερα:
• Επεξήγηση μιας διαδικασίας αρχικής προσφοράς νομίσματος (Initial Coin Offering ή ICO)
• Αντιμετώπιση απειλών και λογικών σφαλμάτων ενός ICO
• Εφαρμογή εξειδικευμένων πρακτικών και συμβουλών κατά την ανάπτυξη ενός ICO
Τέλος, παρουσιάζεται αναλυτικά η σχεδίαση και υλοποίηση μιας διαδικασίας ICO με γνώμονα την ασφάλεια
και αξιοπιστία στην πλατφόρμα του Ethereum.
4. ISSEL Intelligent Systems & Software Engineering Labgroup 4
Γνώσεις που αποκτήθηκαν
• Χαρακτηριστικά δικτύου
• Αρχιτεκτονική λογισμικού
• Ευπάθειες λογισμικού
• Μέθοδοι αντιμετώπισης προβλημάτων
• Καλές πρακτικές
• Πρότυπα σχεδίασης
Γενικά: Ειδικότερα στο Ethereum:
• Τεχνολογία Blockchain
• Αρχική προσφορά νομίσματος (ICO)
Εν τέλει:
• Ασφαλή σχεδίαση και ανάπτυξη λογισμικού στο Ethereum
• Υλοποίηση λογισμικού για τη διεκπεραίωση ενός ICO
ακολουθώντας υψηλά πρότυπα ασφαλείας
5. ISSEL Intelligent Systems & Software Engineering Labgroup 5
Υπόβαθρο – Ethereum (1/2)
Τι είναι το Ethereum;
• Είναι ένα Blockchain δίκτυο
• Δημιουργήθηκε το 2014 από μια ομάδα προγραμματιστών στην Ελβετία
• Διαθέτει δικό του κρυπτονόμισμα, το ether
Γιατί ξεχωρίζει το δίκτυο του Ethereum;
Γιατί εκτός από την καταχώρηση οικονομικών συναλλαγών επιτρέπει και την
εκτέλεση προγραμμάτων γενικότερου σκοπού
Στο Ethereum:
• Καταχωρούνται προγράμματα τα οποία ονομάζονται έξυπνα συμβόλαια
(Smart Contracts)
• Οι χρήστες του μπορούν να αλληλεπιδράσουν με αυτά μέσω συναλλαγών
• Οι συναλλαγές εκτελούνται από τους miners
• Τα αποτελέσματα των συναλλαγών καταχωρούνται ξανά στην αλυσίδα
6. ISSEL Intelligent Systems & Software Engineering Labgroup 6
Υπόβαθρο – Ethereum (2/2)
• Στην πράξη το δίκτυο του Ethereum αποτελεί έναν παγκόσμιο υπολογιστή
• Τα προγράμματα γράφονται σε μια γλώσσα υψηλού επιπέδου
Η δημοφιλέστερη γλώσσα υψηλού επιπέδου είναι η Solidity1 η οποία:
1Αποθετήριο: https://github.com/ethereum/solidity
• Είναι σχεδιασμένη για την ανάπτυξη smart contracts
• Αποτελεί αλχημεία των γλωσσών Javascript και C++
• Είναι Turing-Complete
• Υποστηρίζει την αντικειμενοστραφή σχεδίαση λογισμικού
7. ISSEL Intelligent Systems & Software Engineering Labgroup 7
Υπόβαθρο – Αρχική προσφορά νομίσματος
• Μια μέθοδος συλλογικής χρηματοδότησης ενός προϊόντος ή μιας υπηρεσίας
• Λαμβάνει χώρα, κυρίως, σε Blockchain περιβάλλοντα
Λειτουργία:
Τι είναι;
1. Η εταιρία δημιουργεί μια ποσότητα από ψηφιακές μάρκες (tokens)
2. Συσχετίζει τα tokens με ένα προϊόν ή υπηρεσία
3. Κοστολογεί τα tokens βάσει της συσχέτισης
4. Διαθέτει τα tokens, σε διακριτά στάδια, σε τιμή μικρότερη απ’ αυτή που θα έχει τελικά το προϊόν ή η
υπηρεσία
Αποτέλεσμα:
• Η εταιρία χρηματοδοτείται άμεσα από τους πελάτες της
• Οι πελάτες αποκτούν το προϊόν ή την υπηρεσία που επιθυμούν σε χαμηλή τιμή
Κυριότερα πλεονεκτήματα:
• Αυτοματοποιημένη, αποκεντρωμένη και ανεξάρτητη διαδικασία
• Ορισμένες φορές ανεξάρτητη από κεντρικές αρχές, χωρίς κάποιο νομικό περιορισμό ή ρύθμιση
8. ISSEL Intelligent Systems & Software Engineering Labgroup 8
Μεθοδολογία – Επίθεση επανεισαγωγής
Δεδομένα:
• Τα smart contracts επιτρέπουν την παύση της εκτέλεσής τους ώστε να εκτελεστεί μια ρουτίνα ενός
εξωτερικού smart contract
• Μόλις ολοκληρωθεί η εκτέλεση της εξωτερικής ρουτίνας, το αρχικό smart contract συνεχίζει να εκτελείται
Πρόβλημα:
Λύση: χρήση προτύπου σχεδίασης ελέγχων-επιδράσεων-αλληλεπιδράσεων (Checks-Effects-
Interactions)
Βήματα:
Αποτέλεσμα: η εσωτερική κατάσταση του smart contract δεν εξαρτάται άμεσα από την
αλληλεπίδραση με το εξωτερικό σύστημα
Η εκτέλεση αυθαίρετου κώδικα μπορεί να δημιουργήσει καταστάσεις αναδρομής, όπου η εξωτερική ρουτίνα
καλεί, ξανά, το αρχικό smart contract επιτρέποντας τη μεταβολή της κατάστασής του με απρόσμενο τρόπο
1. Έλεγχος δεδομένων εισόδου
2. Μεταβολές στην εσωτερική κατάσταση του smart contract
3. Αλληλεπιδράσεις με εξωτερικά συστήματα
9. ISSEL Intelligent Systems & Software Engineering Labgroup 9
Μεθοδολογία – Επίθεση άρνησης υπηρεσίας
Δεδομένα:
• Στο δίκτυο του Ethereum ο αριθμός των συναλλαγών που μπορούν να καταχωρηθούν σε ένα block
περιορίζεται από το block gas limit
• Ένα smart contract μπορεί να εκτελεί συναλλαγές μαζικά
Πρόβλημα:
Λύση: χρήση προτύπου σχεδίασης Pull Over Push
Βήματα:
Αποτέλεσμα: εξασφαλίζεται η καταχώρηση των συναλλαγών στην αλυσίδα και οι ενέργειες ενός
χρήστη δεν επηρεάζουν τους υπόλοιπους χρήστες, αλλά ούτε και το σύνολο του συστήματος
• Μια συναλλαγή ενδέχεται να μην μπορεί να καταχωρηθεί λόγω της ποσότητας από gas που χρειάζεται
• Μαζικές ενέργειες μπορούν να αναβληθούν αέναα εξαιτίας κακοηθών χρηστών
1. Αποφυγή χρήσης βρόχων επανάληψης σε ανεξέλεγκτου μήκους πίνακες
2. Αποφυγή μαζικών ενεργειών
3. Εκκίνηση διαδικασίας από τον εκάστοτε χρήστη
10. ISSEL Intelligent Systems & Software Engineering Labgroup 10
Μεθοδολογία – Επίθεση εξουσιοδότησης
Δεδομένα:
• Η γλώσσα Solidity δίνει τη δυνατότητα λήψης της «ταυτότητας» του δράστη που εκτελεί την τρέχουσα
ρουτίνα, αλλά και αυτού που εκκίνησε τη διαδικασία
• Ο δράστης μπορεί να είναι είτε εξωτερικός λογαριασμός είτε λογαριασμός συμβολαίου
Πρόβλημα:
Λύση: εξουσιοδότηση αποκλειστικά και μόνο μέσω της «ταυτότητας» του τελευταίου χρήστη
Βήματα:
Αποτέλεσμα: εξασφαλίζεται ότι η εξουσιοδότηση γίνεται στον «πραγματικό» δράστη
Η χρήση του δράστη που εκκίνησε τη διαδικασία ως «ταυτότητα» για την εξουσιοδότηση μιας ενέργειας
μπορεί να προκαλέσει επιθέσεις τύπου man in the middle
1. Απαγόρευση χρήσης της μεταβλητής tx.origin σε θέματα εξουσιοδότησης
2. Αποκλειστική χρήση της μεταβλητής msg.sender σε θέματα εξουσιοδότησης
11. ISSEL Intelligent Systems & Software Engineering Labgroup 11
Μεθοδολογία – Καλές πρακτικές
• Έχει δηλώσεις περιορισμού σε όλες τις συναρτήσεις και τις μεταβλητές
• Έχει μηχανισμούς απενεργοποίησης και ενεργοποίησης λειτουργιών
• Πραγματοποιεί αποστολές ether μέσω της συνάρτησης transfer
• Λαμβάνει υπόψη καταστάσεις υπερχείλισης (Overflow) ή ανεπάρκειας (Underflow)
• Κάνει σωστή χρήση των μεταβλητών «χρόνου»
• Έχει αυτοματοποιημένους ελέγχους (Unit Tests) με υψηλή κάλυψη
• Έχει πλήρη τεκμηρίωση τόσο στον πηγαίο κώδικα όσο και σε μορφή εγγράφου ή ιστοσελίδας
Ένα smart contract πρέπει να:
12. ISSEL Intelligent Systems & Software Engineering Labgroup 12
Αποτελέσματα (1/6)
1. Τεκμηρίωση σε μορφή σχολίων
2. Checks-Effects-Interactions
A. Checks
B. Effects
C. Interactions
3. Χρήση της συνάρτησης transfer
Συνάρτηση επιστροφής χρημάτων
13. ISSEL Intelligent Systems & Software Engineering Labgroup 13
Αποτελέσματα (2/6)
Συνάρτηση εξαργύρωσης tokens
1. Pull Over Push
14. ISSEL Intelligent Systems & Software Engineering Labgroup 14
Αποτελέσματα (3/6)
Συνάρτηση μεταφοράς tokens
Χρήση συναρτήσεων βιβλιοθήκης
SafeMath για την αντιμετώπιση
περιπτώσεων overflow και underflow
16. ISSEL Intelligent Systems & Software Engineering Labgroup 16
Αποτελέσματα (5/6)
1. Χρήση του timestamp αντί του block number
2. Χρήση του msg.sender αντί του tx.origin
Τροποποιητές συναρτήσεων χρόνου
Τροποποιητές συναρτήσεων
εξουσιοδότησης
17. ISSEL Intelligent Systems & Software Engineering Labgroup 17
Αποτελέσματα (6/6)
Κάλυψη Unit Tests Τεκμηρίωση κώδικα
18. ISSEL Intelligent Systems & Software Engineering Labgroup 18
Υποδομή
Διεπαφή χρήστη Διακομιστής
• Αλληλεπίδραση χρηστών με τα smart contracts
• Παρακολούθηση των smart contracts
• Παρουσίαση αναλυτικών δεδομένων και
διαγραμμάτων
Τεχνολογίες:
• AngularJS: 1.6.5
• Typescript: 3.4.4
• Web3JS: 1.0.0-beta.37
• ChartJS: 2.8.0
• Παρακολούθηση της δραστηριότητας των smart
contracts
• Λεπτομερής καταγραφή των δεδομένων που
διαχειρίζονται τα smart contracts
• Διάθεση των δεδομένων στη διεπαφή για την
κατασκευή διαγραμμάτων
Τεχνολογίες:
• NodeJS: 11.10.1
• ExpressJS: 4.17.1
• MongoDB: 3.4.21
22. ISSEL Intelligent Systems & Software Engineering Labgroup 22
Συμπεράσματα
• Η ανάπτυξη ασφαλών smart contracts είναι μια απαιτητική διαδικασία
• Διαφέρει στη νοοτροπία από τη συμβατική παραγωγή λογισμικού
• Χρειάζεται εξειδικευμένες γνώσεις σε διάφορους τομείς
• Απαιτεί ιδιαίτερη προσοχή κατά τα στάδια της ανάλυσης ενός smart contract
• Η κατανόηση των κυριότερων ευπαθειών ενός smart contract είναι απαραίτητη
• Η εφαρμογή καλών πρακτικών κατά την ανάπτυξη είναι αναγκαία
Διαδικασία ανάπτυξης smart contracts για μια διαδικασία ICO
23. ISSEL Intelligent Systems & Software Engineering Labgroup 23
Μελλοντική εργασία
Ο τομέας της ασφάλειας είναι ραγδαία εξελισσόμενος, ιδιαίτερα σε μια πλατφόρμα ηλικίας 5 ετών.
Καθημερινά εντοπίζονται νέες ευπάθειες σε συστήματα που θεωρούνταν, μέχρι πρότερα, ασφαλή.
Το δίκτυο του Ethereum αναβαθμίζεται ετησίως, προσθέτοντας νέα χαρακτηριστικά και δημιουργώντας
καινούργιες απαιτήσεις ασφαλείας.
Εμφανίζονται νέα πρότυπα σχεδίασης για την αντιμετώπιση προβλημάτων στα smart contracts.
24. ISSEL Intelligent Systems & Software Engineering Labgroup 24
Ευχαριστίες
Θα ήθελα να ευχαριστήσω τον Αναπληρωτή καθηγητή κ. Ανδρέα Συμεωνίδη για την εμπιστοσύνη που μου έδειξε
με την αποδοχή της πρότασης για τη διπλωματική εργασία, καθώς και τη συμβολή του στην τελική μορφή αυτής
Επίσης, θα ήθελα να ευχαριστήσω τον κ. Δημήτρη Φιλιππίδη ο οποίος πρότεινε τη βασική ιδέα της εργασίας
Τέλος, θα ήθελα να ευχαριστήσω όλους εσάς που είστε σήμερα εδώ γι’ αυτήν την παρουσίαση