Test DAO Attack pada Remix Ethereum dan Testnet IELE (Cardano)

Image for post
Image for post
Photo by Pawel Janiak on Unsplash

Pada kesempatan kali ini, kita akan mencoba membuat sebuah DAO attack pada smart contract di remix ethereum dan IELE testnet. Kita akan melihat dao attack yang akan berfungsi pada remix ethereum, tetapi tidak akan berfungsi pada IELE.

Sebelum kita memulai membuat smart contract untuk DAO attack, saya akan menjelaskan sedikit tentang DAO. DAO yang berarti Decentralized Autonomous Organization adalah sebuah proyek organisasi pada Blockchain Ethereum. Tujuan utama DAO adalah membangun sebuah organisasi yang sepenuhnya berfungsi tanpa manajemen yang hirarki.

DAO adalah sebuah kontrak yang mengimplementasikan Crowd-Funding Platform, yang mencapai 150 Juta Dollar sebelum terjadinya serangan pada 18 Juni 2016. Pada 18 Juni 2016, ada pihak yang tidak bertanggung jawab yang menemukan bug pada code DAO dan memanfaatkan bug tersebut dan berhasil mencuri lebih dari 50 juta dollar.

Oke, sekarang mari kita mulai. Saya akan memberikan panduan, penjelasan, langkah-langkahnya satu persatu. Sebelum memulai membuat smart contract pada remix ethereum, kita akan membuat sebuah akun wallet terlebih dahulu dengan menggunakan metamask. Metamask adalah sebuah wallet untuk menyimpan ether yang berupa extension pada google chrome. Kenapa kita harus membuat wallet terlebih dahulu ? karena jika kita mendeploy smart contract, ataupun mengeksekusi setiap function dalam smart contract kita memerlukan ether. Baiklah, kita mulai langkah-langkahnya.

Instal metamask pada browser anda, sebaiknya gunakan google chrome. Masuk ke google chrome web store dan ketik “metamask”.

Image for post
Image for post
Metamask

Setelah itu klik “add to chrome”, dan pilih “add extension”.

Image for post
Image for post
Tambahkan extension Metamask

Kemudian jika sudah menginstall metamask extension pada browser anda, akan muncul icon metamask pada browser anda di bagian kanan atas. Klik icon tersebut dan klik “continue”.

Image for post
Image for post
Selesai menginstal Metamask

Langkah selanjutnya anda akan diminta membuat password wallet anda. Masukkan password anda dan konfirmasi password anda, setelah itu klik “create”.

Buat password untuk Metamask

Jika sudah membuat password, klik next sampai anda mendapatkan secret backup phrase anda. Copy dan paste secret backup anda.

Image for post
Image for post
Kalimat rahasia untuk backup

Setelah itu masukkan kembali secret backup phrase anda untuk mengkonfirmasi.

Image for post
Image for post
Konfirmasi kalimat rahasia untuk backup

Klik next dan pilih “view account” pada “directly deposit ether”.

Image for post
Image for post
Deposit Ether

Kemudian anda akan mendapatkan akun address anda, lalu klik “export private key”.

Image for post
Image for post
Export kunci rahasia

Masukkan password anda dan klik “confirm”. Sebaiknya jika anda menggunakan akun sungguhan anda, simpan private key anda dengan sebaik-baiknya jangan sampai orang lain mengetahui private key anda.

Image for post
Image for post
Akun Ether

Pada metamask extension, terdapat beberapa pilihan network pada ethereum yaitu Main Ethereum network adalah network utama pada ethereum. Dan juga ada beberapa network lain seperti ropsten, kovan, rinkeby yang merupakan testnet ethereum. Testnet menjalankan protokol yang sama dengan main net, hanya saja testnet digunakan untuk testing sebelum mendeploy smart contract ke dalam main net. Oke, untuk test sekarang ini kita akan menggunakan Ropsten network. Pilih Ropsten test network pada Metamask.

Image for post
Image for post
Jaringan test Ropsten

Karena akun yang anda buat masih baru, anda perlu mendeposit ether ke wallet anda dalam ropsten network. Untuk mendapatkan ether anda copy terlebih dahulu address anda dengan mengklik nama akun anda (Default nama akun “Account 1”). Setelah dicopy, masuk ke link berikut http://faucet.ropsten.be:3001/ dan paste address anda kemudian klik “send me 1 test ether”.

Image for post
Image for post
Ether faucet

Setelah progress saat deposit selesai, anda bisa kembali buka metamask anda dan melihat deposit ether anda telah masuk.

Image for post
Image for post
Akun berisi Ether

Baiklah, kita sudah selesai mempersiapkan wallet kita untuk membuat contract pada ethereum remix. Masuk ke link berikut http://remix.ethereum.org/ kemudian klik icon + untuk membuat file baru. Lalu beri nama file tersebut “SimpleDao.sol”. Format file “.sol” adalah format file untuk solidity, karena solidity adalah bahasa pemorgraman yang digunakan ethereum untuk smart contractnya.

Image for post
Image for post
Buat file Solidity baru

Kemudian kita buat contract nya didalam file SimpleDao.sol tadi.

pragma solidity ^0.4.0;contract SimpleDao {

mapping (address => uint) private credit;

constructor () public {
}

function donate (address to) external payable {
credit[to] += msg.value;
}

function queryCredit (address to) external constant returns (uint) {
return credit[to];
}

function withdraw (uint amount) external {
if (credit[msg.sender] >= amount) {
msg.sender.call.value(amount)();
credit[msg.sender] -= amount;
}
}


}

Baiklah, saya akan menjelaskan contract tersebut. Pada contract ini terdapat beberapa function yaitu donate, withdraw, dan query credit. Setelah contract selesai dideploy, anda bisa mendonasi sejumlah ether ke akun lain ataupun ke contract lain dengan menggunakan function donate. Function external yang berarti function yang bisa dipanggil diluar contract. Sedangkan payable menyatakan function tersebut bisa menerima ataupun mengirimkan sejumlah ether. Function querycredit disini kita gunakan untuk mengecek jumlah donasi yang telah terkirim setelah mengeksekusi function donate. Dan yang terakhir adalah function withdraw yang fungsinya berhubungan dengan contract lain yang akan kita buat nanti.

Setelah selesai membuat contractnya, sekarang kita akan compile contract tersebut dan kemudian kita deploy contract tersebut. Saat kita mendeploy contract kita diwajibkan membayar sejumlah ether dalam bentuk gas. Gas adalah sebuah satun yang bisa kita beli dengan ether, dan kita wajib membayar dengan gas saat kita akan mendeploy contract dan mengeksekusi function. Setiap function yang dieksekusi akan mempunyai nilai gas yang berbeda-beda. Jumlah gas dan gas limit yang dibutuhkan dalam mengeksekusi function ataupun mendeploy contract sudah dihitung secara otomatis. Semakin besar gas yang anda bayarkan, semakin cepat transaksi anda dikerjakan oleh miners. Dan minimal gas yang harus dibayarkan adalah 1 wei.

Image for post
Image for post
Test smart contract

Setelah deploy contract, contract anda akan terlihat pada kolom “deployed contract”. Setelah itu mari kita lajutkan dengan membuat contract lain untuk melakukan DAO attack. Buat file baru bernama “Mallory.sol”.

pragma solidity ^0.4.0;import "./SimpleDao.sol";contract Mallory {

SimpleDao public constant dao = SimpleDao(0x2aa7d0051f0d856bebf85684ded5e801c416ef7b);
address public owner;

constructor() public {
owner = msg.sender;
}

function () payable external {
dao.withdraw(dao.queryCredit(address(this)));
}

function getJackpot() external {
owner.transfer(address(this).balance);
}
}

Pertama, kita harus menghubungkan file contract simple dao dengan mallory dengan mengimport contract SimpleDao dalam contract Mallory. Kemudian masukkan address contract SimpleDao pada public constant dao. Untuk mendapatkan contract address, anda copy saja address contract yang ada pada kolom deployed contract.

Image for post
Image for post

Pada code tersebut ada function payable external, yang nantinya akan menjadi function fallback. Function fallback ini berfungsi untuk memanggil function withdraw yang ada pada contract SimpleDao, dan mengecek credit pada contract tersebut masih tersisa atau tidak. Karena pada function withdraw akan menguras habis semua credit yang didapat dari donasi pada contract tersebut. Kemudian function getJackpot berfungsi untuk mentransfer kembali ke akun kita semua uang donasi yang sudah di withdraw tadi.

Deploy contract Mallory, dan masukkan gas fee seperti pada contract yang anda deploy sebelumnya. Setelah itu kita akan mulai menjalankan function dalam contract. Pertama kita akan mendonasi sejumlah ether ke contract mallory. Copy address contract Mallory kedalam function donate. Masukan 0.3 ether pada value, setelah itu jalankan function donate.

Image for post
Image for post

Anda harus selalu ingat setiap anda menjalankan function anda diwajibkan untuk membayar gas. Jika sudah mendonasi ether, anda bisa cek dengan query credit apakah donasi tadi masuk atau tidak. Dan lihat saldo anda sudah berkurang jika berhasil melakukan donasi.

Image for post
Image for post

Sekarang bagian yang menyenangkan nya kita akan menarik kembali uang donasi yang tadi sudah kita kirimkan.

Pada contract Mallory yang sudah dideploy, mari kita jalankan function Fallback dan getJackpot. Sebelumnya cek terlebih dahulu saldo anda, jika anda berhasil melakukan attack, maka saldo anda akan kembali bertambah seperti dibawah ini.

Image for post
Image for post

Oke, kita berhasil menjalankan sebuah DAO attack yang sederhana pada ethereum testnet. Dan sekarang kita akan mencoba pada IELE testnet cardano. IELE sendiri sekarang ini menggunakan bahasa pemrograman solidity yang sama dengan ethereum, jadi kita dapat mencoba dao hack tadi pada testnet Cardano. Mari kita buktikan, pertama masuk ke link berikut http://testnet.iohkdev.io/goguen/IELE/compiler/ dan klik “get fund” untuk mendapatkan beberapa ether. Pada IELE testnet anda tidak diharuskan membuat wallet lagi karena pada network ini sudah disediakan wallet dan anda hanya perlu deposit ether dengan klik get fund. Jika sudah mendapatkan beberapa ether, sekarang kita coba copy code dari remix ethereum ke dalam IELE.

Sekarang buat file baru pada IELE dengan klik icon + setelah itu beri nama file tersebut sama dengan yang di remix ethereum yaitu SimpleDao.sol. Setelah itu copy code dari SimpleDao.sol pada remix ethereum ke dalam file SimpleDao yang ada pada IELE. Kita akan lihat bahwa pada function withdraw terjadi error karna pada IELE tidak akan bisa mengcompile code yang akan menjadi trigger function fallback tersebut. Mari kita coba fix error pada code tersebut. Dengan mengganti code nya.

Image for post
Image for post
IELE tidak dapat meng-compile code yang berpotensi berbahaya

Ganti dengan:

Image for post
Image for post
Kondisi setelah fungsi diganti dengan yang tidak berpotensi berbahaya

Dan sekarang kita buat file lagi yang bernama Mallory.sol sama seperti pada remix ethereum. Copy code Mllory pada remix ethereum ke code Mallory pada IELE. Dan setelah itu compile code nya kemudia deploy kedua contract tersebut. Saat anda mendeploy contract anda akan diminta memasukkan passphrase anda untuk unlock account, masukkan passphrase anda setelah itu masukkan gas fee, misalnya anda bisa masukkan gas price sebesar 5 gwei.

Image for post
Image for post
Gas price di-input sebelum transaksi dikonfirmasi

Setelah selesai mendeploy contract, contract tersebut akan muncul pada deployed contract. kemudian deploy contract Mallory dan masukkan gas price nya lagi. Setelah itu kita akan mulai menjalankan function yang ada pada contract itu. Caranya sama dengan pada remix ethereum. Oya jangan lupa memasukkan contract address mallory ke dalam contract SimpleDao. Sekarang kita akan donate ke contract mallory, copy contract address mallory dan paste kedalam function donate setelah itu jalankan function donate. Masukkan 0.09 ether pada value.

Image for post
Image for post

Oke, setelah itu kita akan lihat bahwa saldo anda akan berkurang.

Image for post
Image for post

Setelah itu cek apakah donasi yang masuk dengan masukkan contract address mallory tadi kedalam function queryCredit.

Image for post
Image for post

Jika donasi sudah masuk, kemudian sekarang kita akan menjalankan function fallbacknya. Mari kita lihat apakah function tersebut bisa berjalan pada IELE atau tidak.

Image for post
Image for post

Ya, bisa kita lihat bahwa function tersebut tidak berjalan pada log di IELE. Dan tidak ada rsponse apapun setelah anda menjalankan function fallback.

Baiklah kita sudah membuktikan semacam Dao Hack sederhana pada testnet ethereum dan testnet cardano. Anda bisa menilai sendiri lebih secure mana setelah kita melakukan semacam Dao Hack.

Sekian dulu yang dapat saya berikan sekarang ini, semoga bisa membuat anda mendapatkan inspirasi. Teirma Kasih, sampai jumpa lagi.

Penulis: Dimas Prasetio, Developer, EMURGO Indonesia

Twitter: @dimasprassss

Written by

EMURGO Solusi Indonesia

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store